/* ==== src/fonts/fonts.css ==== */
/* Generated by tools/build_fonts.py — subsets of SIL OFL 1.1 fonts (licences in this folder), one WOFF2 file per face next to this sheet.
   font-display: swap — the page paints with the system type and swaps when a face arrives; only the faces the page really uses are fetched.
   Do not edit by hand: re-run the tool (任务 1ffaf665 L4 · P0-1). */
@font-face{font-family:"Plex SC";src:url(plex-sc-400.41cf355eb6.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Plex SC";src:url(plex-sc-500.e476ef88d5.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Plex SC";src:url(plex-sc-600.1b56935382.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Inter Tight";src:url(inter-tight-vf.579c322d1d.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url(jetbrains-mono-400.8dc44aa194.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}

/* ==== src/kmind/tokens.css ==== */
/* KMind 宇宙交互 V17 (V19: the edge language) · design tokens for the KMind layer and the universe view.
   Day (白昼): white ground, blue content. Night (夜间): graphite ground, blue content, no green.
   Amber always means a person. The core's own colours come from styles.day.css / styles.night.css. */
:root{color-scheme:light;
  --k-bg:#FFFFFF;--k-bg-rgb:255,255,255;--k-bg2:#F7F9FE;--k-tint:#FAFBFF;--k-hover:#F2F6FF;--k-sel:#EAF0FF;
  --k-ink:#0A2F8F;--k-ink2:#2F54B4;--k-ink3:#3B5084;--k-mute:#5D76B8;--k-dim:#7D93C8;
  --k-line:rgba(20,80,232,.16);--k-line2:#E6EBF6;--k-fline:#D9E0F1;
  --k-acc:#1450E8;--k-acc-rgb:20,80,232;--k-acc2:#0A35B5;--k-on-acc:#FFFFFF;
  --k-amber:#E08600;--k-amber-ink:#7A4A00;--k-amber-bg:#FFF8EC;--k-amber-line:rgba(224,134,0,.38);
  --k-danger:#C03221;--k-sh:20,60,160;--k-halo:#FFFFFF;
  --k-hint-bg:#0A2F8F;--k-hint-ink:#FFFFFF;
  --k-ubg:radial-gradient(ellipse 70% 65% at 42% 52%,#FFFFFF 0%,#F6F8FE 55%,#E8EEFB 100%);--k-edge-rgb:236,241,252;
  --k-head:linear-gradient(#FFFFFF,#F7F9FE);--k-strip:linear-gradient(#FBFCFF,#F4F7FD);
  /* V19 · the edge language: containers are told apart by layers of light, not frames. A skin picks how much of a frame it keeps
     (--k-edge, --k-edge2: the colour of container frames; transparent = edgeless). --k-layer-rgb tints the glass layers. */
  --k-edge:var(--k-line);--k-edge2:var(--k-line2);--k-layer-rgb:20,80,232;
  --k-focus:0 0 0 3px rgba(var(--k-acc-rgb),.28);--k-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --k-ok:#178A55;--k-ok-rgb:23,138,85;--k-danger-rgb:192,50,33;--k-amber-rgb:224,134,0;--k-mute-rgb:93,118,184}
html[data-theme=night]{color-scheme:dark;
  --k-bg:#10141C;--k-bg-rgb:16,20,28;--k-bg2:#0C1016;--k-tint:#131822;--k-hover:#171D29;--k-sel:#1B2539;
  --k-ink:#F2F5F9;--k-ink2:#C3CCD8;--k-ink3:#AAB4C3;--k-mute:#8E98A8;--k-dim:#7A8494;
  --k-line:rgba(190,210,240,.15);--k-line2:rgba(200,215,235,.09);--k-fline:#2C333F;
  --k-acc:#3B82FF;--k-acc-rgb:59,130,255;--k-acc2:#2F6FE6;--k-on-acc:#FFFFFF;
  --k-amber:#F5A524;--k-amber-ink:#FFD27A;--k-amber-bg:rgba(245,165,36,.12);--k-amber-line:rgba(245,165,36,.42);
  --k-danger:#FF7A6E;--k-sh:0,0,0;--k-halo:#07090D;
  --k-hint-bg:#F2F5F9;--k-hint-ink:#080A0E;
  --k-ubg:radial-gradient(ellipse 70% 65% at 42% 52%,#0E1219 0%,#080A0E 55%,#030405 100%);--k-edge-rgb:5,6,8;
  --k-head:linear-gradient(#141923,#10141C);--k-strip:linear-gradient(#11151E,#0D1118);
  --k-edge:transparent;--k-edge2:transparent;--k-layer-rgb:150,180,230;
  --k-focus:0 0 0 2px rgba(var(--k-acc-rgb),.18),0 0 16px rgba(var(--k-acc-rgb),.55);
  --k-ok:#5CC8FF;--k-ok-rgb:92,200,255;--k-danger-rgb:255,122,110;--k-amber-rgb:245,165,36;--k-mute-rgb:142,152,168}

/* ==== src/kmind/kmind.css ==== */
/* KMind 宇宙交互 V17 · the KMind layer's look inside 面板视图 (白昼 and 夜间 through the --k-* tokens, blue content).
   People are round, agents are rounded diamonds (the KMind mark: a diamond joined to a circle). */
.km-mark{width:2.1em;height:1.2em;flex:none;vertical-align:-.2em;overflow:visible}   /* V29: the brand's own mark, in its own colours (KM.MARK) */

/* ---- avatars: the shape rule ---- */
.avatar.km-av.km-agent{background:transparent!important;border-radius:0!important;overflow:visible;box-shadow:none}
.km-agent .km-shape{position:absolute;inset:0;background:var(--km-c,var(--k-acc));color:var(--k-on-acc);display:flex;align-items:center;justify-content:center;overflow:hidden;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z'/%3E%3C/svg%3E") center/100% 100% no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z'/%3E%3C/svg%3E") center/100% 100% no-repeat}
.km-agent .km-shape svg{width:46%;height:46%}
.km-agent .km-shape b{font-weight:750;font-size:.92em}
.km-agent .km-shape img{width:100%;height:100%;object-fit:cover}
.km-av.km-human img{width:100%;height:100%;object-fit:cover;border-radius:50%}
.km-av.km-human{border-radius:50%!important}
.km-gone{opacity:.42;filter:grayscale(1)}
.km-avbox{display:inline-flex;width:var(--s);height:var(--s);flex:none;position:relative;vertical-align:middle}
.km-avbox>.avatar{width:var(--s)!important;height:var(--s)!important;font-size:calc(var(--s) * .4)!important;min-width:0;margin:0}
.km-avbox>.avatar .dot{display:none}

/* ---- names ---- */
.km-tag{display:inline-flex;align-items:center;margin-left:6px;padding:0 6px;border-radius:5px;font-size:10px;font-weight:650;line-height:16px;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.07);border:1px solid rgba(var(--k-acc-rgb),.2);vertical-align:1px;white-space:nowrap;letter-spacing:.02em}
.member .name .km-tag{margin-left:5px;font-size:9px;line-height:14px;padding:0 4px}
.km-mention{white-space:nowrap}

/* ---- titlebar ---- */
.km-mode-btn{margin:0}
/* V6 · the view switch: the same size, look and place in both views — far right of a 44px top band */
.app{grid-template-rows:44px minmax(0,1fr)!important}
.titlebar{height:44px!important}
.titlebar .tright{right:12px!important;gap:6px!important;align-items:center}
.km-view-switch{display:inline-flex!important;align-items:center;justify-content:center;gap:6px;height:30px!important;width:118px;padding:0 12px!important;border-radius:999px!important;border:1px solid var(--k-acc)!important;background:var(--k-acc)!important;color:var(--k-on-acc)!important;font-size:12.5px!important;font-weight:650!important;white-space:nowrap;cursor:pointer;flex:none;margin:0!important;box-shadow:0 4px 14px rgba(var(--k-acc-rgb),.22)}
.km-view-switch:hover{background:var(--k-acc2)!important;border-color:var(--k-acc2)!important}
.km-view-switch svg{width:15px;height:15px;flex:none}
@media(max-width:700px){.km-view-switch{width:34px;padding:0!important}.km-view-switch span{display:none}}
body.kmu-phone .km-view-switch{width:34px;padding:0!important}
@media (max-width:700px){.km-strip .km-faces,.km-strip .km-human-chip{display:none}}
@media (max-width:900px){body:not(.km-u) .channelhead .searchbox{display:none}}
.titlebar .smallmark[data-km]{background:none;width:auto;border-radius:0}
.titlebar .smallmark .km-mark{width:24px;height:14px;vertical-align:-3px}
.titlebar .smallmark.km-mark-uni .km-mark{display:none}   /* 修士 #26491：在宇宙里标题栏画宇宙头像（uniavatar.js），不画品牌 ∞ */
.titlebar .smallmark.km-mark-uni{display:inline-flex;align-items:center;height:auto}   /* 修士 #27531：头像与字同高、与宇宙名同一条中线（参考 Discord 服务器名），不再下沉 */
.titlebar .smallmark .km-uav-title{vertical-align:middle}

/* ---- the planet strip under a channel header ---- */
.km-strip{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:7px 16px;border-bottom:1px solid var(--line);background:linear-gradient(var(--k-tint),var(--k-bg2));font-size:12px;min-width:0}
.km-chip,.km-chip-btn{display:inline-flex;gap:5px;align-items:center;height:24px;padding:0 9px;border-radius:999px;border:1px solid rgba(var(--k-acc-rgb),.2);color:var(--k-ink);background:var(--k-bg);font-size:11.5px;white-space:nowrap;line-height:1;cursor:default}
.km-chip-btn{cursor:pointer}
.km-chip-btn:hover{border-color:var(--k-acc);background:var(--k-hover)}
.km-chip-btn b{font-weight:700;color:var(--k-acc)}
.km-chip .km-mark{width:19px;height:11px}
.km-human-chip{border-color:var(--k-amber-line);color:var(--k-amber-ink);background:var(--k-amber-bg);cursor:pointer}
.km-primary{background:var(--k-acc)!important;border-color:var(--k-acc)!important;color:var(--k-on-acc)!important}
.km-primary:hover{background:var(--k-acc2)!important}
.km-lv-public{color:var(--k-ink2);border-color:var(--k-line)}
.km-lv-core,.km-lv-roles,.km-lv-private{color:var(--k-acc2);background:var(--k-sel)}
.km-faces{display:inline-flex;align-items:center;padding-left:4px}
.km-faces button{margin-left:-3px;display:inline-flex;border-radius:4px}
.km-faces em{font-style:normal;font-size:11px;color:var(--muted);margin-left:4px}
.km-note{color:var(--muted);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:280px}

/* ---- the mother planet's sidebar: your agents ---- */
.km-side{margin-bottom:2px}
.km-cat .category-label{cursor:default}
.km-agent-row{display:flex;align-items:center;border-radius:6px;margin:1px 0}
.km-agent-row:hover,.km-agent-row.active{background:var(--hover)}
.km-agent-row.active{background:var(--selected)}
.km-agent-open{flex:1;display:flex!important;gap:10px;align-items:center;text-align:left;padding:5px 8px;min-width:0;background:none}
.km-agent-open>span:not(.avatar):not(.dm-badge){min-width:0;display:flex;flex-direction:column;flex:1}
.km-agent-open b{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-agent-open small{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-more{opacity:0;width:26px;height:26px;margin-right:4px;flex:none}
.km-agent-row:hover .km-more,.km-agent-row.active .km-more{opacity:1}
.km-side-actions{display:flex;flex-direction:column;gap:1px;margin:4px 0 2px}
.km-side-actions .utility{display:flex;gap:8px;align-items:center}
.km-invite-row{display:flex!important;gap:9px;align-items:center;width:100%;text-align:left;padding:8px 9px;margin:6px 0;border-radius:8px;border:1px dashed rgba(var(--k-acc-rgb),.4);background:var(--k-tint);color:var(--k-ink)}
.km-invite-row .km-mark{width:26px;height:15px}
.km-invite-row span{display:flex;flex-direction:column;min-width:0}
.km-invite-row b{font-size:12.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-invite-row small{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ---- profile: the agent section ---- */
.km-profile-agent{margin:12px 0 4px;padding:12px;border:1px solid rgba(var(--k-acc-rgb),.18);border-radius:10px;background:var(--k-bg2)}
.km-pa-row{display:flex;flex-wrap:wrap;gap:6px}
.km-pa-does{margin:10px 0 2px;font-size:13px;color:var(--text);display:flex;flex-direction:column;gap:2px}
.km-pa-does small{color:var(--muted);font-size:11.5px}
.km-pa-st{display:flex;gap:8px;align-items:center;padding:6px 0;border-top:1px solid var(--line);font-size:12.5px;min-width:0}
.km-pa-st span{color:var(--muted);white-space:nowrap}
.km-pa-st b{font-weight:600;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-pa-st em{font-style:normal;font-size:11px;color:var(--k-acc);white-space:nowrap}
.km-pa-st .outline{margin:0;padding:3px 8px;font-size:11px}
.km-agent-profile .avatar{background:transparent}
.avatar.km-agent{border-color:transparent!important}

/* ---- dialogs ---- */
.km-mini{margin-top:0!important;padding:4px 10px!important;font-size:11px!important}
.km-icon-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(34px,1fr));gap:5px}
.km-icon-grid label{cursor:pointer}
.km-icon-grid input,.km-swatches input{position:absolute;opacity:0;pointer-events:none}
.km-icon-grid span{display:flex;align-items:center;justify-content:center;height:34px;border-radius:8px;border:1px solid var(--k-fline);background:var(--k-bg);color:var(--k-ink2)}
.km-icon-grid input:checked+span{background:var(--k-acc);border-color:var(--k-acc);color:var(--k-on-acc)}
.km-icon-grid input:focus-visible+span{outline:2px solid var(--k-acc);outline-offset:2px}
.km-checks{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center;font-size:12.5px;color:var(--text)}
.km-checks label{display:inline-flex;gap:6px;align-items:center;cursor:pointer}
.km-checks i{width:10px;height:10px;border-radius:50%;display:inline-block}
.km-checks small{color:var(--muted);font-size:10.5px}
.km-choices{display:flex;flex-direction:column;gap:6px;max-height:280px;overflow:auto;padding-right:2px}
.km-choices label{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border:1px solid var(--k-fline);border-radius:8px;background:var(--k-bg);cursor:pointer}
.km-choices label:has(input:checked){border-color:var(--k-acc);background:var(--k-hover)}
.km-choices span{display:flex;flex-direction:column;gap:2px;min-width:0}
.km-choices b{font-size:13px;font-weight:600}
.km-choices small{font-size:11px;color:var(--muted)}
.km-choices .km-off{opacity:.5;cursor:not-allowed}
.km-hub{display:flex;flex-direction:column;gap:8px;max-height:52vh;overflow:auto;padding-right:2px}
.km-hub-row{display:flex;gap:10px;align-items:flex-start;padding:10px;border:1px solid var(--k-fline);border-radius:10px;background:var(--k-bg);flex-wrap:wrap}
.km-hub-row.km-locked{background:var(--k-tint)}
.km-hub-row.km-locked .km-hub-ic{color:var(--k-dim)}
.km-hub-ic{width:34px;height:34px;flex:none;display:flex;align-items:center;justify-content:center;border-radius:9px;background:var(--k-sel);color:var(--k-acc)}
.km-hub-main{flex:1;min-width:180px;display:flex;flex-direction:column;gap:3px}
.km-hub-main b{font-size:13px;font-weight:650}
.km-hub-main small{font-size:11px;color:var(--muted)}
.km-hub-roles{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}
.km-hub-roles i,.km-hub-roles em{font-style:normal;font-size:10.5px;padding:1px 7px;border-radius:999px;border:1px solid var(--k-fline);color:var(--k-ink3);background:var(--k-bg)}
.km-hub-roles em{border-style:dashed;color:var(--k-dim)}
.km-hub-roles em.ok{border-style:solid;border-color:rgba(var(--k-acc-rgb),.35);color:var(--k-acc);background:var(--k-hover)}
.km-hub-edit{flex-basis:100%;font-size:12px}
.km-hub-edit summary,.km-add summary{cursor:pointer;color:var(--k-acc);font-size:12px;font-weight:600}
.km-hub-edit form{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;padding-top:8px}
.km-hub-edit label{display:inline-flex;gap:5px;align-items:center}
.km-hub-edit .form-note{flex-basis:100%;margin:0}
.km-add{margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
.km-tpls{display:flex;flex-direction:column;gap:10px;max-height:56vh;overflow:auto;padding-right:2px}
.km-tpl{border:1px solid var(--k-fline);border-radius:10px;padding:12px;background:var(--k-bg)}
.km-tpl header{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.km-tpl header b{font-size:14px;font-weight:650}
.km-tpl header small{color:var(--muted);font-size:11px;flex:1}
.km-tpl>p{margin:6px 0 8px;font-size:12px;color:var(--secondary)}
.km-slot{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:6px 0;border-top:1px solid var(--line)}
.km-slot>span{display:flex;flex-direction:column;min-width:96px}
.km-slot b{font-size:12.5px;font-weight:600}
.km-slot small{font-size:10.5px;color:var(--muted)}
.km-slot .field{width:auto;flex:1;min-width:150px;padding:6px 8px}
.km-tpl .footer-actions .primary{margin-top:8px}
.km-slot-rows{display:flex;flex-direction:column;gap:6px}
.km-slot-row{display:grid;grid-template-columns:minmax(0,1fr) 110px 58px 30px;gap:6px;align-items:center}
.km-slot-row .field{padding:7px 8px}
.km-swatches{display:flex;flex-wrap:wrap;gap:7px;align-items:center}
.km-swatches label{cursor:pointer;display:inline-flex}
.km-swatches span{width:26px;height:26px;border-radius:50%;display:block;box-shadow:inset 0 0 0 2px rgba(var(--k-bg-rgb),.6)}
.km-swatches input:checked+span{outline:2px solid var(--k-acc);outline-offset:2px}
.km-custom-color input{width:30px;height:28px;border:0;padding:0;background:none;cursor:pointer}
.km-av-preview{display:flex;justify-content:center;padding:4px 0 8px}
.km-topics{display:flex;flex-direction:column;gap:6px}
.km-topic{display:flex!important;gap:10px;align-items:center;text-align:left;padding:9px 10px;border:1px solid var(--k-fline);border-radius:9px;background:var(--k-bg);width:100%}
.km-topic:hover{border-color:var(--k-acc);background:var(--k-hover)}
.km-topic span:not(.km-avbox){display:flex;flex-direction:column;min-width:0}
.km-topic b{font-size:13px;font-weight:600}
.km-topic small{font-size:11px;color:var(--muted)}
.km-invite{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.km-invite>.km-mark{width:44px;height:25px}
.km-invite p{margin:0;font-size:14px;display:flex;flex-direction:column;gap:2px}
.km-invite p small{color:var(--muted);font-size:12px}
.km-invite code{font-size:12px;padding:3px 8px;border-radius:6px;background:var(--k-sel);color:var(--k-acc2)}
.form-error.km-err{color:var(--k-danger);font-size:12px;margin:8px 0 0}

/* narrow screens (the discord view on a phone): the planet strip scrolls sideways, the switch keeps only its icon */
@media(max-width:700px){.km-strip{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding:6px 10px}.km-strip::-webkit-scrollbar{display:none}.km-mode-btn span{display:none}.km-mode-btn{padding:0 7px!important;margin-right:3px}}

/* the page's own type (embedded, SIL OFL): Inter Tight for Latin, IBM Plex Sans SC for Chinese */
:root{--font:"Inter Tight","Plex SC",-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}

.km-pa-k{font-style:normal;font-size:10px;font-weight:700;letter-spacing:.06em;padding:1px 6px;border-radius:4px;background:var(--k-sel);color:var(--k-acc);flex:none}
.km-tag-own{background:var(--k-acc);color:var(--k-on-acc);border-color:var(--k-acc)}

/* portraits */
.km-portrait{display:block;width:100%;height:100%}
.km-agent .km-shape .km-portrait{width:100%;height:100%}
.km-human .km-portrait{border-radius:50%}
.km-portrait-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(44px,1fr));gap:6px}
.km-portrait-grid label{cursor:pointer;display:flex;justify-content:center}
.km-portrait-grid input{position:absolute;opacity:0;pointer-events:none}
.km-tile{display:block;width:42px;height:42px;background:var(--km-c);overflow:hidden}
.km-tile.circ{border-radius:50%}
.km-tile.dia{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z'/%3E%3C/svg%3E") center/100% 100% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z'/%3E%3C/svg%3E") center/100% 100% no-repeat}
.km-portrait-grid input:checked+.km-tile{outline:2px solid var(--k-acc);outline-offset:2px}
.km-portrait-grid input:checked+.km-tile.dia{filter:drop-shadow(0 0 0 var(--k-acc)) drop-shadow(0 0 3px rgba(var(--k-acc-rgb),.9))}

/* the core's community bars, folded into the 管理 menu */
.km-folded{display:none!important}
.km-menu{position:fixed;z-index:3500;min-width:180px;padding:5px;border-radius:10px;background:var(--k-bg);border:1px solid var(--k-line);box-shadow:0 16px 40px rgba(var(--k-sh),.18);display:flex;flex-direction:column;gap:2px}
.km-menu[hidden]{display:none}
.km-menu-item{display:block;width:100%;text-align:left;padding:7px 10px;border-radius:7px;border:0;background:none;color:var(--k-ink);font-size:12.5px;cursor:pointer}
.km-menu-item:hover{background:var(--k-hover);color:var(--k-acc)}
.km-more-btn::after{content:'';display:inline-block;width:6px;height:6px;border-right:1.4px solid currentColor;border-bottom:1.4px solid currentColor;transform:rotate(45deg) translate(-2px,-1px);margin-left:2px}
.km-theme-btn{color:var(--muted)}

/* the image upload: a quiet button instead of the browser's own file field */
.km-file{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px;border-radius:8px;border:1px dashed var(--k-line2,var(--k-line));color:var(--k-ink2);font-size:12.5px;font-weight:600;cursor:pointer;position:relative}
.km-file:hover{border-color:var(--k-acc);color:var(--k-acc)}
.km-file input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%}
/* the direct-messages search: a quiet field, not a heading */
.serverhead>.dm-search{height:30px;padding:0 10px;border-radius:7px;background:var(--k-tint);border:1px solid var(--k-line);font-size:12.5px;font-weight:500;color:var(--k-mute)}
.serverhead>.dm-search:hover{color:var(--k-ink2)}
/* 发现 · universes */
.km-uni-cover{display:grid;place-items:center;background:radial-gradient(120% 120% at 20% 10%,rgba(var(--k-acc-rgb),.95),rgba(var(--k-acc-rgb),.55) 55%,rgba(var(--k-acc-rgb),.25))!important}
.km-uni-cover span{font-size:34px;font-weight:750;color:#fff;letter-spacing:.02em}
.km-uni-card p small{display:block;margin-top:4px;font:500 9.5px/1.4 "JetBrains Mono",monospace;letter-spacing:.12em;color:var(--k-dim);text-transform:uppercase}
.km-uni-card .foot>span{color:var(--k-mute);font-size:11.5px}
.km-uni-new{margin-top:20px}
#dialog form[data-kmform] .form-grid+.form-grid,#dialog form[data-kmform] .form-grid+label{margin-top:12px}
.km-del{color:var(--k-danger)!important}
.km-del:hover{background:var(--k-danger)!important;color:#fff!important;border-color:var(--k-danger)!important}

/* V7 · orbit colours: a dot before each orbit's name, its planets' # marks, and the colour picker (both views) */
.km-orbit-dot{width:16px;height:16px;flex:none;display:inline-grid;place-items:center;padding:0;margin:0 1px 0 -3px;border:0;border-radius:50%;background:none;cursor:default}
.km-orbit-dot::before{content:'';width:7px;height:7px;border-radius:50%;background:var(--km-oc,var(--k-acc));box-shadow:0 0 0 2.5px color-mix(in srgb,var(--km-oc,var(--k-acc)) 16%,transparent);transition:transform .15s}
button.km-orbit-dot{cursor:pointer}
button.km-orbit-dot:hover::before,button.km-orbit-dot:focus-visible::before{transform:scale(1.3)}
button.km-orbit-dot:focus-visible{outline:2px solid var(--k-acc);outline-offset:1px}
.km-orbit-list [data-action="channel"] .hash{color:var(--km-oc);opacity:.78}
.km-orbit-list [data-action="channel"]:hover .hash,.km-orbit-list [data-action="channel"].active .hash{opacity:1}
.km-orbit-pop{min-width:0;width:232px;padding:10px 10px 9px;gap:0}
.km-op{display:flex;flex-direction:column;gap:9px}
.km-op-head{display:flex;align-items:baseline;gap:8px;min-width:0;font-size:12px;color:var(--k-ink)}
.km-op-head b{font-weight:650;flex:none}
.km-op-head span{color:var(--k-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-op-sw{display:grid;grid-template-columns:repeat(8,1fr);gap:4px}
.km-sw{width:22px;height:22px;padding:0;border:0;border-radius:50%;background:var(--sw);cursor:pointer;justify-self:center;box-shadow:inset 0 0 0 1px rgba(var(--k-sh),.08);transition:transform .12s}
button.km-sw:hover{transform:scale(1.12)}
.km-sw[aria-pressed="true"],.km-sw.on{box-shadow:0 0 0 2px var(--k-bg),0 0 0 3.5px var(--sw)}
.km-op-row{display:flex;align-items:center;justify-content:space-between;gap:6px;padding-top:8px;border-top:1px solid var(--k-line)}
.km-op-own,.km-op-def{position:relative;display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 9px 0 4px;border:1px solid var(--k-line);border-radius:999px;background:none;color:var(--k-ink2);font-size:12px;cursor:pointer;white-space:nowrap}
.km-op-own:hover,.km-op-def:not(:disabled):hover{border-color:var(--k-acc);color:var(--k-acc)}
.km-op-own .km-sw,.km-op-def .km-sw{width:16px;height:16px;cursor:inherit}
.km-op-own .km-sw:not(.on){background:conic-gradient(#1450E8,#8733C4,#CF4237,#B06800,#0A7DB0,#1450E8)}
.km-op-own input{position:absolute;inset:0;opacity:0;width:100%;height:100%;cursor:pointer;border:0;padding:0}
.km-op-def:disabled{opacity:.45;cursor:default}
.km-op-def:disabled .km-sw{box-shadow:inset 0 0 0 1px rgba(var(--k-sh),.08)}
.lc-category-row h3{display:flex;align-items:center;gap:6px}
.lc-category-row .km-orbit-dot{margin:0}
.km-orbit-btn{display:inline-flex;align-items:center;gap:6px}
.km-orbit-btn::before{content:'';width:9px;height:9px;border-radius:50%;background:var(--km-oc)}
.km-op-inline{margin:2px 0 10px;padding:10px 12px;border:1px solid var(--k-line);border-radius:10px;background:var(--k-bg2);max-width:300px}

/* V8 · who is who: whose agent (the owner's initial on a small circle at the diamond's corner), roles next to names, your own role */
.km-owner{position:absolute;right:-4px;bottom:-4px;z-index:2;width:46%;height:46%;min-width:13px;min-height:13px;border-radius:50%;display:grid;place-items:center;color:#fff;font:700 9px/1 'Plex SC','Inter Tight',sans-serif;font-style:normal;box-shadow:0 0 0 1.5px var(--k-bg);pointer-events:none}
.km-avbox .km-owner{font-size:calc(var(--s) * .24)}
/* 任务 031e2aee（修士 #26364 ②）：角标是主人的头像（图 / 人像），裁成圆 */
.km-owner.km-owner-pic{overflow:hidden}.km-owner.km-owner-pic>img,.km-owner.km-owner-pic>svg{display:block;width:100%;height:100%;border-radius:50%;object-fit:cover}
.km-role{display:inline-flex;align-items:center;margin-left:6px;padding:0 6px;border-radius:5px;font-size:10px;font-weight:650;line-height:16px;color:var(--k-ink2);border:1px solid var(--k-line);vertical-align:1px}
.km-role-owner,.km-role-host{color:var(--k-amber-ink);background:var(--k-amber-bg);border-color:var(--k-amber-line)}
.member .name .km-role{margin-left:5px;font-size:9px;line-height:14px;padding:0 4px}
.km-myrole{margin-left:2px;padding:0 7px;border-radius:999px;font-size:11px;font-weight:650;line-height:19px;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.09);white-space:nowrap}
/* 任务 80d1b74f（修士 #24335 ③）：宇宙名一行照 Discord——名字过长省略号、下拉箭头紧跟名字、右侧邀请图标（ext.js myRole） */
.serverhead>button{min-width:0;flex:1 1 auto}.serverhead>button>*{flex:none}.serverhead>button>.km-uname{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.serverhead>button .ico:last-child,.serverhead>button>svg:last-child{margin-left:0}
.serverhead>.km-head-invite{flex:none;display:grid;place-items:center;width:30px;height:30px;margin-left:6px;border-radius:7px;color:var(--k-ink2,currentColor)}.serverhead>.km-head-invite:hover{background:rgba(127,127,127,.16)}
.userbar .user small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* V9 · the model behind an agent: a picker in the agent's form, a chip wherever the agent is shown */
.km-llm-chip{display:inline-flex;align-items:center;gap:5px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-llm-chip::before{content:"";flex:none;width:6px;height:6px;border-radius:1.5px;transform:rotate(45deg);background:var(--k-acc);opacity:.75}
.km-chip.km-llm-chip{color:var(--k-ink2)}
.km-llm{position:relative}
.km-llm-now{display:flex;align-items:center;gap:10px;width:100%;text-align:left;border:1px solid var(--k-fline);background:var(--k-bg);border-radius:8px;padding:8px 12px;color:var(--text);min-height:46px}
.km-llm-now:hover,.km-llm-now[aria-expanded=true]{border-color:var(--k-acc)}
.km-llm-now>svg{flex:none;color:var(--k-mute)}
.km-llm-now[aria-expanded=true]>svg{transform:rotate(180deg)}
.km-llm-name{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.km-llm-name b{font-size:13.5px;font-weight:650;color:var(--k-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-llm-name small{font-size:11px;color:var(--k-mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-llm em{flex:none;font-style:normal;font-size:10.5px;line-height:16px;color:var(--k-acc);border:1px solid rgba(var(--k-acc-rgb),.3);border-radius:9px;padding:0 6px}
.km-llm-panel{margin-top:6px;border:1px solid var(--k-fline);border-radius:10px;background:var(--k-bg);overflow:hidden}
.km-llm-search{padding:8px;border-bottom:1px solid var(--k-line2)}
.km-llm-search .field{padding:7px 10px;font-size:12.5px}
.km-llm-list{max-height:min(300px,42dvh);overflow:auto;padding:2px 6px 8px;overscroll-behavior:contain}
.km-llm-sec{font:600 10px/1 "JetBrains Mono",monospace;letter-spacing:.14em;color:var(--k-dim);padding:14px 6px 4px}
.km-llm-maker>span{display:flex;gap:6px;align-items:baseline;font-size:11.5px;font-weight:650;color:var(--k-ink3);padding:7px 8px 3px}
.km-llm-maker>span small{font-weight:400;font-size:10.5px;color:var(--k-dim)}
.km-llm-opt{display:flex;align-items:center;gap:6px;width:100%;text-align:left;padding:6px 8px;border-radius:6px;font-size:13px;color:var(--text);min-height:32px}
.km-llm-opt b{flex:1;min-width:0;font-weight:550;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-llm-opt:hover,.km-llm-opt:focus-visible{background:var(--k-hover);outline:none}
.km-llm-opt.on{background:var(--k-sel)}
.km-llm-opt.on b{color:var(--k-acc);font-weight:650}
.km-llm-tag{flex:none;font-style:normal;font-size:10px;line-height:16px;color:var(--k-mute);border:1px solid var(--k-line2);border-radius:4px;padding:0 5px}
.km-llm-tag.o{color:var(--k-ink2);border-color:rgba(var(--k-acc-rgb),.22)}
.km-llm-custom{display:flex;gap:6px;padding:4px 8px}
.km-llm-custom .field{flex:1;padding:6px 10px;font-size:12.5px}
.km-llm-custom .outline{flex:none}
.km-llm-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:7px 10px;border-top:1px solid var(--k-line2);font-size:11.5px;color:var(--k-mute)}
.km-llm-setdef{font-size:12px;color:var(--k-acc);padding:4px 8px;border-radius:6px}
.km-llm-setdef:hover{background:var(--k-hover)}
.km-llm-setdef:disabled{opacity:.4;cursor:default;background:none}
/* V36 · the model on an agent's card is a button: one click opens the list, one click on a model changes it (src/kmind/llm.js KM.llmQuick) */
button.km-llm-q{cursor:pointer;border-radius:6px;transition:background .15s,color .15s}
:where(button.km-llm-q:not(.km-chip)){border:0;background:transparent;padding:2px 6px 2px 0;font:inherit;color:inherit}
button.km-llm-q svg{flex:none;opacity:.5;transition:transform .15s,opacity .15s}
button.km-llm-q:hover,button.km-llm-q[aria-expanded=true]{color:var(--k-ink);background:rgba(var(--k-acc-rgb),.1)}
button.km-llm-q:not(.km-chip):hover,button.km-llm-q:not(.km-chip)[aria-expanded=true]{padding-left:6px;margin-left:-6px}
button.km-llm-q:hover svg,button.km-llm-q[aria-expanded=true] svg{opacity:.9}
button.km-llm-q[aria-expanded=true] svg{transform:rotate(180deg)}
.km-llm-pop{position:fixed;z-index:2147480000;display:flex;flex-direction:column;border:1px solid var(--k-fline);border-radius:12px;background:var(--k-bg);color:var(--text);
  box-shadow:0 20px 50px -18px rgba(var(--k-sh),.45);overflow:hidden;font-size:13px;text-align:left}
.km-llm-pop .km-llm-list{flex:1;min-height:0;max-height:none}
html[data-km-edge=none] .km-llm-pop{border-color:transparent;background:rgba(var(--k-bg-rgb),.96);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 24px 60px -20px rgba(0,0,0,.75),0 0 0 .5px rgba(var(--k-layer-rgb),.12)}
html[data-km-edge=none] .km-llm-pop .km-llm-search{border-bottom-color:transparent}
/* V9 · put-back core functions: the universe menu's extras, 发现's public universes and ways back in, the DM list's footer */
.servermenu button.km-menu-danger{color:var(--k-danger)}
.servermenu button.km-menu-danger:hover{background:var(--k-danger);color:#fff}
.km-pub-title{margin-top:30px}
.km-pub-card .discover-cover{background:linear-gradient(135deg,rgba(var(--k-acc-rgb),.08),rgba(var(--k-acc-rgb),.02));border:1px dashed rgba(var(--k-acc-rgb),.3)}
.km-discover-more{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px;padding-top:16px;border-top:1px solid var(--k-line2)}
.km-discover-more .outline{display:inline-flex;align-items:center;gap:7px}
.km-dm-more{display:flex;flex-direction:column;gap:2px;margin:14px 0 4px;padding-top:10px;border-top:1px solid var(--k-line2)}
.km-dm-link{display:flex;align-items:center;gap:9px;width:100%;height:32px;padding:0 11px;border-radius:6px;color:var(--muted);font-size:13px;text-align:left}
.km-dm-link:hover{background:var(--hover);color:var(--text)}
/* V9 · voice planets in 面板视图: the room's people are the core's own row */
.km-llm-side{display:flex;flex-direction:column;gap:2px;margin:10px 0 0}
.km-llm-side .km-llm-chip{font-size:12.5px;font-weight:650;color:var(--k-ink)}
.km-llm-side small{font-size:11px;color:var(--k-mute);padding-left:11px}

/* V10 · 资产中枢 | 知识中枢 — the two hubs of a planet, on either side of its terminator line (day | night) */
.km-hub-tabs{position:relative;display:grid;grid-template-columns:1fr 18px 1fr;align-items:stretch;margin:0 0 12px;border:1px solid var(--k-fline);border-radius:12px;overflow:hidden;
  background:linear-gradient(90deg,var(--k-bg) 0%,var(--k-bg) 46%,rgba(10,22,60,.07) 54%,rgba(10,22,60,.16) 100%)}
.km-hub-tab{display:flex;align-items:center;gap:8px;padding:10px 12px;border:0;background:transparent;color:var(--k-ink2);font:inherit;font-size:13px;font-weight:600;cursor:pointer;min-height:42px;text-align:left}
.km-hub-tab span{flex:1}
.km-hub-tab b{font:500 11px/1 "JetBrains Mono",ui-monospace,monospace;letter-spacing:.04em;color:var(--k-dim)}
.km-hub-tab.on{color:var(--k-acc)}
.km-hub-tab.on b{color:var(--k-acc)}
.km-hub-tab:hover{color:var(--k-acc)}
.km-hub-tab:focus-visible{outline:2px solid var(--k-acc);outline-offset:-3px}
.km-hub-tabs::after{content:"";position:absolute;bottom:0;height:2px;width:calc(50% - 9px);left:0;background:var(--k-acc);transition:left .25s ease}
.km-hub-tabs.km-hub-knowledge::after{left:calc(50% + 9px)}
/* the terminator: a bowed hairline between day and night, with a tick at each end */
.km-term{position:relative;display:block}
.km-term::before{content:"";position:absolute;top:-2px;bottom:-2px;left:3px;width:12px;border-left:1px solid rgba(var(--k-acc-rgb),.55);border-radius:50%/50%;transform:scaleX(1)}
.km-term::after{content:"";position:absolute;left:8px;top:0;bottom:0;width:1px;background:linear-gradient(180deg,rgba(var(--k-acc-rgb),.6) 0 4px,transparent 4px calc(100% - 4px),rgba(var(--k-acc-rgb),.6) calc(100% - 4px))}
html[data-theme=night] .km-hub-tabs{background:linear-gradient(90deg,rgba(255,255,255,.05) 0%,rgba(255,255,255,.05) 46%,rgba(0,0,0,.2) 54%,rgba(0,0,0,.42) 100%)}
.km-chip-btn.km-hub-knowledge,.kmu-pill.km-hub-knowledge{background-image:linear-gradient(90deg,transparent,rgba(10,22,60,.06))}

/* V10 · 成员排序: by role group (the core's) or by owner (each person with the agents they made) */
.km-msort{display:flex;align-items:center;gap:2px;margin:2px 8px 8px;padding:2px;border:1px solid var(--k-fline);border-radius:8px;font-size:11.5px}
.km-msort span{color:var(--k-dim);padding:0 6px 0 4px;flex:none}
.km-msort button{flex:1;height:24px;border:0;border-radius:6px;background:none;color:var(--k-ink2);font:inherit;font-weight:600;cursor:pointer;white-space:nowrap}
.km-msort button:hover{color:var(--k-acc)}
.km-msort button.on{background:var(--k-sel);color:var(--k-acc)}
.member-directory .km-msort{max-width:320px;margin:0 0 12px}
.km-owner-head{color:var(--k-ink2)!important}
.member.km-msort-agent{padding-left:18px;position:relative}
.member.km-msort-agent::before{content:"";position:absolute;left:9px;top:-4px;bottom:50%;width:6px;border-left:1px dashed var(--k-fline);border-bottom:1px dashed var(--k-fline);border-bottom-left-radius:4px}

/* V13 · 插件 PLUGINS in the 资产中枢, and what an agent carries (its full card). Both looks through the --k-* tokens. */
.km-hub-sec{font-size:10.5px;font-weight:650;letter-spacing:.1em;color:var(--k-dim);margin:6px 2px 0}
.km-hub-sec:first-child{margin-top:0}
.km-hub-plug .km-hub-ic{background:linear-gradient(135deg,rgba(var(--k-acc-rgb),.16),rgba(var(--k-acc-rgb),.05))}
.km-plug-k{font-style:normal;font-size:10px;font-weight:650;margin-left:7px;padding:1px 7px;border-radius:999px;color:var(--k-acc);background:var(--k-hover);vertical-align:1px}
.km-carry{display:flex;flex-direction:column;gap:2px;margin-bottom:4px}
.km-carry-h{font-size:10.5px;font-weight:650;letter-spacing:.08em;color:var(--k-dim);margin:6px 0 2px}
.km-carry-row{display:flex;align-items:center;gap:9px;padding:5px 0;min-width:0}
.km-carry-row+.km-carry-row{border-top:1px solid var(--line)}
.km-carry-ic{width:28px;height:28px;flex:none;display:flex;align-items:center;justify-content:center;border-radius:8px;background:var(--k-sel);color:var(--k-acc)}
.km-carry-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.km-carry-main b{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-carry-main small{font-size:10.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-carry-row.km-locked .km-carry-ic{color:var(--k-dim);background:var(--k-tint)}
.km-carry-row.km-locked b{color:var(--k-dim)}
.km-carry-x{flex:none;width:24px;height:24px;border-radius:7px;border:0;background:transparent;color:var(--k-dim);font-size:15px;line-height:1;cursor:pointer}
.km-carry-x:hover{background:var(--k-hover);color:var(--k-acc)}
.km-carry-add>summary{cursor:pointer;font-size:12px;font-weight:600;color:var(--k-acc);padding:6px 0;list-style:none}
.km-carry-add>summary::-webkit-details-marker{display:none}
.km-carry-pick{display:flex;flex-direction:column;gap:2px;max-height:220px;overflow:auto}
.km-carry-opt{display:flex;align-items:center;gap:8px;padding:6px 8px;border:0;border-radius:8px;background:transparent;color:inherit;text-align:left;cursor:pointer;font:inherit;font-size:12.5px}
.km-carry-opt:hover{background:var(--k-hover)}
.km-carry-opt svg{color:var(--k-acc);flex:none}
.km-carry-opt span{display:flex;flex-direction:column;min-width:0}
.km-carry-opt small{font-size:10.5px;color:var(--muted)}

/* V14 · a universe's avatar: an uploaded picture, an emblem (line icon on a glow in an orbit colour), or its first character */
.km-uav{--uav:28px;width:var(--uav);height:var(--uav);flex:none;display:inline-flex;align-items:center;justify-content:center;border-radius:calc(var(--uav) * .32);overflow:hidden;position:relative;vertical-align:middle;line-height:1}
.km-uav-img img{width:100%;height:100%;object-fit:cover;display:block}
.km-uav-em{--uc:var(--k-acc);color:#FFFFFF;background:radial-gradient(120% 120% at 28% 22%,color-mix(in srgb,var(--uc) 62%,#FFFFFF) 0%,var(--uc) 46%,color-mix(in srgb,var(--uc) 62%,#05070C) 100%);box-shadow:inset 0 0 0 1px rgba(255,255,255,.16)}   /* 任务 295001be：图标 stroke=currentColor，默认白；皮肤包改 color 才换色（浅色包把底压白时图标跟着变墨色，不再白压白） */
.km-uav-em::after{content:'';position:absolute;inset:14%;border-radius:50%;border:1px solid rgba(255,255,255,.28);transform:rotate(-24deg) scaleY(.42)}
.km-uav-em svg{position:relative;z-index:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.25))}
.km-uav-ch{background:linear-gradient(135deg,var(--k-acc),var(--k-acc2,var(--k-acc)));color:#FFFFFF;font-weight:700;font-size:calc(var(--uav) * .44)}
.rail .server.km-has-uav{padding:0;overflow:visible;background:transparent!important}   /* V15: the avatar is clipped, not the button, so the count sits on the corner instead of over the picture */
.rail .server.km-has-uav .km-uav-rail{width:100%;height:100%;border-radius:inherit;overflow:hidden;transition:border-radius .15s}
.rail .server.km-has-uav .km-uav-em svg{width:50%;height:50%}
/* 亮色皮肤：上传/内置图片头像多为白底，和浅色宇宙栏(#f3f5f9)几乎同色——给图片头像描一圈细边 + 轻投影，夜色不变（任务 295001be） */
html:not([data-theme=night]) .rail .server.km-has-uav .km-uav-img.km-uav-rail{box-shadow:0 1px 3px rgba(20,41,102,.18)}
html:not([data-theme=night]) .rail .server.km-has-uav .km-uav-img.km-uav-rail::after{content:'';position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 1px rgba(20,41,102,.16);pointer-events:none}
.rail .server .lc-count{bottom:-6px;right:-7px;min-width:18px;height:18px;padding:0 4px;border-width:2.5px;font-size:9px;line-height:1;z-index:2}
.rail .server.km-has-uav:hover .km-uav-rail,.rail .server.km-has-uav.active .km-uav-rail{filter:brightness(1.06)}
.km-uni-cover .km-uav{box-shadow:0 10px 30px -10px rgba(var(--k-acc-rgb),.5)}
.kmu-sw-mark .km-uav,.kmu-uni-mark .km-uav{width:100%;height:100%;border-radius:inherit}
.kmu-sw-mark:has(.km-uav),.kmu-uni-mark:has(.km-uav){background:transparent!important;padding:0;overflow:hidden}
/* the picker (creating and editing a universe) */
.km-uavp{display:flex;gap:14px;align-items:flex-start;margin:4px 0 12px}
.km-uavp-now{flex:none;padding:4px}
.km-uavp-grid{display:grid;grid-template-columns:repeat(9,34px);gap:6px}
.km-uavp-opt{width:34px;height:34px;padding:0;border:0;border-radius:11px;background:transparent;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;position:relative;color:var(--k-acc);font-weight:700}
.km-uavp-opt .km-uav{--uav:34px}
.km-uavp-opt:hover{transform:translateY(-1px)}
.km-uavp-opt.on{box-shadow:0 0 0 2px var(--k-bg),0 0 0 4px var(--k-acc)}
.km-uavp-up,.km-uavp-none{background:rgba(var(--k-acc-rgb),.08)}
.km-uavp-up input{position:absolute;inset:0;opacity:0;cursor:pointer}
@media (max-width:560px){.km-uavp{flex-direction:column}.km-uavp-grid{grid-template-columns:repeat(6,34px)}}

/* ---- V16 · the mother planet keeps its mark whatever you call it: an orbit ring with one small moon round its icon ---- */
.rail .server.km-mother-rail{overflow:visible}
.rail .server.km-mother-rail::after{content:"";position:absolute;inset:-8px;border-radius:50%;border:1.2px solid rgba(var(--k-acc-rgb),.38);pointer-events:none;
  background:radial-gradient(circle at 85.4% 14.6%,var(--k-acc) 0 3px,rgba(var(--k-acc-rgb),.25) 3.6px 5px,transparent 5.6px);animation:km-mother-orbit 24s linear infinite}
@keyframes km-mother-orbit{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.rail .server.km-mother-rail::after{animation:none}}
.km-mrename{display:grid;gap:6px}
.km-mrename-mark{display:flex;justify-content:center;padding:6px 0 12px}
.km-mother-ic{width:56px;height:56px;border-radius:18px;display:inline-flex;align-items:center;justify-content:center;font-size:24px;font-weight:700;color:#fff;
  background:linear-gradient(140deg,var(--k-acc),#5B8CF3);box-shadow:0 0 0 4px var(--k-bg),0 0 0 5.3px rgba(var(--k-acc-rgb),.55)}

/* ---- V16 · 文案模式 (Alt+W): the wording table's row for the text under the pointer ---- */
#km-wordlens{position:fixed;left:14px;bottom:30px;z-index:99999;width:min(380px,calc(100vw - 28px));padding:10px 12px;border-radius:12px;background:rgba(var(--k-bg-rgb,255,255,255),.96);
  border:1px solid rgba(var(--k-acc-rgb),.35);box-shadow:0 12px 34px rgba(10,30,90,.18);font:12px/1.5 var(--font,system-ui);color:var(--k-ink,#0A2F8F);pointer-events:none;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
#km-wordlens[hidden]{display:none}
#km-wordlens .kwl-row{display:grid;grid-template-columns:34px 1fr;gap:8px;align-items:baseline}
#km-wordlens .kwl-row b{font:600 10px/1.6 "JetBrains Mono",monospace;letter-spacing:.08em;color:var(--k-acc)}
#km-wordlens code{font:12px/1.5 "JetBrains Mono","Plex SC",monospace;word-break:break-all;background:rgba(var(--k-acc-rgb),.07);border-radius:4px;padding:0 4px}
#km-wordlens i{color:var(--k-dim);font-style:normal}
#km-wordlens hr{border:0;border-top:1px solid rgba(var(--k-acc-rgb),.15);margin:6px 0}
#km-wordlens .kwl-tip{margin:4px 0 0;font-size:10.5px;color:var(--k-dim)}
#km-wordlens .kwl-ok{color:var(--k-acc)}
#km-wordlens-mark{position:fixed;z-index:99998;border:1.5px solid var(--k-acc);border-radius:4px;background:rgba(var(--k-acc-rgb),.06);pointer-events:none}
#km-wordlens-mark[hidden]{display:none}
body.km-wordlens-on,body.km-wordlens-on *{cursor:help!important}

/* ---------- V22 · style pass (both views) ----------
   · the open / closed / all tabs of a planet forum (and the other lifecycle tabs) take the accent, not the reference build's violet
   · a voice planet's people: tiles in the accent's glass; before you join they line up with the planet's name above them */
.workspace .lc-tabs button{border-radius:999px;background:transparent;color:var(--k-ink2);transition:background .15s,color .15s}
.workspace .lc-tabs button:hover{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.06)}
.workspace .lc-tabs button.active{background:rgba(var(--k-acc-rgb),.13);color:var(--k-acc);font-weight:650}
.workspace .lc-voice-main>.voice-tiles{justify-content:flex-start}   /* before you join: under the planet's name, from the left; in the call the core centres them under 已连接 */
.workspace .voice-tile{background:rgba(var(--k-acc-rgb),.05);border-color:transparent;border-radius:16px;box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.08)}
.workspace .voice-tile.self{border-color:transparent;box-shadow:inset 0 0 0 1.5px var(--k-acc),0 0 22px -8px rgba(var(--k-acc-rgb),.6)}

/* ------------------------------------------------------------------ V26 · fewer things on screen (product behaviour, not in Discord) */
/* a thin rule between groups in a menu */
.km-menu-sep,.kmu-menu-sep{display:block;height:1px;margin:5px 8px;background:var(--k-line,rgba(127,127,127,.2))}
.servermenu .km-menu-sep{margin:5px 4px}
.servermenu button{justify-content:flex-start!important;font-weight:550}
body .channels .servermenu button.secondary{border-radius:8px;color:var(--k-ink2,inherit)}
body .channels .servermenu button.secondary:not(:hover){background:none}
body .channels .servermenu button.secondary:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.14),transparent 90%);color:var(--k-acc)}
.km-menu-item{display:flex;align-items:center;gap:8px}
/* the chat's head: the search and ⋯. 帖子和讨论串, 置顶消息, 通知设置 and the member list open from ⋯ (src/kmind/ctx.js) */
.channelhead .toolbar [data-action="threads"],.channelhead .toolbar [data-action="channel-notify"],.channelhead .toolbar [data-action="pins"],.channelhead .toolbar [data-action="members"],html body #kmu .kmw-chat .channelhead .toolbar .ib[data-action="threads"],html body #kmu .kmw-chat .channelhead .toolbar .ib[data-action="channel-notify"],html body #kmu .kmw-chat .channelhead .toolbar .ib[data-action="pins"],html body #kmu .kmw-chat .channelhead .toolbar .ib[data-action="members"]{display:none!important}
.channelhead .toolbar .searchbox{order:-1}
@media (min-width:901px){body:not(.km-u) .channelhead .toolbar [data-action="lc-search"]{display:none!important}}
/* 收件箱 is in 动态 now; 活动, 浏览星球 and 成员 open from the universe's menu */
.titlebar [data-action="inbox"]{display:none!important}
.channel-scroll>.utility[data-action="events"],.channel-scroll>.utility[data-action="browse"],.channel-scroll>.utility[data-action="member-page"],.channel-scroll>.utility[data-action="member-page"]+.channel-rule{display:none!important}
/* the mic and the headphones only on a voice planet or in a call */
body:not(.km-voice-here) .userbar [data-action="mute"],body:not(.km-voice-here) .userbar [data-action="deafen"]{display:none!important}
/* the mother's member list starts folded (the member-list command in ⋯ opens it) */
body.km-at-mother:not(.km-u):not(.km-mother-members) .workspace .members{display:none!important}
/* 大厅 #21885：成员列表右上角收起按钮 + 面板视图 iPad 横屏（>= 960px）并排收窄消息区、竖屏与手机（< 960px）默认收起 + 可关闭抽屉 */
.members .roster-context{position:relative;padding-right:28px}
.members .kmw-mem-x{position:absolute;top:0;right:2px;width:24px;height:24px;border-radius:6px;border:0;background:transparent;color:var(--k-mute,var(--muted,#85858f));display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0}
.members .kmw-mem-x:hover{background:var(--k-hover,var(--hover,#2b2b30));color:var(--k-acc,var(--text,#fff))}
.members .kmw-mem-x svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.members .km-msort{margin:2px 2px 8px;font-size:11px}
.members .km-msort button{padding:0 4px}
@media (min-width:960px) and (max-width:1170px){
  :root{--side:224px;--members:212px}
  body:not(.km-u) .workspace>.body>.members:not([hidden]){display:flex;flex-direction:column;position:static;width:var(--members,212px);flex:0 0 var(--members,212px);box-shadow:none}
}
@media (max-width:959px){
  body:not(.km-u) .workspace>.body{position:relative}
  body:not(.km-u) .workspace>.body:not(.show-members)>.members{display:none!important}
  body:not(.km-u) .workspace>.body.show-members>.members{display:flex!important;flex-direction:column;position:absolute;top:0;right:0;bottom:0;width:min(248px,78vw);z-index:6;box-shadow:-16px 0 36px rgba(0,0,0,.42)}
  body:not(.km-u) .workspace>.body>.chat{position:relative}
  body:not(.km-u) .workspace>.body.show-members>.chat::after{content:"";position:absolute;inset:0;z-index:4;background:rgba(4,7,14,.32);pointer-events:none}
}
/* a planet forum in 面板视图: 开放 / 已关闭 / 全部 share a line with the sort, the layout and the tags (as in the universe's chat window) */
body:not(.km-u) .forum-main{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr)}
body:not(.km-u) .forum-top{display:contents}
body:not(.km-u) .forum-searchbar{grid-column:1/-1;grid-row:1;margin:23px 22px 0}
body:not(.km-u) .lc-forum-tabs{grid-column:1;grid-row:2;align-self:center;margin:14px 0 8px 22px;padding:0;flex-wrap:nowrap}
body:not(.km-u) .forum-filters{grid-column:2;grid-row:2;align-self:center;padding:14px 22px 8px 10px}
body:not(.km-u) .forum-list{grid-column:1/-1;grid-row:3}
/* 外观: the language as a row of choices above the skins */
.km-look-langs{display:flex;flex-wrap:wrap;gap:6px;padding:0 4px 14px}
.km-look-l{height:28px;padding:0 13px;border:0;border-radius:999px;font:inherit;font-size:12px;font-weight:600;cursor:pointer;color:var(--k-ink2);background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 0 0 1px var(--k-line)}
.km-look-l:hover{color:var(--k-acc)}
.km-look-l.on{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.13);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.35)}
/* 动态: the 收件箱 chip and the 提到你 rows */
.km-ow-inbox{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 11px 0 9px;border:0;border-radius:999px;cursor:pointer;font:inherit;font-size:12px;font-weight:600;color:var(--k-ink2);background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 0 0 1px var(--k-line)}
.km-ow-inbox:hover{color:var(--k-acc)}
.km-ow-inbox b{min-width:16px;height:16px;padding:0 4px;border-radius:8px;display:inline-grid;place-items:center;font-size:10px;color:#fff;background:var(--k-red,#e5484d)}
/* the universe's top bar: 轨道 / 星群 only in 总览 */
#kmu-layout[hidden]{display:none!important}

/* ------------------------------------------------------------------ V28 */
/* 动态's 沉浸视图 (the only one): plain when there is nothing to watch, blue when something is being made where it would open,
   filled while it is open */
.km-ow-filter .km-ow-imm{color:var(--k-ink)}
.km-ow-filter .km-ow-imm.live{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.12);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.38)}
.km-ow-filter .km-ow-imm.on{color:#fff;background:var(--k-acc);box-shadow:0 6px 16px -8px rgba(var(--k-acc-rgb),.9)}
.km-ow-filter .km-ow-imm b{min-width:16px;height:16px;padding:0 4px;border-radius:8px;display:inline-grid;place-items:center;font-size:10px;color:#fff;background:var(--k-acc)}
.km-ow-filter .km-ow-imm.on b{color:var(--k-acc);background:#fff}

/* ---- V33 · 小组: your agent wears its group's colour as a diamond frame (thicker for the leader); a group's mark; the leader's chip ---- */
.km-agent.km-g::before{content:"";position:absolute;inset:-16%;pointer-events:none;background:var(--km-g);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath transform='translate(3 3) scale(.94)' d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z' fill='none' stroke='%23000' stroke-width='4.2'/%3E%3C/svg%3E") center/100% 100% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath transform='translate(3 3) scale(.94)' d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z' fill='none' stroke='%23000' stroke-width='4.2'/%3E%3C/svg%3E") center/100% 100% no-repeat}
.km-agent.km-g-lead::before{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath transform='translate(3 3) scale(.94)' d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z' fill='none' stroke='%23000' stroke-width='9.6'/%3E%3C/svg%3E") center/100% 100% no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath transform='translate(3 3) scale(.94)' d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z' fill='none' stroke='%23000' stroke-width='9.6'/%3E%3C/svg%3E") center/100% 100% no-repeat}
/* V34 · an agent at work: the progress runs along its diamond frame (KM.workMark / KM.workAvatar, src/kmind/ext.js). The frame is
   the track, quieter; the fill starts at the top corner and goes clockwise in the group's colour (the accent without a group),
   with a bright head; unknown progress is a short stroke going round; done, the frame fills, flashes and a ripple goes out. */
@property --wp{syntax:'<number>';inherits:true;initial-value:0}
@property --wkg{syntax:'<length>';inherits:false;initial-value:2.4px}
.km-agent{--wkc:var(--km-g,var(--cz-acc,var(--k-acc,#3B82FF)))}
.km-agent>.km-wk{position:absolute;left:-16%;top:-16%;width:132%;height:132%;overflow:visible;pointer-events:none;transition:--wp .9s cubic-bezier(.3,.6,.3,1);filter:drop-shadow(0 0 var(--wkg) color-mix(in srgb,var(--wkc) 65%,transparent))}
.km-wk path{fill:none;stroke:var(--wkc);stroke-linecap:round;stroke-linejoin:round}
.km-wk-t{stroke-width:4.2;opacity:.28}
.km-wk-f{stroke-width:6.2;stroke-dasharray:100 100;stroke-dashoffset:calc((1 - var(--wp)) * 100px)}
.km-wk-h{stroke-width:12;opacity:.42;stroke-dasharray:.001 99.999;stroke-dashoffset:calc(var(--wp) * -100px);animation:kmWkBeat 1.6s ease-in-out infinite}
.km-wk-c{stroke:#fff!important;stroke-width:5;stroke-dasharray:.001 99.999;stroke-dashoffset:calc(var(--wp) * -100px)}
.km-wk-p{stroke-width:3.2;opacity:0;transform-box:fill-box;transform-origin:center}
.km-g-lead .km-wk-t{stroke-width:9.6}
.km-g-lead .km-wk-f{stroke-width:9.6}
.km-g-lead .km-wk-h{stroke-width:17}
.km-g-lead .km-wk-c{stroke-width:7}
@keyframes kmWkBeat{50%{opacity:.16;stroke-width:17}}
/* not known yet: a short stroke going round, its head in front */
.km-wk-run .km-wk-f{stroke-dasharray:26 74;opacity:.75;animation:kmWkRun 2.2s linear var(--wkd,0s) infinite}
.km-wk-run .km-wk-h,.km-wk-run .km-wk-c{animation:kmWkRunH 2.2s linear var(--wkd,0s) infinite}   /* --wkd: drawn again, it carries on where it was */
@keyframes kmWkRun{from{stroke-dashoffset:0}to{stroke-dashoffset:-100px}}
@keyframes kmWkRunH{from{stroke-dashoffset:-26px}to{stroke-dashoffset:-126px}}
/* done: the fill closes the frame, the frame flashes, a diamond ripple goes out, and the plain frame comes back as the marks fade */
.km-wk-done>.km-wk{transition:--wp .45s cubic-bezier(.4,0,.2,1);animation:kmWkGlow .7s ease .4s}
.km-wk-done .km-wk-h,.km-wk-done .km-wk-c{animation:kmWkOut .18s ease .42s forwards}
.km-wk-done .km-wk-f{animation:kmWkFlash .45s ease .42s,kmWkOut .4s ease .85s forwards}
.km-g-lead.km-wk-done .km-wk-f{animation:kmWkFlashL .45s ease .42s,kmWkOut .4s ease .85s forwards}
.km-wk-done .km-wk-t{animation:kmWkOut .4s ease .85s forwards}
.km-wk-done .km-wk-p{animation:kmWkPing .9s cubic-bezier(.2,.7,.3,1) .42s}
.km-agent.km-wk-done::before{animation:kmWkIn .4s ease .85s both}
@keyframes kmWkFlash{35%{stroke-width:9.4}}
@keyframes kmWkFlashL{35%{stroke-width:13.5}}
@keyframes kmWkGlow{35%{--wkg:7px}}
@keyframes kmWkPing{0%{opacity:.75;transform:scale(1)}100%{opacity:0;transform:scale(1.32)}}
@keyframes kmWkOut{to{opacity:0}}
@keyframes kmWkIn{from{opacity:0}to{opacity:1}}
/* while the work is drawn, it is the frame */
.km-agent.km-wk-on::before{opacity:0}
body.fx-off-work .km-agent>.km-wk{display:none}
body.fx-off-work .km-agent.km-wk-on::before{opacity:1}
@media (prefers-reduced-motion:reduce){.km-wk-h{animation:none}.km-wk-run .km-wk-f,.km-wk-run .km-wk-h,.km-wk-run .km-wk-c{animation:none}.km-wk-run .km-wk-h,.km-wk-run .km-wk-c{stroke-dashoffset:-26px}.km-wk-done .km-wk-p,.km-wk-done>.km-wk{animation:none}}
.km-g-dia{display:inline-block;flex:none;width:8px;height:8px;margin:0 7px 0 2px;transform:rotate(45deg);border-radius:2px;border:1.6px solid var(--g);background:color-mix(in srgb,var(--g) 24%,transparent);vertical-align:1px}
.km-lead-chip{display:inline-flex;align-items:center;flex:none;margin-left:6px;padding:0 5px;border-radius:5px;font-size:10px;font-style:normal;font-weight:650;line-height:16px;letter-spacing:0;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.1);vertical-align:1px}
.channel.km-g-ch .hash{color:var(--km-gc)}
.km-ow-gh .km-g-dia,.km-side-gh .km-g-dia{margin-left:0}
.km-pa-g{align-items:center}
.km-pa-g .km-g-dia{margin:0 4px 0 2px}
/* the form: 新建卫星 (a moon and its leader) */
.km-g-sws{display:flex;flex-wrap:wrap;gap:9px;margin:2px 0 6px}
.km-g-sw{position:relative;display:inline-flex;cursor:pointer}
.km-g-sw input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}
.km-g-sw span{display:block;width:24px;height:24px;border-radius:50%;background:var(--sw);box-shadow:inset 0 0 0 1px rgba(var(--k-sh),.12);transition:box-shadow .12s}
.km-g-sw input:checked+span{box-shadow:0 0 0 2px var(--k-bg,#fff),0 0 0 4px var(--sw)}
.km-g-sw input:focus-visible+span{outline:2px solid var(--k-acc);outline-offset:4px}
.km-g-lead{margin-top:14px;padding:12px 14px 6px;border-radius:12px;border:1px solid color-mix(in srgb,var(--g) 42%,var(--k-line));background:color-mix(in srgb,var(--g) 6%,transparent)}
.km-g-lead-h{display:flex;align-items:center;gap:9px;font-size:13px;margin:0 0 2px 2px}
.km-g-lead-h b{font-weight:650}
.km-g-lead-dia{width:13px;height:13px;transform:rotate(45deg);border-radius:3px;border:2.6px solid var(--g)}
.km-g-fixed{display:flex;align-items:center;height:38px;padding:0 10px;border:1px solid var(--k-line);border-radius:8px;font-size:14px}
.km-g-fixed b{font-weight:600}

/* V35 · 添加组员 (src/kmind/members.js): three kinds of member — a platform template, your computer, a third-party agent —
   and the key safe. One dialog, tabs on top; cards in two columns; the key safe in two panes. */
#dialog.km-am-dlg{width:min(860px,calc(100vw - 32px))}
/* V38 · 密钥保险箱: its own button above the three kinds of member */
.km-am-vault{display:flex;align-items:center;gap:12px;width:100%;margin:2px 0 12px;padding:12px 14px 12px 12px;border:0;border-radius:14px;background:linear-gradient(100deg,rgba(var(--k-acc-rgb),.12),rgba(var(--k-acc-rgb),.035) 70%);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.22);color:var(--k-ink);font:inherit;text-align:left;cursor:pointer;transition:background .15s,box-shadow .15s}
.km-am-vault:hover{background:linear-gradient(100deg,rgba(var(--k-acc-rgb),.18),rgba(var(--k-acc-rgb),.06) 70%);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.4),0 6px 22px -10px rgba(var(--k-acc-rgb),.7)}
.km-am-vault:focus-visible{outline:2px solid var(--k-acc);outline-offset:2px}
.km-am-vic{display:grid;place-items:center;width:40px;height:40px;flex:none;border-radius:12px;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.14)}
.km-am-vt{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.km-am-vt b{font-size:14.5px;font-weight:700}
.km-am-vt small{font-size:12px;color:var(--k-dim)}
.km-am-vven{display:flex;align-items:center;gap:4px;flex:none}
.km-am-vven i{display:grid;place-items:center;width:26px;height:26px;border-radius:8px;font:700 10px/1 "Inter Tight","Plex SC",sans-serif;font-style:normal;letter-spacing:.02em;color:var(--k-ink2);background:rgba(var(--k-layer-rgb,var(--k-acc-rgb)),.1)}
.km-am-vven em{font:500 11px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-dim);margin-left:2px}
.km-am-vault>svg:last-child{flex:none;color:var(--k-dim)}
html[data-km-edge=none] .km-am-vault{box-shadow:none}
html[data-km-edge=none] .km-am-vault:hover{box-shadow:0 6px 22px -10px rgba(var(--k-acc-rgb),.7)}
@media (max-width:520px){.km-am-vven{display:none}}
.km-am-tabs{display:flex;gap:4px;margin:2px 0 14px;padding:3px;border-radius:12px;background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 0 0 1px var(--k-line)}
.km-am-tabs button{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:36px;padding:0 12px;border:0;border-radius:9px;background:transparent;color:var(--k-ink2);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s,color .15s}
.km-am-tabs button:hover{color:var(--k-acc)}
.km-am-tabs button.on{background:var(--k-bg);color:var(--k-acc);box-shadow:0 1px 2px rgba(var(--k-sh),.12),inset 0 0 0 1px rgba(var(--k-acc-rgb),.3)}
.km-am-tabs button:focus-visible{outline:2px solid var(--k-acc);outline-offset:2px}
.km-am-pane{min-height:240px}
.km-am-quota{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0 0 12px;font-size:12.5px;color:var(--k-ink2)}
.km-am-quota b{font-weight:650;color:var(--k-ink)}
.km-am-quota small{color:var(--k-dim);font-size:12px}
.km-am-dots{display:inline-flex;gap:3px}
.km-am-dots i{width:8px;height:8px;transform:rotate(45deg);border-radius:2px;background:rgba(var(--k-mute-rgb),.22)}
.km-am-dots i.on{background:var(--g,var(--k-acc))}
.km-am-link{display:inline-flex;align-items:center;gap:6px;margin-left:auto;padding:5px 10px;border:1px solid var(--k-line);border-radius:8px;background:transparent;color:var(--k-ink2);font:inherit;font-size:12px;cursor:pointer}
.km-am-link:hover{color:var(--k-acc);border-color:rgba(var(--k-acc-rgb),.45)}
.km-am-link:disabled{opacity:.45;cursor:default}
.km-am-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;max-height:min(58vh,560px);overflow:auto;padding:2px 2px 6px;margin:0 -2px}
.km-am-card{display:flex;gap:12px;align-items:flex-start;padding:14px;border:1px solid var(--k-line);border-radius:12px;background:transparent;color:inherit;font:inherit;text-align:left;transition:border-color .15s,background .15s}
.km-am-card:hover{border-color:rgba(var(--k-acc-rgb),.45);background:rgba(var(--k-acc-rgb),.03)}
button.km-am-card{cursor:pointer}
button.km-am-card:focus-visible{outline:2px solid var(--k-acc);outline-offset:2px}
.km-am-av.km-tile{width:42px;height:42px;flex:none;display:grid;place-items:center;color:#fff}
.km-am-av.km-tile svg{width:100%;height:100%}
.km-am-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.km-am-body>b{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:650;color:var(--k-ink)}
.km-am-body p{margin:0;font-size:12.5px;line-height:1.5;color:var(--k-ink2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.km-am-fitline{font-size:11.5px;line-height:1.45;color:var(--k-dim);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.km-am-body footer{display:flex;align-items:center;gap:6px;margin-top:6px}
.km-am-v,.km-am-tag{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:6px;background:rgba(var(--k-mute-rgb),.12);color:var(--k-dim);font:500 10.5px/1.5 var(--k-mono,ui-monospace),monospace}
.km-am-rec{display:inline-flex;align-items:center;gap:3px;padding:1px 7px;border-radius:6px;font-style:normal;font-size:10.5px;font-weight:600;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.1);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.28)}
.km-am-pick{margin-left:auto;display:inline-flex;align-items:center;gap:4px;padding:4px 4px 4px 8px;border:0;background:transparent;color:var(--k-acc);font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;border-radius:7px}
.km-am-pick:hover{background:rgba(var(--k-acc-rgb),.1)}
.km-am-pick:disabled{color:var(--k-dim);cursor:default;background:none}
.km-am-tile{width:40px;height:40px;flex:none;display:grid;place-items:center;border-radius:10px;background:rgba(var(--k-acc-rgb),.1);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.25);color:var(--k-acc);font:700 13px/1 var(--k-mono,ui-monospace),monospace;letter-spacing:.02em}
.km-am-hero{display:flex;gap:14px;align-items:flex-start;padding:16px;border:1px solid var(--k-line);border-radius:12px 12px 0 0}
.km-am-hero-ic{width:44px;height:44px;flex:none;display:grid;place-items:center;border-radius:10px;background:rgba(var(--k-acc-rgb),.08);color:var(--k-acc)}
.km-am-hero b{display:block;font-size:14.5px;font-weight:650;margin:1px 0 4px}
.km-am-hero p{margin:0;font-size:13px;line-height:1.55;color:var(--k-ink2)}
.km-am-dl{padding:14px 16px;border:1px solid var(--k-line);border-top:0;border-radius:0 0 12px 12px;background:rgba(var(--k-acc-rgb),.03)}
.km-am-dlrow{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.km-am-dlbtn{display:inline-flex;align-items:center;gap:8px;margin:0!important}
.km-am-os{padding:6px 10px;border:0;background:transparent;color:var(--k-ink2);font:inherit;font-size:13px;cursor:pointer;border-radius:8px}
.km-am-os:hover{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.08)}
.km-am-file{display:block;margin-top:8px;color:var(--k-dim);font:12px/1.4 var(--k-mono,ui-monospace),monospace;overflow-wrap:anywhere}
.km-am-steps{list-style:none;counter-reset:s;margin:14px 0 6px;padding:0;display:grid;gap:8px}
.km-am-steps li{counter-increment:s;display:flex;gap:10px;align-items:flex-start;font-size:13px;line-height:1.55;color:var(--k-ink)}
.km-am-steps li::before{content:counter(s);flex:none;width:22px;height:22px;display:grid;place-items:center;border-radius:50%;background:rgba(var(--k-mute-rgb),.14);font:600 11.5px/1 var(--k-mono,ui-monospace),monospace;color:var(--k-ink2)}
.km-am-note{margin:8px 0 0;font-size:12px;line-height:1.6;color:var(--k-dim)}
.km-am-h{display:flex;align-items:center;gap:6px;margin:16px 0 8px;font-size:12.5px;font-weight:650;color:var(--k-ink2)}
.km-am-list{display:grid;gap:6px}
.km-am-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid var(--k-line);border-radius:10px}
.km-am-row>span:not(.km-avbox):not(.km-am-tile){flex:1;min-width:0;display:flex;flex-direction:column}
.km-am-row b{font-size:13.5px;font-weight:600}
.km-am-row small{font-size:12px;color:var(--k-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-am-row .km-am-tile{width:32px;height:32px;border-radius:8px;font-size:11px}
.km-am-on{display:inline-flex;align-items:center;gap:6px;font-style:normal;font-size:12px;color:var(--k-ok)}
.km-am-on::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 6px currentColor}
.km-am-on.off{color:var(--k-dim)}
.km-am-on.off::before{box-shadow:none}
.km-am-miss{font-style:normal;font-size:11.5px;font-weight:600;color:var(--k-danger);padding:1px 7px;border-radius:6px;background:rgba(var(--k-danger-rgb),.1)}
.km-am-none{margin:0;font-size:12.5px;color:var(--k-dim)}
.km-am-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px}
.km-am-bar .km-am-link{margin-left:0}
.km-am-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:8px;background:rgba(var(--k-mute-rgb),.1);color:var(--k-ink2);font-size:12px}
.km-am-from{display:flex;align-items:center;gap:12px;margin:0 0 14px;padding:10px 12px;border-radius:12px;background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.18)}
.km-am-from>span:not(.km-tile):not(.km-am-tile){flex:1;min-width:0;display:flex;flex-direction:column}
.km-am-from b{font-size:14px;font-weight:650}
.km-am-from small{font-size:12px;color:var(--k-dim)}
.km-am-from .km-am-av.km-tile{width:36px;height:36px}
.km-am-back{padding:4px 10px;border:1px solid var(--k-line);border-radius:8px;background:transparent;color:var(--k-ink2);font:inherit;font-size:12px;cursor:pointer}
.km-am-back:hover{color:var(--k-acc);border-color:rgba(var(--k-acc-rgb),.45)}
.km-am-own{gap:10px}
.km-am-own small{color:var(--k-dim);font-size:12px}
.km-am-keys,.km-am-creds{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.km-am-keys label,.km-am-creds>label{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--k-line);border-radius:8px;font-size:12px;cursor:pointer;color:var(--k-ink2)}
.km-am-keys label:has(input:checked),.km-am-creds>label:has(input:checked){border-color:rgba(var(--k-acc-rgb),.5);background:rgba(var(--k-acc-rgb),.06);color:var(--k-ink)}
.km-am-keys label.km-am-fit{border-style:dashed}
.km-am-keys code,.km-am-creds code,.km-vault code,.km-am-keyline code{font:500 11.5px/1.4 var(--k-mono,ui-monospace),monospace;color:var(--k-ink)}
.km-am-keys small,.km-am-creds small{color:var(--k-dim);font-size:11px}
.km-am-keys .km-am-link{margin-left:0}
.km-am-newkey{flex-basis:100%;display:grid;gap:8px;margin-top:4px;padding:12px;border:1px dashed rgba(var(--k-acc-rgb),.4);border-radius:10px}
.km-am-src{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;padding:8px 10px;border-radius:10px;background:rgba(var(--k-mute-rgb),.07)}
.km-am-src b{font-size:13px;font-weight:650}
.km-am-src small{font-size:12px;color:var(--k-dim)}
.km-am-src em{margin-left:auto}
.km-am-keyline{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:6px 2px 0;color:var(--k-dim)}
.km-am-keyline code{padding:1px 6px;border-radius:5px;background:rgba(var(--k-mute-rgb),.1)}
.km-am-form .footer-actions{gap:8px}
/* 密钥保险箱 */
#dialog.km-vault-dlg{width:min(900px,calc(100vw - 32px))}
.km-vault-note{display:flex;gap:8px;align-items:flex-start;margin:0 0 14px;padding:10px 12px;border-left:3px solid var(--k-acc);border-radius:4px 10px 10px 4px;background:rgba(var(--k-acc-rgb),.06);font-size:12.5px;line-height:1.55;color:var(--k-ink2)}
.km-vault-note svg{flex:none;margin-top:2px;color:var(--k-acc)}
.km-vault{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);gap:18px;align-items:start}
.km-vault-add .km-am-h{margin-top:0}
.km-vault-form{display:grid;gap:8px}
.km-vault-vnote{color:var(--k-dim);font-size:12px;line-height:1.5}
.km-vault-name{display:flex;align-items:center;gap:6px}
.km-vault-name code{flex:none;padding:8px 10px;border-radius:8px;background:rgba(var(--k-mute-rgb),.1)}
.km-vault-name span{color:var(--k-dim)}
.km-vault-name .field{flex:1;min-width:0;margin:0}
.km-vault-val{position:relative}
.km-vault-val .field{width:100%;margin:0;padding-right:40px;font-family:var(--k-mono,ui-monospace),monospace}
.km-vault-val .ib{position:absolute;right:4px;top:50%;transform:translateY(-50%)}
.km-vault-save{display:flex;align-items:center;gap:10px;justify-content:space-between}
.km-vault-save small{color:var(--k-dim);font-size:12px}
.km-vault-save .primary{display:inline-flex;align-items:center;gap:6px;margin:0!important}
.km-vault-import{margin-top:14px;border:1px solid var(--k-line);border-radius:10px;padding:0 12px}
.km-vault-import summary{padding:10px 0;font-size:12.5px;font-weight:600;color:var(--k-ink2);cursor:pointer}
.km-vault-import form{display:grid;gap:8px;padding:0 0 12px}
.km-vault-import textarea{font:12px/1.5 var(--k-mono,ui-monospace),monospace;resize:vertical}
.km-vault-import .danger{justify-self:end;margin:0!important}
.km-vault-list{border-left:1px solid var(--k-line);padding-left:18px;min-height:240px;max-height:min(60vh,560px);overflow:auto}
.km-vault-tools{display:flex;gap:8px;align-items:center;margin:0 0 10px}
.km-vault-tools .field{flex:1;margin:0}
.km-vault-tools .km-am-link{margin-left:0;white-space:nowrap}
.km-vault-grp{border:1px solid var(--k-line);border-radius:10px;margin:0 0 8px;overflow:hidden}
.km-vault-grp summary{display:flex;align-items:center;gap:8px;padding:9px 12px;cursor:pointer;list-style:none;font-size:13px}
.km-vault-grp summary::-webkit-details-marker{display:none}
.km-vault-grp summary svg{transition:transform .15s;color:var(--k-dim)}
.km-vault-grp:not([open]) summary svg{transform:rotate(-90deg)}
.km-vault-grp summary b{flex:1;font-weight:650}
.km-vault-grp summary em{font-style:normal;min-width:20px;height:20px;display:grid;place-items:center;padding:0 6px;border-radius:10px;background:rgba(var(--k-mute-rgb),.14);font-size:11px;color:var(--k-ink2)}
.km-vault-row{display:flex;align-items:center;gap:8px;padding:8px 12px;border-top:1px solid var(--k-line);color:var(--k-dim)}
.km-vault-row code{color:var(--k-ink)}
.km-vault-row>small{color:var(--k-dim);font-size:11px;letter-spacing:.04em}
.km-vault-use{margin-left:auto;font-size:11.5px;color:var(--k-dim)}
.km-vault-row .ib{width:28px;height:28px}
.km-vault-del.km-sure{width:auto!important;padding:0 8px;gap:5px;display:inline-flex;align-items:center;color:var(--k-danger);background:rgba(var(--k-danger-rgb),.1);border-radius:7px;font-size:11.5px}
.km-vault-editf{flex:1;display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.km-vault-editf .field{margin:0;width:110px;flex:1;min-width:90px}
.km-vault-editf .field[type=password]{flex:2;font-family:var(--k-mono,ui-monospace),monospace}
.km-vault-editf .km-mini{margin:0!important}
/* a computer that is off: its agent fades */
.km-agent.km-off .km-shape{filter:grayscale(1);opacity:.5}
@media (max-width:720px){.km-am-grid{grid-template-columns:1fr}.km-vault{grid-template-columns:1fr}.km-vault-list{border-left:0;padding-left:0}.km-am-tabs button span{font-size:12px}}
/* V38 · 组员菜单 (src/kmind/membermenu.js): KrowChat 接入, 重置工作盘 / 移除组员 */
.km-mm-sw{display:flex;align-items:center;gap:12px;margin:2px 0 12px;padding:12px 14px;border-radius:12px;background:rgba(var(--k-acc-rgb),.06);cursor:pointer}
.km-mm-sw input{width:18px;height:18px;accent-color:var(--k-acc);flex:none}
.km-mm-sw span{display:flex;flex-direction:column;gap:2px}
.km-mm-sw b{font-size:13.5px;font-weight:650;color:var(--k-ink)}
.km-mm-sw small{font-size:12px;color:var(--k-dim)}
.km-mm-kcid{display:flex;align-items:center;gap:10px;margin:0 0 12px;padding:9px 12px;border-radius:10px;background:rgba(var(--k-acc-rgb),.04);font-size:12px;color:var(--k-dim)}
.km-mm-kcid code{flex:1;min-width:0;font:600 13px/1.2 "JetBrains Mono",ui-monospace,monospace;color:var(--k-ink);overflow:hidden;text-overflow:ellipsis}
.km-mm-warn{margin:4px 0 6px;font-size:13px;line-height:1.6;color:var(--k-ink2)}
/* 任务 d0a61f75（修士 HikosUI #31035）：组员完整资料页 / 宇宙界面智能体卡片上的「移除组员…」（KM.memberMenu.removeBtn）——排在日常那几颗的后面，
   资料页里自己占一行；字是危险色（悬停时也是：#dialog 给对话框里的 .outline 定了字色，所以这里带上 #dialog）。组长的是灰的（aria-disabled：点了说为什么） */
#dialog .profile-actions>.km-mm-remove,#dialog .profile-actions>.km-mm-remove:hover,.kmu-manage>.km-mm-remove,.kmu-manage>.km-mm-remove:hover{color:var(--k-danger)}
.profile-actions>.km-mm-remove{flex:1 0 100%}
.kmu-manage>.km-mm-remove{margin-left:auto}
.km-mm-remove[aria-disabled="true"]{opacity:.45;cursor:not-allowed}
.km-agent.km-sleep .km-shape{filter:grayscale(.6) brightness(.8);opacity:.6}

/* V38 · 阅读器 (src/kmind/docview.js): a window of its own — moved by its title bar, sized from its corner, 全屏 to take the page */
.km-dv{position:fixed;z-index:2147480500;display:flex;flex-direction:column;min-width:320px;min-height:220px;max-width:calc(100vw - 16px);max-height:calc(100dvh - 16px);resize:both;overflow:hidden;border-radius:16px;background:rgba(var(--k-bg-rgb),.97);color:var(--k-ink);box-shadow:0 24px 70px -18px rgba(0,0,0,.55),inset 0 0 0 1px var(--k-line);--dv-fs:14px}
html[data-theme=night] .km-dv{background:rgba(14,18,30,.96);backdrop-filter:blur(18px) saturate(1.2);-webkit-backdrop-filter:blur(18px) saturate(1.2);box-shadow:0 30px 90px -20px rgba(0,0,0,.8),0 0 0 1px rgba(var(--k-layer-rgb),.08)}
.km-dv.full{inset:0;width:auto!important;height:auto!important;max-width:none;max-height:none;border-radius:0;resize:none}
.km-dv-head{display:flex;align-items:center;gap:10px;height:50px;padding:0 10px 0 16px;flex:none;cursor:grab;user-select:none;border-bottom:1px solid var(--k-line)}
.km-dv.full .km-dv-head{cursor:default}
.km-dv-head:active{cursor:grabbing}
.km-dv-ic{display:grid;place-items:center;width:30px;height:30px;flex:none;border-radius:9px;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.12)}
.km-dv-tt{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.km-dv-tt b{font-size:14px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-dv-tt small{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-dv-tt small span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.km-dv-tools{display:flex;align-items:center;gap:2px;flex:none}
.km-dv-tools button{display:grid;place-items:center;min-width:32px;height:32px;padding:0 8px;border:0;border-radius:9px;background:transparent;color:var(--k-ink2);font:600 12px/1 inherit;font-family:inherit;cursor:pointer}
.km-dv-tools button:hover:not(:disabled){background:var(--k-hover);color:var(--k-ink)}
.km-dv-tools button:disabled{opacity:.35;cursor:default}
.km-dv-tools button.on{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.12)}
.km-dv-tools button:focus-visible{outline:2px solid var(--k-acc);outline-offset:1px}
.km-dv-body{flex:1;min-height:0;overflow:auto;padding:22px 28px 26px;font-size:var(--dv-fs);line-height:1.75;outline:none;scrollbar-width:thin}
.km-dv.full .km-dv-body{padding:32px max(28px,calc((100vw - 860px) / 2)) 48px}
.km-dv-foot{display:flex;justify-content:space-between;gap:10px;flex:none;padding:6px 16px 8px;font:500 11px/1.4 "JetBrains Mono",ui-monospace,monospace;color:var(--k-dim);border-top:1px solid var(--k-line)}
.km-dv-md{max-width:820px;color:var(--k-ink)}
.km-dv-md h1,.km-dv-md h2,.km-dv-md h3,.km-dv-md h4{margin:1.3em 0 .5em;line-height:1.35;font-weight:700;color:var(--k-ink)}
.km-dv-md>:first-child{margin-top:0}
.km-dv-md h1{font-size:1.6em}.km-dv-md h2{font-size:1.32em}.km-dv-md h3{font-size:1.12em}.km-dv-md h4{font-size:1em}
.km-dv-md p{margin:0 0 .9em;color:var(--k-ink2)}
.km-dv-md ul,.km-dv-md ol{margin:0 0 .9em;padding-left:1.5em;color:var(--k-ink2)}
.km-dv-md li{margin:.2em 0}
.km-dv-md code{padding:.1em .4em;border-radius:6px;font:.9em/1.4 "JetBrains Mono",ui-monospace,monospace;background:rgba(var(--k-acc-rgb),.08);color:var(--k-ink)}
.km-dv-md blockquote{margin:0 0 .9em;padding:.4em 1em;border-left:3px solid rgba(var(--k-acc-rgb),.5);background:rgba(var(--k-acc-rgb),.05);border-radius:0 8px 8px 0}
.km-dv-md hr{border:0;height:1px;margin:1.4em 0;background:var(--k-line)}
.km-dv-md a{color:var(--k-acc)}
.km-dv-pre,.km-dv-code{margin:0 0 .9em;padding:14px 16px;border-radius:10px;font:calc(var(--dv-fs) - 1px)/1.65 "JetBrains Mono",ui-monospace,monospace;background:rgba(var(--k-acc-rgb),.05);color:var(--k-ink);white-space:pre-wrap;word-break:break-word;overflow:auto}
.km-dv.nowrap .km-dv-pre,.km-dv.nowrap .km-dv-code{white-space:pre;word-break:normal}
.km-dv-code code{background:none;padding:0;font:inherit}
.km-dv-tw{overflow:auto;margin:0 0 .9em;border-radius:10px;box-shadow:inset 0 0 0 1px var(--k-line)}
.km-dv-tw table{border-collapse:collapse;width:100%;font-size:calc(var(--dv-fs) - 1px)}
.km-dv-tw th{position:sticky;top:0;padding:8px 12px;text-align:left;font-weight:650;color:var(--k-dim);background:var(--k-bg2,var(--k-bg));border-bottom:1px solid var(--k-line);white-space:nowrap}
.km-dv-tw td{padding:7px 12px;border-bottom:1px solid var(--k-line2,var(--k-line));color:var(--k-ink);white-space:nowrap}
html[data-km-edge=none] .km-dv-head,html[data-km-edge=none] .km-dv-foot{border-color:transparent}
html[data-km-edge=none] .km-dv-tw{box-shadow:none;background:rgba(var(--k-layer-rgb),.04)}
.km-dv-open{margin-right:6px}
@media (max-width:640px){.km-dv:not(.full){inset:auto 6px 6px 6px!important;left:6px!important;top:auto!important;width:auto!important;height:min(78dvh,640px)!important;resize:none}.km-dv-body{padding:16px 16px 20px}.km-dv-tools button[data-dv="copy"]{display:none}}
@media (prefers-reduced-motion:no-preference){.km-dv{animation:km-dv-in .16s ease-out}}
@keyframes km-dv-in{from{opacity:0;transform:translateY(6px) scale(.99)}to{opacity:1;transform:none}}

/* ==== src/kmind/mail.css ==== */
/* KMind 宇宙交互 V17 · 邮箱 (both views, 白昼 and 夜间 through the --k-* tokens) */
.km-mail-head{gap:10px}
.km-mh-ic{display:flex;color:var(--k-acc)}
.km-mb-btn{display:inline-flex;align-items:center;gap:7px;height:30px;padding:0 9px 0 4px;margin-left:4px;border:1px solid var(--k-line);border-radius:999px;background:var(--k-bg);color:var(--k-ink);font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap;min-width:0}
.km-mb-btn:hover{border-color:var(--k-acc);color:var(--k-acc)}
.km-mb-btn>span:not(.km-avbox){overflow:hidden;text-overflow:ellipsis}
.km-mh-note{font-size:12px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.km-mail-compose{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 12px;border-radius:8px;background:var(--k-acc);color:var(--k-on-acc);font-size:12.5px;font-weight:650;white-space:nowrap}
.km-mail-compose:hover{background:var(--k-acc2);color:var(--k-on-acc)}
.km-mailwrap{flex:1;min-height:0;display:flex;container-type:inline-size}
.km-mail{flex:1;min-width:0;display:grid;grid-template-columns:minmax(250px,340px) minmax(0,1fr);min-height:0}
.km-mlist{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--k-line)}
.km-mf{display:flex;gap:4px;padding:10px 10px 8px;border-bottom:1px solid var(--k-line);flex:none;overflow-x:auto;scrollbar-width:none}
.km-mf button{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 10px;border-radius:999px;border:1px solid transparent;background:none;color:var(--k-ink2);font-size:12.5px;cursor:pointer;white-space:nowrap}
.km-mf button:hover{background:var(--k-hover)}
.km-mf button.on{background:rgba(var(--k-acc-rgb),.1);color:var(--k-acc);font-weight:650}
.km-mf i{font-style:normal;min-width:17px;height:17px;padding:0 5px;border-radius:9px;background:var(--k-acc);color:var(--k-on-acc);font-size:10.5px;font-weight:650;display:inline-grid;place-items:center}
.km-mrows{flex:1;min-height:0;overflow:auto;scrollbar-width:thin}
.km-mrow{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;width:100%;padding:11px 14px 11px 12px;border:0;border-bottom:1px solid var(--k-line);background:none;text-align:left;color:var(--k-ink);cursor:pointer}
.km-mrow:hover{background:var(--k-hover)}
.km-mrow.cur{background:rgba(var(--k-acc-rgb),.08)}
.km-mrow.cur::before{content:'';position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:0 3px 3px 0;background:var(--k-acc)}
.km-mrow-main{display:flex;flex-direction:column;gap:3px;min-width:0}
.km-mrow-top{display:flex;align-items:baseline;gap:6px;min-width:0}
.km-mrow-top b{font-size:13px;font-weight:550;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.km-mrow.unread .km-mrow-top b,.km-mrow.unread .km-mrow-subj{font-weight:700}
.km-mrow-top em{font-style:normal;font-size:10.5px;color:var(--k-dim);flex:none}
.km-mrow-top time{margin-left:auto;font-size:11px;color:var(--k-dim);flex:none;padding-right:4px}
.km-mrow-subj{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--k-ink);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0}
.km-mrow-snip{font-size:12px;color:var(--k-dim);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.km-mrow-ctx{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--k-dim);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.km-mdot{position:absolute;right:9px;top:50%;width:7px;height:7px;border-radius:50%;background:var(--k-acc)}
.km-mst{flex:none;display:inline-flex;align-items:center;height:18px;padding:0 7px;border-radius:999px;font-size:10.5px;font-weight:650;letter-spacing:.02em}
.km-mst-open{background:var(--k-amber-bg);color:var(--k-amber-ink);box-shadow:inset 0 0 0 1px var(--k-amber-line)}
.km-mst-accepted{background:rgba(var(--k-acc-rgb),.1);color:var(--k-acc)}
.km-mst-done{background:var(--k-hover);color:var(--k-ink2)}
.km-mst-declined{background:transparent;color:var(--k-dim);box-shadow:inset 0 0 0 1px var(--k-line)}
.km-mread{min-width:0;min-height:0;overflow:auto;scrollbar-width:thin}
.km-mread-in{max-width:760px;padding:18px 24px 24px;display:flex;flex-direction:column;gap:12px}
.km-mtitle{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.km-mtitle h2{font-size:19px;line-height:1.35;font-weight:700;color:var(--k-ink);margin:0}
.km-men{font:11px/1.4 'JetBrains Mono',ui-monospace,monospace;letter-spacing:.06em;color:var(--k-dim);text-transform:uppercase}
.km-mback{display:none!important}
.km-mctx,.km-mlink{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:999px;border:1px solid var(--k-line);background:none;color:var(--k-ink2);font-size:12px;cursor:pointer;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-mctx:hover,.km-mlink:hover{border-color:var(--k-acc);color:var(--k-acc)}
.km-msubs{display:flex;flex-wrap:wrap;gap:6px}
.km-mreq{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;border:1px solid var(--k-line);background:var(--k-bg2)}
.km-mreq>svg{flex:none;color:var(--k-acc)}
.km-mreq-open{border-color:var(--k-amber-line);background:var(--k-amber-bg)}
.km-mreq-open>svg{color:var(--k-amber-ink)}
.km-mreq-done>svg,.km-mreq-declined>svg{color:var(--k-dim)}
.km-mreq>span:not(.km-mreq-acts){display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.km-mreq b{font-size:13px;color:var(--k-ink)}
.km-mreq small{font-size:12px;color:var(--k-ink2)}
.km-mreq-acts{display:flex;gap:6px;flex:none}
.km-mreq-acts button{height:30px;padding:0 14px;border-radius:8px;font-size:12.5px;margin:0}
.km-mcards{display:flex;flex-direction:column;gap:10px}
.km-mcard{border:1px solid var(--k-line);border-radius:12px;background:var(--k-bg);padding:12px 14px 14px}
.km-mcard.out{background:var(--k-bg2)}
.km-mcard>header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:start}
.km-mc-who{display:flex;flex-direction:column;gap:1px;min-width:0}
.km-mc-who b{font-size:13.5px;color:var(--k-ink)}
.km-mc-id{font-size:11.5px;color:var(--k-dim)}
.km-mc-to{font-size:11.5px;color:var(--k-ink2)}
.km-mcard time{font-size:11px;color:var(--k-dim);white-space:nowrap}
.km-mc-body{margin:10px 0 0 46px;font-size:13.5px;line-height:1.65;color:var(--k-ink);overflow-wrap:anywhere}
.km-matt{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 0 46px}
.km-afile{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:8px;border:1px solid var(--k-line);background:var(--k-bg2);color:var(--k-ink2);font-size:12px}
button.km-afile{cursor:pointer}
button.km-afile:hover{border-color:var(--k-acc);color:var(--k-acc)}
.km-mfoot{display:flex;flex-wrap:wrap;gap:6px;padding-top:4px}
.km-mfoot button{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 12px;border-radius:8px;font-size:12.5px;margin:0}
.km-mfoot .km-march{margin-left:auto}
.km-mempty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:48px 20px;color:var(--k-dim);font-size:13px;text-align:center}
.km-mempty p{margin:0}
.km-mempty-r{height:100%}
.km-mempty-r .primary{height:30px;padding:0 14px;border-radius:8px;font-size:12.5px;margin:0}
/* a narrow place (the chat window of 宇宙界面, a phone): the list, or the mail you opened */
@container (max-width: 700px){
  .km-mail{grid-template-columns:minmax(0,1fr)}
  .km-mlist{border-right:0}
  .km-mail.reading .km-mlist,.km-mail:not(.reading) .km-mread{display:none}
  .km-mback{display:inline-flex!important}
  .km-mread-in{padding:14px 16px 20px}
  .km-mc-body,.km-matt{margin-left:0}
}
/* the mailbox switcher */
.km-mb-menu{width:260px;max-height:min(420px,70vh);overflow:auto}
.km-mb-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;width:100%;padding:6px 8px;border:0;border-radius:8px;background:none;text-align:left;color:var(--k-ink);cursor:pointer}
.km-mb-row:hover{background:var(--k-hover)}
.km-mb-row.on{background:rgba(var(--k-acc-rgb),.1)}
.km-mb-row span{display:flex;flex-direction:column;min-width:0}
.km-mb-row b{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-mb-row small{font-size:11.5px;color:var(--k-dim)}
.km-mb-n{font-style:normal;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--k-acc);color:var(--k-on-acc);font-size:10.5px;font-weight:650;display:grid;place-items:center}
/* entries: 私信 sidebar and the title bar */
.km-mail-side{position:relative}
.km-side-dot{width:7px;height:7px;border-radius:50%;background:var(--k-acc);margin-left:auto}
.km-mail-tb{position:relative}
.km-mail-tb.on{color:var(--k-acc)}
.km-tb-badge{position:absolute;right:-2px;top:-1px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--k-danger);color:#fff;font:650 10px/16px 'Inter Tight',sans-serif;font-style:normal;text-align:center;box-shadow:0 0 0 2px var(--k-bg)}
/* compose */
.modal.km-mail-dialog{width:min(640px,94vw)}
.km-mailform{display:flex;flex-direction:column;gap:10px}
.km-mailform .field-label{margin-top:0}
.km-mf-row{position:relative;display:flex;flex-direction:column;gap:5px}
.km-mf-2{display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;align-items:end}
.km-rcpt{display:flex;flex-wrap:wrap;align-items:center;gap:5px;min-height:38px;padding:4px 8px;border:1px solid var(--k-line);border-radius:8px;background:var(--k-bg);cursor:text}
.km-rcpt:focus-within{border-color:var(--k-acc);box-shadow:0 0 0 3px rgba(var(--k-acc-rgb),.12)}
.km-rcpt-in{flex:1;min-width:120px;border:0;outline:0;background:none;color:var(--k-ink);font-size:13px;height:28px}
.km-rc{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 4px 0 3px;border-radius:999px;background:rgba(var(--k-acc-rgb),.09);color:var(--k-ink);font-size:12.5px}
.km-rc-x{width:18px;height:18px;border:0;border-radius:50%;background:none;color:var(--k-dim);cursor:pointer;font-size:14px;line-height:1;padding:0}
.km-rc-x:hover{background:var(--k-hover);color:var(--k-ink)}
.km-sugg{position:absolute;left:0;right:0;top:100%;z-index:5;margin-top:4px;padding:4px;border:1px solid var(--k-line);border-radius:10px;background:var(--k-bg);box-shadow:0 14px 34px rgba(var(--k-sh),.16);max-height:280px;overflow:auto}
.km-sg{display:flex;align-items:center;gap:9px;width:100%;padding:6px 8px;border:0;border-radius:7px;background:none;text-align:left;color:var(--k-ink);cursor:pointer}
.km-sg.on,.km-sg:hover{background:var(--k-hover)}
.km-sg span{display:flex;flex-direction:column;min-width:0}
.km-sg b{font-size:13px;font-weight:600}
.km-sg small{font-size:11.5px;color:var(--k-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-seg{display:inline-flex;padding:3px;border-radius:9px;background:var(--k-hover);gap:2px}
.km-seg label{display:inline-flex;align-items:center;height:30px;padding:0 14px;border-radius:7px;font-size:12.5px;color:var(--k-ink2);cursor:pointer;white-space:nowrap}
.km-seg label.on{background:var(--k-bg);color:var(--k-ink);font-weight:650;box-shadow:0 1px 3px rgba(var(--k-sh),.12)}
.km-seg input{position:absolute;opacity:0;pointer-events:none}
.km-att-list{display:flex;flex-wrap:wrap;gap:6px}
.km-att-opt{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px;border:1px solid var(--k-line);border-radius:8px;font-size:12px;color:var(--k-ink2);cursor:pointer}
.km-att-opt span{display:inline-flex;align-items:center;gap:5px}
.km-att-opt:has(input:checked){border-color:var(--k-acc);color:var(--k-acc);background:rgba(var(--k-acc-rgb),.06)}
.km-att-none{margin:0}
.km-mailform .footer-actions{display:flex;align-items:center;gap:10px}
.km-mf-hint{font-size:12px;color:var(--k-dim);margin-right:auto}
.km-mail-head .toolbar>:not(.km-mail-compose){display:none!important}   /* the core's search and room menu are for chats */
body.km-u .km-mail-head h1,body.km-u .km-mh-note,body.km-u .km-mh-ic{display:none}   /* the chat window's own title says 邮箱 */
@media (max-width:760px){.km-mh-note{display:none}.km-mail-compose span{display:none}.km-mail-compose{padding:0 9px}}
.km-mail-head [data-action="lc-search"],.km-mail-head [data-action="lc-room-menu"],.km-mail-head .searchbox{display:none!important}

/* ==== src/universe/universe.css ==== */
/* KMind 宇宙交互 V17 · the universe view: light and technical — hairlines, glass, small mono captions.
   Colours come from src/kmind/tokens.css (白昼 / 夜间). Windows: .kmw (win.js) · the universe: #kmu (u5.js). */
body.km-u{overflow:hidden}
body.km-u #app{display:none}
#kmu{position:fixed;inset:0;z-index:1;overflow:hidden;font-family:var(--font);color:var(--k-ink);background:var(--k-wbg,var(--k-ubg));user-select:none;-webkit-user-select:none}   /* hall-33852 · --k-wbg: the world's own sky when the system skin is another pack than the panel skin (src/skins/skins.js markWorld) */
#kmu[hidden]{display:none}
#kmu-gl,#kmu-ov{position:absolute;inset:0;display:block;width:100%;height:100%}
#kmu-ov{z-index:1;cursor:grab;touch-action:none}
#kmu-ov.turning{cursor:grabbing}
#kmu-fade{position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(to bottom,rgba(var(--k-edge-rgb),.92) 0,rgba(var(--k-edge-rgb),.6) 60px,rgba(var(--k-edge-rgb),0) 128px),linear-gradient(to top,rgba(var(--k-edge-rgb),.7) 0,rgba(var(--k-edge-rgb),0) 84px)}
body.kmu-phone #kmu-fade{background:linear-gradient(to bottom,rgba(var(--k-edge-rgb),.92) 0,rgba(var(--k-edge-rgb),0) 96px)}
#kmu-hits{position:absolute;inset:0;z-index:2;pointer-events:none}
#kmu-veil{position:absolute;inset:0;z-index:3;background:var(--k-bg);pointer-events:none;display:none}
.km-u .km-strip,.km-u .mobile-nav{display:none!important}
.km-u .toast{z-index:3000;bottom:96px}
#kmu button{font-family:inherit}
body.kmu-dragging,body.kmu-dragging *{cursor:grabbing!important;user-select:none}
body.kmw-dragging,body.kmw-resizing{user-select:none}
body.kmw-dragging *{cursor:grabbing!important}

/* ---- invisible buttons over what the overlay draws (keyboard and screen readers reach every planet) ---- */
.kmu-hit{position:absolute;left:0;top:0;padding:0;border:0;background:none;pointer-events:auto;cursor:pointer;border-radius:50%}
.kmu-hit-agent{cursor:grab;touch-action:none}
.kmu-hit-cont,.kmu-hit-tpl,.kmu-hit-topics,.kmu-hit-hub{border-radius:12px}
.kmu-hit:focus{outline:none}
.kmu-hit:focus-visible{outline:1.5px solid var(--k-acc);outline-offset:3px}
.kmu-hit-orbit{border-radius:999px;background:transparent;transition:background .15s} /* V7: the whole orbit name opens its menu (colour, new planet, rename); the canvas draws the name */
.kmu-hit-orbit:hover,.kmu-hit-orbit:focus-visible{background:rgba(var(--k-acc-rgb),.07)}
.kmu-hit-orbit:focus-visible{outline:1.5px solid var(--k-acc);outline-offset:1px}

/* ---- the top bar: a quiet heads-up line ---- */
#kmu-top{position:absolute;top:0;left:0;right:0;height:44px;display:flex;align-items:center;gap:10px;padding:0 12px;z-index:10;pointer-events:none}
#kmu-top>*{pointer-events:auto}
.kmu-brand{display:flex;align-items:center;gap:7px;color:var(--k-acc);flex:none}
.kmu-brand .km-mark{width:28px;height:16px}
.kmu-brand b{font-size:14px;font-weight:700;letter-spacing:.06em;color:var(--k-ink)}
#kmu-switch{display:flex;align-items:center;gap:8px;height:32px;padding:0 10px 0 4px;border-radius:10px;border:1px solid var(--k-line);background:rgba(var(--k-bg-rgb),.66);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);cursor:pointer;color:var(--k-ink);min-width:0;max-width:280px;margin-left:6px}
#kmu-switch:hover{border-color:var(--k-acc)}
.kmu-sw-mark,.kmu-uni-mark{width:24px;height:24px;border-radius:7px;background:var(--k-acc);color:var(--k-on-acc);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex:none}
.kmu-sw-name{font-size:13.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Hikos #20209 ③ · 母星 / 合作宇宙 side by side at the top (the same pair as 面板视图's left column); the lit one is where you are */
.kmu-realms{display:inline-flex;align-items:center;gap:4px;min-width:0;flex:none;max-width:min(52vw,520px)}
#kmu-switch.on{border-color:rgba(var(--k-acc-rgb),.55);box-shadow:inset 0 -2px 0 var(--k-acc)}
#kmu-switch.on .kmu-sw-name{color:var(--k-acc)}
.kmu-realms #kmu-switch{margin-left:0}
/* Hikos #20209 ①：iOS WebKit zooms the page in when a field under 16px takes focus (and does not zoom back out): after the first message the whole
   universe sits enlarged and soft. On a touch screen the chat window's fields are 16px, which is what keeps the viewport still. */
@media (hover:none) and (pointer:coarse){.kmw-chat .composer textarea,.kmw-chat .composer input,.kmw-chat input.field,.kmw-chat textarea.field{font-size:16px}}
.kmu-caret{width:11px;height:11px;fill:none;stroke:var(--k-mute);stroke-width:1.6;flex:none}
.kmu-crumbs{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--k-dim);min-width:0;overflow:hidden;white-space:nowrap;margin-left:6px}
.kmu-crumbs span{overflow:hidden;text-overflow:ellipsis}
.kmu-crumbs .cur{color:var(--k-ink);font-weight:600}
.kmu-crumbs i{font-style:normal;opacity:.5;font-family:"JetBrains Mono",monospace}
.kmu-back{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 10px;border-radius:999px;border:1px solid var(--k-acc-line,var(--k-line));background:rgba(var(--k-bg-rgb),.6);color:var(--k-acc);font-size:12px;font-weight:600;cursor:pointer;flex:none}
.kmu-back:hover{background:var(--k-acc);color:var(--k-on-acc);border-color:var(--k-acc)}
.kmu-tright{margin-left:auto;display:flex;align-items:center;gap:4px;flex:none}
.kmu-tb{width:30px;height:30px;border-radius:9px;border:1px solid transparent;background:transparent;color:var(--k-ink2);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;position:relative;flex:none}
.kmu-tb:hover{border-color:var(--k-line);background:rgba(var(--k-bg-rgb),.7)}
.kmu-tb .lc-count,.kmu-tb .inbox-count{position:absolute;top:-4px;right:-4px}
#kmu-umenu{border-color:var(--k-line);background:rgba(var(--k-bg-rgb),.66);height:32px;width:32px;border-radius:10px}
.kmu-me{border:0;background:none;padding:0 2px;cursor:pointer;display:inline-flex;border-radius:50%}

/* ---- the planet bar: what this place is and what you can do here ---- */
.kmu-bar{position:absolute;top:48px;left:12px;z-index:9;display:flex;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;align-items:center;gap:6px;padding:6px 8px 6px 12px;border-radius:12px;background:rgba(var(--k-bg-rgb),.7);border:1px solid var(--k-line);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);font-size:12px;min-width:0}
.kmu-bar[hidden]{display:none}
.kmu-bar::-webkit-scrollbar{display:none}
.kmu-bar.tight .kmu-meta{display:none}
.kmu-bar>*{flex:none}
.kmu-bar>b{font-size:13.5px;font-weight:700;color:var(--k-ink);white-space:nowrap}
.kmu-meta{color:var(--k-mute);white-space:nowrap;margin-right:4px;overflow:hidden;text-overflow:ellipsis;min-width:0}
.kmu-pill{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 10px;border-radius:999px;border:1px solid var(--k-line);background:transparent;color:var(--k-ink2);font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap}
.kmu-pill:hover{border-color:var(--k-acc);color:var(--k-acc)}
.kmu-pill.kmu-primary{background:var(--k-acc);border-color:var(--k-acc);color:var(--k-on-acc)}
.kmu-pill.kmu-primary:hover{background:var(--k-acc2);color:var(--k-on-acc)}

/* ---- popovers ---- */
.kmu-pop{position:absolute;top:44px;left:140px;width:360px;max-width:calc(100vw - 20px);max-height:calc(100vh - 140px);overflow:auto;background:var(--k-bg);border:1px solid var(--k-line);border-radius:12px;box-shadow:0 22px 60px rgba(var(--k-sh),.2);padding:6px;z-index:1200}
.kmu-pop[hidden]{display:none}
.kmu-pop-h{font-size:10px;font-weight:600;letter-spacing:.14em;color:var(--k-dim);padding:8px 8px 4px;font-family:"JetBrains Mono",monospace}
.kmu-uni{display:grid;grid-template-columns:26px minmax(0,1fr) auto;gap:2px 10px;align-items:center;width:100%;text-align:left;padding:7px 8px;border-radius:9px;border:0;background:none;cursor:pointer;color:var(--k-ink);position:relative}
.kmu-uni:hover{background:var(--k-hover)}
.kmu-uni.cur{background:var(--k-sel)}
.kmu-uni>span:nth-child(2){display:flex;flex-direction:column;min-width:0}
.kmu-uni b{font-size:13px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmu-uni small{font-size:9.5px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:.08em;font-family:"JetBrains Mono",monospace}
.kmu-uni em{font-style:normal;font-size:11px;color:var(--k-mute);white-space:nowrap}
.kmu-uni>.kmu-badge{position:absolute;left:26px;top:2px}
.kmu-inv .kmu-uni-mark{background:transparent;color:var(--k-acc);border:1.5px dashed var(--k-acc)}
.kmu-inv em{color:var(--k-amber);font-weight:650}
.kmu-pop-f{display:flex;gap:6px;padding:8px 4px 2px;border-top:1px solid var(--k-line2);margin-top:6px}
.kmu-pop-f button,.kmu-menu>button{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--k-line);background:transparent;border-radius:8px;padding:6px 10px;font-size:12px;color:var(--k-ink2);cursor:pointer}
.kmu-pop-f button:hover,.kmu-menu>button:hover{border-color:var(--k-acc);color:var(--k-acc)}
.kmu-menu{width:auto;min-width:200px;padding:5px;display:flex;flex-direction:column;gap:2px;top:0;left:0;position:fixed}
.kmu-menu>button{width:100%;border-color:transparent}
.kmu-menu-op{padding:7px 6px 9px;margin-bottom:3px;border-bottom:1px solid var(--k-line)} /* V7: the orbit's colour picker, at the top of its menu */
.kmu-menu-op .km-op-row{border-top:0;padding-top:0}
.kmu-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--k-acc);color:var(--k-on-acc);font-size:10px;font-weight:700;font-style:normal;line-height:1;font-family:"JetBrains Mono",monospace}

/* ---- the dock: your agents ---- */
#kmu-dock{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:4px;padding:6px 8px;border-radius:16px;background:rgba(var(--k-bg-rgb),.74);border:1px solid var(--k-line);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 12px 34px rgba(var(--k-sh),.12);z-index:900;max-width:calc(100vw - 24px);transition:left .25s,top .25s}
#kmu-dock[data-pos="top"]{bottom:auto;top:48px}
#kmu-dock[data-pos="left"],#kmu-dock[data-pos="right"]{flex-direction:column;left:10px;right:auto;top:50%;bottom:auto;transform:translateY(-50%);max-width:none;max-height:calc(100vh - 72px);padding:10px 6px}
#kmu-dock[data-pos="right"]{left:auto;right:10px}
/* 任务 81afb55c（道哥 iPad 截图）：头像段是停靠栏里唯一能收缩的一段（其余钮都是 flex:none）。以前 wrap 也是 flex:none，停靠栏的 max-width（region() 按聊天窗左边的天区设）
   只夹得住盒子、夹不住内容，iPad 横屏（1210 宽、聊天窗 420）下 私信 / 站内信 / 工作台 / 好友 从盒子右侧溢出、压在聊天窗输入框上。现在放不下时头像段先缩（照旧滚动、带箭头），
   ≥ 3 个智能体（u5.js dock() 打 .kmu-many，不靠 :has()）时保底 110px（两个半头像，与手机模式 cosmos.css 一致；1–2 个时不垫空）；缩到保底仍放不下由 u5.js region() 改成横跨整宽、聊天窗让位。 */
.kmu-dock-agents-wrap{display:flex;align-items:center;min-width:0;min-height:0;position:relative;flex:0 1 auto}
#kmu-dock[data-pos="left"] .kmu-dock-agents-wrap,#kmu-dock[data-pos="right"] .kmu-dock-agents-wrap{flex-direction:column}
.kmu-dock-agents{display:flex;gap:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;min-width:0}
.kmu-dock-agents.kmu-many{min-width:110px}
#kmu-dock[data-pos="left"] .kmu-dock-agents,#kmu-dock[data-pos="right"] .kmu-dock-agents{flex-direction:column;overflow-y:auto;overflow-x:hidden;min-height:0}
#kmu-dock[data-pos="left"] .kmu-dock-agents.kmu-many,#kmu-dock[data-pos="right"] .kmu-dock-agents.kmu-many{min-width:0;min-height:110px}
.kmu-dock-agents::-webkit-scrollbar{display:none}
.kmu-dock-agent{position:relative;display:flex;flex-direction:column;align-items:center;gap:3px;width:52px;flex:none;padding:4px 2px 2px;border:0;border-radius:10px;background:none;cursor:grab;color:var(--k-ink);touch-action:none}
.kmu-dock-agent:hover{background:var(--k-hover)}
/* 追加①（任务 9a0332ca）：组员发信时底栏头像亮一下，与宇宙里的光波同拍 */
.kmu-dock-agent.kmu-pulse{animation:kmu-pulse 1.4s ease-out}
@keyframes kmu-pulse{0%{box-shadow:0 0 0 0 rgba(var(--k-acc-rgb),.55)}60%{box-shadow:0 0 0 9px rgba(var(--k-acc-rgb),0)}100%{box-shadow:0 0 0 0 rgba(var(--k-acc-rgb),0)}}
.kmu-dock-agent>span:not(.km-avbox){font-size:10.5px;font-weight:550;max-width:50px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--k-ink2)}
.kmu-dock-agent .kmu-badge{position:absolute;top:0;right:4px}
.kmu-dock-add{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;border:1px dashed var(--k-acc-line,var(--k-line));background:transparent;color:var(--k-acc);cursor:pointer;flex:none;margin:0 2px}
.kmu-dock-add:hover{background:var(--k-acc);color:var(--k-on-acc);border-style:solid}
.kmu-dock-sep{width:1px;height:var(--kmu-sep-len,32px);background:var(--k-line);flex:none;margin:0 2px}
#kmu-dock[data-pos="left"] .kmu-dock-sep,#kmu-dock[data-pos="right"] .kmu-dock-sep{width:var(--kmu-sep-len,32px);height:1px;margin:2px 0}
.kmu-dock-btn{position:relative;display:flex;flex-direction:column;align-items:center;gap:3px;width:46px;padding:4px 2px 2px;border:0;border-radius:10px;background:none;color:var(--k-ink2);cursor:pointer;flex:none;font-size:10.5px;font-weight:550}
.kmu-dock-btn:hover{background:var(--k-hover);color:var(--k-acc)}
#kmu-dm-btn .km-mark{width:26px;height:17px;flex:none}
body.kmu-phone #kmu-dm-btn .km-mark{width:24px;height:15px}
body.kmu-phone #kmu-dock [data-dock-item="work"]:not([data-action]){display:none}
.kmu-dot{position:absolute;top:3px;right:9px;width:7px;height:7px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 0 2px var(--k-bg)}
.kmu-dot[hidden]{display:none}

/* ---- drag ghost, hint ---- */
#kmu-ghost{position:fixed;left:0;top:0;margin:-20px 0 0 -20px;display:flex;align-items:center;gap:7px;padding:3px 12px 3px 3px;border-radius:999px;background:var(--k-bg);border:1px solid var(--k-acc);box-shadow:0 10px 26px rgba(var(--k-sh),.2);font-size:12.5px;font-weight:650;color:var(--k-ink);pointer-events:none;z-index:2000;white-space:nowrap}
#kmu-ghost[hidden],#kmu-hint[hidden]{display:none}
.kmu-gh-planet{width:30px;height:30px;border-radius:50%;background:var(--k-sel);color:var(--k-acc);display:flex;align-items:center;justify-content:center;border:1px solid var(--k-acc)}
#kmu-hint{position:absolute;top:98px;left:50%;transform:translateX(-50%);padding:5px 14px;border-radius:999px;background:var(--k-hint-bg);color:var(--k-hint-ink);font-size:12px;font-weight:600;z-index:1500;pointer-events:none;white-space:nowrap}

/* ---- windows: hairline glass ---- */
.kmw{position:absolute;display:flex;flex-direction:column;background:var(--k-bg);border:1px solid var(--k-line);border-radius:12px;box-shadow:0 14px 40px rgba(var(--k-sh),.12),0 1px 3px rgba(var(--k-sh),.06);overflow:hidden;min-width:0;z-index:20}
.kmw[hidden]{display:none}
.kmw.kmw-top{box-shadow:0 20px 54px rgba(var(--k-sh),.18),0 1px 4px rgba(var(--k-sh),.08)}
.kmw-head{flex:none;height:36px;display:flex;align-items:center;gap:8px;padding:0 4px 0 12px;border-bottom:1px solid var(--k-line2);background:var(--k-head);cursor:grab;user-select:none;touch-action:none}
.kmw-active .kmw-head{cursor:grabbing}
.kmw-ic{display:flex;color:var(--k-acc);flex:none}
.kmw-ic .km-mark{width:20px;height:11.5px}
.kmw-title{flex:1;min-width:0;display:flex;align-items:baseline;gap:8px;overflow:hidden;white-space:nowrap}
.kmw-title b{font-size:12.5px;font-weight:650;color:var(--k-ink);overflow:hidden;text-overflow:ellipsis;flex:none;max-width:70%}
.kmw-title small{font-size:10.5px;color:var(--k-dim);overflow:hidden;text-overflow:ellipsis;min-width:0}
.kmw-tools{display:flex;gap:2px}
.kmw-btn{width:26px;height:26px;border-radius:7px;border:0;background:none;color:var(--k-mute);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex:none}
.kmw-btn:hover{background:var(--k-hover);color:var(--k-acc)}
.kmw-btn svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.kmw-body{flex:1;min-height:0;position:relative;overflow:auto;overscroll-behavior:contain;user-select:text;-webkit-user-select:text}
.kmw-chat .kmw-body{overflow:hidden;display:flex;user-select:auto}
.kmw-chat .workspace{flex:1;min-width:0;min-height:0;height:100%;border-top:0}
.kmw-collapsed .kmw-body,.kmw-collapsed .kmw-rz{display:none}
.kmw-collapsed .kmw-head{border-bottom:0}
.kmw-rz{position:absolute;z-index:6}
.kmw-rz-n{top:-3px;left:12px;right:12px;height:8px;cursor:ns-resize}
.kmw-rz-s{bottom:-3px;left:12px;right:12px;height:8px;cursor:ns-resize}
.kmw-rz-e{right:-3px;top:12px;bottom:12px;width:8px;cursor:ew-resize}
.kmw-rz-w{left:-3px;top:12px;bottom:12px;width:8px;cursor:ew-resize}
.kmw-rz-ne,.kmw-rz-nw,.kmw-rz-se,.kmw-rz-sw{width:16px;height:16px}
.kmw-rz-ne{top:-3px;right:-3px;cursor:nesw-resize}.kmw-rz-sw{bottom:-3px;left:-3px;cursor:nesw-resize}
.kmw-rz-nw{top:-3px;left:-3px;cursor:nwse-resize}.kmw-rz-se{bottom:-3px;right:-3px;cursor:nwse-resize}
.kmw-rz-se::after{content:'';position:absolute;right:6px;bottom:6px;width:6px;height:6px;border-right:1.5px solid var(--k-line);border-bottom:1.5px solid var(--k-line);border-radius:0 0 2px 0}

/* ---- card contents ---- */
.kmu-card{padding:13px;display:flex;flex-direction:column;gap:9px;color:var(--k-ink);min-width:0}
.kmu-ag-head{display:flex;gap:12px;align-items:center;min-width:0}
.kmu-ag-head>div{min-width:0}
.kmu-card h3{margin:0;font-size:16px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmu-ag-head p{margin:2px 0 0;font-size:11px;color:var(--k-mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmu-topic{margin:0;font-size:12.5px;color:var(--k-ink3);line-height:1.5}
.kmu-sec{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10px;font-weight:600;letter-spacing:.12em;color:var(--k-dim);border-top:1px solid var(--k-line2);padding-top:9px;font-family:"JetBrains Mono","Plex SC",monospace}
.kmu-link{display:inline-flex;align-items:center;gap:4px;border:0;background:none;color:var(--k-acc);font-size:11.5px;font-weight:600;cursor:pointer;padding:2px 0;letter-spacing:0;white-space:nowrap;font-family:var(--font)}
.kmu-link:hover{text-decoration:underline}
.kmu-empty{margin:0;font-size:12px;color:var(--k-dim);line-height:1.5}
.kmu-manage{display:flex;flex-wrap:wrap;gap:4px 14px;border-top:1px solid var(--k-line2);padding-top:9px}
.kmu-actions{display:flex;flex-wrap:wrap;gap:6px}
.kmu-btn{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 11px;border-radius:8px;border:1px solid var(--k-line);background:transparent;color:var(--k-ink2);font-size:12px;font-weight:600;cursor:pointer;position:relative}
.kmu-btn:hover{border-color:var(--k-acc);color:var(--k-acc)}
.kmu-btn.kmu-primary{background:var(--k-acc);border-color:var(--k-acc);color:var(--k-on-acc)}
.kmu-btn.kmu-primary:hover{background:var(--k-acc2);color:var(--k-on-acc)}
.kmu-btn .kmu-badge{background:var(--k-on-acc);color:var(--k-acc);margin-left:2px}
.kmu-stations{display:flex;flex-direction:column;gap:1px}
.kmu-st{display:flex;align-items:center;gap:6px}
.kmu-st-go{flex:1;display:flex;gap:9px;align-items:center;text-align:left;padding:5px 6px;border-radius:8px;border:0;background:none;cursor:pointer;color:var(--k-ink);min-width:0}
.kmu-st-go:hover{background:var(--k-hover)}
.kmu-st-go>span:last-child{display:flex;flex-direction:column;min-width:0}
.kmu-st-go b{font-size:12.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmu-st-go small{font-size:10.5px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmu-st-k{font-style:normal;font-size:10px;font-weight:700;padding:2px 6px;border-radius:5px;background:var(--k-sel);color:var(--k-acc);flex:none}
.kmu-dms{gap:3px}
.kmu-dm{display:flex;gap:10px;align-items:center;width:100%;text-align:left;padding:6px 8px;border-radius:9px;border:0;background:none;cursor:pointer;color:var(--k-ink);position:relative;min-width:0}
.kmu-dm:hover{background:var(--k-hover)}
.kmu-dm.cur{background:var(--k-sel)}
.kmu-dm>span:nth-child(2){display:flex;flex-direction:column;min-width:0;flex:1}
.kmu-dm b{font-size:13px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmu-dm small{font-size:11px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmu-grp{width:32px;height:32px;border-radius:50%;background:var(--k-sel);color:var(--k-ink2);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex:none}

/* ---- a short chat window keeps the messages: the community bars step aside (they are in the universe menu) ---- */
@container kmchat (max-height:560px){.kmw-chat .lc-context-bar,.kmw-chat .access-strip{display:none}}
@container kmchat (max-height:400px){.kmw-chat .typing{display:none}}

/* ---- phone: the chat is a sheet, the dock sits under the top bar ---- */
body.kmu-phone #kmu-top{height:48px;padding:0 8px;gap:6px}
body.kmu-phone .kmu-brand b,body.kmu-phone .kmu-crumbs span,body.kmu-phone .kmu-crumbs i,body.kmu-phone .kmu-tb[data-action="settings"],body.kmu-phone .kmu-tb[data-action="inbox"]{display:none}
body.kmu-phone #kmu-switch{height:32px;max-width:40vw;margin-left:0}
body.kmu-phone .km-view-switch span,body.kmu-phone .kmu-back span{display:none}
body.kmu-phone #kmu-dock{top:50px;bottom:auto;left:6px;right:6px;transform:none;padding:3px 6px;border-radius:14px;justify-content:flex-start}
body.kmu-phone .kmu-dock-agent{width:42px}
body.kmu-phone .kmu-dock-agent>span:not(.km-avbox),body.kmu-phone .kmu-dock-btn span{display:none}
body.kmu-phone .kmu-dock-btn{width:36px}
body.kmu-phone .kmu-pop{left:6px;right:6px;width:auto;top:46px}
.kmw.kmw-sheet{position:fixed;left:0;right:0;bottom:0;top:auto;width:auto;height:42vh;border-radius:14px 14px 0 0;border-bottom:0}
.kmw.kmw-sheet .kmw-rz{display:none}
.kmw.kmw-sheet .kmw-head{cursor:pointer;position:relative}
.kmw.kmw-sheet .kmw-head::before{content:'';position:absolute;left:50%;top:4px;width:34px;height:3px;border-radius:2px;background:var(--k-line);transform:translateX(-50%)}
body.kmu-tall .kmw-chat.kmw-sheet{height:80vh}
.kmw-card.kmw-sheet{height:56vh;z-index:950!important}
.kmw-collapsed.kmw-sheet{height:42px}
body.kmu-phone .toast{bottom:auto;top:96px}
.kmu-dock-btn .kmu-badge{position:absolute;top:-3px;right:3px}
.kmu-dock-btn.on{color:var(--k-acc)}
.kmu-sw-role{margin-left:2px;padding:0 7px;border-radius:999px;font-size:11px;font-weight:650;line-height:19px;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.09);white-space:nowrap}
body.kmu-phone .kmu-sw-role{display:none}

/* V8 · 轨道 / 星群 switch */
.kmu-seg2{display:inline-flex;align-items:center;padding:2px;margin-right:6px;border-radius:9px;background:rgba(var(--k-bg-rgb),.7);border:1px solid var(--k-line);flex:none}
.kmu-seg2 button{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 9px;border:0;border-radius:7px;background:none;color:var(--k-ink2);font-size:12px;cursor:pointer;white-space:nowrap}
.kmu-seg2 button:hover{color:var(--k-acc)}
.kmu-seg2 button.on{background:var(--k-acc);color:var(--k-on-acc);font-weight:650}
body.kmu-phone .kmu-seg2 span{display:none}
body.kmu-phone .kmu-seg2 button{padding:0 6px}
/* V8 · 总览 (overwatch): the dock opens upward into who is doing what */
.kmu-dock-ow{position:relative;display:flex;flex-direction:column;align-items:center;gap:3px;width:46px;flex:none;padding:4px 2px 2px;border:0;border-radius:10px;background:none;color:var(--k-ink2);cursor:pointer;font-size:10.5px}
.kmu-dock-ow svg{transition:transform .2s}
.kmu-dock-ow:hover,.kmu-dock-ow.on{color:var(--k-acc);background:var(--k-hover)}
.kmu-dock-ow.on svg{transform:rotate(180deg)}
.kmu-dock-ow .kmu-badge{position:absolute;top:-3px;right:2px;background:var(--k-danger);color:#fff}
body.kmu-phone .kmu-dock-ow{width:36px}
body.kmu-phone .kmu-dock-ow span{display:none}
body.kmu-phone .kmu-dock-ow svg{transform:rotate(180deg)}
body.kmu-phone .kmu-dock-ow.on svg{transform:none}
#kmu-dock{cursor:pointer}
.kmu-sdot{position:absolute;left:8px;top:2px;width:9px;height:9px;border-radius:50%;box-shadow:0 0 0 2px var(--k-bg);pointer-events:none}
.kmu-sdot-needs{background:var(--k-danger)}
.kmu-sdot-working{background:var(--k-acc);animation:kmu-pulse 1.6s ease-in-out infinite}
.kmu-sdot-waiting{background:var(--k-amber)}
.kmu-sdot-active{background:var(--k-acc);opacity:.45}
@keyframes kmu-pulse{0%,100%{box-shadow:0 0 0 2px var(--k-bg),0 0 0 2px rgba(var(--k-acc-rgb),.5)}50%{box-shadow:0 0 0 2px var(--k-bg),0 0 0 6px rgba(var(--k-acc-rgb),0)}}
#kmu-ow{position:absolute;z-index:31;overflow:auto;scrollbar-width:thin;border-radius:16px;background:rgba(var(--k-bg-rgb),.9);border:1px solid var(--k-line);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);box-shadow:0 18px 50px rgba(var(--k-sh),.18)}
#kmu-ow[hidden]{display:none}
.km-ow{padding:12px 14px 14px;display:flex;flex-direction:column;gap:8px}
.km-ow-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.km-ow-head b{font-size:14px;color:var(--k-ink)}
.km-ow-en{font:10px/1 'JetBrains Mono',ui-monospace,monospace;letter-spacing:.14em;color:var(--k-dim)}
.km-ow-sum{margin-left:auto;display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--k-ink2)}
.km-ow-sum .km-ow-dot{position:static;margin-left:6px}
.km-ow-sec{display:flex;align-items:center;margin-top:4px;font-size:11px;font-weight:650;color:var(--k-dim);letter-spacing:.04em}
.km-ow-clear{font-size:12px;color:var(--k-dim);padding:6px 2px}
.km-ow-needs,.km-ow-rows{display:flex;flex-direction:column;gap:4px}
.km-ow-need,.km-ow-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:7px 8px;border-radius:11px}
.km-ow-need{background:var(--k-amber-bg);box-shadow:inset 0 0 0 1px var(--k-amber-line)}
.km-ow-row:hover{background:var(--k-hover)}
.km-ow-t{display:flex;flex-direction:column;gap:1px;min-width:0}
.km-ow-t b{display:flex;align-items:baseline;gap:6px;font-size:13px;color:var(--k-ink);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.km-ow-t b em{font-style:normal;font-weight:400;font-size:11.5px;color:var(--k-dim)}
.km-ow-t small{font-size:11.5px;color:var(--k-dim);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.km-ow-t small.km-ow-what{color:var(--k-ink2)}
.km-ow-s-working .km-ow-what{color:var(--k-acc)}
.km-ow-s-needs .km-ow-what{color:var(--k-danger)}
.km-ow-acts{display:flex;align-items:center;gap:4px}
.km-ow-acts button{height:28px;border-radius:8px;font-size:12px;padding:0 10px;cursor:pointer;white-space:nowrap}
.km-ow-ok{border:0;background:var(--k-acc);color:var(--k-on-acc);font-weight:650}
.km-ow-no{border:1px solid var(--k-line);background:var(--k-bg);color:var(--k-ink2)}
.km-ow-link{border:0;background:none;color:var(--k-acc)}
.km-ow-ic{position:relative;width:30px;padding:0!important;display:inline-grid;place-items:center;border:1px solid var(--k-line);background:var(--k-bg);color:var(--k-ink2)}
.km-ow-ic:hover,.km-ow-no:hover{border-color:var(--k-acc);color:var(--k-acc)}
.km-ow-ic i{position:absolute;top:-5px;right:-5px;min-width:15px;height:15px;padding:0 4px;border-radius:8px;background:var(--k-acc);color:var(--k-on-acc);font:650 9.5px/15px 'Inter Tight',sans-serif;font-style:normal}
.km-ow-who{position:relative;padding:0;border:0;background:none;cursor:pointer;display:flex}
.km-ow-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--k-line2,var(--k-line))}
.km-ow-who .km-ow-dot{position:absolute;left:-2px;top:-2px;width:10px;height:10px;box-shadow:0 0 0 2px var(--k-bg)}
.km-ow-s-needs .km-ow-dot{background:var(--k-danger)}
.km-ow-s-working .km-ow-dot,.km-d-working{background:var(--k-acc)}
.km-ow-s-waiting .km-ow-dot,.km-d-waiting{background:var(--k-amber)}
.km-ow-s-active .km-ow-dot{background:var(--k-acc);opacity:.45}
.km-ow-s-idle .km-ow-dot,.km-d-idle{background:var(--k-dim);opacity:.5}
.km-ow-av{display:flex}
/* V15 · 动态: several tasks at once, and an agent's list of tasks opened under its row */
.km-ow-row{cursor:pointer}
.km-ow-row.open{background:rgba(var(--k-acc-rgb),.06)}
.km-ow-bars{display:flex;flex-direction:column;gap:2px;margin:3px 0 2px}
.km-ow-bars .km-ow-bar{margin:0}
.km-ow-n{flex:none;font:650 10px/1 'JetBrains Mono',ui-monospace,monospace;font-style:normal;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.12);border-radius:999px;padding:2px 6px;align-self:center}
.km-ow-acts .km-ow-chev{width:26px;padding:0;border:0;background:none;color:var(--k-dim);display:inline-grid;place-items:center}
.km-ow-chev svg{transition:transform .2s}
.km-ow-row.open .km-ow-chev svg{transform:rotate(180deg)}
.km-ow-chev:hover{color:var(--k-acc)}
.km-ow-drop{margin:0 0 6px 46px;padding:4px 8px 2px;border-radius:14px;background:radial-gradient(140% 120% at 0% 0%,rgba(var(--k-acc-rgb),.07),rgba(var(--k-acc-rgb),.02) 70%);display:flex;flex-direction:column}
.km-ow-task{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:7px 2px}
.km-ow-task+.km-ow-task{background:linear-gradient(90deg,transparent,rgba(127,140,170,.18),transparent) top/100% 1px no-repeat}
.km-ow-tk{display:flex;color:var(--k-acc);align-self:flex-start;margin-top:2px}
.km-ow-tt{display:flex;flex-direction:column;gap:2px;min-width:0}
.km-ow-tt b{font-size:12.5px;font-weight:650;color:var(--k-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-ow-tt small{font-size:11px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-ow-tt .km-ow-ts{color:var(--k-acc)}
.km-ow-tt .km-ow-bar{margin:2px 0}
.km-ow-tw{display:flex;align-items:center;gap:6px}
.km-ow-with{display:inline-flex;align-items:center;gap:2px;margin-left:2px;color:var(--k-dim)}
.km-ow-with>span:first-of-type{margin-left:4px}
.km-ow-with em{font-style:normal;font-size:10.5px;margin-left:3px}
.km-ow-tside{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.km-ow-tp{font:600 11px/1 'JetBrains Mono',ui-monospace,monospace;font-style:normal;color:var(--k-ink2)}
.km-ow-tside .km-ow-link{height:24px;padding:0 6px;display:inline-flex;align-items:center;gap:4px;border:0;background:none;color:var(--k-acc);font-size:12px;cursor:pointer;border-radius:8px}
.km-ow-tside .km-ow-link:hover{background:rgba(var(--k-acc-rgb),.1)}
.km-ow-dfoot{display:flex;justify-content:flex-end;padding:0 0 4px}
.km-ow-dfoot .km-ow-link{height:26px;padding:0 8px;border:0;background:none;color:var(--k-acc);font-size:12px;cursor:pointer;border-radius:8px}
.km-ow-none{font-size:12px;color:var(--k-dim);padding:8px 2px}
body.kmu-phone #kmu-layout{display:none}
body:not(.kmu-phone) .kmu-layout-item{display:none!important}
/* V9 · the model behind an agent, on its card */
.kmu-ag-head .kmu-llm{margin-top:5px;font-size:11px;color:var(--k-ink2);font-family:"JetBrains Mono",monospace;letter-spacing:.02em}
/* V9 · the chat window keeps the core's channel tools (讨论串, 通知, 置顶, 通话) at every width; the member list is the planet's
   own people here, so its toggle (which would show nothing at this width) steps aside */
#kmu .kmw-chat .channelhead .toolbar .desktop-tool:not([hidden]){display:inline-flex!important}
@container kmchat (max-width:420px){#kmu .kmw-chat .channelhead .toolbar{gap:0}#kmu .kmw-chat .channelhead .toolbar .ib{width:28px;padding:4px}}
#kmu .kmw-chat .compose-tools .ib:not([hidden]){display:inline-flex}
/* V9 · the call you are in, in the dock */
.kmu-dock-call{display:flex;align-items:center;gap:2px;padding:2px 4px 2px 2px;margin:0 2px;border-radius:11px;background:rgba(var(--k-acc-rgb),.09);border:1px solid rgba(var(--k-acc-rgb),.25);flex:none}
.kmu-dock-call[hidden]{display:none}
.kmu-call-go{display:flex;align-items:center;gap:7px;max-width:150px;height:30px;padding:0 9px;border:0;border-radius:9px;background:none;color:var(--k-acc);font-size:12px;font-weight:650;cursor:pointer;min-width:0}
.kmu-call-go span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmu-call-go:hover{background:rgba(var(--k-acc-rgb),.1)}
.kmu-call-go.here{cursor:default}
.kmu-call-live{flex:none;width:8px;height:8px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 0 0 rgba(var(--k-acc-rgb),.5);animation:kmu-live 1.8s ease-out infinite}
@keyframes kmu-live{0%{box-shadow:0 0 0 0 rgba(var(--k-acc-rgb),.5)}100%{box-shadow:0 0 0 7px rgba(var(--k-acc-rgb),0)}}
@media (prefers-reduced-motion:reduce){.kmu-call-live{animation:none}}
.kmu-call-ib{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:0;border-radius:8px;background:none;color:var(--k-ink2);cursor:pointer}
.kmu-call-ib:hover{background:rgba(var(--k-acc-rgb),.1);color:var(--k-acc)}
.kmu-call-ib.off{color:var(--k-danger)}
.kmu-call-end{color:var(--k-danger)}
.kmu-call-end:hover{background:rgba(192,50,33,.1);color:var(--k-danger)}
body.kmu-phone .kmu-call-go span{display:none}
body.kmu-phone .kmu-call-go{padding:0 8px}
/* V9 · DM window: take a conversation off the list; call history and the group chats you left */
.kmu-dm-row{position:relative}
.kmu-dm-x{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:22px;height:22px;border:0;border-radius:6px;background:var(--k-bg);color:var(--k-dim);font-size:15px;line-height:1;cursor:pointer;opacity:0;transition:opacity .12s}
.kmu-dm-row:hover .kmu-dm-x,.kmu-dm-x:focus-visible{opacity:1}
.kmu-dm-x:hover{color:var(--k-ink);background:var(--k-hover)}
@media (hover:none){.kmu-dm-x{opacity:.6}}
.kmu-dm-more{display:flex;gap:14px;padding:12px 8px 4px;border-top:1px solid var(--k-line2);margin-top:10px}
.kmu-menu>button.kmu-menu-danger{color:var(--k-danger)}
.kmu-menu>button.kmu-menu-danger:hover{border-color:var(--k-danger);color:var(--k-danger)}
/* V9 · a voice room in the chat window: smaller tiles, controls that wrap */
#kmu .kmw-chat .lc-voice-main{padding:14px 12px 10px}
#kmu .kmw-chat .lc-voice-main .lc-call-status h3{font-size:15px;margin:0}
#kmu .kmw-chat .lc-voice-main .voice-tiles{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:12px 0}
#kmu .kmw-chat .lc-voice-main .voice-tile{width:86px;height:auto;min-height:0;padding:10px 4px 8px;gap:3px}
#kmu .kmw-chat .lc-voice-main .voice-tile .avatar{width:38px;height:38px;font-size:15px}
#kmu .kmw-chat .lc-voice-main .voice-tile b{font-size:12px}
#kmu .kmw-chat .lc-voice-main .voice-tile small{font-size:10px}
#kmu .kmw-chat .lc-call-controls{flex-wrap:wrap;justify-content:center;gap:6px}

/* =====================================================================================================================
   V10 · a lighter, cosmic heads-up display. Panels are thin glass with hairlines and corner ticks instead of white cards;
   buttons are ghosts that light up (a glow, not a fill); captions are small mono capitals. Same layout, less weight.
   ===================================================================================================================== */
#kmu{--hud-glass:rgba(var(--k-bg-rgb),.38);--hud-glass2:rgba(var(--k-bg-rgb),.62);--hud-line:rgba(var(--k-acc-rgb),.2);--hud-tick:rgba(var(--k-acc-rgb),.75);--hud-glow:rgba(var(--k-acc-rgb),.28);--hud-r:6px;
  --hud-ticks:linear-gradient(var(--hud-tick),var(--hud-tick)) 0 0/9px 1px no-repeat,linear-gradient(var(--hud-tick),var(--hud-tick)) 0 0/1px 9px no-repeat,
    linear-gradient(var(--hud-tick),var(--hud-tick)) 100% 0/9px 1px no-repeat,linear-gradient(var(--hud-tick),var(--hud-tick)) 100% 0/1px 9px no-repeat,
    linear-gradient(var(--hud-tick),var(--hud-tick)) 0 100%/9px 1px no-repeat,linear-gradient(var(--hud-tick),var(--hud-tick)) 0 100%/1px 9px no-repeat,
    linear-gradient(var(--hud-tick),var(--hud-tick)) 100% 100%/9px 1px no-repeat,linear-gradient(var(--hud-tick),var(--hud-tick)) 100% 100%/1px 9px no-repeat}
html[data-theme=night] #kmu{--hud-glass:rgba(6,10,18,.34);--hud-glass2:rgba(8,12,20,.66);--hud-line:rgba(120,170,255,.18);--hud-tick:rgba(140,190,255,.7);--hud-glow:rgba(59,130,255,.42)}
/* hall-33852 · 面板与星系底色不同（暗面板 + 亮星系，或反过来；html[data-world-base] 由 skins.js 标）：面板色的字直接压在反色的宇宙上看不清——
   宇宙层的 HUD 玻璃变实一些、顶栏垫一道面板色的渐变、dock 用实一点的玻璃；两层同底时这些都不生效 */
html[data-theme=night][data-world-base=day] #kmu,html[data-theme=day][data-world-base=night] #kmu{--hud-glass:rgba(var(--k-bg-rgb),.8);--hud-glass2:rgba(var(--k-bg-rgb),.92)}
html[data-theme=night][data-world-base=day] #kmu-top,html[data-theme=day][data-world-base=night] #kmu-top{background:linear-gradient(rgba(var(--k-bg-rgb),.94),rgba(var(--k-bg-rgb),.6) 72%,rgba(var(--k-bg-rgb),0))}
html[data-theme=night][data-world-base=day] #kmu-dock,html[data-theme=day][data-world-base=night] #kmu-dock{background:var(--hud-ticks),var(--hud-glass2)}
/* the frame of the view: four quiet brackets at the corners of the screen */
#kmu::after{content:"";position:absolute;inset:8px;z-index:4;pointer-events:none;opacity:.55;
  background:linear-gradient(var(--hud-tick),var(--hud-tick)) 0 0/18px 1px no-repeat,linear-gradient(var(--hud-tick),var(--hud-tick)) 0 0/1px 18px no-repeat,
    linear-gradient(var(--hud-tick),var(--hud-tick)) 100% 0/18px 1px no-repeat,linear-gradient(var(--hud-tick),var(--hud-tick)) 100% 0/1px 18px no-repeat,
    linear-gradient(var(--hud-tick),var(--hud-tick)) 0 100%/18px 1px no-repeat,linear-gradient(var(--hud-tick),var(--hud-tick)) 0 100%/1px 18px no-repeat,
    linear-gradient(var(--hud-tick),var(--hud-tick)) 100% 100%/18px 1px no-repeat,linear-gradient(var(--hud-tick),var(--hud-tick)) 100% 100%/1px 18px no-repeat}
body.kmu-phone #kmu::after{display:none}
#kmu-fade{opacity:.7}

/* top line: no cards, just hairlines */
#kmu-switch,#kmu-umenu{background:var(--hud-glass);border-color:var(--hud-line);border-radius:var(--hud-r)}
#kmu-switch:hover,#kmu-umenu:hover{border-color:var(--k-acc);box-shadow:0 0 14px var(--hud-glow)}
.kmu-sw-mark{border-radius:4px}
.kmu-tb{border-radius:var(--hud-r)}
.kmu-tb:hover{background:var(--hud-glass);border-color:var(--hud-line);color:var(--k-acc)}
.kmu-back{border-radius:var(--hud-r);background:var(--hud-glass);border-color:var(--hud-line);font-family:inherit}
.kmu-back:hover{background:rgba(var(--k-acc-rgb),.1);color:var(--k-acc);border-color:var(--k-acc);box-shadow:0 0 14px var(--hud-glow)}
.kmu-crumbs{font-family:"JetBrains Mono",var(--font);letter-spacing:.02em}
.kmu-seg2{background:var(--hud-glass);border-color:var(--hud-line);border-radius:var(--hud-r)}
.kmu-seg2 button{border-radius:4px}
.kmu-seg2 button.on{background:rgba(var(--k-acc-rgb),.14);color:var(--k-acc);box-shadow:inset 0 -1.5px 0 var(--k-acc)}
#kmu .km-view-switch{background:var(--hud-glass)!important;color:var(--k-acc)!important;border-color:rgba(var(--k-acc-rgb),.55)!important;border-radius:var(--hud-r)!important}
#kmu .km-view-switch:hover{background:rgba(var(--k-acc-rgb),.12)!important;border-color:var(--k-acc)!important;box-shadow:0 0 16px var(--hud-glow)}

/* the planet bar: a caption, a name, ghost buttons */
.kmu-bar{background:var(--hud-ticks),var(--hud-glass);border:1px solid var(--hud-line);border-radius:2px;box-shadow:none;gap:2px;padding:4px 6px 4px 10px;backdrop-filter:blur(12px) saturate(1.2);-webkit-backdrop-filter:blur(12px) saturate(1.2)}
.kmu-bar[data-cap]::before{content:attr(data-cap);font:500 9px/1 "JetBrains Mono",monospace;letter-spacing:.18em;color:var(--k-acc);opacity:.8;margin-right:8px;flex:none}
.kmu-bar>b{margin-right:4px}
.kmu-bar .kmu-meta{font-size:11px;margin-right:8px;padding-right:10px;border-right:1px solid var(--hud-line)}
.kmu-pill{border-color:transparent;border-radius:4px;background:transparent;height:26px;padding:0 8px;font-weight:550;transition:color .15s,border-color .15s,box-shadow .15s,background .15s}
.kmu-pill svg{opacity:.85}
.kmu-pill:hover{border-color:var(--hud-line);background:rgba(var(--k-acc-rgb),.06);color:var(--k-acc)}
.kmu-pill b{font:500 10.5px/1 "JetBrains Mono",monospace;color:var(--k-dim);margin-left:2px}
.kmu-pill.kmu-primary{background:rgba(var(--k-acc-rgb),.1);border-color:rgba(var(--k-acc-rgb),.6);color:var(--k-acc);box-shadow:0 0 12px var(--hud-glow)}
.kmu-pill.kmu-primary:hover{background:rgba(var(--k-acc-rgb),.2);color:var(--k-acc)}
html[data-theme=night] .kmu-pill.kmu-primary{color:#CFE0FF}
.kmu-pill.km-hub-knowledge{background-image:linear-gradient(90deg,transparent,rgba(var(--k-acc-rgb),.06))}
.kmu-bar-sep{width:1px;height:16px;background:var(--hud-line);margin:0 4px;flex:none}
.kmu-bar-more{width:28px;padding:0;justify-content:center}
.kmu-barpop{position:absolute;z-index:40;min-width:168px;padding:4px;border:1px solid var(--hud-line);border-radius:2px;background:var(--hud-ticks),var(--hud-glass2);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);display:flex;flex-direction:column}
.kmu-barpop[hidden]{display:none}
.kmu-barpop .kmu-pill{justify-content:flex-start;height:30px;width:100%}

/* the dock: glass and ticks, no card */
#kmu-dock{background:var(--hud-ticks),var(--hud-glass);border-color:var(--hud-line);border-radius:2px;box-shadow:none;backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2)}
.kmu-dock-agent,.kmu-dock-btn{border-radius:4px}
.kmu-dock-agent:hover,.kmu-dock-btn:hover{background:rgba(var(--k-acc-rgb),.07);box-shadow:inset 0 0 0 1px var(--hud-line)}
.kmu-dock-agent>span:not(.km-avbox),.kmu-dock-btn{font-size:10px}
.kmu-dock-add{border-radius:4px}
.kmu-dock-add:hover{background:rgba(var(--k-acc-rgb),.14);color:var(--k-acc);box-shadow:0 0 12px var(--hud-glow)}
.kmu-dock-sep{background:var(--hud-line)}

/* windows: thin glass with a caption line; text stays readable */
.kmw{background:var(--hud-ticks),rgba(var(--k-bg-rgb),.93);border-color:var(--hud-line);border-radius:3px;box-shadow:0 10px 30px rgba(var(--k-sh),.08)}   /* no backdrop blur: a large window over the live 3D sky would re-blur it every frame */
html[data-theme=night] .kmw{background:var(--hud-ticks),rgba(10,14,22,.92);box-shadow:0 10px 34px rgba(0,0,0,.4),0 0 0 1px rgba(59,130,255,.06)}
.kmw.kmw-top{box-shadow:0 14px 40px rgba(var(--k-sh),.12),0 0 18px rgba(var(--k-acc-rgb),.08)}
.kmw-head{background:transparent;border-bottom-color:var(--hud-line);height:34px}
.kmw-title b{letter-spacing:.01em}
.kmw-title small{font-family:"JetBrains Mono",monospace;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase}
.kmu-pop{background:var(--hud-ticks),var(--hud-glass2);border-color:var(--hud-line);border-radius:3px;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}

/* V10 · 总览 | 探索: two views of the sky, side by side at the top left */
.kmu-nav{display:inline-flex;align-items:center;gap:0;flex:none;margin-right:4px}
.kmu-nav .kmu-back{border-radius:0;margin:0}
.kmu-nav .kmu-back:first-child{border-radius:var(--hud-r) 0 0 var(--hud-r)}
.kmu-nav .kmu-back:last-child{border-radius:0 var(--hud-r) var(--hud-r) 0;margin-left:-1px}
.kmu-nav .kmu-back.on{background:rgba(var(--k-acc-rgb),.14);border-color:rgba(var(--k-acc-rgb),.6);color:var(--k-acc);box-shadow:inset 0 -1.5px 0 var(--k-acc);position:relative;z-index:1}
.kmu-nav .kmu-explore.on{box-shadow:inset 0 -1.5px 0 var(--k-acc),0 0 14px var(--hud-glow)}
/* the galaxy card */
.kmu-gal{display:flex;flex-direction:column;gap:10px;padding:12px 14px 14px}
.kmu-gal-h{display:flex;align-items:center;gap:10px}
.kmu-gal-h .kmu-uni-mark{width:34px;height:34px;font-size:16px;border-radius:50%;background:radial-gradient(circle at 50% 50%,var(--gc) 0 22%,transparent 70%),rgba(var(--k-acc-rgb),.08);color:var(--k-on-acc);box-shadow:0 0 0 1px var(--hud-line),0 0 18px color-mix(in srgb,var(--gc) 45%,transparent)}
.kmu-gal-h>span:last-child{display:flex;flex-direction:column;min-width:0}
.kmu-gal-h b{font-size:15px;font-weight:700;color:var(--k-ink)}
.kmu-gal-h small{font:500 9.5px/1.4 "JetBrains Mono",monospace;letter-spacing:.14em;color:var(--k-dim)}
.kmu-gal-tag{margin:0;font-size:12.5px;color:var(--k-ink2);line-height:1.5}
.kmu-gal-meta{display:grid;grid-template-columns:1.6fr 1fr 1fr;gap:0;margin:0;border:1px solid var(--hud-line);border-radius:3px}
.kmu-gal-meta>div{padding:7px 9px;border-left:1px solid var(--hud-line);min-width:0}
.kmu-gal-meta>div:first-child{border-left:0}
.kmu-gal-meta dt{font:500 9px/1.3 "JetBrains Mono",var(--font);letter-spacing:.08em;color:var(--k-dim)}
.kmu-gal-meta dd{margin:2px 0 0;font-size:12.5px;font-weight:600;color:var(--k-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmu-gal-planets{display:flex;flex-wrap:wrap;gap:4px}
.kmu-gal-planets span{font-size:11px;padding:2px 7px;border:1px solid var(--hud-line);border-radius:3px;color:var(--k-ink2)}
.kmu-gal-acts{display:flex;gap:8px}
.kmu-gal-go{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 14px;border-radius:4px;border:1px solid var(--k-acc);background:var(--k-acc);color:var(--k-on-acc);font-weight:650;font-size:13px;cursor:pointer}
.kmu-gal-go:hover{box-shadow:0 0 16px var(--hud-glow)}
.kmu-gal-note{margin:0;font-size:11px;color:var(--k-dim)}
body.kmu-phone .kmu-nav span{display:none}

/* V13 · what an agent carries, on its card in the universe view: quiet chips (plugins a touch brighter) */
.kmu-carry{display:flex;flex-wrap:wrap;gap:5px;padding:4px 0 6px}
.kmu-cy{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;line-height:1;padding:5px 9px 5px 7px;border-radius:999px;color:var(--k-ink2,inherit);background:rgba(var(--k-acc-rgb),.07)}
.kmu-cy svg{color:var(--k-acc);flex:none}
.kmu-cy.plug{background:rgba(var(--k-acc-rgb),.13)}
.kmu-cy.off{opacity:.5}
/* V13 · an orbit in your hand */
body.kmu-orbit-drag,body.kmu-orbit-drag *{cursor:grabbing!important}
/* V18 · 面板滑入 PANEL SLIDE: the panel view as a thick slab sliding over the universe (u5.js slide()). Only while it moves. */
html.km-slab body{perspective:1900px;perspective-origin:50% 46%;height:100dvh;width:100vw}
html.km-slab #app{position:fixed;left:0;top:0;width:100vw;z-index:30;background:var(--k-ubg);background-color:var(--k-bg2);transform-origin:0 0;will-change:transform;box-shadow:-34px 0 70px -18px var(--km-slab-cast),0 30px 80px -30px var(--km-slab-cast);backface-visibility:hidden}
html.km-slab body.km-u #app{display:grid!important}
html.km-slab #kmu{transform-origin:50% 50%;will-change:transform}
#km-slab-edge,#km-slab-dim{display:none;position:fixed;left:0;top:0;pointer-events:none}
html.km-slab #km-slab-edge{display:block;z-index:29;transform-origin:0 0;background:linear-gradient(90deg,var(--km-slab-e1),var(--km-slab-e2) 55%,var(--km-slab-e3));box-shadow:inset 1px 0 0 var(--km-slab-lip),inset 0 1px 0 var(--km-slab-lip)}
html.km-slab #km-slab-edge::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0 46px,var(--km-slab-seam) 46px 47px);opacity:.5}
html.km-slab #km-slab-dim{display:block;right:0;bottom:0;z-index:28;background:var(--km-slab-shade);opacity:0}
/* the slab's edge is made from the skin's own ground and accent, so every skin gets a matching one */
html[data-theme]{--km-slab-e1:color-mix(in srgb,rgb(var(--k-bg-rgb)) 82%,rgb(var(--k-acc-rgb)) 18%);--km-slab-e2:color-mix(in srgb,rgb(var(--k-bg-rgb)) 66%,rgb(var(--k-sh)) 34%);--km-slab-e3:color-mix(in srgb,rgb(var(--k-bg-rgb)) 44%,rgb(var(--k-sh)) 56%);
  --km-slab-lip:rgba(255,255,255,.9);--km-slab-seam:rgba(var(--k-acc-rgb),.18);--km-slab-cast:rgba(var(--k-sh),.42);--km-slab-shade:rgba(var(--k-sh),.5)}
html[data-theme=night]{--km-slab-e1:color-mix(in srgb,rgb(var(--k-bg-rgb)) 70%,rgb(var(--k-acc-rgb)) 30%);--km-slab-e2:color-mix(in srgb,rgb(var(--k-bg-rgb)) 94%,white 6%);--km-slab-e3:color-mix(in srgb,rgb(var(--k-bg-rgb)) 60%,black 40%);
  --km-slab-lip:rgba(var(--k-acc-rgb),.55);--km-slab-seam:rgba(var(--k-acc-rgb),.16);--km-slab-cast:rgba(0,0,0,.7);--km-slab-shade:rgba(0,0,0,.6)}
.kmu-uni.unread{position:relative}.kmu-uni.unread::before{content:"";position:absolute;left:0;top:50%;width:3px;height:8px;margin-top:-4px;border-radius:0 3px 3px 0;background:var(--k-ink,#fff)}   /* 任务 80d1b74f：未读 = 左侧短竖条（不再是灰点；任务 968e64e1 ③ 的 .kmu-badge-dot 撤掉） */

/* ==== src/universe/chatwin.css ==== */
/* generated by tools/build_chatwin.py from the core styles.css (layout only) — do not edit by hand */
.kmw-chat .kmw-body{container:kmchat/size}
@container kmchat (max-width:848px){.kmw-chat .members{display:none}.kmw-chat .channelhead .topic{display:none}.kmw-chat .searchbox input{width:140px}.kmw-chat .searchbox input:focus{width:175px}}
@container kmchat (max-width:620px){.kmw-chat .workspace{grid-column:2}.kmw-chat .mobile-nav{display:flex}.kmw-chat .channelhead{padding:0 9px;gap:5px}.kmw-chat .channelhead h1{font-size:14px}.kmw-chat .toolbar{gap:1px}.kmw-chat .toolbar>.ib:first-child,.kmw-chat .toolbar>.ib:nth-child(2),.kmw-chat .toolbar>.ib:nth-child(3){display:none}.kmw-chat .searchbox input{width:105px}.kmw-chat .searchbox input:focus{width:130px}.kmw-chat .server{width:38px;height:38px}.kmw-chat .server.active:before,.kmw-chat .server.unread:before{left:-11px}.kmw-chat .message{gap:10px;padding-left:13px;padding-right:12px}.kmw-chat .message>.avatar{width:32px;height:32px;font-size:13px}.kmw-chat .message-text{font-size:13px}.kmw-chat .channel-intro{padding:24px 17px 12px}.kmw-chat .channel-intro h2{font-size:23px}.kmw-chat .composer-wrap{padding:0 8px 4px}.kmw-chat .compose-tools .ib:not(:last-child){display:none}.kmw-chat .replyline:before{margin-left:-28px;width:18px;margin-right:8px}.kmw-chat .design-preview{gap:18px}.kmw-chat .preview-title{font-size:18px}.kmw-chat .preview-mark{width:48px;height:48px;font-size:29px}}
@container kmchat (max-width:878px){.kmw-chat .activity{width:220px}.kmw-chat .dm-profile{width:215px}.kmw-chat .thread-pane{width:370px;max-width:55%}.kmw-chat .friendtabs{gap:3px;font-size:11px}.kmw-chat .forum-top{padding:18px 15px 8px}.kmw-chat .forum-list{padding:6px 15px 20px}}
@container kmchat (max-width:678px){.kmw-chat .activity,.kmw-chat .dm-profile{display:none}.kmw-chat .thread-pane{position:absolute;right:0;top:49px;bottom:0;max-width:90%;width:450px;z-index:6}.kmw-chat .friendtabs{gap:2px;margin-left:0;padding-left:5px}.kmw-chat .friendtabs .tab{padding:4px 6px}.kmw-chat .forum-wrap.has-pane .forum-list.gallery{display:grid}.kmw-chat .channelhead .context-note{display:none}}
@container kmchat (max-width:620px){.kmw-chat .friendtabs{overflow:auto}.kmw-chat .friendtabs .tab{font-size:10px}.kmw-chat .friends-list{padding:15px}.kmw-chat .friend-row{gap:8px}.kmw-chat .channelhead .toolbar .ib{display:flex!important}.kmw-chat .channelhead .toolbar .desktop-tool{display:none!important}.kmw-chat .channelhead .friendtabs{flex:1}.kmw-chat .channelhead>.ico{display:none}.kmw-chat .channelhead .toolbar{margin-left:auto}.kmw-chat .forum-top{padding:15px 11px 8px}.kmw-chat .forum-list{padding:5px 11px 20px}.kmw-chat .forum-searchbar input{font-size:12px}.kmw-chat .forum-searchbar .primary{font-size:10px;padding:8px}.kmw-chat .forum-filters{gap:5px}.kmw-chat .thread-pane{max-width:100%;width:100%;left:0}.kmw-chat .thread-pane .compose-tools{display:flex}.kmw-chat .forum-list.gallery{grid-template-columns:1fr}.kmw-chat .feature-grid{grid-template-columns:1fr}.kmw-chat .local-persist{display:none}.kmw-chat .dm-item .close-dm{opacity:.6}.kmw-chat .voice-tile{width:128px;height:105px}.kmw-chat .media-panel{width:270px;right:10px}}
@container kmchat (max-width:620px){.kmw-chat .message>button>.avatar{width:32px;height:32px;font-size:13px}}
@container kmchat (max-width:778px){.kmw-chat .resource-grid{grid-template-columns:1fr 1fr}.kmw-chat .showcase-grid{grid-template-columns:1fr}.kmw-chat .member-directory{grid-template-columns:1fr}.kmw-chat .track-card{gap:13px}.kmw-chat .track-card .world-art{width:120px;height:120px;min-height:120px}.kmw-chat .track-content h3{font-size:21px}.kmw-chat .world-art{min-height:195px}}
@container kmchat (max-width:620px){.kmw-chat .channel-module-scroll{padding:13px!important}.kmw-chat .channel-view-tabs{padding:7px 12px;font-size:10px}.kmw-chat .resource-grid{grid-template-columns:1fr}.kmw-chat .resource-card{min-height:210px;padding:17px}.kmw-chat .welcome-cover{padding:22px}.kmw-chat .welcome-cover h2{font-size:24px}.kmw-chat .welcome-cover p{font-size:11px}.kmw-chat .community-principles{grid-template-columns:1fr;gap:12px}.kmw-chat .welcome-cover>span{font-size:40px;right:15px;bottom:20px}.kmw-chat .announcement-heading h2{font-size:21px}.kmw-chat .announcement-card{padding:17px}.kmw-chat .announcement-card h3{font-size:17px}.kmw-chat .announcement-card>p{font-size:12px}.kmw-chat .announcement-card footer{flex-wrap:wrap}.kmw-chat .announcement-card footer button{margin-left:0}.kmw-chat .showcase-grid{grid-template-columns:1fr}.kmw-chat .showcase-card .world-art{min-height:200px}.kmw-chat .issue-board{grid-template-columns:repeat(4,190px)}.kmw-chat .track-card{align-items:stretch;gap:12px;padding:11px;flex-direction:column}.kmw-chat .track-card .world-art{width:100%;height:auto;min-height:180px;aspect-ratio:1.5}.kmw-chat .track-content>div{justify-content:space-between}.kmw-chat .track-content h3{font-size:22px}.kmw-chat .track-content p{margin-bottom:13px}.kmw-chat .world-art{min-height:180px}.kmw-chat .module-bottom{font-size:9px;margin:0 11px 10px;gap:8px;flex-wrap:wrap}.kmw-chat .module-bottom .secondary{font-size:10px;padding:7px 10px}.kmw-chat .member-directory .member{padding:10px 0}.kmw-chat .profile-tabs button{font-size:9px;padding:9px 2px}.kmw-chat .profile-main .badgebar{padding-left:85px}.kmw-chat .profile-presence{font-size:9px}.kmw-chat .community-title{align-items:flex-start;gap:11px}.kmw-chat .community-title>span{width:44px;height:44px;font-size:21px;border-radius:10px;flex:none}.kmw-chat .community-title h2{font-size:21px}.kmw-chat .community-title p{font-size:10px}.kmw-chat .review-brief{margin:0 12px 16px;padding:14px}.kmw-chat .review-brief h3{font-size:15px}.kmw-chat .review-brief>div:last-child span{font-size:9px;padding:4px 6px}.kmw-chat .channel-intro-small{padding:18px 14px 14px}.kmw-chat .channel-intro-small h2{font-size:19px}.kmw-chat .post-card .world-art{min-height:170px;aspect-ratio:1.7}.kmw-chat .post-footer{flex-wrap:wrap;gap:6px}.kmw-chat .post-footer .post-count{margin-left:0}.kmw-chat .art-copy strong{font-size:clamp(18px,7cqw,30px)}.kmw-chat .art-eyebrow{font-size:7px;letter-spacing:1px;left:13px;top:12px}.kmw-chat .art-copy{left:14px;bottom:16px}.kmw-chat .art-copy small{font-size:8px}.kmw-chat .thread-pane .world-art{min-height:180px;aspect-ratio:1.5}.kmw-chat .voice-stage{padding:20px 12px}.kmw-chat .voice-stage>h2{font-size:16px}.kmw-chat .voice-tile{width:120px;height:125px}.kmw-chat .voice-tile small{font-size:8px}.kmw-chat .voice-stage .voice-tiles{gap:8px}}
@container kmchat (max-width:500px){.kmw-chat .social-banner{padding:10px}.kmw-chat .request-card{padding:12px;gap:8px}.kmw-chat .request-card .avatar{display:none}.kmw-chat .friend-row{flex-wrap:wrap}.kmw-chat .social-server{display:block}.kmw-chat .social-server label{display:block;margin:6px 0}}
@container kmchat (max-width:878px){.kmw-chat .topic-aside{width:205px;padding:18px 12px}.kmw-chat .topic-scroll{padding:24px 22px}.kmw-chat .topic-heading h1{font-size:23px}}
@container kmchat (max-width:678px){.kmw-chat .topic-aside{display:none}.kmw-chat .topic-heading h1{font-size:22px}.kmw-chat .topic-scroll{padding:22px}.kmw-chat .topic-toolbar>span{display:none}}
@container kmchat (max-width:500px){.kmw-chat .topic-toolbar{padding:9px 10px;gap:7px}.kmw-chat .topic-toolbar button{font-size:10px;padding:6px 8px}.kmw-chat .topic-toolbar>div{gap:5px}.kmw-chat .topic-scroll{padding:18px 12px}.kmw-chat .topic-heading h1{font-size:20px;line-height:1.5}.kmw-chat .topic-brief{margin-left:0;padding:14px;gap:14px}.kmw-chat .topic-brief p{font-size:12px}.kmw-chat .topic-main .message{padding:12px 0;gap:9px}.kmw-chat .topic-main .message-text{font-size:12px}.kmw-chat .topic-main .message>.avatar{width:29px;height:29px}.kmw-chat .topic-media{margin-left:0;padding:10px}.kmw-chat .topic-main .composer-wrap{padding:10px 10px 0}.kmw-chat .topic-sendbar{padding:0 10px 10px}.kmw-chat .topic-main .composer textarea{font-size:12px;min-height:42px}.kmw-chat .topic-reply-divider h2{font-size:12px}.kmw-chat .topic-reply-divider .outline{font-size:9px;padding:5px 7px}.kmw-chat .post-card h3{max-width:72%;font-size:15px}.kmw-chat .post-card:has(.topic-card-thumb)>.post-excerpt{max-width:72%}.kmw-chat .topic-card-thumb{width:62px;height:55px;right:12px;top:75px}.kmw-chat .topic-gallery-card h3{font-size:16px}.kmw-chat .topic-last-reply{white-space:normal;max-height:50px}.kmw-chat .topic-meta>span:last-child{flex-basis:100%;margin-top:4px}}
@container kmchat (max-width:500px){.kmw-chat .topic-heading h1{font-size:20px}.kmw-chat .topic-brief{margin-left:0;padding:12px}.kmw-chat .topic-context summary{font-size:10px}}
@container kmchat (max-width:500px){.kmw-chat .gallery-discussion-intro{align-items:flex-start;gap:9px}.kmw-chat .gallery-discussion-intro h2{font-size:15px}.kmw-chat .gallery-discussion-intro p{font-size:10px}.kmw-chat .gallery-discussion-intro button{white-space:nowrap;font-size:10px}}
@container kmchat (max-width:580px){.kmw-chat .access-overview{grid-template-columns:1fr 1fr}.kmw-chat .access-permission-grid,.kmw-chat .access-overwrite-grid{grid-template-columns:1fr}.kmw-chat .access-list-row{flex-wrap:wrap}.kmw-chat .access-list-row>span{min-width:120px}.kmw-chat .access-tabs{gap:1px}.kmw-chat .access-tabs button{font-size:10px;padding:6px 8px}.kmw-chat .access-strip{padding:7px 10px;gap:7px;font-size:9px;flex-wrap:wrap}.kmw-chat .access-strip button{font-size:9px;padding:4px 8px}.kmw-chat .access-profile-roles{gap:4px}.kmw-chat .access-effective{gap:6px}.kmw-chat .access-effective span{font-size:10px}.kmw-chat .access-audit{grid-template-columns:1fr}.kmw-chat .access-audit small,.kmw-chat .access-audit p{grid-column:auto}}
@container kmchat (max-width:580px){.kmw-chat .lc-context-bar{padding:7px 10px;gap:5px}.kmw-chat .lc-context-bar span{font-size:10px}.kmw-chat .lc-hub-grid{grid-template-columns:1fr}.kmw-chat .lc-version{font-size:9px;padding:4px}.kmw-chat .lc-category-row{flex-wrap:wrap}.kmw-chat .lc-list{flex-wrap:wrap}.kmw-chat .lc-list>span{min-width:150px}.kmw-chat .lc-file{max-width:100%}.kmw-chat .lc-voice-main{padding:15px}.kmw-chat .lc-context-bar button{font-size:10px;padding:4px 7px}.kmw-chat .lc-post-state{padding:8px}.kmw-chat .lc-call-controls{gap:6px}}
@container kmchat (max-width:580px){.kmw-chat .channelhead .searchbox{display:none}.kmw-chat .channelhead h1{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.kmw-chat .channelhead>.topic{display:none}.kmw-chat .channelhead .toolbar{flex-shrink:0;margin-left:auto;gap:3px}}
@container kmchat (max-width:500px){.kmw-chat .resource-file37{min-width:0;flex-basis:100%}.kmw-chat .resource-meta37{gap:6px}.kmw-chat .resource-view37{height:48vh}.kmw-chat .resource-view-actions37{justify-content:flex-start}}
/* V28 · 好友 in the chat window: the list has its own 搜索 field, so the header's 高级搜索 steps aside, and the tabs shrink and scroll
   instead of sliding under ⋯ (加好友 was half hidden) */
#kmu .kmw-chat .channelhead:has(.friendtabs) .toolbar [data-action="lc-search"]{display:none!important}
#kmu .kmw-chat .channelhead .friendtabs{flex:0 1 auto;min-width:0;overflow-x:auto;scrollbar-width:none}
#kmu .kmw-chat .channelhead .friendtabs::-webkit-scrollbar{display:none}
#kmu .kmw-chat .channelhead .friendtabs .tab{flex:none}
#kmu .kmw-chat .channelhead:has(.friendtabs) .toolbar{flex:none}

/* ==== src/universe/imm.css ==== */
/* KMind 宇宙交互 V17 · 沉浸视图 IMMERSIVE: what is being made on the planet — the results first, then who is on them, live.
   The editors are invented, generic UIs (no real product screens). */
body.kmu-imm .kmw,body.kmu-imm #kmu-bar,body.kmu-imm .kmu-barpop,body.kmu-imm #kmu-top,body.kmu-imm .kmu-pop{display:none!important}
/* V24: the dock and 动态 stay over it (沉浸视图 is a button inside 动态; opening it leaves 动态 open) */
body.kmu-imm #kmu-dock{z-index:34}
body.kmu-imm #kmu-ow{z-index:35}
body.kmu-imm #kmu #kmu-ow{background:rgba(var(--k-bg-rgb),.95)!important;backdrop-filter:blur(18px)!important;-webkit-backdrop-filter:blur(18px)!important}   /* V24: 动态 stays open over 沉浸视图 (its button is inside it): solid enough to read */
#kmu-imm{position:absolute;inset:0;z-index:30;pointer-events:none;font-family:var(--font);color:var(--k-ink)}
#kmu-imm[hidden]{display:none}
#kmu-imm>*{pointer-events:auto}
.imm-top{position:absolute;left:14px;right:14px;top:10px;height:56px;display:flex;align-items:center;gap:16px;padding:0 10px 0 14px;border:1px solid var(--hud-line);border-radius:3px;background:var(--hud-ticks),var(--hud-glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.imm-cap{display:flex;flex-direction:column;gap:2px;min-width:0;flex:none;max-width:42%}
.imm-mono{font:500 9px/1 "JetBrains Mono",monospace;letter-spacing:.2em;color:var(--k-acc)}
.imm-cap b{font-size:15px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.imm-cap small{font-size:11px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.imm-exit{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:4px;border:1px solid rgba(var(--k-acc-rgb),.5);background:transparent;color:var(--k-acc);font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;flex:none}
.imm-exit:hover{background:rgba(var(--k-acc-rgb),.12);box-shadow:0 0 14px var(--hud-glow)}
/* editors */
.imm-panel{position:absolute;display:flex;flex-direction:column;border:1px solid var(--hud-line);border-radius:3px;background:var(--hud-ticks),rgba(var(--k-bg-rgb),.93);overflow:hidden;transition:box-shadow .25s,border-color .25s,opacity .25s;opacity:.62}
html[data-theme=night] .imm-panel{background:var(--hud-ticks),rgba(10,14,22,.92)}
.imm-panel.on{opacity:1}
.imm-panel.active{border-color:rgba(var(--k-acc-rgb),.6);box-shadow:0 0 0 1px rgba(var(--k-acc-rgb),.2),0 0 26px var(--hud-glow)}
.imm-panel.big{z-index:3;opacity:1}
.imm-panel.done{border-color:rgba(224,134,0,.55)}
.imm-panel>header{flex:none;height:36px;display:flex;align-items:center;gap:7px;padding:0 6px 0 10px;border-bottom:1px solid var(--hud-line)}
.imm-pk{display:flex;color:var(--k-acc)}
.imm-panel>header>b{font-size:12.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.imm-panel>header>b em{font-style:normal;font-weight:400;color:var(--k-dim);font-family:"JetBrains Mono",monospace;font-size:10.5px}
.imm-kind{font:500 8.5px/1 "JetBrains Mono",monospace;letter-spacing:.14em;color:var(--k-dim);padding:3px 5px;border:1px solid var(--hud-line);border-radius:2px;flex:none}
.imm-who{display:flex;gap:1px;margin-left:auto;flex:none}
.imm-who span{opacity:.55}
.imm-who span.ed{opacity:1}
.imm-st{font-size:11px;font-weight:600;color:var(--k-dim);flex:none;min-width:3.5em;text-align:right}
.imm-panel.active .imm-st{color:var(--k-acc)}
.imm-panel.done .imm-st{color:#C77700}
html[data-theme=night] .imm-panel.done .imm-st{color:#FFD27A}
.imm-zoom{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border:0;border-radius:4px;background:none;color:var(--k-ink2);cursor:pointer;flex:none}
.imm-zoom:hover{background:rgba(var(--k-acc-rgb),.1);color:var(--k-acc)}
.imm-body{flex:1;min-height:0;display:flex}
.imm-ed{flex:1;min-width:0;display:flex;flex-direction:column}
.imm-tb{flex:none;height:28px;display:flex;align-items:center;gap:2px;padding:0 8px;border-bottom:1px solid var(--hud-line);font-size:11px;color:var(--k-ink2)}
.imm-tb i{font-style:normal;padding:2px 6px;border-radius:3px;white-space:nowrap}
.imm-tb i.on{background:rgba(var(--k-acc-rgb),.14);color:var(--k-acc)}
.imm-tb-sep{width:1px;height:14px;background:var(--hud-line);margin:0 4px}
.imm-tb-sp{flex:1}
.imm-live{font-size:10.5px;font-weight:600;color:var(--c);display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.imm-live::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--c);animation:immBlink 1s infinite}
@keyframes immBlink{50%{opacity:.25}}
/* doc */
.imm-page{position:relative;flex:1;min-height:0;overflow:hidden;margin:10px 12px;padding:14px 16px;background:rgba(var(--k-bg-rgb),.9);border:1px solid var(--hud-line);border-radius:2px;font-size:12px;line-height:1.6}
html[data-theme=night] .imm-page{background:rgba(255,255,255,.03)}
.imm-page h4{margin:0 0 8px;font-size:15px;font-weight:700}
.imm-page h5{margin:8px 0 2px;font-size:12.5px;font-weight:650;color:var(--k-ink)}
.imm-page p{margin:0;color:var(--k-ink2)}
.imm-skel{display:flex;flex-direction:column;gap:5px;margin:10px 0}
.imm-skel i{display:block;height:6px;border-radius:3px;background:rgba(var(--k-acc-rgb),.08);width:70%}
.imm-skel i+i{width:48%}
.imm-caret{display:inline-block;position:relative;width:1.5px;height:1.1em;vertical-align:-2px;margin-left:1px;background:var(--c);animation:immBlink .9s infinite}
.imm-caret b{position:absolute;left:0;bottom:100%;font:600 9px/1 var(--font);color:#fff;background:var(--c);padding:2px 4px;border-radius:2px 2px 2px 0;white-space:nowrap;animation:none}
.imm-note{position:absolute;right:10px;bottom:10px;max-width:58%;padding:8px 10px;border-radius:3px;border:1px solid rgba(224,134,0,.45);background:rgba(var(--k-bg-rgb),.96);font-size:11.5px;box-shadow:0 6px 18px rgba(var(--k-sh),.12)}
.imm-note[hidden]{display:none}
.imm-nb{display:flex;align-items:center;gap:6px;color:var(--c)}
.imm-note p{margin:4px 0 0;color:var(--k-ink)}
.imm-note em{font-style:normal;font-weight:650;color:#C77700}
/* slides */
.imm-sl{flex:1;min-height:0;display:flex;gap:8px;padding:8px}
.imm-thumbs{display:flex;flex-direction:column;gap:6px;width:54px;flex:none}
.imm-thumbs b{position:relative;display:block;aspect-ratio:16/10;border:1px solid var(--hud-line);border-radius:2px;background:rgba(var(--k-bg-rgb),.6)}
.imm-thumbs b span{position:absolute;left:3px;top:2px;font:500 8px/1 "JetBrains Mono",monospace;color:var(--k-dim)}
.imm-thumbs b.done{background:rgba(var(--k-acc-rgb),.1)}
.imm-thumbs b.cur{border-color:var(--k-acc);box-shadow:0 0 8px var(--hud-glow)}
.imm-stage{flex:1;min-width:0;display:flex;align-items:center;justify-content:center}
.imm-slide{position:relative;width:100%;max-height:100%;aspect-ratio:16/10;border:1px solid var(--hud-line);border-radius:2px;background:rgba(var(--k-bg-rgb),.95);padding:7% 8%;box-sizing:border-box;overflow:hidden}
html[data-theme=night] .imm-slide{background:rgba(255,255,255,.035)}
.imm-sel{position:relative;height:100%;display:flex;flex-direction:column;gap:8px;border:1px dashed transparent;padding:4px}
.imm-sel.on{border-color:var(--c)}
.imm-sel>b{position:absolute;top:-16px;left:-1px;font-size:9px;font-weight:600;color:#fff;background:var(--c);padding:2px 5px;border-radius:2px}
.imm-sel h5{margin:0;font-size:15px;font-weight:700}
.imm-sel ul{margin:0;padding-left:18px;font-size:12.5px;line-height:1.7;color:var(--k-ink2)}
.imm-big{margin:auto 0;font-size:22px;font-weight:700;color:var(--k-acc)}
.imm-bars{flex:1;display:flex;align-items:flex-end;gap:7%;padding:0 4% 2px;border-bottom:1px solid var(--hud-line)}
.imm-bars i{flex:1;height:var(--h);background:linear-gradient(to top,var(--k-acc),rgba(var(--k-acc-rgb),.45));border-radius:2px 2px 0 0;min-height:1px}
.imm-bars.neg{align-items:center;border-bottom:0;position:relative}
.imm-bars.neg::after{content:"";position:absolute;left:0;right:0;top:50%;border-top:1px solid var(--hud-line)}
.imm-bars.neg i{align-self:flex-end;margin-bottom:50%;transform-origin:bottom}
.imm-bars.neg i.dn{align-self:flex-start;margin-top:50%;margin-bottom:0;background:linear-gradient(to bottom,#E08600,rgba(224,134,0,.4));border-radius:0 0 2px 2px}
.imm-pg{position:absolute;right:8px;bottom:6px;font:500 9px/1 "JetBrains Mono",monospace;color:var(--k-dim)}
/* model */
.imm-cvw{position:relative;flex:1;min-height:0}
.imm-cv{position:absolute;inset:0;width:100%;height:100%;display:block}
.imm-tree{position:absolute;left:8px;top:8px;margin:0;padding:6px 8px 6px 22px;font-size:11px;line-height:1.7;color:var(--k-dim);border:1px solid var(--hud-line);border-radius:2px;background:rgba(var(--k-bg-rgb),.7)}
.imm-tree li.done{color:var(--k-ink)}
.imm-tree li.cur{color:var(--k-acc);font-weight:650}
/* video */
.imm-vprev{position:relative;flex:1;min-height:60px;margin:8px 8px 0;border:1px solid var(--hud-line);border-radius:2px;background:rgba(var(--k-acc-rgb),.04);overflow:hidden}
.imm-tc{position:absolute;right:6px;bottom:5px;font:500 9.5px/1 "JetBrains Mono",monospace;color:var(--k-ink2)}
.imm-exp{position:absolute;left:6px;top:6px;font-size:10.5px;font-weight:650;color:#fff;background:#E08600;padding:2px 7px;border-radius:2px}
.imm-exp[hidden]{display:none}
.imm-tlv{position:relative;flex:none;margin:6px 8px 8px;display:flex;flex-direction:column;gap:4px}
.imm-tr{display:flex;align-items:center;gap:6px;height:20px}
.imm-tr em{font-style:normal;width:38px;flex:none;font-size:10px;color:var(--k-dim)}
.imm-clips,.imm-subs{flex:1;display:flex;gap:2px;height:100%}
.imm-clips span{position:relative;flex:var(--w);border:1px solid var(--hud-line);border-radius:2px;overflow:hidden;font-size:9.5px;color:var(--k-ink2)}
.imm-clips span i{position:absolute;inset:0;width:calc(var(--f,0) * 100%);background:rgba(var(--k-acc-rgb),.28)}
.imm-clips span b{position:relative;font-weight:500;padding-left:4px;white-space:nowrap;line-height:18px}
.imm-clips span.cur{border-color:var(--k-acc)}
.imm-subs span{flex:var(--w);border-radius:2px;margin:5px 0;background:rgba(var(--k-acc-rgb),.06)}
.imm-subs span.on{background:rgba(224,134,0,.5)}
.imm-wave{flex:1;display:flex;align-items:center;gap:1px;height:100%}
.imm-wave i{flex:1;height:calc(var(--a) * 100%);background:rgba(var(--k-acc-rgb),.3);border-radius:1px}
.imm-ph{position:absolute;top:-2px;bottom:-2px;width:1.5px;background:#E08600;box-shadow:0 0 6px rgba(224,134,0,.7)}
/* the 沉浸视图 buttons, in both views */
.kmu-pill.kmu-immersive{background:rgba(var(--k-acc-rgb),.08)}
/* phone */
body.kmu-phone #kmu-imm .imm-top{height:48px;left:6px;right:6px;top:6px;gap:8px}
body.kmu-phone #kmu-imm .imm-cap{max-width:none;flex:1}
body.kmu-phone #kmu-imm .imm-exit span{display:none}
body.kmu-phone #kmu-imm .imm-panel{opacity:1}
body.kmu-phone #kmu-imm .imm-panel[hidden]{display:none}
/* V15 · the bar on top: how many things are being made, a tab for each (with how far it has got) */
.imm-on{display:inline-flex;align-items:center;gap:6px;flex:none;font-size:12px;font-weight:600;color:var(--k-acc)}
.imm-on i{width:7px;height:7px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 8px var(--hud-glow);animation:immBlink 1.4s infinite}
.imm-on b{font:600 12px/1 "JetBrains Mono",monospace}
.imm-on.idle{color:var(--k-dim)}.imm-on.idle i{background:var(--k-dim);box-shadow:none;animation:none}
.imm-tabs{flex:1;min-width:0;display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:2px}
.imm-tabs::-webkit-scrollbar{display:none}
.imm-tab{display:inline-flex;align-items:center;gap:6px;flex:none;height:30px;padding:0 10px;border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.07);color:var(--k-ink2);font:inherit;font-size:12px;cursor:pointer;white-space:nowrap}
.imm-tab svg{color:var(--k-acc)}
.imm-tab em{font:500 10.5px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-acc)}
.imm-tab:hover{background:rgba(var(--k-acc-rgb),.14);color:var(--k-ink)}
.imm-tab.on{background:rgba(var(--k-acc-rgb),.2);color:var(--k-ink);box-shadow:0 0 12px var(--hud-glow)}
.imm-tab.done em{color:#C77700}
html[data-theme=night] .imm-tab.done em{color:#FFD27A}
.imm-demo{display:flex;flex:none}
.imm-demo:empty{display:none}
.imm-empty{position:absolute;left:50%;top:62%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--k-ink2);pointer-events:none!important}
.imm-empty[hidden]{display:none}
.imm-empty svg{color:var(--k-acc);opacity:.7}
.imm-empty b{font-size:14px;font-weight:600}
.imm-empty small{font:500 9.5px/1 "JetBrains Mono",monospace;letter-spacing:.18em;color:var(--k-dim)}
/* V15 · a result's head: where it is (a forum post), how far it has got */
.imm-where{display:inline-flex;align-items:center;gap:4px;min-width:0;max-width:30%;font-size:11px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.imm-where svg{flex:none}
.imm-panel>header .km-demo-chip{flex:none}
.imm-pct{margin-left:auto;font:600 11.5px/1 "JetBrains Mono",monospace;color:var(--k-acc);flex:none;min-width:3em;text-align:right}
.imm-panel.done .imm-pct{color:#C77700;font-family:inherit}
html[data-theme=night] .imm-panel.done .imm-pct{color:#FFD27A}
.imm-panel{opacity:1}
.imm-panel.dim{visibility:hidden;pointer-events:none}
.imm-panel[hidden]{display:none}
.imm-live-more{font-size:10.5px;color:var(--k-dim)}
.imm-coll{display:flex;gap:10px}
/* V15 · who is on it: a row each — what they are doing, how far they have got */
.imm-crew{flex:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(176px,1fr));gap:2px 6px;padding:6px 8px 8px;max-height:38%;overflow-y:auto;scrollbar-width:thin}
.imm-cm{display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"av t p" "av bar bar";align-items:center;column-gap:8px;row-gap:3px;padding:5px 7px;border-radius:10px}
.imm-cm>.km-avbox{grid-area:av}.imm-cm-t{grid-area:t}.imm-cm-bar{grid-area:bar}.imm-cm-p{grid-area:p;align-self:start;margin-top:2px}
.imm-cm.on{background:linear-gradient(90deg,color-mix(in srgb,var(--c) 12%,transparent),transparent 70%)}
.imm-cm-t{display:flex;flex-direction:column;min-width:0;line-height:1.25}
.imm-cm-t b{font-size:12px;font-weight:650;color:var(--k-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.imm-cm-t b em{font-style:normal;font-weight:500;font-size:10px;color:var(--k-dim);margin-left:5px}
.imm-cm-t small{font-size:11px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.imm-cm.on .imm-cm-t small{color:var(--k-ink2)}
.imm-cm-bar{position:relative;height:3px;border-radius:3px;background:rgba(127,140,170,.2);overflow:hidden}
.imm-cm-bar i{position:absolute;inset:0;transform-origin:left;transform:scaleX(var(--p,0));background:var(--c);border-radius:3px;transition:transform 1s linear}
.imm-cm-p{font:500 10.5px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-ink2);text-align:right}
.imm-cm.on .imm-cm-p{color:var(--k-ink)}
/* a short panel keeps the result large: the people become small tiles (name, how far), what they do shows on the hover */
.imm-panel.short .imm-crew{grid-template-columns:repeat(auto-fill,minmax(112px,1fr));max-height:30%;padding:4px 6px 6px}
.imm-panel.short .imm-cm{padding:3px 5px;column-gap:6px}
.imm-panel.short .imm-cm-t small,.imm-panel.short .imm-cm-t b em{display:none}
/* several people at once: each edited part carries its writer's colour */
.imm-thumbs b.cur{border-color:var(--c);box-shadow:0 0 0 1.5px var(--c)}
.imm-tree li.cur{color:var(--c);font-weight:650}
.imm-clips span.cur{border-color:var(--c);box-shadow:0 0 0 1px var(--c)}
/* V15 · sheet */
.imm-grid{flex:1;min-height:0;overflow:auto;margin:8px}
.imm-grid table{border-collapse:separate;border-spacing:0;width:100%;font-size:11.5px;table-layout:fixed}
.imm-grid th{font:500 9.5px/1 "JetBrains Mono",monospace;color:var(--k-dim);font-weight:500;padding:5px 4px;text-align:center;width:22px}
.imm-grid thead th{height:18px}
.imm-grid thead th:first-child,.imm-grid tbody th{width:22px}
.imm-grid thead th:not(:first-child){width:auto}
.imm-grid td{height:26px;padding:0 7px;border-bottom:1px solid rgba(127,140,170,.16);border-right:1px solid rgba(127,140,170,.1);color:var(--k-ink);white-space:nowrap;overflow:hidden;text-overflow:clip}
.imm-grid tr.imm-hdr td{font-weight:650;color:var(--k-ink2);background:rgba(var(--k-acc-rgb),.06)}
.imm-grid tr.cur td{background:color-mix(in srgb,var(--c) 7%,transparent)}
.imm-grid td.on{box-shadow:inset 0 0 0 1.5px var(--c);border-radius:3px}
.imm-grid .imm-caret b{bottom:auto;top:-15px}
/* V15 · a task without a result to show: a ring and what each of them is doing */
.imm-task{align-items:center;justify-content:center;gap:10px;padding:14px;text-align:center}
.imm-ring{position:relative;width:88px;height:88px}
.imm-ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.imm-ring circle{fill:none;stroke:rgba(127,140,170,.2);stroke-width:3}
.imm-ring .imm-ring-f{stroke:var(--k-acc);stroke-linecap:round;stroke-dasharray:0 100;transition:stroke-dasharray 1s linear}
.imm-ring b{position:absolute;inset:0;display:grid;place-items:center;font:600 14px/1 "JetBrains Mono",monospace;color:var(--k-ink)}
.imm-task-t{font-size:14px;font-weight:650}
.imm-steps{margin:0;padding:0;list-style:none;font-size:12px;color:var(--k-ink2);display:flex;flex-direction:column;gap:4px}
.imm-steps b{color:var(--c);margin-right:6px}
/* the 沉浸视图 button: how many things are being made here */
/* phone: the results are tabs under the bar; the one picked is a sheet below the planet */
body.kmu-phone #kmu-imm .imm-top{flex-wrap:wrap;height:auto;row-gap:6px;padding-top:6px;padding-bottom:6px}
body.kmu-phone #kmu-imm .imm-tabs{order:9;flex-basis:100%}
body.kmu-phone #kmu-imm .imm-on span,body.kmu-phone #kmu-imm .imm-zoom{display:none}

/* ---------- V23 · two scopes: 全部 (what all your agents are making) and a planet; in both views. V24: 动态 is its own panel again (the dock) ---------- */
.imm-scope{display:flex;gap:4px;margin-top:3px;min-width:0}
.imm-scope button{display:inline-flex;align-items:baseline;gap:6px;max-width:260px;height:26px;padding:0 10px;border:0;border-radius:999px;background:transparent;color:var(--k-ink2);font:inherit;cursor:pointer;white-space:nowrap;min-width:0}
.imm-scope button svg{align-self:center;flex:none;opacity:.8}
.imm-scope button b{font-size:13.5px;font-weight:650;overflow:hidden;text-overflow:ellipsis}
.imm-scope button small{font-size:10.5px;color:var(--k-dim);overflow:hidden;text-overflow:ellipsis}
.imm-scope button:hover{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.06)}
.imm-scope button.on{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.13)}
.imm-cap{max-width:52%}
.imm-cap .imm-mono{padding-left:10px}
button.imm-where.imm-go{border:0;background:none;padding:0;font-family:inherit;font-size:11px;cursor:pointer}
button.imm-where.imm-go:hover{color:var(--k-acc)}
/* 全部: the sky steps back behind a veil */
body.kmu-imm.kmu-imm-all #kmu-imm{background:radial-gradient(120% 90% at 60% 50%,rgba(var(--k-bg-rgb),.62),rgba(var(--k-bg-rgb),.82))}
html[data-theme=night] body.kmu-imm.kmu-imm-all #kmu-imm{background:radial-gradient(120% 90% at 60% 50%,rgba(6,9,15,.6),rgba(6,9,15,.84))}
/* an agent's card opened from 动态 stays over it */
body.kmu-imm #kmu .kmw.kmw-card:not([hidden]){display:flex!important;z-index:40}
/* 面板视图: the universe's root shows only this layer, below the titlebar (no 3D, no top band, no dock, no windows but the cards) */
body.kmu-imm-panel #kmu{z-index:60}
body.kmu-imm-panel #kmu>:not(#kmu-imm):not(.kmw-card){display:none!important}
body.kmu-imm-panel #kmu{background:var(--k-wbg,var(--k-ubg))}
/* V28 · a forum planet's level: one card per post, its output as a whole (src/universe/imm.js outputs()) */
.imm-out{display:flex;flex-direction:column;gap:12px;padding:14px 16px;overflow:auto}
.imm-out-top{display:flex;align-items:center;gap:14px}
.imm-out .imm-ring{width:64px;height:64px;flex:none}
.imm-out .imm-ring b{font-size:12.5px}
.imm-out-sum{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-width:0;flex:1}
.imm-out-sum small{width:100%;font-size:11.5px;color:var(--k-dim)}
.imm-out-sum .tag{font-size:10px;padding:2px 8px}
.imm-out-go{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 12px;border:0;border-radius:999px;cursor:pointer;font:inherit;font-size:12px;font-weight:620;color:#fff;background:var(--k-acc);flex:none}
.imm-out-go:hover{filter:brightness(1.08)}
.imm-out-parts{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.imm-out-parts li{display:grid;grid-template-columns:20px minmax(0,1fr) 34% 3.2em;align-items:center;gap:8px;padding:7px 9px;border-radius:10px;cursor:pointer;background:rgba(var(--k-acc-rgb),.04);box-shadow:inset 3px 0 0 var(--c,transparent);transition:background .15s}
.imm-out-parts li:hover{background:rgba(var(--k-acc-rgb),.1)}
.imm-out-parts li b{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.imm-out-ic{display:grid;place-items:center;color:var(--k-acc)}
.imm-out-bar{height:5px;border-radius:3px;background:rgba(127,140,170,.2);overflow:hidden}
.imm-out-bar i{display:block;height:100%;width:calc(var(--u,0) * 100%);border-radius:3px;background:var(--k-acc);transition:width 1s linear}
.imm-out-parts li em{font:600 11px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-ink2);text-align:right}
.imm-out-parts li.done .imm-out-bar i{background:#C77700}
html[data-theme=night] .imm-out-parts li.done .imm-out-bar i{background:#FFD27A}

/* ==== src/universe/cosmos.css ==== */
/* KMind 宇宙交互 V17 · 无边框 BORDERLESS — the universe view's chrome, rewritten so the sky stays in front.
   Loaded after universe.css, imm.css and the KMind sheets; everything here is scoped to the universe view.
   - No boxes. Panels have no outline and no corner ticks: they are soft fields of dark (夜间) or pale (白昼) glass that fade
     into the sky at their edges (a wide soft halo of the same colour), so the stars run right up to the text.
   - One line of light at most: a horizon-like hairline that fades out at both ends, on top of a panel or under a heading.
   - Buttons are text and icons. Hover: the text lights up and a short line of light appears under it.
     On: the accent colour and a small dot. Primary actions keep a soft-filled glowing pill.
   - Dialogs (the core's #dialog) float in the middle of a dimmed sky; their option grids become lists of quiet rows.
   - Fields are a single underline. Mono capitals stay for captions.
   No backdrop blur on anything large: the 3D sky moves every frame and would have to be blurred again each time. */

body{--cz-bg:rgba(var(--k-bg-rgb),.94);--cz-solid:rgba(var(--k-bg-rgb),.975);--cz-bg2:rgba(var(--k-bg-rgb),.78);--cz-halo:rgba(var(--k-bg-rgb),.62);--cz-glow:rgba(var(--k-acc-rgb),.35);--cz-line:rgba(var(--k-acc-rgb),.16);
  --cz-rule:linear-gradient(90deg,rgba(var(--k-acc-rgb),0),rgba(var(--k-acc-rgb),.42) 22%,rgba(var(--k-acc-rgb),.42) 78%,rgba(var(--k-acc-rgb),0));
  --cz-rule-soft:linear-gradient(90deg,rgba(var(--k-acc-rgb),0),rgba(var(--k-acc-rgb),.14) 15%,rgba(var(--k-acc-rgb),.14) 85%,rgba(var(--k-acc-rgb),0))}
html[data-theme=night] body{--cz-bg:rgba(7,10,16,.93);--cz-solid:rgba(8,11,17,.975);--cz-bg2:rgba(7,10,16,.7);--cz-halo:rgba(5,7,12,.6);--cz-glow:rgba(70,140,255,.5);--cz-line:rgba(140,180,255,.14);
  --cz-rule:linear-gradient(90deg,rgba(120,170,255,0),rgba(120,170,255,.5) 22%,rgba(120,170,255,.5) 78%,rgba(120,170,255,0));
  --cz-rule-soft:linear-gradient(90deg,rgba(120,170,255,0),rgba(120,170,255,.14) 15%,rgba(120,170,255,.14) 85%,rgba(120,170,255,0))}

/* ---------- the frame: no corner brackets, a softer edge fade ---------- */
#kmu::after{display:none}
#kmu-fade{opacity:.55}

/* ---------- the top line: floating words and glyphs ---------- */
#kmu-switch,#kmu-umenu,.kmu-seg2,.kmu-back,#kmu .km-view-switch{border-color:transparent!important;background:transparent!important;box-shadow:none!important}
#kmu-switch,#kmu-umenu{backdrop-filter:none;-webkit-backdrop-filter:none}
#kmu-switch:hover,#kmu-umenu:hover,.kmu-tb:hover,.kmu-back:hover,#kmu .km-view-switch:hover{background:transparent!important;color:var(--k-acc)!important;text-shadow:0 0 12px var(--cz-glow)}
#kmu-switch:hover .kmu-sw-name{color:var(--k-acc)}
/* Hikos #20209 ③：the lit realm (母星 / 合作宇宙) is a glowing dot under the word, like the other switches of this skin */
#kmu-switch{position:relative}
#kmu-switch.on::after{content:"";position:absolute;left:50%;bottom:-3px;width:4px;height:4px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 8px var(--cz-glow);transform:translateX(-50%)}
#kmu-switch.on .kmu-sw-name{color:var(--k-acc);text-shadow:0 0 12px var(--cz-glow)}
.kmu-tb:hover{border-color:transparent}
.kmu-tb:hover svg,#kmu-umenu:hover svg,#kmu .km-view-switch:hover svg{filter:drop-shadow(0 0 5px var(--cz-glow))}
.kmu-seg2 button{border:0;background:transparent;color:var(--k-ink2);position:relative}
.kmu-seg2 button.on{background:transparent!important;box-shadow:none!important;color:var(--k-acc)}
.kmu-seg2 button.on::after,.kmu-back.on::after{content:"";position:absolute;left:50%;bottom:-3px;width:4px;height:4px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 8px var(--cz-glow);transform:translateX(-50%)}
.kmu-sw-mark{border-radius:50%;box-shadow:0 0 14px var(--cz-glow)}
.kmu-back{color:var(--k-acc)}

/* ---------- the planet bar: a floating line of words over a soft dark field ---------- */
#kmu .kmu-bar{border:0!important;border-radius:0;padding:6px 18px 8px 14px;backdrop-filter:none;-webkit-backdrop-filter:none;
  background:radial-gradient(ellipse 60% 120% at 30% 50%,var(--cz-bg2),transparent 72%)!important}
#kmu .kmu-bar::after{content:"";position:absolute;left:10px;right:30%;bottom:2px;height:1px;background:var(--cz-rule-soft)}
#kmu .kmu-bar .kmu-meta{border-right:0;padding-right:4px}
#kmu .kmu-pill{border:0!important;background:transparent!important;box-shadow:none!important;position:relative;border-radius:0}
#kmu .kmu-pill:hover{color:var(--k-acc);text-shadow:0 0 12px var(--cz-glow)}
#kmu .kmu-pill:hover::after{content:"";position:absolute;left:8px;right:8px;bottom:1px;height:1px;background:var(--k-acc);box-shadow:0 0 8px var(--cz-glow)}
#kmu .kmu-pill.kmu-primary{color:var(--k-acc);text-shadow:0 0 14px var(--cz-glow)}
#kmu .kmu-pill.kmu-primary::before{content:"";position:absolute;inset:3px 2px;border-radius:999px;background:radial-gradient(ellipse at 50% 60%,rgba(var(--k-acc-rgb),.18),rgba(var(--k-acc-rgb),0) 75%);z-index:-1}
html[data-theme=night] #kmu .kmu-pill.kmu-primary{color:#CFE0FF}
#kmu .kmu-bar-sep{background:var(--cz-line)}
#kmu .kmu-barpop,#kmu .kmu-pop,#kmu .kmu-menu{border:0!important;border-radius:14px;backdrop-filter:none;-webkit-backdrop-filter:none;
  background:var(--cz-bg)!important;box-shadow:0 0 34px 18px var(--cz-halo)!important}
#kmu .kmu-pop-f{border-top:0;background:var(--cz-rule-soft) top/100% 1px no-repeat}
#kmu .kmu-pop-f button,#kmu .kmu-menu>button{border:0!important;background:transparent;border-radius:0}
#kmu .kmu-pop-f button:hover,#kmu .kmu-menu>button:hover,#kmu .kmu-uni:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.12),transparent 85%);color:var(--k-acc)}
#kmu .kmu-uni.cur{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.18),transparent 90%)}
#kmu .kmu-menu-op{border-bottom:0;background:var(--cz-rule-soft) bottom/100% 1px no-repeat}

/* ---------- the dock: a horizon of glyphs ---------- */
#kmu #kmu-dock{border:0!important;border-radius:0;box-shadow:none!important;backdrop-filter:none;-webkit-backdrop-filter:none;padding:8px 18px 6px;
  background:radial-gradient(ellipse 55% 100% at 50% 100%,var(--cz-bg2),transparent 78%)!important}
#kmu #kmu-dock::before{content:"";position:absolute;left:8%;right:8%;top:0;height:1px;background:var(--cz-rule);opacity:.85}
#kmu #kmu-dock[data-pos="top"]{padding:6px 18px 8px;background:radial-gradient(ellipse 55% 100% at 50% 0%,var(--cz-bg2),transparent 78%)!important}
#kmu #kmu-dock[data-pos="top"]::before{top:auto;bottom:0;left:8%;right:8%;width:auto;height:1px;background:var(--cz-rule)}
#kmu #kmu-dock[data-pos="left"]{padding:16px 8px 16px 6px;background:radial-gradient(ellipse 100% 55% at 0% 50%,var(--cz-bg2),transparent 78%)!important}
#kmu #kmu-dock[data-pos="left"]::before{left:auto;right:0;top:8%;bottom:8%;width:1px;height:auto;background:linear-gradient(180deg,rgba(var(--k-acc-rgb),0),rgba(var(--k-acc-rgb),.45) 22%,rgba(var(--k-acc-rgb),.45) 78%,rgba(var(--k-acc-rgb),0))}
#kmu #kmu-dock[data-pos="right"]{padding:16px 6px 16px 8px;background:radial-gradient(ellipse 100% 55% at 100% 50%,var(--cz-bg2),transparent 78%)!important}
#kmu #kmu-dock[data-pos="right"]::before{left:0;right:auto;top:8%;bottom:8%;width:1px;height:auto;background:linear-gradient(180deg,rgba(var(--k-acc-rgb),0),rgba(var(--k-acc-rgb),.45) 22%,rgba(var(--k-acc-rgb),.45) 78%,rgba(var(--k-acc-rgb),0))}
#kmu .kmu-dock-sep{background:linear-gradient(transparent,var(--cz-line),transparent);height:var(--kmu-sep-len,36px);width:1px}
#kmu #kmu-dock[data-pos="left"] .kmu-dock-sep,#kmu #kmu-dock[data-pos="right"] .kmu-dock-sep{width:var(--kmu-sep-len,36px);height:1px;background:linear-gradient(90deg,transparent,var(--cz-line),transparent)}
#kmu .kmu-dock-agent,#kmu .kmu-dock-btn,#kmu .kmu-dock-ow{background:transparent!important;box-shadow:none!important;border-radius:0}
#kmu .kmu-dock-agent:hover,#kmu .kmu-dock-btn:hover,#kmu .kmu-dock-ow:hover{color:var(--k-acc)}
#kmu .kmu-dock-btn:hover svg,#kmu .kmu-dock-ow:hover svg{filter:drop-shadow(0 0 6px var(--cz-glow))}
#kmu .kmu-dock-agent:hover>span:not(.km-avbox){color:var(--k-acc)}
#kmu .kmu-dock-agent .km-avbox,#kmu .kmu-dock-agent>.avatar,#kmu .kmu-dock-agent>svg{transition:filter .15s,transform .15s}
#kmu .kmu-dock-agent:hover .km-avbox{filter:drop-shadow(0 0 8px var(--cz-glow));transform:translateY(-1px)}
#kmu .kmu-dock-add{border:0;border-radius:50%;background:radial-gradient(circle,rgba(var(--k-acc-rgb),.14),transparent 70%)}
#kmu .kmu-dock-add:hover{background:radial-gradient(circle,rgba(var(--k-acc-rgb),.3),transparent 72%);color:var(--k-acc);box-shadow:none}
/* on: the accent colour and a small dot of light under it */
#kmu .kmu-dock-btn.on,#kmu .kmu-dock-ow.on,#kmu .kmu-dock-agent.on,#kmu .kmu-dock-agent.on>span:not(.km-avbox){color:var(--k-acc)}
#kmu .kmu-dock-btn.on::after,#kmu .kmu-dock-ow.on::after,#kmu .kmu-dock-agent.on::after{content:"";position:absolute;left:50%;bottom:-3px;width:4px;height:4px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 8px 1px var(--cz-glow);transform:translateX(-50%)}
#kmu .kmu-dock-agent.on .km-avbox{filter:drop-shadow(0 0 7px var(--cz-glow))}
/* V12 · the three views sit first in the dock; away from the whole universe, 总览 glows as the way back */
.kmu-dock-views{display:contents}
#kmu .kmu-dv{width:48px}
#kmu .kmu-dv.hint{color:var(--k-acc)}
#kmu .kmu-dv.hint svg{filter:drop-shadow(0 0 6px var(--cz-glow))}
#kmu .kmu-dv.hint::before{content:"";position:absolute;left:50%;top:2px;width:30px;height:30px;border-radius:50%;transform:translateX(-50%);background:radial-gradient(circle,rgba(var(--k-acc-rgb),.2),rgba(var(--k-acc-rgb),0) 70%);animation:czBreath 2.6s ease-in-out infinite;pointer-events:none}
@keyframes czBreath{0%,100%{opacity:.45}50%{opacity:1}}
@media (prefers-reduced-motion:reduce){#kmu .kmu-dv.hint::before{animation:none;opacity:.8}}
#kmu .kmu-dock-ow{display:flex;flex-direction:column;align-items:center;gap:3px;width:46px;padding:4px 2px 2px;border:0;color:var(--k-ink2);font-size:10.5px;font-weight:550;cursor:pointer;position:relative;flex:none}
#kmu .kmu-dock-ow .kmu-badge{position:absolute;top:0;right:6px}
#kmu #kmu-ow{border:0!important;border-radius:16px!important;background:var(--cz-bg)!important;box-shadow:0 0 40px 20px var(--cz-halo)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}

/* ---------- windows: glass that fades into the sky ---------- */
#kmu .kmw{border:0!important;border-radius:16px;background:var(--cz-bg)!important;box-shadow:0 0 44px 22px var(--cz-halo)!important}
#kmu .kmw.kmw-top{box-shadow:0 0 52px 26px var(--cz-halo),0 0 90px rgba(var(--k-acc-rgb),.06)!important}
#kmu .kmw-head{border-bottom:0!important;background:var(--cz-rule-soft) bottom/100% 1px no-repeat!important}
#kmu .kmw-btn:hover{background:transparent;color:var(--k-acc);filter:drop-shadow(0 0 5px var(--cz-glow))}
#kmu .kmw-rz-se::after{border-color:var(--cz-line)}
#kmu .kmw.kmw-sheet{border-radius:18px 18px 0 0}
/* the chat window's own pieces: no inner boxes either — the core's grey panel behind the chat goes, the window's glass is the only ground */
#kmu .kmw-chat .workspace,#kmu .kmw-chat .body,#kmu .kmw-chat .chat,#kmu .kmw-chat .forum-wrap,#kmu .kmw-chat .forum-main,#kmu .kmw-chat .page-scroll,#kmu .kmw-chat .friends-layout,#kmu .kmw-chat .friends-list,#kmu .kmw-chat .channel-module-scroll{background:transparent!important;border:0!important}
#kmu .kmw-chat .thread-pane,#kmu .kmw-chat .topic-aside,#kmu .kmw-chat .activity{background:var(--cz-solid)!important;box-shadow:-24px 0 30px -6px var(--cz-halo)}
#kmu .kmw-chat .panehead{border-bottom:0;background:var(--cz-rule-soft) bottom/100% 1px no-repeat}
#kmu .kmw-chat .channelhead{border-bottom:0;background:var(--cz-rule-soft) bottom/100% 1px no-repeat}
#kmu .kmw-chat .composer{border:0;background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 -1px 0 rgba(var(--k-acc-rgb),.3);border-radius:12px 12px 4px 4px}
html[data-theme=night] #kmu .kmw-chat .composer{background:rgba(120,170,255,.06)}
#kmu .kmw-chat .composer:focus-within{box-shadow:inset 0 -1.5px 0 var(--k-acc),0 6px 18px -10px var(--cz-glow)}
#kmu .kmw-chat .message:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.06),transparent 80%)}
#kmu .kmw-chat .message-actions{border:0;border-radius:10px;background:var(--cz-bg);box-shadow:0 0 16px 6px var(--cz-halo)}
#kmu .kmw-chat .thread-pane,#kmu .kmw-chat .members,#kmu .kmw-chat .dm-profile,#kmu .kmw-chat .activity,#kmu .kmw-chat .topic-aside{border-left:0}
#kmu .kmw-chat .post-card,#kmu .kmw-chat .listcard,#kmu .kmw-chat .attachment,#kmu .kmw-chat .forum-searchbar{border-color:transparent;background:rgba(var(--k-acc-rgb),.045)}
#kmu .kmw-chat .post-card:hover{background:rgba(var(--k-acc-rgb),.09);border-color:transparent}
#kmu .kmw-chat .searchbox input{border:0;border-bottom:1px solid var(--cz-line);border-radius:0;background:transparent}
/* V12 · a planet's members: side-by-side column in medium/wide chat windows (>= 600px, iPad & desktop), or a closable drawer in narrow windows (< 600px, phone) */
#kmu .kmw-chat:not(.kmw-mem) .members,#kmu .kmw-chat:not(.kmw-mem) .dm-profile{display:none!important}
#kmu .kmw-chat.kmw-mem .members,#kmu .kmw-chat.kmw-mem .members[hidden]{display:flex!important;flex-direction:column;position:relative;right:auto;top:auto;bottom:auto;z-index:2;width:220px;flex:0 0 220px;padding:14px 10px;overflow:auto;
  background:var(--cz-solid)!important;box-shadow:-1px 0 0 var(--cz-line);border:0}
#kmu .kmw-chat.kmw-mem .dm-profile{display:block!important;position:relative;right:auto;top:auto;bottom:auto;z-index:2;width:220px;flex:0 0 220px;overflow:auto;background:var(--cz-solid)!important;box-shadow:-1px 0 0 var(--cz-line)}
@container kmchat (max-width:599px){
  #kmu .kmw-chat.kmw-mem .members,#kmu .kmw-chat.kmw-mem .members[hidden]{position:absolute;right:0;top:49px;bottom:0;z-index:6;width:min(250px,78%);flex:none;box-shadow:-24px 0 30px -6px var(--cz-halo);animation:czIn .18s ease-out}
  #kmu .kmw-chat.kmw-mem .dm-profile{position:absolute;right:0;top:49px;bottom:0;z-index:6;width:min(250px,78%);flex:none;box-shadow:-24px 0 30px -6px var(--cz-halo);animation:czIn .18s ease-out}
  #kmu .kmw-chat.kmw-mem .workspace>.body>.chat::after{content:"";position:absolute;inset:0;z-index:5;background:rgba(4,7,14,.32);pointer-events:none;animation:czFade .16s ease-out}
}
#kmu .kmw-chat .workspace>.body>.chat{position:relative}
#kmu .kmw-chat.kmw-mem .channelhead [data-action="members"]{color:var(--k-acc);filter:drop-shadow(0 0 5px var(--cz-glow))}
#kmu .kmw-chat .members .roster-context{position:relative;padding-right:28px;border:0;background:var(--cz-rule-soft) bottom/100% 1px no-repeat;padding-bottom:10px;margin-bottom:6px}
#kmu .kmw-chat .members .member{border-radius:0}
#kmu .kmw-chat .members .member:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.1),transparent 85%)}
@keyframes czIn{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}
@keyframes czFade{from{opacity:0}to{opacity:1}}

/* ---------- cards inside windows ---------- */
#kmu .kmu-gal-meta{border:0;background:var(--cz-rule-soft) top/100% 1px no-repeat,var(--cz-rule-soft) bottom/100% 1px no-repeat}
#kmu .kmu-gal-meta>div{border-left:0}
#kmu .kmu-gal-planets span{border:0;background:rgba(var(--k-acc-rgb),.07);border-radius:999px}
#kmu .kmu-gal-go{border:0;border-radius:999px;background:linear-gradient(90deg,var(--k-acc),var(--k-acc2));box-shadow:0 0 22px var(--cz-glow)}
#kmu .kmu-btn{border-color:transparent!important;background:rgba(var(--k-acc-rgb),.07)!important;border-radius:999px!important}
#kmu .kmu-btn:hover{background:rgba(var(--k-acc-rgb),.16)!important;color:var(--k-acc)!important}
#kmu .kmu-btn.kmu-primary{background:linear-gradient(90deg,var(--k-acc),var(--k-acc2))!important;color:var(--k-on-acc)!important;box-shadow:0 0 18px var(--cz-glow)}
#kmu .kmu-sec{border:0!important;background:var(--cz-rule-soft) bottom/100% 1px no-repeat}
#kmu .kmu-st,#kmu .kmu-dm-row{border:0!important}
#kmu .kmu-st-go:hover,#kmu .kmu-dm:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.1),transparent 85%)!important}

/* ---------- dialogs: content floating in a dimmed sky ---------- */
body #dialog.modal{border:0;border-radius:22px;background:var(--cz-solid);color:var(--k-ink);padding:30px 34px 28px;
  box-shadow:0 0 70px 40px var(--cz-halo),0 0 160px 40px rgba(var(--k-acc-rgb),.06)}
body #dialog.modal::backdrop{background:radial-gradient(ellipse at 50% 45%,rgba(var(--k-bg-rgb),.18),rgba(var(--k-bg-rgb),.5) 85%)}
html[data-theme=night] body #dialog.modal::backdrop{background:radial-gradient(ellipse at 50% 45%,rgba(2,4,8,.3),rgba(2,4,8,.66) 85%)}
body #dialog.modal::before{content:"";position:absolute;left:12%;right:12%;top:0;height:1px;background:var(--cz-rule)}
body #dialog .modal-title{font-weight:650;letter-spacing:.02em;color:var(--k-ink)}
body #dialog .modal-sub{color:var(--k-dim);font-size:12px}
body #dialog .close{border:0;background:transparent;color:var(--k-mute);border-radius:50%}
body #dialog .close:hover{color:var(--k-acc);background:transparent;filter:drop-shadow(0 0 6px var(--cz-glow))}
/* option grids (会话操作, 宇宙菜单 …): quiet rows instead of tiles */
body #dialog .lc-hub-grid{gap:0 26px}
body #dialog .lc-hub-card{border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;min-height:0;padding:13px 26px 13px 4px;text-align:left;position:relative;color:var(--k-ink);font-weight:550;
  background-image:var(--cz-rule-soft)!important;background-size:100% 1px!important;background-position:bottom!important;background-repeat:no-repeat!important;transition:color .15s,padding-left .15s}
body #dialog .lc-hub-card::after{content:"›";position:absolute;right:6px;top:50%;transform:translateY(-52%);color:var(--k-dim);font-size:17px;transition:color .15s,right .15s}
body #dialog .lc-hub-card:hover{color:var(--k-acc);padding-left:10px;text-shadow:0 0 14px var(--cz-glow)}
body #dialog .lc-hub-card:hover::after{color:var(--k-acc);right:2px}
body #dialog .lc-hub-card:hover::before{content:"";position:absolute;left:0;top:30%;bottom:30%;width:2px;border-radius:2px;background:var(--k-acc);box-shadow:0 0 8px var(--cz-glow)}
/* lists, cards and choices in dialogs: no outlines */
body #dialog .listcard,body #dialog .choice-row,body #dialog .km-choices label,body #dialog .km-hub-row,body #dialog .km-tpl,body #dialog .setting-row{border-color:transparent!important;background:rgba(var(--k-acc-rgb),.04)!important;border-radius:12px}
body #dialog .choice-row:has(input:checked),body #dialog .km-choices label:has(input:checked){background:rgba(var(--k-acc-rgb),.12)!important;box-shadow:inset 2px 0 0 var(--k-acc)}
body #dialog .setting-row{background:transparent!important;border-radius:0;background-image:var(--cz-rule-soft)!important;background-size:100% 1px!important;background-position:bottom!important;background-repeat:no-repeat!important}
body #dialog .settings-menu{border-right:0;background:linear-gradient(transparent,var(--cz-line),transparent) right/1px 100% no-repeat}
body #dialog .settings-menu button.active,body #dialog .settings-menu button:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.14),transparent 90%);color:var(--k-acc)}
body #dialog .tag,body #dialog .chip{border-color:transparent;background:rgba(var(--k-acc-rgb),.08)}
/* fields: one underline */
body #dialog .field,body #dialog select.field,body #dialog textarea.field{border:0!important;border-bottom:1px solid var(--cz-line)!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;padding-left:2px}
body #dialog textarea.field{background:rgba(var(--k-acc-rgb),.035)!important;border-radius:10px 10px 0 0!important;padding:10px}
body #dialog .field:focus{outline:none!important;border-bottom-color:var(--k-acc)!important;box-shadow:0 8px 14px -12px var(--cz-glow)!important}
body #dialog .field-label,body #dialog .section-label{letter-spacing:.12em;color:var(--k-dim)}
/* buttons in dialogs */
body #dialog button.primary,body #dialog .primary{border:0;border-radius:999px;background:linear-gradient(90deg,var(--k-acc),var(--k-acc2));color:var(--k-on-acc);box-shadow:0 0 22px var(--cz-glow)}
body #dialog .secondary,body #dialog .outline{border:0!important;border-radius:999px;background:rgba(var(--k-acc-rgb),.08)!important;color:var(--k-ink2)}
body #dialog .secondary:hover,body #dialog .outline:hover{background:rgba(var(--k-acc-rgb),.16)!important;color:var(--k-acc)}
body #dialog .danger{border:0;border-radius:999px}
body #dialog .profile-modal-person{border-radius:10px;padding:6px 8px}
body #dialog .profile-modal-person:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.1),transparent 85%)}
body #dialog .form-note{color:var(--k-dim)}
body #dialog hr{border:0;height:1px;background:var(--cz-rule-soft)}
/* the profile dialog: its banner melts into the panel */
body #dialog.profile-dialog .profile-banner{border-radius:22px 22px 0 0;-webkit-mask-image:linear-gradient(#000 40%,transparent);mask-image:linear-gradient(#000 40%,transparent)}
body #dialog .profile-box{background:rgba(var(--k-acc-rgb),.05);border:0}
/* the core's toast: a line of light, not a box */
body .toast{border:0;border-radius:999px;background:var(--cz-bg);box-shadow:0 0 28px 12px var(--cz-halo);color:var(--k-ink)}

/* ---------- the immersive view follows the same rules: editors are glass fields, the caption and the controls float ---------- */
#kmu .imm-top{border:0!important;border-radius:0;background:radial-gradient(ellipse 65% 150% at 25% 0%,var(--cz-bg2),transparent 72%)!important;box-shadow:none!important}
#kmu .imm-top::after{content:"";position:absolute;left:0;right:40%;bottom:0;height:1px;background:var(--cz-rule-soft)}
#kmu .imm-exit{border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.1)}
#kmu .imm-exit:hover{background:rgba(var(--k-acc-rgb),.2);box-shadow:0 0 16px var(--cz-glow)}
#kmu .imm-panel{border:0!important;border-radius:16px;background:var(--cz-bg)!important;box-shadow:0 0 40px 20px var(--cz-halo)!important}
#kmu .imm-panel.big{background:var(--cz-solid,rgba(var(--k-bg-rgb),.98))!important}   /* V15: one result opened large is solid: nothing shows through it */
#kmu .imm-panel.active{box-shadow:0 0 40px 20px var(--cz-halo),0 0 60px rgba(var(--k-acc-rgb),.22)!important}
#kmu .imm-panel.done{box-shadow:0 0 40px 20px var(--cz-halo),0 0 50px rgba(224,134,0,.18)!important}
#kmu .imm-panel>header,#kmu .imm-tb{border-bottom:0;background:var(--cz-rule-soft) bottom/100% 1px no-repeat}
#kmu .imm-kind{border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.08)}
#kmu .imm-page,#kmu .imm-slide,#kmu .imm-tree,#kmu .imm-vprev{border-color:transparent!important;border-radius:10px;background:rgba(var(--k-acc-rgb),.035)}
#kmu .imm-thumbs b{border-color:transparent;border-radius:6px;background:rgba(var(--k-acc-rgb),.06)}
#kmu .imm-thumbs b.cur{box-shadow:0 0 0 1.5px var(--k-acc),0 0 10px var(--cz-glow)}
#kmu .imm-note{border:0;border-radius:14px;background:radial-gradient(120% 140% at 0% 50%,rgba(224,134,0,.12),rgba(var(--k-bg-rgb),.96) 60%)!important;box-shadow:0 0 22px 8px var(--cz-halo)}   /* V15: the same soft warm glow as the cards that wait for you, no hard edge */

/* ---------- phone ---------- */
body.kmu-phone #kmu #kmu-dock{padding:6px 10px}
body.kmu-phone #kmu .kmu-dv span,body.kmu-phone #kmu .kmu-dock-ow span{display:none}
body.kmu-phone #kmu .kmu-dv,body.kmu-phone #kmu .kmu-dock-ow{width:36px}
#kmu .imm-speed{border:0}
.kmu-hist{display:inline-flex;gap:0;flex:none;margin-left:2px}
.kmu-hist .kmu-tb{width:24px;color:var(--k-mute)}
body.kmu-phone .kmu-hist{display:none}
/* the activity panel (动态): rows without boxes; what needs you keeps an amber edge of light */
:is(#kmu,.km-ow-host) .km-ow-row{border:0!important;border-radius:10px}
:is(#kmu,.km-ow-host) .km-ow-need,:is(#kmu,.km-ow-host) .km-ow-row.need{border:0!important;border-radius:16px;background:radial-gradient(120% 140% at 0% 50%,rgba(224,134,0,.12),rgba(224,134,0,.035) 55%,transparent 85%)!important;box-shadow:none!important}   /* V15: a soft warm glow, no hard edge; V18: the same in 面板视图's 动态 */
:is(#kmu,.km-ow-host) .km-ow-need .km-ow-av{position:relative}
:is(#kmu,.km-ow-host) .km-ow-need .km-ow-av::after{content:"";position:absolute;left:-3px;top:-3px;width:9px;height:9px;border-radius:50%;background:#E08600;box-shadow:0 0 0 2px var(--cz-solid,var(--k-bg)),0 0 8px rgba(224,134,0,.6)}
:is(#kmu,.km-ow-host) .km-ow-no,:is(#kmu,.km-ow-host) .km-ow-ic{border:0!important;background:rgba(var(--k-acc-rgb),.08)!important}
:is(#kmu,.km-ow-host) .km-ow-ok{border-radius:999px;box-shadow:0 0 14px var(--cz-glow)}
/* phone: the dock is icons only, so your agents keep room */
body.kmu-phone #kmu .kmu-dock-btn span,body.kmu-phone #kmu .kmu-dv span,body.kmu-phone #kmu .kmu-dock-ow span{display:none}
body.kmu-phone #kmu .kmu-dock-btn,body.kmu-phone #kmu .kmu-dv,body.kmu-phone #kmu .kmu-dock-ow{width:32px}
body.kmu-phone #kmu .kmu-dock-add,body.kmu-phone #kmu .kmu-dock-add+.kmu-dock-sep{display:none}
body.kmu-phone #kmu .kmu-dock-agents{min-width:110px}
/* the call you are in, in the dock: a soft glowing capsule, no outline (same size as before) */
#kmu .kmu-dock-call{border-color:transparent;border-radius:999px;background:radial-gradient(ellipse at 50% 50%,rgba(var(--k-acc-rgb),.16),rgba(var(--k-acc-rgb),.05) 80%)}

/* V14 · exploring: the open windows (chat, cards, DMs) and the activity panel step aside, so the sky has the whole screen.
   They keep their state and come back as they were when you leave 探索; a galaxy's own card stays. */
body.km-u.kmu-exploring #kmu .kmw:not(.kmw-galaxy),body.km-u.kmu-exploring #kmu #kmu-ow{opacity:0!important;visibility:hidden!important;pointer-events:none!important;transform:translateY(10px) scale(.985);transition:opacity .35s,transform .35s,visibility 0s .35s}
body.km-u #kmu .kmw{transition:opacity .35s,transform .35s}

/* V14 · right-click menus (both views; src/kmind/ctx.js): a small pane of glass, rows of words, one soft line between groups */
#km-ctx{position:fixed;z-index:2147483000;min-width:200px;max-width:300px;padding:6px;border-radius:14px;background:var(--cz-solid);box-shadow:0 0 0 1px rgba(var(--k-acc-rgb),.06),0 18px 50px -12px rgba(var(--k-sh),.35),0 0 40px 14px var(--cz-halo);font:13px/1.3 var(--font,inherit);color:var(--k-ink);animation:kmCtxIn .14s ease-out}
#km-ctx[hidden]{display:none!important}
/* 任务 5e580d78：菜单比屏幕高时在自己里面滚动，不再伸到屏幕外够不着（手机上星球头的 ⋯ 收了头部那几颗之后有二十来项，640px 高的屏放不下）；
   src/kmind/ctx.js 的 open() 量的是限高之后的高度，所以它上下各留 8px */
#km-ctx{max-height:calc(100vh - 16px);max-height:calc(100dvh - 16px);overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
#km-ctx .km-ctx-h{padding:6px 10px 4px;font-size:10.5px;font-weight:650;letter-spacing:.08em;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#km-ctx button{display:flex;align-items:center;gap:9px;width:100%;padding:7px 10px;border:0;border-radius:9px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;position:relative}
#km-ctx button svg,#km-ctx .km-ctx-gap{width:15px;height:15px;flex:none;color:var(--k-acc);opacity:.85}
#km-ctx button span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#km-ctx button em{font-style:normal;font-size:11px;color:var(--k-dim)}
#km-ctx button:hover,#km-ctx button:focus-visible{background:rgba(var(--k-acc-rgb),.09);color:var(--k-acc);outline:none}
#km-ctx button:hover::before,#km-ctx button:focus-visible::before{content:'';position:absolute;left:0;top:8px;bottom:8px;width:2px;border-radius:2px;background:var(--k-acc);box-shadow:0 0 8px var(--cz-glow)}
#km-ctx button[disabled]{opacity:.4;cursor:default}
#km-ctx .km-ctx-danger{color:var(--k-danger)}
#km-ctx .km-ctx-sep{display:block;height:1px;margin:5px 8px;background:var(--cz-rule-soft)}
@keyframes kmCtxIn{from{opacity:0;transform:translateY(-3px) scale(.98)}to{opacity:1;transform:none}}

/* V14 · an agent at work — in the dock and 我的智能体 (V34: along its diamond frame, src/kmind/kmind.css · .km-wk), bars in 动态 (KM.work; demo tasks: src/kmind/demo.js) */
@property --wp{syntax:'<number>';inherits:true;initial-value:0}
#kmu .kmu-dock-agent{position:relative}
.km-agent-row{position:relative}
.km-work-tag{font-style:normal;font-size:10px;font-weight:600;letter-spacing:.02em;color:var(--cz-acc,#6FA8FF);margin-right:5px;padding:0 5px;border-radius:6px;background:color-mix(in srgb,var(--cz-acc,#6FA8FF) 14%,transparent)}
.km-ow-t{position:relative}
.km-ow-bar{display:block;height:2px;margin:3px 0 2px;border-radius:2px;background:rgba(127,140,170,.18);overflow:hidden;position:relative}
.km-ow-bar::after{content:"";position:absolute;inset:0;transform-origin:left;transform:scaleX(var(--wp));background:linear-gradient(90deg,var(--cz-acc,#6FA8FF),color-mix(in srgb,var(--cz-acc,#6FA8FF) 55%,#fff));transition:transform .9s ease}
.km-ow-bar-run::after{transform:none;width:30%;animation:kmuWorkRun 1.6s ease-in-out infinite}
@keyframes kmuWorkRun{from{transform:translateX(-100%)}to{transform:translateX(330%)}}
.km-demo-chip{font-style:normal;font-size:9.5px;font-weight:600;letter-spacing:.04em;padding:0 5px;border-radius:5px;color:#B97A00;background:rgba(224,134,0,.13);border:1px dashed rgba(224,134,0,.45);flex:none}
/* V24: the sample work (src/kmind/demo.js) is not marked in the interface; the chip stays in the markup for whoever connects the backend */
.km-demo-chip{display:none!important}
@media (prefers-reduced-motion:reduce){.km-ow-bar-run::after{animation:none}}
.message-meta .km-demo-chip{margin-left:6px;align-self:center}
body.km-u .channelhead .km-en{display:none}
#kmu .kmu-hit{touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}   /* V14: on touch screens the finger holds, drags and turns here, not the page */
#kmu .kmu-bar{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 26px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 26px),transparent)}   /* V14: what does not fit fades out (it scrolls) */

/* ---------- V16 · the chat filling the screen (最大化): no handles, no dragging; the planet bar, the dock and 动态 step aside ---------- */
#kmu .kmw.kmw-maxed{background:var(--cz-solid)!important;border-radius:18px}
#kmu .kmw.kmw-maxed .kmw-rz{display:none}
#kmu .kmw.kmw-maxed .kmw-head{cursor:default}
#kmu .kmw-maxb[aria-pressed="true"]{color:var(--k-acc)}
body.kmu-chatmax #kmu-dock,body.kmu-chatmax #kmu-bar,body.kmu-chatmax #kmu-ow,body.kmu-chatmax .kmu-barpop{display:none!important}
body.kmu-phone #kmu .kmw-chat.kmw-sheet.kmw-maxed{top:52px;bottom:22px;height:auto;border-radius:16px}
#kmu .kmu-pill.kmu-ico{padding:0 6px;margin-left:-4px}

/* ---------- V17 · many agents: the row has a set width and slides; your own order, with a mark where a dragged agent lands ---------- */
#kmu .kmu-dock-agents{max-width:min(var(--kmu-sec-len,468px),calc(100vw - 560px));scroll-snap-type:x proximity;scroll-behavior:smooth;position:relative}
#kmu #kmu-dock[data-pos="left"] .kmu-dock-agents,#kmu #kmu-dock[data-pos="right"] .kmu-dock-agents{max-width:none;max-height:min(var(--kmu-sec-len,220px),calc(100vh - 540px));scroll-snap-type:y proximity}
#kmu #kmu-dock[data-pos="left"],#kmu #kmu-dock[data-pos="right"]{gap:2px;padding:10px 6px}
#kmu #kmu-dock[data-pos="left"] :is(.kmu-dock-btn,.kmu-dock-ow),#kmu #kmu-dock[data-pos="right"] :is(.kmu-dock-btn,.kmu-dock-ow){padding:2px 2px 1px;gap:2px}
#kmu #kmu-dock[data-pos="left"] .kmu-dock-add,#kmu #kmu-dock[data-pos="right"] .kmu-dock-add{width:30px;height:30px;margin:1px 0}
#kmu .kmu-dock-agents .kmu-dock-agent{scroll-snap-align:start}
#kmu .kmu-dock-agents.kmu-ordering{scroll-snap-type:none;scroll-behavior:auto}
#kmu .kmu-dock-agents.kmu-ov-l{-webkit-mask-image:linear-gradient(90deg,transparent,#000 26px);mask-image:linear-gradient(90deg,transparent,#000 26px)}
#kmu .kmu-dock-agents.kmu-ov-r{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 26px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 26px),transparent)}
#kmu .kmu-dock-agents.kmu-ov-l.kmu-ov-r{-webkit-mask-image:linear-gradient(90deg,transparent,#000 26px,#000 calc(100% - 26px),transparent);mask-image:linear-gradient(90deg,transparent,#000 26px,#000 calc(100% - 26px),transparent)}
#kmu #kmu-dock[data-pos="left"] .kmu-dock-agents.kmu-ov-l,#kmu #kmu-dock[data-pos="right"] .kmu-dock-agents.kmu-ov-l{-webkit-mask-image:linear-gradient(180deg,transparent,#000 20px);mask-image:linear-gradient(180deg,transparent,#000 20px)}
#kmu #kmu-dock[data-pos="left"] .kmu-dock-agents.kmu-ov-r,#kmu #kmu-dock[data-pos="right"] .kmu-dock-agents.kmu-ov-r{-webkit-mask-image:linear-gradient(180deg,#000 calc(100% - 20px),transparent);mask-image:linear-gradient(180deg,#000 calc(100% - 20px),transparent)}
#kmu #kmu-dock[data-pos="left"] .kmu-dock-agents.kmu-ov-l.kmu-ov-r,#kmu #kmu-dock[data-pos="right"] .kmu-dock-agents.kmu-ov-l.kmu-ov-r{-webkit-mask-image:linear-gradient(180deg,transparent,#000 20px,#000 calc(100% - 20px),transparent);mask-image:linear-gradient(180deg,transparent,#000 20px,#000 calc(100% - 20px),transparent)}
#kmu .kmu-dock-scroll{display:grid;place-items:center;width:20px;height:44px;flex:none;padding:0;border:0;border-radius:6px;background:transparent;color:var(--k-dim);cursor:pointer;transition:color .15s,opacity .15s}
#kmu #kmu-dock[data-pos="left"] .kmu-dock-scroll,#kmu #kmu-dock[data-pos="right"] .kmu-dock-scroll{width:44px;height:18px}
#kmu #kmu-dock[data-pos="left"] .kmu-dock-scroll svg,#kmu #kmu-dock[data-pos="right"] .kmu-dock-scroll svg{transform:rotate(90deg)}
#kmu .kmu-dock-scroll[hidden]{display:none}
#kmu .kmu-dock-scroll:hover:not(:disabled){color:var(--k-acc)}
#kmu .kmu-dock-scroll:disabled{opacity:.28;cursor:default}
#kmu [data-dock-item].kmu-ins-l::before,#kmu [data-dock-item].kmu-ins-r::before,#kmu .kmu-dock-agent.kmu-ins-l::before,#kmu .kmu-dock-agent.kmu-ins-r::before{content:"";position:absolute;top:4px;bottom:4px;width:2px;border-radius:2px;background:var(--k-acc);box-shadow:0 0 8px var(--cz-glow);z-index:2}
#kmu .kmu-dock-agent.kmu-gdrag{opacity:.42;transform:translateY(-3px);transition:opacity .15s,transform .15s}   /* V34: dragging a leader, its group goes with it */
#kmu [data-dock-item].kmu-ins-l::before,#kmu .kmu-dock-agent.kmu-ins-l::before{left:-1px}
#kmu [data-dock-item].kmu-ins-r::before,#kmu .kmu-dock-agent.kmu-ins-r::before{right:-1px}
#kmu #kmu-dock[data-pos="left"] [data-dock-item].kmu-ins-l::before,#kmu #kmu-dock[data-pos="right"] [data-dock-item].kmu-ins-l::before{left:4px;right:4px;top:-1px;bottom:auto;width:auto;height:2px}
#kmu #kmu-dock[data-pos="left"] [data-dock-item].kmu-ins-r::before,#kmu #kmu-dock[data-pos="right"] [data-dock-item].kmu-ins-r::before{left:4px;right:4px;bottom:-1px;top:auto;width:auto;height:2px}
/* 任务 f5001241 · 停靠栏自定义 / 排序模式 / 溢出区（无边框 edgeless） */
#kmu #kmu-dock.kmu-dock-sorting [data-dock-item].kmu-dock-mutable{cursor:grab;background:radial-gradient(circle,rgba(var(--k-acc-rgb),.14),transparent 76%)!important;border-radius:10px}
#kmu #kmu-dock.kmu-dock-sorting [data-dock-item].kmu-dock-locked{opacity:.52;cursor:not-allowed}
#kmu #kmu-dock.kmu-dock-sorting .kmu-dock-dragging-item{opacity:.35}
#kmu .kmu-dock-sec-rz{width:6px;height:26px;border-radius:4px;background:rgba(var(--k-acc-rgb),.38);box-shadow:0 0 8px var(--cz-glow);cursor:ew-resize;flex:none;margin:0 2px}
#kmu .kmu-dock-sec-rz[hidden]{display:none}
#kmu #kmu-dock[data-pos="left"] .kmu-dock-sec-rz,#kmu #kmu-dock[data-pos="right"] .kmu-dock-sec-rz{width:26px;height:6px;cursor:ns-resize;margin:2px 0}
#kmu #kmu-dock-more.kmu-drop-hot{color:var(--k-acc)!important;filter:drop-shadow(0 0 8px var(--cz-glow))}
#kmu .kmu-dock-panel,#kmu .kmu-dock-ovpop{position:fixed;z-index:1300;width:336px;max-width:calc(100vw - 16px);max-height:calc(100vh - 96px);overflow:auto;padding:12px 14px;border:0!important;border-radius:16px;background:var(--cz-solid,var(--cz-bg))!important;box-shadow:0 0 38px 18px var(--cz-halo)!important;color:var(--k-ink);font-size:12.5px}
#kmu .kmu-dock-ovpop{width:210px;padding:8px}
#kmu .kmu-dock-panel[hidden],#kmu .kmu-dock-ovpop[hidden]{display:none!important}
.kmu-dp-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-bottom:6px;background:var(--cz-rule-soft) bottom/100% 1px no-repeat}
.kmu-dp-head b{font-size:13.5px;font-weight:650}
.kmu-dp-x,.kmu-dp-done{border:0;background:rgba(var(--k-acc-rgb),.14);color:var(--k-acc);border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600;cursor:pointer}
.kmu-dp-x:hover,.kmu-dp-done:hover{background:rgba(var(--k-acc-rgb),.24);box-shadow:0 0 12px var(--cz-glow)}
.kmu-dp-sub{font-size:11px;color:var(--k-dim);margin:6px 0 8px;line-height:1.4}
.kmu-dp-list{display:flex;flex-direction:column;gap:3px;max-height:260px;overflow:auto;padding:2px 0}
.kmu-dp-row,.kmu-dp-srow{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:10px;background:rgba(var(--k-acc-rgb),.04);border:0!important}
.kmu-dp-row:hover:not(.is-locked),.kmu-dp-srow:hover:not(.is-locked){background:rgba(var(--k-acc-rgb),.1)}
.kmu-dp-row.is-locked,.kmu-dp-srow.is-locked{opacity:.65}
.kmu-dp-ic{display:inline-flex;color:var(--k-acc);flex:none}
.kmu-dp-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:550}
.kmu-dp-tag{font-style:normal;font-size:10px;padding:2px 6px;border-radius:999px;background:rgba(var(--k-acc-rgb),.12);color:var(--k-acc);flex:none}
.kmu-dp-tag.locked{background:rgba(127,140,170,.14);color:var(--k-dim)}
.kmu-dp-tag.overflow{background:rgba(224,134,0,.16);color:var(--k-amber,#E08600)}
.kmu-dp-grip{font-size:11px;color:var(--k-dim);width:16px;text-align:center;flex:none}
.kmu-dp-sacts{display:inline-flex;align-items:center;gap:3px;flex:none}
.kmu-dp-sacts button,.kmu-dp-addsep,.kmu-dp-foot button,.kmu-ov-putback{border:0!important;border-radius:999px;background:rgba(var(--k-acc-rgb),.1);color:var(--k-ink2);padding:2px 8px;font-size:11px;cursor:pointer}
.kmu-dp-sacts button:hover:not(:disabled),.kmu-dp-addsep:hover,.kmu-dp-foot button:hover,.kmu-ov-putback:hover{background:rgba(var(--k-acc-rgb),.22);color:var(--k-acc)}
.kmu-dp-sacts button:disabled{opacity:.3;cursor:default}
.kmu-dp-sacts .kmu-dp-ovb.on{background:rgba(224,134,0,.2);color:var(--k-amber,#E08600)}
.kmu-dp-opt{display:flex;align-items:flex-start;gap:7px;margin:8px 0 4px;padding:6px 8px;border-radius:10px;background:rgba(var(--k-acc-rgb),.06);font-size:11.5px;color:var(--k-ink2);cursor:pointer;line-height:1.35}
.kmu-dp-bars{display:flex;flex-direction:column;gap:6px;margin:6px 0;padding:6px 8px;border-radius:10px;background:rgba(var(--k-acc-rgb),.04)}
.kmu-dp-slider{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--k-ink2)}
.kmu-dp-slider input[type="range"]{flex:1;min-width:60px;accent-color:var(--k-acc)}
.kmu-dp-slider b{font-family:"JetBrains Mono",monospace;font-size:10.5px;color:var(--k-acc);min-width:36px;text-align:right}
.kmu-dp-foot{display:flex;justify-content:space-between;gap:8px;margin-top:8px;padding-top:8px;background:var(--cz-rule-soft) top/100% 1px no-repeat}
.kmu-ov-row{display:flex;align-items:center;gap:4px}
.kmu-ov-go{flex:1;display:flex;align-items:center;gap:8px;padding:7px 9px;border:0!important;border-radius:9px;background:transparent;color:var(--k-ink);font-size:12.5px;cursor:pointer;text-align:left}
.kmu-ov-go:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.14),transparent 90%);color:var(--k-acc)}
.kmu-dp-empty{font-size:11.5px;color:var(--k-dim);padding:6px 8px;line-height:1.4}
body.kmu-phone #kmu .kmu-dock-agents{max-width:none;flex:1}
body.kmu-phone #kmu .kmu-dock-scroll{display:none}

/* ---------- V17 · 动态 with many agents: group them, fold a group, see who shares which planets ---------- */
.km-ow-tools{display:flex;align-items:center;gap:8px;margin:-2px 0 2px;min-width:0}
/* V24 · 只看这颗星球: one switch under 动态's head (both views) */
.km-ow-filter{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 6px}
.km-ow-only,.km-ow-imm{display:inline-flex;align-items:center;gap:6px;max-width:100%;height:26px;padding:0 11px 0 9px;border:0;border-radius:999px;cursor:pointer;font:inherit;font-size:12px;font-weight:600;color:var(--k-ink2);background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 0 0 1px var(--k-line)}
.km-ow-only em{font-style:normal;font-weight:500;color:var(--k-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-ow-only:hover,.km-ow-imm:hover{color:var(--k-acc)}
.km-ow-only.on,.km-ow-imm.on{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.13);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.35)}
.km-ow-only.on em{color:var(--k-acc)}
.km-ow-dmtog{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 10px 0 8px;flex:none;border:0;border-radius:999px;cursor:pointer;font:inherit;font-size:11.5px;font-weight:600;white-space:nowrap;color:var(--k-ink2);background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 0 0 1px var(--k-line);transition:background .15s,color .15s,box-shadow .15s}   /* V36 · 单击私信, right of the grouping chips */
.km-ow-dmtog svg{flex:none;opacity:.7}
.km-ow-dmtog:hover{color:var(--k-acc)}
.km-ow-dmtog.on{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.13);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.35)}
.km-ow-dmtog.on svg{opacity:1}
html[data-km-edge=none] .km-ow-dmtog{box-shadow:none;background:rgba(var(--k-layer-rgb),.08)}
html[data-km-edge=none] .km-ow-dmtog.on{background:rgba(var(--k-acc-rgb),.2);color:var(--k-ink);box-shadow:0 0 14px -4px rgba(var(--k-acc-rgb),.75)}
.km-ow-gb{display:inline-flex;align-items:center;gap:1px;padding:2px;border-radius:999px;background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 0 0 1px var(--k-line);overflow-x:auto;scrollbar-width:none;min-width:0;flex:0 1 auto}
.km-ow-gb::-webkit-scrollbar{display:none}
.km-ow-gb button{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 9px;border:0;border-radius:999px;background:transparent;color:var(--k-ink2);font:inherit;font-size:11.5px;white-space:nowrap;cursor:pointer;transition:background .15s,color .15s}
.km-ow-gb button svg{opacity:.7;flex:none}
.km-ow-gb button:hover{color:var(--k-acc)}
.km-ow-gb button.on{background:var(--k-bg);color:var(--k-acc);font-weight:600;box-shadow:0 1px 3px rgba(var(--k-sh),.14),inset 0 0 0 1px rgba(var(--k-acc-rgb),.22)}
.km-ow-gb button.on svg{opacity:1}
.km-ow-rel{display:inline-flex;align-items:center;gap:5px;height:28px;margin-left:auto;padding:0 12px;flex:none;border:0;border-radius:999px;color:var(--k-acc);font:inherit;font-size:12px;font-weight:600;cursor:pointer;
  background:radial-gradient(ellipse 80% 120% at 30% 50%,rgba(var(--k-acc-rgb),.16),rgba(var(--k-acc-rgb),.05) 80%);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.28);transition:box-shadow .15s,background .15s}
.km-ow-rel:hover{box-shadow:inset 0 0 0 1px var(--k-acc),0 0 14px var(--cz-glow)}
.km-ow-grp{position:sticky;top:-12px;z-index:2;margin:6px -6px 0;padding:0 6px;background:linear-gradient(var(--cz-solid,var(--k-bg)) 70%,transparent)}
.km-ow-rows.km-ow-grouped .km-ow-grp:first-child{margin-top:0}
.km-ow-gh{display:flex;align-items:center;gap:7px;width:100%;height:30px;padding:0 4px;border:0;background:var(--cz-rule-soft) bottom/100% 1px no-repeat;color:var(--k-ink);font:inherit;text-align:left;cursor:pointer}
.km-ow-gh>svg{flex:none;color:var(--k-dim);transition:transform .2s}
.km-ow-grp.fold .km-ow-gh>svg{transform:rotate(-90deg)}
.km-ow-gh b{font-size:12.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.km-ow-gh small{font:500 9px/1 "JetBrains Mono",ui-monospace,monospace;letter-spacing:.14em;color:var(--k-dim);text-transform:uppercase;white-space:nowrap}
.km-ow-gh em{margin-left:auto;font:600 10.5px/1 "JetBrains Mono",ui-monospace,monospace;font-style:normal;color:var(--k-dim);padding:3px 7px;border-radius:999px;background:rgba(var(--k-acc-rgb),.07)}
.km-ow-gbusy{display:inline-flex;align-items:center;gap:4px;font:600 10.5px/1 "JetBrains Mono",ui-monospace,monospace;font-style:normal;color:var(--k-acc)}
.km-ow-gbusy::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 6px var(--cz-glow)}
.km-ow-gh:hover b{color:var(--k-acc)}
body.fx-off-en .km-ow-gh small{display:none}
body.kmu-phone .km-ow-gb button span{display:none}
body.kmu-phone .km-ow-gb button.on span{display:inline}

/* ---------- V17 · 关系: a simplified planets view of where your agents meet (src/universe/relations.js) ---------- */
.km-rel-sub{margin-left:8px;font-size:11px;font-weight:500;color:var(--k-dim)}
.km-rel{display:flex;flex-direction:column;min-height:100%}
.km-rel-bar{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:12px;padding:10px 14px 8px;background:linear-gradient(var(--cz-solid,var(--k-bg)) 75%,transparent)}
.km-rel-seg{display:inline-flex;gap:1px;padding:2px;border-radius:999px;background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 0 0 1px var(--k-line)}
.km-rel-seg button{height:26px;padding:0 13px;border:0;border-radius:999px;background:transparent;color:var(--k-ink2);font:inherit;font-size:12px;cursor:pointer}
.km-rel-seg button:hover{color:var(--k-acc)}
.km-rel-seg button.on{background:var(--k-bg);color:var(--k-acc);font-weight:600;box-shadow:0 1px 3px rgba(var(--k-sh),.14),inset 0 0 0 1px rgba(var(--k-acc-rgb),.22)}
.km-rel-sum{margin-left:auto;font:500 11px/1 "JetBrains Mono","Plex SC",monospace;color:var(--k-dim)}
.km-rel-stage{position:relative;flex:none;margin:0 6px 10px}
.km-rel-svg{position:absolute;left:0;top:0;overflow:visible}
.km-rel-ring{fill:none;stroke:rgba(var(--k-acc-rgb),.22);stroke-width:1;stroke-dasharray:2 4}
.km-rel-ring2{fill:none;stroke:rgba(var(--k-acc-rgb),.07);stroke-width:1}
.km-rel-link{fill:none;stroke:var(--c);stroke-width:1.2;stroke-opacity:.32;transition:stroke-opacity .2s,stroke-width .2s}
.km-rel-halo{fill:var(--c);fill-opacity:.12;transition:fill-opacity .2s}
.km-rel-dot{stroke:rgba(var(--k-bg-rgb),.9);stroke-width:1.2}
.km-rel-pl{cursor:pointer}
.km-rel-stage.hot .km-rel-link{stroke-opacity:.06}
.km-rel-stage.hot .km-rel-link.lit{stroke-opacity:.95;stroke-width:2}
.km-rel-stage.hot .km-rel-pl{opacity:.25;transition:opacity .2s}
.km-rel-stage.hot .km-rel-pl.lit{opacity:1}
.km-rel-stage.hot .km-rel-pl.lit .km-rel-halo{fill-opacity:.3}
.km-rel-u{position:absolute;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:3px;max-width:120px;pointer-events:none;text-align:center}
.km-rel-u b{font-size:11.5px;font-weight:650;color:var(--k-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}
.km-rel-u small{font:500 9.5px/1 "JetBrains Mono","Plex SC",monospace;color:var(--k-dim)}
.km-rel-pn{position:absolute;display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border:0;border-radius:999px;background:rgba(var(--k-bg-rgb),.72);color:var(--k-ink2);font:inherit;font-size:11px;white-space:nowrap;cursor:pointer;transition:color .15s,opacity .2s}
.km-rel-pn.r{transform:translate(var(--o),-50%)}
.km-rel-pn.l{transform:translate(calc(-100% - var(--o)),-50%)}
.km-rel-pn.t{transform:translate(-50%,calc(-100% - var(--o)))}
.km-rel-pn.b{transform:translate(-50%,var(--o))}
.km-rel-pn b{font-weight:600;color:var(--c)}
.km-rel-pn em{font:600 9.5px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-dim)}
.km-rel-pn:hover b{text-decoration:underline;text-underline-offset:2px}
.km-rel-stage.hot .km-rel-pn{opacity:.3}
.km-rel-stage.hot .km-rel-pn.lit{opacity:1}
.km-rel-gl{position:absolute;left:12px;font:500 9.5px/1 "JetBrains Mono","Plex SC",monospace;letter-spacing:.06em;color:var(--k-dim);white-space:nowrap;max-width:150px;overflow:hidden;text-overflow:ellipsis}
.km-rel-a{position:absolute;left:6px;width:172px;transform:translateY(-50%);display:flex;align-items:center;gap:8px;height:32px;padding:0 8px 0 4px;border:0;border-radius:10px;background:transparent;color:var(--k-ink);font:inherit;text-align:left;cursor:pointer;transition:background .15s,opacity .2s}
.km-rel-a b{flex:1;min-width:0;font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-rel-a em{font:600 10px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-dim);padding:3px 6px;border-radius:999px;background:rgba(var(--k-acc-rgb),.07)}
.km-rel-a:hover,.km-rel-a.lit{background:radial-gradient(ellipse 90% 100% at 20% 50%,rgba(var(--k-acc-rgb),.14),transparent 85%)}
.km-rel-a.none{opacity:.42}
.km-rel-stage.hot .km-rel-a{opacity:.3}
.km-rel-stage.hot .km-rel-a.lit{opacity:1}
.km-rel-empty{position:absolute;left:200px;right:20px;top:40px;display:flex;flex-direction:column;align-items:center;gap:8px;padding:40px 10px;color:var(--k-dim);text-align:center}
.km-rel-empty b{font-size:13px;color:var(--k-ink2)}
.km-rel-empty small{font-size:12px}
.kmw-rel .kmw-body{overflow:auto}
#kmu .kmw.kmw-rel{background:var(--cz-solid)!important}

/* ---------- V22 · 一个标题栏 ONE HEAD: open, the chat window's own header (# planet, its tools) is the window's head; the window's
   minimize / maximize buttons sit at its right end. Collapsed, the window's title comes back (the header is hidden with the body).
   Dragging and double-clicking the header's empty part move and maximize the window (win.js o.grip). Not on a phone (the sheet keeps its handle). ---------- */
body:not(.kmu-phone) #kmu .kmw-chat:not(.kmw-collapsed)>.kmw-head{position:absolute;top:0;right:0;left:auto;height:49px;padding:0 8px 0 4px;gap:2px;z-index:7;background:none!important;border:0!important}
body:not(.kmu-phone) #kmu .kmw-chat:not(.kmw-collapsed)>.kmw-head>.kmw-ic,body:not(.kmu-phone) #kmu .kmw-chat:not(.kmw-collapsed)>.kmw-head>.kmw-title{display:none}
body:not(.kmu-phone) #kmu .kmw-chat:not(.kmw-collapsed) .workspace>.channelhead{padding-right:66px;cursor:grab}
body:not(.kmu-phone) #kmu .kmw-chat.kmw-maxed .workspace>.channelhead{cursor:default}
body:not(.kmu-phone) #kmu .kmw-chat.kmw-active .workspace>.channelhead{cursor:grabbing}
/* the start of a planet channel: its name is already in the head right above; the topic and its settings stay */
#kmu .kmw-chat .channel-intro-small:has(p) h2{display:none}
#kmu .kmw-chat .channel-intro-small:has(p) p{margin-top:0}
/* a planet forum: 开放 / 已关闭 / 全部 share a line with the sort, the layout and the tags (two lines of controls, not three) */
#kmu .kmw-chat .forum-main{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr)}
#kmu .kmw-chat .forum-top{display:contents}
#kmu .kmw-chat .forum-searchbar{grid-column:1/-1;grid-row:1;margin:14px 13px 0}
#kmu .kmw-chat .lc-forum-tabs{grid-column:1;grid-row:2;align-self:start;margin:13px 0 6px 13px;padding:0;flex-wrap:nowrap}
#kmu .kmw-chat .forum-filters{grid-column:2;grid-row:2;align-self:start;padding:12px 13px 6px 10px}
#kmu .kmw-chat .forum-list{grid-column:1/-1;grid-row:3}
/* V33 · the dock: one cluster per group (a small gap and a hairline where the next group starts); a moon's name in the bar */
#kmu .kmu-dock-agent.kmu-gstart{margin-left:9px}
#kmu .kmu-dock-agent.kmu-gstart:not(.kmu-ins-l):not(.kmu-ins-r)::before{content:"";position:absolute;left:-5px;top:9px;height:26px;width:1px;background:rgba(127,140,170,.32);pointer-events:none}
#kmu .kmu-gname{display:inline-flex;align-items:center}
#kmu .kmu-st-g .kmu-st-go{align-items:center}
#kmu .kmu-st-g .km-g-dia{margin:0 6px 0 4px}

/* ==== src/kmind/panel.css ==== */
/* KMind 宇宙交互 V17 · 面板视图 in the universe's own style.
   Loaded last; every rule here is scoped to the panel view (body:not(.km-u)), so the universe view is untouched.
   The same language as the universe view (src/universe/cosmos.css):
   - The ground is the sky: the same pale (白昼) or graphite (夜间) radial ground, with a faint dust of stars.
   - No boxes. Panels are soft fields of glass that fade into the sky at their edges; no outlines.
   - One line of light at most: a hairline that fades out at both ends, under a heading or along a panel's side.
   - Buttons are words and glyphs: hover lights the word and draws a short line of light; on = accent colour and a small dot.
     Primary actions keep a soft glowing pill.
   - Rows (channels, members, messages) light up as a fading band from the left; the current one has a thin bar of light.
   Nothing is hidden or moved: only colour, outline, radius and light change. Dialogs and toasts share the universe's rules. */

/* ---------- the ground ---------- */
body:not(.km-u){background:var(--k-ubg) fixed;background-color:var(--k-bg2)}
body:not(.km-u)::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.55;
  background-image:radial-gradient(1px 1px at 12% 18%,rgba(var(--k-acc-rgb),.5),transparent 60%),radial-gradient(1px 1px at 68% 9%,rgba(var(--k-acc-rgb),.45),transparent 60%),
    radial-gradient(1.2px 1.2px at 84% 62%,rgba(var(--k-acc-rgb),.4),transparent 60%),radial-gradient(1px 1px at 33% 77%,rgba(var(--k-acc-rgb),.42),transparent 60%),
    radial-gradient(1px 1px at 52% 41%,rgba(var(--k-acc-rgb),.3),transparent 60%),radial-gradient(1px 1px at 91% 28%,rgba(var(--k-acc-rgb),.38),transparent 60%),
    radial-gradient(ellipse 60% 50% at 8% 0%,rgba(var(--k-acc-rgb),.07),transparent 70%),radial-gradient(ellipse 50% 45% at 100% 100%,rgba(var(--k-acc-rgb),.06),transparent 70%);
  background-size:340px 300px,420px 380px,380px 420px,300px 340px,460px 300px,520px 460px,100% 100%,100% 100%}
html[data-theme=night] body:not(.km-u)::before{opacity:.8;filter:brightness(1.6)}
body:not(.km-u) .app{position:relative;z-index:1;background:transparent}
body:not(.km-u) *{scrollbar-width:thin;scrollbar-color:rgba(var(--k-acc-rgb),.22) transparent}

/* ---------- the title line: floating words and glyphs ---------- */
body:not(.km-u) .titlebar{background:transparent}
body:not(.km-u) .windowdots i{background:rgba(var(--k-acc-rgb),.16)}
body:not(.km-u) .ib{border-radius:10px;transition:color .15s}
body:not(.km-u) .ib:hover{background:transparent;color:var(--k-acc)}
body:not(.km-u) .ib:hover svg,body:not(.km-u) .ib:hover .ico{filter:drop-shadow(0 0 5px var(--cz-glow))}
body:not(.km-u) .ib[aria-pressed=true]{color:var(--k-acc)}
body:not(.km-u) .km-view-switch{border:0!important;background:radial-gradient(ellipse at 50% 60%,rgba(var(--k-acc-rgb),.16),rgba(var(--k-acc-rgb),0) 75%)!important;color:var(--k-acc)!important;box-shadow:none!important;text-shadow:0 0 14px var(--cz-glow)}
body:not(.km-u) .km-view-switch:hover{background:radial-gradient(ellipse at 50% 60%,rgba(var(--k-acc-rgb),.26),rgba(var(--k-acc-rgb),0) 78%)!important}
body:not(.km-u) .km-view-switch:hover svg{filter:drop-shadow(0 0 6px var(--cz-glow))}
html[data-theme=night] body:not(.km-u) .km-view-switch{color:#CFE0FF!important}

/* ---------- the universes down the side ---------- */
body:not(.km-u) .rail{background:transparent}
body:not(.km-u) .rail .separator{background:linear-gradient(90deg,transparent,var(--cz-line),transparent)}
body:not(.km-u) .server{transition:box-shadow .2s,transform .15s,filter .2s}
body:not(.km-u) .server:hover{transform:translateY(-1px);filter:drop-shadow(0 0 8px var(--cz-glow))}
body:not(.km-u) .server.active{box-shadow:0 0 0 2px rgba(var(--k-bg-rgb),.9),0 0 0 3.5px rgba(var(--k-acc-rgb),.7),0 0 18px 2px var(--cz-glow)}
body:not(.km-u) .server.active::before,body:not(.km-u) .server.unread::before{background:var(--k-acc);box-shadow:0 0 8px 1px var(--cz-glow);border-radius:999px;width:4px;left:-12px}
/* 任务 80d1b74f（修士 #24318，照 Discord）：未读 = 左边一条短竖条（墨色，不是圆点），悬停拉长；当前宇宙仍是主色长条 */
body:not(.km-u) .server.unread:not(.active)::before{height:8px;width:4px;left:-12px;background:var(--k-ink,#fff);box-shadow:none;transition:height .15s}body:not(.km-u) .server.unread:not(.active):hover::before{height:20px}body:not(.km-u) .server.active.unread::before{height:32px}
body:not(.km-u) .server.add,body:not(.km-u) .server.home{background:radial-gradient(circle,rgba(var(--k-acc-rgb),.12),transparent 72%)!important;color:var(--k-acc)}
body:not(.km-u) .server.add:hover,body:not(.km-u) .server.home:hover{background:radial-gradient(circle,rgba(var(--k-acc-rgb),.26),transparent 74%)!important}
body:not(.km-u) .server .badge{border-color:transparent}

/* ---------- the channel list: a field of glass that fades into the sky ---------- */
body:not(.km-u) .channels{border:0!important;border-radius:18px 18px 0 0;background:var(--cz-bg2)!important;box-shadow:0 0 34px 12px var(--cz-halo)}
body:not(.km-u) .serverhead,body:not(.km-u) .channelhead,body:not(.km-u) .panehead{border-bottom:0!important;background:var(--cz-rule-soft) bottom/100% 1px no-repeat!important}
body:not(.km-u) .serverhead>button:hover{color:var(--k-acc)}
body:not(.km-u) .channel-rule{border-top:0;height:1px;background:var(--cz-rule-soft)}
body:not(.km-u) .category{color:var(--k-dim);letter-spacing:.08em}
body:not(.km-u) .category>button:hover,body:not(.km-u) .category .plus:hover{color:var(--k-acc)}
body:not(.km-u) .channel,body:not(.km-u) .utility,body:not(.km-u) .dm-shortcut,body:not(.km-u) .dm-item{border-radius:10px;position:relative;transition:color .15s,background .15s}
body:not(.km-u) .channel:hover,body:not(.km-u) .utility:hover,body:not(.km-u) .dm-shortcut:hover,body:not(.km-u) .dm-item:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.09),rgba(var(--k-acc-rgb),0) 88%)!important;color:var(--k-acc)!important}
body:not(.km-u) .channel.active,body:not(.km-u) .dm-shortcut.active,body:not(.km-u) .dm-item.active,body:not(.km-u) .utility.active{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.17),rgba(var(--k-acc-rgb),0) 92%)!important;color:var(--k-acc)!important;box-shadow:inset 2px 0 0 var(--k-acc)}
body:not(.km-u) .channel.active .cname{font-weight:650}
body:not(.km-u) .channel.new::before{background:var(--k-ink,#fff);box-shadow:none;top:50%;margin-top:-4px;height:8px}
body:not(.km-u) .dm-search{border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.06)}
body:not(.km-u) .userbar{border:0!important;border-radius:16px;background:radial-gradient(ellipse 80% 120% at 25% 50%,rgba(var(--k-acc-rgb),.08),transparent 80%),var(--cz-rule-soft) top/100% 1px no-repeat!important;box-shadow:none}
body:not(.km-u) .km-agent-row:hover,body:not(.km-u) .km-agent-row.active{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.1),rgba(var(--k-acc-rgb),0) 90%)}

/* ---------- the chat: the brighter glass in the middle ---------- */
body:not(.km-u) .workspace{border:0!important;border-radius:18px 0 0 0;margin-left:8px;background:var(--cz-bg)!important;box-shadow:0 0 40px 16px var(--cz-halo)}
body:not(.km-u) .channelhead .topic{border-left:0;background:linear-gradient(transparent,var(--cz-line),transparent) left/1px 100% no-repeat}
body:not(.km-u) .searchbox input{border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.06);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.08)}
body:not(.km-u) .searchbox input:focus{outline:0;box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.42),0 0 16px rgba(var(--k-acc-rgb),.14)}
body:not(.km-u) .km-strip{border-bottom:0!important;background:radial-gradient(ellipse 60% 140% at 30% 50%,rgba(var(--k-acc-rgb),.05),transparent 75%),var(--cz-rule-soft) bottom/100% 1px no-repeat!important;position:relative}
body:not(.km-u) .km-chip,body:not(.km-u) .km-chip-btn{border:0!important;background:transparent!important;border-radius:0;position:relative;box-shadow:none}
body:not(.km-u) .km-chip-btn:hover{color:var(--k-acc);text-shadow:0 0 12px var(--cz-glow)}
body:not(.km-u) .km-chip-btn:hover::after{content:"";position:absolute;left:8px;right:8px;bottom:0;height:1px;background:var(--k-acc);box-shadow:0 0 8px var(--cz-glow)}
body:not(.km-u) .km-chip-btn.km-primary,body:not(.km-u) .km-chip-btn.on{color:var(--k-acc)!important;text-shadow:0 0 14px var(--cz-glow)}
body:not(.km-u) .km-chip-btn.km-primary::before{content:"";position:absolute;inset:0 -2px;border-radius:999px;background:radial-gradient(ellipse at 50% 60%,rgba(var(--k-acc-rgb),.17),rgba(var(--k-acc-rgb),0) 75%);z-index:-1}
body:not(.km-u) .km-chip.km-human-chip{color:var(--k-amber-ink)!important;text-shadow:none}
body:not(.km-u) .date:before,body:not(.km-u) .date:after{background:var(--cz-rule-soft)}
body:not(.km-u) .message{border-radius:12px}
body:not(.km-u) .message:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.05),rgba(var(--k-acc-rgb),0) 75%)}
body:not(.km-u) .message-actions{border:0!important;border-radius:12px;background:var(--cz-solid)!important;box-shadow:0 0 18px 6px var(--cz-halo),0 0 0 1px rgba(var(--k-acc-rgb),.07)!important}
body:not(.km-u) .reaction{border-radius:999px;background:rgba(var(--k-acc-rgb),.07);border-color:transparent}
body:not(.km-u) .reaction[aria-pressed=true]{background:rgba(var(--k-acc-rgb),.16);border-color:transparent;box-shadow:0 0 10px rgba(var(--k-acc-rgb),.18)}
body:not(.km-u) .attachment,body:not(.km-u) .msgfile-img,body:not(.km-u) .message-text pre{border:0!important;border-radius:14px;background:rgba(var(--k-acc-rgb),.05)!important}
body:not(.km-u) .composer{border:0!important;border-radius:18px;background:rgba(var(--k-acc-rgb),.045)!important;box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.1)}
body:not(.km-u) .composer:focus-within{box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.38),0 0 22px rgba(var(--k-acc-rgb),.13)}
body:not(.km-u) .reply-banner{border-radius:14px 14px 0 0;background:rgba(var(--k-acc-rgb),.07)}
body:not(.km-u) .emoji-pop,body:not(.km-u) .servermenu{border:0!important;border-radius:16px;background:var(--cz-solid)!important;box-shadow:0 0 34px 16px var(--cz-halo),0 0 0 1px rgba(var(--k-acc-rgb),.06)!important}
body:not(.km-u) .servermenu button:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.14),transparent 90%);color:var(--k-acc)}
body:not(.km-u) .unread-divider:before,body:not(.km-u) .unread-divider:after{background:linear-gradient(90deg,transparent,#E0566A 30%,#E0566A 70%,transparent)}

/* ---------- the sides of the chat: members, threads, profiles, activity ---------- */
body:not(.km-u) .members,body:not(.km-u) .thread-pane,body:not(.km-u) .dm-profile,body:not(.km-u) .activity,body:not(.km-u) .topic-aside{border-left:0!important;background:linear-gradient(transparent,var(--cz-line) 18%,var(--cz-line) 82%,transparent) left/1px 100% no-repeat!important}
body:not(.km-u) .memberheading{color:var(--k-dim);letter-spacing:.08em}
body:not(.km-u) .member{border-radius:10px}
body:not(.km-u) .member:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.09),rgba(var(--k-acc-rgb),0) 90%)}
body:not(.km-u) .member:hover .name{color:var(--k-acc)}
body:not(.km-u) .avatar .dot{border-color:rgba(var(--k-bg-rgb),.95)}

/* ---------- pages, lists and cards: quiet rows of glass ---------- */
body:not(.km-u) .listcard,body:not(.km-u) .post-card,body:not(.km-u) .activity-card,body:not(.km-u) .forum-searchbar,body:not(.km-u) .request-card,body:not(.km-u) .resource-card,body:not(.km-u) .profile-box{border:0!important;border-radius:16px;background:rgba(var(--k-acc-rgb),.04)!important;box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.06)}
body:not(.km-u) .post-card:hover,body:not(.km-u) .listcard:hover{background:rgba(var(--k-acc-rgb),.07)!important;box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.14),0 0 20px rgba(var(--k-acc-rgb),.08)}
body:not(.km-u) .friend-row{border-top:0;background:var(--cz-rule-soft) top/100% 1px no-repeat}
body:not(.km-u) .friend-row:hover{border-radius:12px;background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.09),rgba(var(--k-acc-rgb),0) 90%)}
body:not(.km-u) .tab,body:not(.km-u) .chip{border-radius:999px}
body:not(.km-u) .tab.active,body:not(.km-u) .tab:not(.addfriend):hover{background:transparent;color:var(--k-acc);text-shadow:0 0 12px var(--cz-glow);box-shadow:inset 0 -1px 0 var(--k-acc)}
body:not(.km-u) .tag{border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.07)}
body:not(.km-u) .tag.active{background:rgba(var(--k-acc-rgb),.18);box-shadow:0 0 10px rgba(var(--k-acc-rgb),.16)}
body:not(.km-u) .forum-filters select{border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.07)}
body:not(.km-u) .list-empty{border:0;border-radius:16px;background:radial-gradient(ellipse at 50% 40%,rgba(var(--k-acc-rgb),.06),transparent 75%)}
body:not(.km-u) .post-controls{border-bottom:0;background:var(--cz-rule-soft) bottom/100% 1px no-repeat}
body:not(.km-u) .roundbtn{background:radial-gradient(circle,rgba(var(--k-acc-rgb),.12),transparent 72%)}
body:not(.km-u) .roundbtn:hover{background:radial-gradient(circle,rgba(var(--k-acc-rgb),.26),transparent 74%);color:var(--k-acc)}

/* ---------- buttons and fields outside dialogs ---------- */
body:not(.km-u) .workspace .primary,body:not(.km-u) .channels .primary,body:not(.km-u) .tab.addfriend{border-radius:999px;background:linear-gradient(180deg,rgba(var(--k-acc-rgb),.92),var(--k-acc2));color:#fff;box-shadow:0 4px 16px -4px rgba(var(--k-acc-rgb),.55)}
body:not(.km-u) .workspace .primary:hover,body:not(.km-u) .channels .primary:hover{box-shadow:0 4px 20px -2px rgba(var(--k-acc-rgb),.7)}
body:not(.km-u) .workspace .secondary,body:not(.km-u) .channels .secondary{border-radius:999px;background:rgba(var(--k-acc-rgb),.08);color:var(--k-ink2)}
body:not(.km-u) .workspace .secondary:hover,body:not(.km-u) .channels .secondary:hover{background:rgba(var(--k-acc-rgb),.15);color:var(--k-acc)}
body:not(.km-u) .workspace .outline,body:not(.km-u) .channels .outline{border:0;border-radius:999px;box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.22)}
body:not(.km-u) .workspace .outline:hover,body:not(.km-u) .channels .outline:hover{color:var(--k-acc);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.5),0 0 12px rgba(var(--k-acc-rgb),.14)}
body:not(.km-u) .workspace .field{border:0;border-radius:0;background:transparent;box-shadow:inset 0 -1px 0 rgba(var(--k-acc-rgb),.24)}
body:not(.km-u) .workspace .field:focus{outline:0;box-shadow:inset 0 -1.5px 0 var(--k-acc)}

/* ---------- small screens: the same glass, edge to edge ---------- */
@media (max-width:760px){
  body:not(.km-u) .workspace{margin-left:0;border-radius:0}
  body:not(.km-u) .channels{border-radius:0}
  /* 任务 5e580d78（修士 HikosUI #30689 ①）：手机上这一列是 ☰ 拉出来的抽屉，压在聊天上面（核心的 .app.mobile-open .channels）。
     宽屏上它是垫在星空上的一块玻璃（--cz-bg2 半透明）；压在聊天上，聊天的字就从下面透上来、和这一列的字叠在一起。
     这里在同一块玻璃下面垫上页面底色（--k-bg2，实色）：看上去还是那块玻璃，只是不再透出下面的聊天。
     两条分开写：万一哪款皮肤的 --cz-bg2 不是颜色，上面那层作废，底色照样在（不会变回透明）。
     自己给这一列铺了实底的皮肤（选择器更重的 !important 规则）照旧盖过这里，和它们盖过上面“the channel list”那一条一样。 */
  body:not(.km-u) .channels{background-color:var(--k-bg2)!important;background-image:linear-gradient(var(--cz-bg2),var(--cz-bg2))!important}
}

/* ---------- orbits: as in the universe view, an orbit's colour runs through its name and its planets' marks ---------- */
body:not(.km-u) .km-orbit-cat .category-label{color:var(--km-oc);text-shadow:0 0 10px color-mix(in srgb,var(--km-oc) 30%,transparent)}
/* V22: hover and the selected planet look the same in every orbit (the accent, its left edge included); the orbit's colour stays on the # mark */
body:not(.km-u) .km-orbit-list .channel.active .cname{text-shadow:none}
body:not(.km-u) .channelhead>.hash,body:not(.km-u) .channelhead>span:first-child{color:var(--km-oc,var(--k-acc))}
body:not(.km-u) .channelhead .km-en{font:500 9px/1 "JetBrains Mono",ui-monospace,monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--k-dim);white-space:nowrap;margin-left:-2px;align-self:center;padding-top:3px}
@media (max-width:1000px){body:not(.km-u) .channelhead .km-en{display:none}}
body:not(.km-u) .km-msort{border:0!important;background:transparent!important;box-shadow:none!important}
body:not(.km-u) .km-msort button{border:0!important;background:transparent!important;border-radius:0!important;position:relative;color:var(--k-ink2)}
body:not(.km-u) .km-msort button.on,body:not(.km-u) .km-msort button[aria-pressed=true]{color:var(--k-acc)!important;box-shadow:none!important}
body:not(.km-u) .km-msort button.on::after,body:not(.km-u) .km-msort button[aria-pressed=true]::after{content:"";position:absolute;left:50%;bottom:-2px;width:4px;height:4px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 8px var(--cz-glow);transform:translateX(-50%)}

/* ---------- unread counts on the universes: white on red, ringed in the sky's colour (both views) ---------- */
.rail .lc-count{color:#FFFFFF!important;font-weight:700;border-color:rgba(var(--k-bg-rgb),.96)!important;box-shadow:0 0 8px rgba(224,82,99,.35)}
@media (hover:none){body:not(.km-u) .channel,body:not(.km-u) .member,body:not(.km-u) article.message,body:not(.km-u) .rail .server{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}}

/* ---------- 中文 / English (both views) ---------- */
.km-lang-btn{font:700 11px/1 "Inter Tight","Plex SC",sans-serif;letter-spacing:.04em}
button.km-lang-btn{color:var(--k-ink2)}
button.km-lang-btn:hover{color:var(--k-acc)}
html[lang=en] .channelhead .km-en{display:none}
@media (max-width:700px){.titlebar #window-title{max-width:34vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}
@media (max-width:480px){.titlebar .tright{gap:2px;right:6px}.titlebar .tright .ib{width:28px}}   /* V14: room for 中文 / English beside the title on a phone */
@media (max-width:480px){.titlebar{justify-content:flex-start;padding-left:100px}.titlebar .smallmark{display:none}.titlebar #window-title{max-width:calc(100vw - 100px - 184px)}}   /* a phone: the title moves left of the buttons; a long one ends in … */

/* ---------- V17 · 面板视图's 我的智能体 is its 动态 (src/kmind/panelx.js): picture = card, row = tasks; groups; 关系; order ---------- */
.km-side-ow .km-cat{display:flex;align-items:center;gap:2px}
.km-side-ow .km-cat .category-label{flex:1}
.km-side-tool{display:grid;place-items:center;width:22px;height:22px;border:0;border-radius:6px;background:transparent;color:var(--k-dim);cursor:pointer}
.km-side-tool:hover{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.08)}
.km-side-sum{display:flex;align-items:center;flex-wrap:wrap;gap:4px 9px;padding:0 10px 6px 12px;font-size:11px;color:var(--k-ink2)}
.km-side-sum>span{display:inline-flex;align-items:center;gap:4px}
.km-side-sum .km-ow-dot{position:static;width:6px;height:6px}
.km-side-gtag{display:inline-flex;align-items:center;gap:3px;margin-left:auto;height:20px;padding:0 7px;border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.08);color:var(--k-acc);font:inherit;font-size:10.5px;cursor:pointer}
.km-side-rows{display:flex;flex-direction:column}
/* a group's header (任务 0b3021f1 · #22697 ②): two buttons — the arrow folds / unfolds, the name goes to the group's channel */
.km-side-gh{display:flex;align-items:center;gap:2px;width:100%;height:26px;margin-top:6px;padding:0 8px 0 4px;background:var(--cz-rule-soft,linear-gradient(90deg,transparent,var(--k-line),transparent)) bottom/100% 1px no-repeat;color:var(--k-ink)}
.km-side-gh>button{display:flex;align-items:center;gap:6px;min-width:0;height:22px;padding:0;border:0;border-radius:6px;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}
.km-side-gfold{flex:none;justify-content:center;width:20px;color:var(--k-dim)}
.km-side-gfold>svg{flex:none;transition:transform .2s}
.km-side-gh.fold .km-side-gfold>svg{transform:rotate(-90deg)}
.km-side-gfold:hover,.km-side-gfold:focus-visible{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.1)}
.km-side-gname{flex:1;padding:0 2px}
.km-side-gh b{font-size:12px;font-weight:650;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-side-gh small{font:500 8.5px/1 "JetBrains Mono",monospace;letter-spacing:.14em;color:var(--k-dim)}
.km-side-gh em{margin-left:auto;font:600 10px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-dim)}
.km-side-gname:hover b,.km-side-gname:focus-visible b,.km-side-gh.active b{color:var(--k-acc)}
.km-side-gh.active .km-side-gname{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.12),rgba(var(--k-acc-rgb),0) 90%)}
.km-side-row{position:relative;display:flex;align-items:center;gap:0;padding:0 4px 0 6px;border-radius:8px;margin:1px 0}
.km-side-row[draggable="true"]{cursor:grab}
.km-side-row.dragging{opacity:.4}
.km-side-row.km-gdrag{opacity:.45}   /* V34: dragging a leader, its group goes with it */
.km-side-row.km-ins-t{box-shadow:inset 0 2px 0 var(--k-acc)}
.km-side-row.km-ins-b{box-shadow:inset 0 -2px 0 var(--k-acc)}
.km-side-av{position:relative;display:grid;place-items:center;flex:none;width:38px;height:40px;padding:0;border:0;border-radius:8px;background:transparent;cursor:pointer;transition:transform .15s}
.km-side-av:hover{transform:scale(1.06)}
.km-side-av:hover .km-avbox{filter:drop-shadow(0 0 6px rgba(var(--k-acc-rgb),.45))}
.km-side-av .km-ow-dot{position:absolute;right:3px;bottom:5px;width:8px;height:8px;border:2px solid var(--panel,var(--k-bg))}
.km-side-body{position:relative;flex:1;min-width:0;display:flex;align-items:center;gap:6px;height:42px;padding:0 4px 0 6px;border:0;border-radius:8px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}
.km-side-body>span:first-child{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.km-side-body .dm-badge{flex:none}
.km-side-body b{font-size:13.5px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-side-body small{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-side-n{font:600 10px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-acc)}
.km-side-chev{display:grid;place-items:center;color:var(--k-dim);opacity:0;transition:transform .2s,opacity .15s}
.km-side-row:hover .km-side-chev,.km-side-row.open .km-side-chev{opacity:1}
.km-side-row.open .km-side-chev{transform:rotate(180deg);color:var(--k-acc)}
.km-side-row:hover{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.1),rgba(var(--k-acc-rgb),0) 90%)}
.km-side-row.open{background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.14),rgba(var(--k-acc-rgb),.02) 90%)}
.km-side-drop{margin:0 4px 6px 12px;padding:2px 0 2px 10px;border-left:1px solid rgba(var(--k-acc-rgb),.25)}
.km-side-drop .km-ow-drop{padding:4px 0}
.km-side-drop .km-ow-task{grid-template-columns:auto minmax(0,1fr);gap:6px 8px}
.km-side-drop .km-ow-tside{grid-column:2;flex-direction:row;justify-content:space-between;align-items:center;gap:8px}
.km-side-drop .km-ow-dfoot{display:flex;flex-wrap:wrap;gap:2px 0;justify-content:flex-start}
.km-side-drop .km-ow-dfoot .km-ow-link{padding:0 5px}   /* V22: 完整资料 · 私信 · 邮箱 · 编辑 fit one line in the sidebar */
/* a crowded planet's strip: one chip per group, a menu of its agents */
.km-crowd{display:inline-flex!important;align-items:center;gap:0;height:26px;margin:0 2px;padding:0 8px 0 4px;border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.07);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.16);color:var(--k-ink2);font:inherit;font-size:11.5px;cursor:pointer}
.km-crowd .km-avbox{margin-right:-5px}
.km-crowd b{margin-left:10px;font-weight:600;color:var(--k-ink)}
.km-crowd em{margin-left:5px;font:600 10px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-dim)}
.km-crowd.own{box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.45)}
.km-crowd.own b{color:var(--k-acc)}
.km-crowd:hover{background:rgba(var(--k-acc-rgb),.13)}
/* 关系 as a dialog */
dialog.modal.km-rel-dlg{width:min(1040px,96vw);height:min(720px,88dvh);flex-direction:column;overflow:hidden}
dialog.modal.km-rel-dlg[open]{display:flex}
dialog.modal.km-rel-dlg .km-rel-host{flex:1;min-height:0;overflow:auto;margin:0 -6px}
/* 动态 from the titlebar: the universe's panel in a dialog (V24: back, with 只看这颗星球); 沉浸视图 beside it */
.km-ow-tb{position:relative}
.titlebar .km-ow-tb.on{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.12)}
.km-ow-badge{position:absolute;top:1px;right:0;min-width:15px;height:15px;padding:0 4px;border-radius:8px;background:var(--k-amber);color:#fff;font:700 9.5px/15px "Inter Tight",sans-serif;font-style:normal;text-align:center}
/* V24 · 动态 in 面板视图: a panel dropping down from its titlebar button (not a modal), over 沉浸视图 (z 60, src/universe/imm.css) */
.km-ow-pop{position:fixed;z-index:70;overflow:auto;scrollbar-width:thin;border-radius:14px;background:rgba(var(--k-bg-rgb),.97);border:1px solid var(--k-line);box-shadow:0 18px 50px rgba(var(--k-sh),.22);animation:km-ow-pop-in .18s ease-out}
.km-ow-pop[hidden]{display:none}
@keyframes km-ow-pop-in{from{opacity:0;transform:translateY(-6px)}}
@media (prefers-reduced-motion:reduce){.km-ow-pop{animation:none}}
/* a phone (≤430px, KM.owPhone in panelx.js): its titlebar has no room for the button. 任务 5e580d78（修士 HikosUI #30689 ①，设计口径 B）: 动态 itself is no
   longer hidden there — it opens from the phone's menus (the row 动态 at the foot of the column ☰ pulls out: panelx.js owSide; the first row of the chat's ⋯:
   src/kmind/ctx.js) and from the course's card 它们开工了 (tutorial.js), drops down under the titlebar as wide as the screen, and closes from its own ×
   (there is no titlebar button to press again, and no Esc, on a phone) */
@media (max-width:430px){.titlebar .km-ow-tb{display:none!important}}
.km-ow-x,.channels>.km-ow-side{display:none}
@media (max-width:430px){
  body:not(.km-u) .channels>.km-ow-side{display:flex;flex:none;width:auto;margin:5px 8px 6px}   /* a row like 好友 (.dm-shortcut: the skins dress it the same), outside the lists: it does not scroll away */
  body:not(.km-u) .channels>.km-ow-side::before{content:"";position:absolute;left:0;right:0;top:-5px;height:1px;background:var(--k-line);pointer-events:none}   /* a hairline between the list (it scrolls under) and this row */
  .km-ow-pop{background:rgb(var(--k-bg-rgb))}   /* it covers the chat from edge to edge there: solid, like the drawer (≤760px above), so the chat's words do not show through its rows */
  .km-ow-pop .km-ow-x{position:sticky;top:8px;z-index:2;display:grid;place-items:center;width:28px;height:28px;margin:8px 8px -36px auto;padding:0;border:0;border-radius:999px;background:transparent;color:var(--k-dim);cursor:pointer}
  .km-ow-pop .km-ow-x::before{content:"";position:absolute;inset:-8px}   /* 44px to touch */
  .km-ow-pop .km-ow-x:hover,.km-ow-pop .km-ow-x:focus-visible{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.1);outline:none}
  .km-ow-pop .km-ow-head{padding-right:30px}   /* 在忙 / 等待 / 空闲 stop short of the × */
}

/* ==== src/kmind/social.css ==== */
/* KMind · 私信分组 + 好友页精简（任务 ed2bbb8f，src/kmind/social.js）。产品行为（不是 Discord 的）。 */
/* ① 私信两组：组头跟核心的「私信 +」同一种小标题；折叠时只露出正在看的那个会话 */
.km-dmg{margin:0}
.km-dmg-head,.kmu-dmg-head{display:flex;align-items:center;gap:5px;width:100%;background:none;border:0;padding:0;font:inherit;color:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer;text-align:left}
.km-dmg-head{margin:12px 0 4px;padding:3px 9px;color:#888995;font-size:10px;font-weight:700;text-transform:uppercase;border-radius:6px}
.km-dmg-head:hover,.kmu-dmg-head:hover{color:var(--k-acc,#3370ff)}
.km-dmg-head:focus-visible,.kmu-dmg-head:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:1px}
.km-dmg-head svg,.kmu-dmg-head svg{flex:none;transition:transform .15s}
.km-dmg.off .km-dmg-head svg,.kmu-dmg.off .kmu-dmg-head svg{transform:rotate(-90deg)}
.km-dmg-n{font-style:normal;opacity:.7;font-weight:600}
.km-dmg-head .dm-badge{margin-left:auto}
.km-dmg.off .km-dmg-list>.dm-item:not(.active){display:none}
.kmu-dmg-head{flex:1;min-width:0}
.kmu-dmg-head .kmu-badge{margin-left:auto}
@media (prefers-reduced-motion:reduce){.km-dmg-head svg,.kmu-dmg-head svg{transition:none}}
/* ④ 好友栏体验（任务 c5cd0e14）：组头一行 = 折叠钮 + 右边的小工具钮（智能体：排序；好友：恢复默认顺序） */
.km-dmg-bar{display:flex;align-items:center;gap:2px}
.km-dmg-bar .km-dmg-head{flex:1;min-width:0}
.km-dmg-tool,.kmu-dmg-tool{flex:none;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin:12px 6px 4px 0;padding:0;border:0;border-radius:6px;background:none;color:#888995;cursor:pointer;opacity:0;transition:opacity .15s,color .15s}
.kmu-dmg-tool{margin:0 0 0 4px}
.km-dmg-bar:hover .km-dmg-tool,.km-dmg-tool:focus-visible,.kmu-sec:hover .kmu-dmg-tool,.kmu-dmg-tool:focus-visible,.km-dmg-tool[data-km-dm-reset],.kmu-dmg-tool[data-km-dm-reset]{opacity:1}
.km-dmg-tool:hover,.kmu-dmg-tool:hover{color:var(--k-acc,#3370ff);background:rgba(var(--k-acc-rgb,51,112,255),.1)}
.km-dmg-tool:focus-visible,.kmu-dmg-tool:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:1px}
@media (hover:none){.km-dmg-tool,.kmu-dmg-tool{opacity:1}}
/* 简丹：两组之上单独一块；名字后的「官方向导」标（和「未设昵称」同一位置） */
.km-dm-guide{margin:6px 0 2px}
.km-dm-guide+.km-dmg .km-dmg-head{margin-top:8px}
.km-guide-tag{display:inline-flex;align-items:center;gap:3px;margin-left:6px;padding:0 6px;border-radius:999px;font-size:10px;font-weight:600;line-height:16px;vertical-align:1px;letter-spacing:0;text-transform:none;color:var(--k-acc,#3370ff);background:rgba(var(--k-acc-rgb,51,112,255),.12);white-space:nowrap}
.km-guide-tag svg{flex:none}
.dm-label strong .km-guide-tag,.kmu-dm b .km-guide-tag{font-size:9px;line-height:14px;margin-left:4px;padding:0 5px}
/* 好友组拖拽排序：抓手、拖动中的行、落点线 */
.km-dmg[data-g="people"] .km-dmg-list>.dm-item[draggable="true"]{cursor:grab}
.km-dm-dragging{opacity:.45}
.km-dm-drop-before,.km-dm-drop-after{position:relative}
.km-dm-drop-before::before,.km-dm-drop-after::after{content:"";position:absolute;left:8px;right:8px;height:2px;border-radius:2px;background:var(--k-acc,#3370ff);pointer-events:none}
.km-dm-drop-before::before{top:-1px}
.km-dm-drop-after::after{bottom:-1px}
/* ④(ii) 拖动一行时不能把头像图片本身拖出来（好友栏、动态栏、好友页、停靠栏都一样）：图片不是拖拽源 */
.avatar img,.km-av img,.km-uav img,.km-ow-who img,.kmu-dm img,.friend-row img,.km-ow-row img{-webkit-user-drag:none;user-drag:none;user-select:none;-webkit-user-select:none}
/* ⑥ 置顶的频道（修士 #30066 ①；组名在界面上叫「置顶」）：一组紧凑的行（图钉 + # 频道名 + 所在星系），右边的 × 取消置顶；收起时只露出正在看的那一个 */
.km-pin-row,.kmu-pin-row{display:flex;align-items:center;gap:2px;border-radius:8px}
.km-pin-go{flex:1;min-width:0;display:flex;align-items:center;gap:7px;padding:6px 9px;border:0;border-radius:8px;background:none;font:inherit;font-size:13px;color:inherit;text-align:left;cursor:pointer}
.km-pin-go>svg{flex:none;opacity:.55}
.km-pin-nm{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-pin-go>small{flex:0 1000 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;opacity:.55}
.km-pin-go .dm-badge,.km-pin-go .kmu-badge{margin-left:auto;flex:none}
.km-pin-row:hover,.kmu-pin-row:hover,.km-pin-row:focus-within,.kmu-pin-row:focus-within{background:rgba(127,127,127,.15)}
.km-pin-row.on,.kmu-pin-row.on{background:rgba(var(--k-acc-rgb,51,112,255),.12)}
.km-pin-row.on .km-pin-go,.kmu-pin-row.on .km-pin-go{color:var(--k-acc,#3370ff)}
.km-pin-go:focus-visible,.km-pin-x:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:1px}
.km-pin-x{flex:none;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-right:4px;padding:0;border:0;border-radius:6px;background:none;color:#888995;font-size:15px;line-height:1;cursor:pointer;opacity:0;transition:opacity .15s,color .15s}
.km-pin-row:hover .km-pin-x,.kmu-pin-row:hover .km-pin-x,.km-pin-row:focus-within .km-pin-x,.kmu-pin-row:focus-within .km-pin-x{opacity:1}
.km-pin-x:hover{color:var(--k-acc,#3370ff);background:rgba(var(--k-acc-rgb,51,112,255),.1)}
@media (hover:none){.km-pin-x{opacity:1}}
@media (prefers-reduced-motion:reduce){.km-pin-x{transition:none}}
/* 修士 #30427：左栏里星系的星球，行首的定位标志是一个钮（到所在的星系）；名字那一截只开聊天 */
.km-pin-loc{flex:none;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;margin-left:3px;padding:0;border:0;border-radius:6px;background:none;color:inherit;cursor:pointer;opacity:.6;transition:opacity .15s,color .15s,background .15s}
.km-pin-loc:hover{opacity:1;color:var(--k-acc,#3370ff);background:rgba(var(--k-acc-rgb,51,112,255),.12)}
.km-pin-loc:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:1px;opacity:1}
.km-pin-sys>.km-pin-go{padding-left:2px}
@media (prefers-reduced-motion:reduce){.km-pin-loc{transition:none}}
.km-dmg.off .km-dmg-list>.km-pin-row:not(.on){display:none}
.km-dmg[data-g="pins"] .km-dmg-list>.km-pin-row[draggable="true"]{cursor:grab}
/* ⑦ 置顶挪到「私信」上面（任务 ce1aba70；修士 HikosUI #30870 / #30894）：这一组是入口区里的一项。组头和「好友」「工作台」同款——
   核心的 .dm-shortcut（图标 + 名字，整行一样宽；皮肤怎么画入口它就怎么画），这里只加：个数、右端的箭头（收起 / 展开）、
   排序钮的位置（叠在这一行里、箭头左边，免得这一行比别的入口短一截）；下面的行往里缩一点，看得出是它里面的 */
.km-dmg-pins>.km-dmg-bar{position:relative;display:block}
.km-pins-head>svg{flex:none}
.km-pins-nm{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-pins-head .km-dmg-n{margin-left:-4px;font-size:12px}
.km-pins-head .dm-badge{margin-left:auto;flex:none}
.km-pins-chev{flex:none;display:inline-flex;align-items:center;margin-left:auto;opacity:.55;transition:transform .15s}
.km-pins-head .dm-badge+.km-pins-chev{margin-left:30px}
.km-dmg-pins.off .km-pins-chev{transform:rotate(-90deg)}
.km-pins-head:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:-2px}
.km-dmg-pins .km-dmg-tool{position:absolute;right:30px;top:50%;margin:-11px 0 0}
.km-dmg-pins>.km-dmg-list{padding-left:12px}
@media (prefers-reduced-motion:reduce){.km-pins-chev{transition:none}}
/* ② 好友页：一张全部好友，右侧「当前在线」去掉 */
.friends-layout.km-fr-slim .friends-list{flex:1;max-width:none}
.km-fr-fold{display:flex;align-items:center;gap:5px;background:none;border:0;padding:0;font:inherit;cursor:pointer;width:100%;text-align:left}
.km-fr-fold:hover{color:var(--k-acc,#3370ff)}
.km-fr-fold:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:2px}
.km-fr-fold svg{transition:transform .15s}
.km-fr-blocked.off .km-fr-fold svg{transform:rotate(-90deg)}
.kmu-dm-guide{margin:0 0 6px}
/* V44 · 星系层级：原母星的「我的智能体」并进「智能体」组 —— 组头上的智能体频道钮（常显）、小组组头、还没聊过的智能体 */
.km-dmg-team,.kmu-dmg-team{margin:8px 0 2px}
.km-dmg-team>button,.km-dmg-team>.km-dmg-team-x,.kmu-dmg-team>button,.kmu-dmg-team>.km-dmg-team-x{display:flex;align-items:center;gap:6px;width:100%;min-width:0;padding:3px 9px;border:0;border-radius:6px;background:none;font:inherit;font-size:11px;font-weight:650;color:#9a9cab;text-align:left;cursor:pointer}
.km-dmg-team>.km-dmg-team-x,.kmu-dmg-team>.km-dmg-team-x{cursor:default}
.km-dmg-team span,.kmu-dmg-team span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.km-dmg-team em,.kmu-dmg-team em{margin-left:auto;font-style:normal;font-weight:600;opacity:.6}
.km-dmg-team>button:hover,.kmu-dmg-team>button:hover{color:var(--g,var(--k-acc,#3370ff));background:rgba(var(--k-acc-rgb,51,112,255),.06)}
.km-dmg-team.on>button,.kmu-dmg-team.on>button{color:var(--g,var(--k-acc,#3370ff));background:rgba(var(--k-acc-rgb,51,112,255),.1)}
.km-dmg-team>button:focus-visible,.kmu-dmg-team>button:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:1px}
.km-dmg.off .km-dmg-team,.kmu-dmg.off~.kmu-dmg-team{display:none}
/* 智能体组头：箭头只管收起 / 展开，名字进智能体大厅（在大厅里时名字亮起） */
.km-dmg-split{display:flex;align-items:center;gap:0;cursor:default}
.km-dmg-split>button{display:flex;align-items:center;gap:5px;background:none;border:0;padding:0;margin:0;font:inherit;color:inherit;text-transform:inherit;letter-spacing:inherit;cursor:pointer;border-radius:5px}
.km-dmg-split .km-dmg-fold{flex:none;width:18px;height:18px;justify-content:center;margin-left:-3px}
.km-dmg-split .km-dmg-fold svg{transition:transform .15s}
.km-dmg.off .km-dmg-split .km-dmg-fold svg,.kmu-dmg.off .km-dmg-split .km-dmg-fold svg{transform:rotate(-90deg)}
.km-dmg-split .km-dmg-go{flex:1;min-width:0;padding:1px 4px}
.km-dmg-split .km-dmg-go:hover,.km-dmg-split .km-dmg-fold:hover{color:var(--k-acc,#3370ff)}
.km-dmg-split.on .km-dmg-go{color:var(--k-acc,#3370ff)}
.km-dmg-split .km-dmg-go:focus-visible,.km-dmg-split .km-dmg-fold:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:1px}
.km-dmg-split .km-dmg-go .dm-badge,.km-dmg-split .km-dmg-go .kmu-badge{margin-left:auto}
@media (prefers-reduced-motion:reduce){.km-dmg-split .km-dmg-fold svg{transition:none}}

/* V44 · 小组频道入口：非按小组排序时在「智能体」组顶上的一排（同组头样式）；「新建卫星」是组里最后一行，虚一点 */
.km-dmg-team-top,.kmu-dmg-team.km-dmg-team-top{margin:4px 0 0}
.km-dmg-team-new>button,.kmu-dmg-team.km-dmg-team-new>button{opacity:.55;gap:6px}
.km-dmg-team-new>button:hover,.kmu-dmg-team.km-dmg-team-new>button:hover,.km-dmg-team-new>button:focus-visible{opacity:1}
.km-dmg-team .dm-badge,.kmu-dmg-team .dm-badge{margin-left:auto}
.km-dmg-team .dm-badge+em,.kmu-dmg-team .dm-badge+em{margin-left:6px}

/* 任务 55485ac8（修士 HikosUI #30371 / #30405「DM 里的小组少了组的折叠、向组长折叠组员」）：
   按小组排时小组的那一行前面有一个箭头，只管收起 / 展开这个小组（原母星「我的智能体」组头上的那个）；名字照旧进小组的频道。
   收着的小组、折进组长的组员，行不露（正在看的那个会话除外）；这些行里的未读合成一个数字，放在小组这一行的行尾（.km-dmg-team-un），
   和名字钮里小组频道自己的未读分开。向组长折叠着组员时名字后面写「+N 已折叠」（.km-dmg-team-lead） */
.km-dmg-team-split{display:flex;align-items:center;gap:0}
.km-dmg-team-split>button.km-dmg-team-fold{flex:none;width:18px;height:20px;padding:0;margin-left:4px;justify-content:center}
.km-dmg-team-split>.km-dmg-team-fold svg{transition:transform .15s}
.km-dmg-team-split.off>.km-dmg-team-fold svg{transform:rotate(-90deg)}
.km-dmg-team-split>[data-km-side-go],.km-dmg-team-split>.km-dmg-team-x{flex:1 1 auto;width:auto}
.km-dmg-team-split>.km-dmg-team-fold+[data-km-side-go],.km-dmg-team-split>.km-dmg-team-fold+.km-dmg-team-x{padding-left:4px}
.km-dmg-team-lead{flex:none;font-style:normal;font-weight:600;font-size:10px;opacity:.7;white-space:nowrap}
.km-dmg-team>.km-dmg-team-un,.kmu-dmg-team>.km-dmg-team-un{flex:none;margin:0 9px 0 4px}
.km-dmg-list>.dm-item.km-dm-hid:not(.active){display:none}
@media (prefers-reduced-motion:reduce){.km-dmg-team-split>.km-dmg-team-fold svg{transition:none}}
/* 任务 def5f997（修士 HikosUI #32759 ③）：大厅有新消息时「智能体」组头（名字已跟着大厅改名）轻轻呼吸——一圈主色的淡光与底色一起起伏，2.8 秒一个来回；
   只是提示「这是个按钮、那边有新话」，不抢眼：最亮时也只有 18% 的底色。进了大厅 / 读完就停（social.js KM.dmHall.refresh）。
   「减少动态效果」（系统设置或 Hikos 的视觉效果）时不动，只留一圈淡色描边。 */
@keyframes km-dmg-breathe{0%,100%{background:transparent;box-shadow:0 0 0 0 transparent}50%{background:color-mix(in srgb,var(--k-acc,#3370ff) 18%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--k-acc,#3370ff) 22%,transparent)}}
.km-dmg-split.km-dmg-breathe{border-radius:6px;animation:km-dmg-breathe 2.8s ease-in-out infinite}
.km-dmg-split.km-dmg-breathe .km-dmg-go{color:var(--k-acc,#3370ff)}
@media (prefers-reduced-motion:reduce){.km-dmg-split.km-dmg-breathe{animation:none;box-shadow:0 0 0 1px color-mix(in srgb,var(--k-acc,#3370ff) 35%,transparent)}}
body.fx-off-ui .km-dmg-split.km-dmg-breathe{animation:none;box-shadow:0 0 0 1px color-mix(in srgb,var(--k-acc,#3370ff) 35%,transparent)}
/* 任务 def5f997（修士 HikosUI #32759 ②）：动态面板与私信「智能体」组同一套——组头上小组频道的未读、每个智能体那一行和它私信的未读（同一个红点样式）。
   组头里的数排在组员数（em）前面；行上的数排在操作钮的最前面。核心 .dm-badge 自带红底白字，这里只管位置与尺寸。 */
.km-ow-gh .km-ow-gun{margin-left:auto;margin-right:6px;font-size:10px;min-width:16px;height:16px;line-height:16px;padding:0 4px}
.km-ow-gh .km-ow-gun+em{margin-left:0}
.km-ow-acts .km-ow-dmun{align-self:center;font-size:10px;min-width:16px;height:16px;line-height:16px;padding:0 4px;margin-right:2px}

/* 任务 6a57082f（修士 HikosUI #32759 ① 基线图）：私信「智能体」组的列表本体——两个视图同一份（src/kmind/social.js 的 KM.dmAgentSum / KM.dmAgentDecorate）
   组头右端的 关系 / + 一直露着（排序钮照旧悬停才露）；汇总行；第二行的工作状态（.km-work-tag 沿用旧列表）；行尾 ×N；头像上的点按状态着色 */
.km-dmg-tool.km-dmg-keep,.kmu-dmg-tool.km-dmg-keep{opacity:1}
.km-dmg-sum{display:flex;align-items:center;flex-wrap:wrap;gap:4px 9px;padding:0 8px 6px 14px;font-size:11px;color:var(--k-ink2,#888995)}
.kmu-dmg-sumrow{padding:2px 6px 6px 10px}
.km-dmg-sum>span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.km-dmg-sum .km-ow-dot{position:static;width:6px;height:6px}
.km-dmg-gtag{display:inline-flex;align-items:center;gap:3px;margin-left:auto;height:20px;padding:0 7px;border:0;border-radius:999px;background:rgba(var(--k-acc-rgb,51,112,255),.08);color:var(--k-acc,#3370ff);font:inherit;font-size:10.5px;cursor:pointer}
.km-dmg-gtag:hover{background:rgba(var(--k-acc-rgb,51,112,255),.16)}
.km-dmg-gtag:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:1px}
.km-dm-agent .km-dm-xn{flex:none;margin:0 2px 0 4px;align-self:center}
.km-dm-agent .dm-label small,.km-dm-agent .kmu-dm small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-dm-agent .dm-label strong .km-lead-chip,.km-dm-agent .kmu-dm b .km-lead-chip{margin-left:5px}
.km-dm-agent.km-ow-s-working .avatar>.dot{background:var(--k-acc,#3370ff)}
.km-dm-agent.km-ow-s-waiting .avatar>.dot{background:var(--k-amber,#d97706)}
.km-dm-agent.km-ow-s-needs .avatar>.dot{background:var(--k-danger,#e5484d)}

/* ==== src/kmind/dmbody.css ==== */
/* Hikos · 私信「智能体」组：行尾点开一位智能体手上的全部工作；派驻对话框里选智能体的分组表（src/kmind/dmbody.js；修士 HikosUI #32759 ①、#33450、#33463、#33551）
   汇总行、组头两钮、组长标记、第二行、×N 的样子在 social.css（任务 6a57082f）。工作块用原「我的智能体」那一套类名（.km-side-drop，panel.css / universe.css）。 */

/* ① 行尾展开工作的钮。行本身仍是私信那颗钮，这一颗排在它后面 */
.km-dm-body{display:flex;align-items:center}
.km-dm-body>button:first-of-type{flex:1 1 auto;min-width:0}
.km-dm-more{flex:none;display:inline-flex;flex-direction:row;align-items:center;justify-content:center;gap:2px;align-self:stretch;min-width:18px;margin:0 -6px;padding:0 2px;border:0;border-radius:6px;background:none;color:var(--k-dim,#888995);font:inherit;cursor:pointer}
.km-dm-more:hover{color:var(--k-acc,#3370ff);background:rgba(var(--k-acc-rgb,51,112,255),.08)}
.km-dm-more:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:-2px}
/* 箭头的盒子收成和图标一样大：展开时绕自己的中心转 180°，不会转到 ×N 的下面去 */
.km-dm-more .km-side-chev{display:inline-flex;align-items:center;justify-content:center;flex:none;width:13px;height:13px;line-height:0;opacity:0;transition:transform .15s ease,opacity .12s ease}
.km-dm-more .km-side-chev>svg{display:block}
.km-dm-body:hover>.km-dm-more .km-side-chev,.km-dm-body.open>.km-dm-more .km-side-chev,.km-dm-more:focus-visible .km-side-chev{opacity:1}
.km-dm-body.open>.km-dm-more .km-side-chev{transform:rotate(180deg);color:var(--k-acc,#3370ff)}
@media (hover:none){.km-dm-more .km-side-chev{opacity:1}}
@media (prefers-reduced-motion:reduce){.km-dm-more .km-side-chev{transition:none}}

/* 这位智能体手上的工作：行下面那一块（.km-side-drop 的样子）；它的小组收着时一起不露 */
.km-dm-hid+.km-dm-works{display:none}
/* 每件工作左边那 46px 是「动态」面板里让给头像列的（universe.css 的 .km-ow-drop）；私信栏窄，这里不让，省下来给任务名和「和谁」 */
.km-dm-works .km-ow-drop{margin-left:0}
.kmu-dm-works{margin-right:2px}

/* ② 派驻智能体对话框里选智能体（修士 HikosUI #33551）：一个写着当前这位的钮，点开是按小组分组的表 */
.km-apick{position:relative}
.km-apick-cur{display:flex;align-items:center;gap:8px;width:100%;min-height:38px;text-align:left;cursor:pointer}
.km-apick-cur,.km-apick-row{justify-content:flex-start}
.km-apick-cur>.km-avbox,.km-apick-row>.km-avbox,.km-apick-cur>.avatar,.km-apick-row>.avatar{flex:none}
.km-apick-cur>.km-apick-txt,.km-apick-row>.km-apick-txt{display:flex;flex-direction:column;align-items:flex-start;flex:1 1 auto;min-width:0;text-align:left}
.km-apick-cur b,.km-apick-row b{display:flex;align-items:center;max-width:100%;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-apick-cur small,.km-apick-row small{opacity:.65;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-apick-cur>svg{flex:none;opacity:.7;transition:transform .15s ease}
.km-apick.open .km-apick-cur>svg{transform:rotate(180deg)}
.km-apick-list{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:30;max-height:min(46vh,340px);overflow:auto;padding:6px;border:1px solid var(--k-line,rgba(128,128,128,.28));border-radius:10px;background:var(--k-panel,var(--panel,#141722));box-shadow:0 12px 32px rgba(0,0,0,.35)}
.km-apick-list[hidden]{display:none}
.km-apick-team{margin:6px 0 2px}
.km-apick-team:first-child{margin-top:0}
.km-apick-fold{display:flex;align-items:center;gap:6px;width:100%;padding:3px 6px;border:0;border-radius:6px;background:none;color:inherit;font:inherit;font-size:12px;font-weight:600;opacity:.8;cursor:pointer;text-align:left}
.km-apick-fold>svg{flex:none;transition:transform .15s ease}
.km-apick-team.off .km-apick-fold>svg{transform:rotate(-90deg)}
.km-apick-fold span{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.km-apick-fold em{font-style:normal;opacity:.6}
.km-apick-fold:hover,.km-apick-row:hover{background:rgba(var(--k-acc-rgb,51,112,255),.08)}
.km-apick-row{display:flex;align-items:center;gap:8px;width:100%;padding:5px 8px 5px 22px;border:0;border-radius:8px;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}
.km-apick-row.on{background:rgba(var(--k-acc-rgb,51,112,255),.14)}
.km-apick-row>svg{flex:none;color:var(--k-acc,#3370ff)}
.km-apick-fold:focus-visible,.km-apick-row:focus-visible,.km-apick-cur:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:-2px}
@media (prefers-reduced-motion:reduce){.km-apick-cur>svg,.km-apick-fold>svg{transition:none}}

/* ③ 修士 HikosUI #33892 ①：「私信」小标题和「好友」「智能体」两个组头，连前面的折叠箭头，放大一号。
   原先 10px，比它们下面的小组头（# 制作间，11px）还小，层级是倒的；现在字 12px、箭头 14px（原 12px）、个数 11px，收起 / 展开那颗钮跟到 20px。
   宇宙界面私信卡里的组头同样放大（置顶那一组也在这一排里，一起放大，免得一张卡上组头有两种大小）。
   面板左栏的「置顶」是入口区的一项（和「好友」「工作台」同款），本来就大，不在此列。 */
.channel-scroll>.newdm{font-size:12px}
.km-dmg-head{font-size:12px}
.kmu-sec.kmu-dmg{font-size:12px}
.km-dmg-head .km-dmg-n,.kmu-dmg-head .km-dmg-n{font-size:11px}
.km-dmg-head>svg,.kmu-dmg-head>svg,.km-dmg-split .km-dmg-fold>svg{width:14px;height:14px}
.km-dmg-split .km-dmg-fold{width:20px;height:20px}

/* ==== src/kmind/roles.css ==== */
/* 任务 627f8de4 · 身份与管理面板（成员 / 身份组 / 访问）——跟着核心 .access-* 的变量走，白昼 / 夜间都靠 var() */
.km-rl{display:flex;flex-direction:column;gap:10px;min-height:320px}
.km-rl .form-note{margin:0}
.km-rl-note{opacity:.8}
.km-rl-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:2px 0}
.km-rl-bar .km-rl-search{flex:1 1 220px;min-width:180px}
.km-rl-bar .km-rl-search .field{width:100%;margin:0}
.km-rl-total{font-size:12px;font-weight:700;letter-spacing:.04em;color:var(--muted,#a9b3cc);text-transform:uppercase;white-space:nowrap}
.km-rl-hint{font-size:11px;color:var(--muted,#a9b3cc)}
.km-rl-n{font-weight:700;color:inherit}
.km-rl-group{display:flex;flex-direction:column;gap:4px}
.km-rl-group>h3{margin:8px 0 2px;font-size:11px;font-weight:700;letter-spacing:.06em;color:var(--muted,#a9b3cc);text-transform:uppercase}
.km-rl-group[data-kind="agent"]>h3::before{content:"⚙ ";opacity:.8}
.km-rl-group[data-kind="human"]>h3::before{content:"☺ ";opacity:.8}
.km-rl-row,.km-rl-role,.km-rl-ev,.km-rl-mode,.km-rl-inv{display:flex;align-items:center;gap:12px;padding:8px 10px;border-radius:10px;background:var(--panel-2,rgba(255,255,255,.035));border:1px solid var(--line,rgba(255,255,255,.06))}
.km-rl-row:hover,.km-rl-role:hover{background:var(--panel-3,rgba(255,255,255,.06))}
.km-rl-row .avatar{flex:none}
.km-rl-who{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
.km-rl-who strong{font-size:14px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-rl-who small{font-size:11px;color:var(--muted,#a9b3cc);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-rl-crown{color:#f3c969;font-size:12px}
.km-rl-tag{font-style:normal;padding:0 6px;border-radius:999px;background:rgba(243,201,105,.14);color:#f3c969}
.km-rl-roles{flex:1 1 40%;display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-width:120px}
.km-rl-chip{display:inline-flex;align-items:center;gap:6px;padding:2px 8px 2px 6px;border-radius:999px;font-size:12px;line-height:18px;background:color-mix(in srgb,var(--c) 14%,transparent);border:1px solid color-mix(in srgb,var(--c) 40%,transparent);color:var(--text,#dfe3ee);max-width:100%}
.km-rl-chip>i{width:10px;height:10px;border-radius:50%;background:var(--c);flex:none}
.km-rl-chip>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-rl-chip.sys{opacity:.85;border-style:dashed}
.km-rl-x{all:unset;cursor:pointer;width:16px;height:16px;border-radius:50%;display:inline-grid;place-items:center;font-size:12px;line-height:1;color:var(--muted,#a9b3cc)}
.km-rl-x:hover{background:rgba(255,255,255,.14);color:#fff}
.km-rl-add{all:unset;cursor:pointer;width:22px;height:22px;border-radius:50%;display:inline-grid;place-items:center;font-size:16px;line-height:1;color:var(--muted,#a9b3cc);background:rgba(255,255,255,.08);border:1px dashed rgba(255,255,255,.22)}
.km-rl-add:hover,.km-rl-add:focus-visible{color:#fff;background:rgba(255,255,255,.16)}
.km-rl-none{font-size:12px;color:var(--muted,#a9b3cc)}
.km-rl-ops{display:flex;gap:6px;flex:none;align-items:center}
.km-rl-op{font-size:11px;padding:4px 9px}
.km-rl-empty{padding:14px 10px;font-size:12px;color:var(--muted,#a9b3cc);text-align:center;border:1px dashed var(--line,rgba(255,255,255,.1));border-radius:10px}
/* 身份组弹层（挂在 #dialog 里，跟着弹窗滚） */
.km-rl-pop{position:absolute;z-index:60;min-width:240px;max-width:320px;max-height:320px;overflow:auto;padding:6px;border-radius:12px;background:var(--panel,#1e2230);border:1px solid var(--line,rgba(255,255,255,.1));box-shadow:0 18px 44px -14px rgba(0,0,0,.6)}
.km-rl-pop-h{padding:6px 8px 8px;font-size:11px;font-weight:700;letter-spacing:.04em;color:var(--muted,#a9b3cc);text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-rl-pop-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;cursor:pointer;font-size:13px}
.km-rl-pop-row:hover{background:rgba(255,255,255,.06)}
.km-rl-pop-row.off{opacity:.6;cursor:default}
.km-rl-pop-row>i{width:10px;height:10px;border-radius:50%;flex:none}
.km-rl-pop-row>span{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-rl-pop-row>small{font-size:10px;color:var(--muted,#a9b3cc)}
.km-rl-pop-f{padding:6px 4px 2px;display:flex;justify-content:flex-end}
.km-rl-pop-f button{font-size:11px;padding:4px 9px}
/* 身份组页 */
.km-rl-ev{background:color-mix(in srgb,var(--accent,#5b8cf3) 8%,transparent)}
.km-rl-ev-ic{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:16px;background:rgba(255,255,255,.1);flex:none}
.km-rl-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.km-rl-role[draggable="true"]{cursor:grab}
.km-rl-role.dragging{opacity:.45}
.km-rl-role.over-before{box-shadow:0 -2px 0 0 var(--accent,#5b8cf3)}
.km-rl-role.over-after{box-shadow:0 2px 0 0 var(--accent,#5b8cf3)}
.km-rl-role.off{opacity:.6}
.km-rl-grip{width:16px;flex:none;color:var(--muted,#a9b3cc);font-size:13px;letter-spacing:-2px;user-select:none}
.km-rl-dot{width:14px;height:14px;border-radius:50%;flex:none}
/* 访问页 */
.km-rl-modes{display:flex;flex-direction:column;gap:6px}
.km-rl-mode>i{font-style:normal;width:16px;color:var(--muted,#a9b3cc);flex:none}
.km-rl-mode.on{border-color:color-mix(in srgb,var(--accent,#5b8cf3) 55%,transparent);background:color-mix(in srgb,var(--accent,#5b8cf3) 8%,transparent)}
.km-rl-mode.on>i{color:var(--accent,#5b8cf3)}
.km-rl-soon{font-size:11px;color:var(--muted,#a9b3cc);padding:2px 8px;border-radius:999px;border:1px dashed var(--line,rgba(255,255,255,.14))}
.km-rl-links{margin-top:2px}
.km-rl-links>summary{cursor:pointer;font-size:12px;color:var(--muted,#a9b3cc);padding:4px 2px}
.km-rl-linklist{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.km-rl-linklist li{display:flex;align-items:center;gap:10px;padding:6px 10px;border-radius:8px;background:var(--panel-2,rgba(255,255,255,.035))}
.km-rl-linklist li>span{display:flex;flex-direction:column;gap:2px;min-width:0}
.km-rl-linklist small{font-size:11px;color:var(--muted,#a9b3cc)}
.km-rl-tabs{flex-wrap:wrap}
@media (max-width:720px){.km-rl-row{flex-wrap:wrap}.km-rl-roles{flex-basis:100%;order:3}.km-rl-ops{margin-left:auto}}
/* 远端模式 remote.css 把核心旧的 [data-action="invite"] 都藏了（本机模拟邀请）；访问页这颗是接了 invite.js 的真入口，要露出来 */
html[data-kmb="remote"] .km-rl-inv [data-action="invite"]{display:inline-flex !important}   /* remote.css 那条带 !important，这里特异性更高同样带上才压得过 */
/* G2：身份组类别徽标 / 智能体那套 @everyone 卡 / 编辑器里的「适用于」 */
.km-rl-kind{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;font-size:11px;font-weight:600;font-style:normal;vertical-align:1px;background:rgba(255,255,255,.08);color:var(--text-2,#aab4cf)}
.km-rl-kind.human{background:rgba(91,140,243,.18);color:#8fb0ff}
.km-rl-kind.agent{background:rgba(124,92,255,.18);color:#b9a6ff}
.km-rl-ev.agent{margin-top:6px}
.km-rl-ev.agent .km-rl-ev-ic{background:rgba(124,92,255,.22)}
.km-rl-kind-field{margin:10px 0 2px}
.km-rl-kind-field .form-note{margin-top:4px}
.km-rl-pop-row small{margin-left:auto;opacity:.65;font-size:11px}
/* 任务 faee7aec · 标签模型：内置真人 / 智能体芯片、继承（跟随主人）的芯片、管理标签、标签页内置行、「可见与权限」对话框 */
.km-rl-chip.builtin{--c:#8fb0ff;border-style:dashed;opacity:.9}
.km-rl-chip.builtin.agent{--c:#b9a6ff}
.km-rl-chip.inh{border-style:dotted;opacity:.85}
.km-rl-chip.admin>i{box-shadow:0 0 0 2px color-mix(in srgb,var(--c) 45%,transparent)}
.km-rl-pop-follow{display:flex;align-items:center;gap:8px;margin:0 4px 6px;padding:6px 8px;border-radius:8px;font-size:12px;background:rgba(255,255,255,.05);cursor:pointer}
.km-rl-pop-follow>span{flex:1 1 auto}
.km-rl-role.builtin{opacity:.85;border-style:dashed}
.km-rl-dot.human{background:#8fb0ff}
.km-rl-dot.agent{background:#b9a6ff}
.km-rl-role.admin .km-rl-dot{box-shadow:0 0 0 2px rgba(255,255,255,.18)}
.km-rl-gone,.km-rl-adv{margin-top:2px}
.km-rl-gone>summary,.km-rl-adv>summary{cursor:pointer;font-size:12px;color:var(--muted,#a9b3cc);padding:4px 2px}
.km-rl-adv-body{display:flex;flex-direction:column;gap:6px;padding-top:6px}
.km-rl-color{width:64px;height:34px;padding:2px}
.km-rl-mode-opts{margin-bottom:8px}
.km-rl-mode-opt{display:flex;align-items:center;gap:12px;padding:8px 10px;border-radius:10px;background:var(--panel-2,rgba(255,255,255,.035));border:1px solid var(--line,rgba(255,255,255,.06));cursor:pointer}
.km-rl-mode-opt.on{border-color:color-mix(in srgb,var(--accent,#5b8cf3) 55%,transparent);background:color-mix(in srgb,var(--accent,#5b8cf3) 8%,transparent)}
.km-rl-mode-opt>input{flex:none;margin:0}
.km-rl-mode-opt .km-rl-who small{white-space:normal}
/* 修士 #27790 · 「可见与权限」对勾表（宇宙全员 / 标签 / 成员 × 可见 · 发言 · 可@智能体）与成员行的「跟随主人」开关 */
.km-rl-vis{margin:4px 0 8px;border-radius:10px;border:1px solid var(--line,rgba(255,255,255,.08));overflow:hidden}
.km-rl-grid{width:100%;border-collapse:collapse;font-size:12px}
.km-rl-grid th,.km-rl-grid td{padding:7px 10px;text-align:center;vertical-align:middle;border-bottom:1px solid var(--line,rgba(255,255,255,.06))}
.km-rl-grid th:first-child,.km-rl-grid td:first-child{text-align:left;width:46%}
.km-rl-grid thead th{font-weight:600;font-size:11px;color:var(--muted,#a9b3cc);background:var(--panel-2,rgba(255,255,255,.035));white-space:nowrap}
.km-rl-grid td:first-child strong{display:inline-block;font-size:12px}
.km-rl-grid td:first-child small{display:block;font-size:10.5px;color:var(--muted,#a9b3cc);margin-top:2px;white-space:normal}
.km-rl-grid td:first-child .km-rl-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px;vertical-align:1px}
.km-rl-grid input[type=checkbox]{width:16px;height:16px;margin:0;vertical-align:middle;cursor:pointer}
.km-rl-grid input[type=checkbox]:disabled{cursor:default;opacity:.45}
.km-rl-grid tr.km-rl-ev-row td{background:color-mix(in srgb,var(--accent,#5b8cf3) 7%,transparent)}
.km-rl-grid tr.km-rl-sub td{text-align:left;font-size:10.5px;letter-spacing:.04em;color:var(--muted,#a9b3cc);background:var(--panel-2,rgba(255,255,255,.025));padding:5px 10px}
.km-rl-grid tr.km-rl-none td{text-align:left;font-size:11px;color:var(--muted,#a9b3cc);padding:10px}
.km-rl-grid tbody tr:last-child td{border-bottom:0}
.km-rl-fixed{display:inline-block;min-width:16px;font-size:12px;color:var(--muted,#a9b3cc)}
.km-rl-fixed.on{color:var(--accent,#5b8cf3);font-weight:700}
.km-rl-planet .km-rl-who small{white-space:normal}
.km-rl-follow{display:inline-flex;align-items:center;gap:5px;margin-right:4px;padding:2px 7px 2px 3px;border-radius:999px;font-size:10.5px;color:var(--muted,#a9b3cc);background:var(--panel-2,rgba(255,255,255,.035));border:1px solid var(--line,rgba(255,255,255,.08));cursor:pointer;user-select:none}
.km-rl-follow>input{position:absolute;opacity:0;width:0;height:0;margin:0}
.km-rl-follow>i{position:relative;width:24px;height:14px;border-radius:999px;background:rgba(255,255,255,.14);flex:none;transition:background .15s}
.km-rl-follow>i::after{content:'';position:absolute;top:2px;left:2px;width:10px;height:10px;border-radius:50%;background:#fff;transition:left .15s}
.km-rl-follow.on{color:var(--text,#e6eaff);border-color:color-mix(in srgb,var(--accent,#5b8cf3) 50%,transparent)}
.km-rl-follow.on>i{background:var(--accent,#5b8cf3)}
.km-rl-follow.on>i::after{left:12px}
.km-rl-follow:has(input:disabled){opacity:.6;cursor:default}
.km-rl-pop-follow small{flex:1 1 100%;opacity:.65;font-size:10.5px;margin-left:0}
.km-rl-pop-follow{flex-wrap:wrap}
/* 任务 e8b2350f（修士 #28231 ①）：「权限」页——一项权限一行，后面是拥有它的标签；接线状态如实标出 */
.km-rl-perm{display:flex;align-items:flex-start;gap:12px;padding:8px 10px;border-radius:10px;background:var(--panel-2,rgba(255,255,255,.035));border:1px solid var(--line,rgba(255,255,255,.06))}
.km-rl-perm .km-rl-who{flex:0 1 44%;min-width:160px}
.km-rl-perm .km-rl-who strong{display:flex;align-items:center;gap:6px;flex-wrap:wrap;white-space:normal}
.km-rl-perm .km-rl-who small{white-space:normal}
.km-rl-perm .km-rl-tags{flex:1 1 56%;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:6px;justify-content:flex-start}
.km-rl-perm.locked{opacity:.85;border-style:dashed}
.km-rl-chip.locked{--c:#d9b45a;border-style:dashed}
.km-rl-chip.locked>i{border-radius:2px}
.km-rl-st{font-style:normal;font-size:10px;font-weight:600;line-height:16px;padding:0 6px;border-radius:999px;white-space:nowrap;color:var(--muted,#a9b3cc);background:rgba(255,255,255,.07);border:1px solid var(--line,rgba(255,255,255,.1))}
.km-rl-st.pending{color:#f0c36d;background:rgba(240,195,109,.12);border-color:rgba(240,195,109,.3)}
.km-rl-st.partial{color:#8fd0ff;background:rgba(143,208,255,.12);border-color:rgba(143,208,255,.3)}
.km-rl-st.owner_locked{color:#d9b45a;background:rgba(217,180,90,.12);border-color:rgba(217,180,90,.3)}
.km-rl-st.ov{color:#9fe0b4;background:rgba(159,224,180,.1);border-color:rgba(159,224,180,.28)}
button.km-rl-pop-row{all:unset;box-sizing:border-box;width:100%;display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;cursor:pointer;font-size:13px}
button.km-rl-pop-row:hover,button.km-rl-pop-row:focus-visible{background:rgba(255,255,255,.08)}
@media (max-width:640px){.km-rl-perm{flex-direction:column;gap:6px}.km-rl-perm .km-rl-who,.km-rl-perm .km-rl-tags{flex:1 1 auto;width:100%}}
/* 修士 #27861（hall-27861）· 「可见与权限」对话框：返回上一级 · 指定成员表的分组 / 排序 / 只看勾选 / 搜索 · 星球页底部「已删除的星球」 */
.modal.km-rl-has-back{position:relative}
.km-rl-back{position:absolute;left:12px;top:14px;width:28px;height:28px;padding:4px;border-radius:8px;color:var(--secondary,#a9b3cc);z-index:2}
.km-rl-back:hover,.km-rl-back:focus-visible{background:rgba(255,255,255,.1);color:var(--text,#fff)}
.modal.km-rl-has-back .modal-title,.modal.km-rl-has-back .modal-sub{margin-left:34px}
/* V45 · 城市三列（编辑城市 / 增加城市 / 删除城市）与「只限几座城」展开行 */
.km-rl-grid th.km-rl-cityth{font-size:10.5px}
.km-rl-citycell{white-space:nowrap}
.km-rl-cityscope{display:inline-flex;align-items:center;gap:2px;vertical-align:middle;margin-left:3px;padding:2px 3px;border-radius:6px;color:var(--muted,#a9b3cc)}
.km-rl-cityscope:hover:not(:disabled),.km-rl-cityscope:focus-visible{background:rgba(255,255,255,.1);color:var(--text,#fff)}
.km-rl-cityscope:disabled{opacity:.35;cursor:default}
.km-rl-cityscope.on{color:var(--accent,#5b8cf3)}
.km-rl-cityscope small{font-size:10px;font-weight:700}
.km-rl-grid tr.km-rl-cityscope-row td{text-align:left;padding:6px 10px 8px;background:var(--panel-2,rgba(255,255,255,.025))}
.km-rl-cityscope-list{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center}
.km-rl-cityscope-hint{flex:1 0 100%;font-size:11px;color:var(--muted,#a9b3cc)}
.km-rl-cityopt{display:inline-flex;align-items:center;gap:5px;font-size:12px;cursor:pointer}
.km-rl-vbar{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--line,rgba(255,255,255,.06));background:var(--panel-2,rgba(255,255,255,.025))}
.km-rl-vbar .km-rl-search{flex:1 1 160px;min-width:120px}
.km-rl-vbar .km-rl-search .field{width:100%;margin:0;height:30px;font-size:12px}
.km-rl-only{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;flex:none}
.km-rl-only.on{border-color:color-mix(in srgb,var(--accent,#5b8cf3) 60%,transparent);background:color-mix(in srgb,var(--accent,#5b8cf3) 14%,transparent);color:var(--text,#e6eaff)}
.km-rl-grid tr.km-rl-grp td,.km-rl-grid tr.km-rl-sec td{padding:4px 8px 4px 6px}
.km-rl-gh{display:flex;align-items:center;gap:6px;min-height:24px}
.km-rl-gh .km-rl-gl{font-weight:700;font-size:11px;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-rl-gh .km-rl-gn{font-style:normal;font-size:10.5px;padding:0 6px;border-radius:999px;background:rgba(255,255,255,.08);color:var(--muted,#a9b3cc)}
.km-rl-fold,.km-rl-sortb{all:unset;cursor:pointer;display:inline-grid;place-items:center;width:20px;height:20px;border-radius:6px;color:var(--muted,#a9b3cc);flex:none}
.km-rl-fold:hover,.km-rl-sortb:hover,.km-rl-fold:focus-visible,.km-rl-sortb:focus-visible{background:rgba(255,255,255,.1);color:var(--text,#fff)}
.km-rl-fold svg{transition:transform .15s}
.km-rl-grp.off .km-rl-fold svg{transform:rotate(-90deg)}
.km-rl-sortb{margin-left:auto}
.km-rl-grp[style*="--g"] .km-rl-gl{color:var(--g)}
.km-rl-gav{display:inline-flex;flex:none}
.km-rl-gav .km-agent,.km-rl-gav .avatar,.km-rl-gav img,.km-rl-gav svg{width:18px;height:18px}
.km-rl-grid tr.km-rl-sec td{background:color-mix(in srgb,var(--accent,#5b8cf3) 5%,transparent)}
.km-rl-grid tr.km-rl-sec .km-rl-gl{font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--text,#dfe3ee)}
.km-rl-grid tr.km-rl-split td{border-top:2px solid color-mix(in srgb,var(--accent,#5b8cf3) 35%,transparent)}
.km-rl-pop-sort{min-width:180px}
.km-rl-pop-sort .km-rl-pop-row.on{color:var(--text,#fff)}
.km-rl-pop-sort .km-rl-pop-row>span{flex:1 1 auto}
.km-rl-trash{margin-top:6px}
.km-rl-trash-body{display:flex;flex-direction:column;gap:4px;padding-top:6px}
.km-rl-gone-row{opacity:.9}

/* ==== src/kmind/explorer.css ==== */
/* KMind 宇宙交互 V17 · the asset and knowledge explorers (src/kmind/explorer.js): list · detail, in the product's glass (V38: chips, ask box, a section per place) */
dialog.modal.km-x-dlg{width:min(1180px,96vw);height:min(760px,90dvh);max-height:90dvh;flex-direction:column;overflow:hidden;padding:18px 18px 14px}
dialog.modal.km-x-dlg[open]{display:flex}
dialog.modal.km-x-dlg .modal-title{display:flex;align-items:center;gap:10px;margin:0 36px 12px 2px}
dialog.modal.km-x-dlg .modal-title::after{content:attr(data-x-count);font:500 11px/1 "JetBrains Mono",ui-monospace,monospace;color:var(--k-dim)}
dialog.modal.km-x-dlg-assets .modal-title::before,dialog.modal.km-x-dlg-knowledge .modal-title::before{content:"";width:9px;height:9px;border-radius:50%;flex:none;background:var(--x-acc);box-shadow:0 0 10px var(--x-acc)}
.km-x-dlg-assets{--x-acc:var(--k-acc)}
.km-x-dlg-knowledge{--x-acc:#1E9BD7}
html[data-theme=night] .km-x-dlg-knowledge{--x-acc:#5CC8FF}
.km-x-wrap{flex:1;min-height:0;display:flex}
.km-x{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:0;border-radius:12px;overflow:hidden;box-shadow:inset 0 0 0 1px var(--k-line);background:rgba(var(--k-bg-rgb),.5)}
@media (max-width:980px){.km-x{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto}.km-x .km-x-detail{max-height:260px;border-left:0;border-top:1px solid var(--k-line)}}
@media (max-width:640px){dialog.modal.km-x-dlg{padding:12px 10px 10px}.km-x .km-x-detail{max-height:200px}.km-x-modes button{padding:0 6px}.km-x-r,.km-x-tm{display:none}.km-x-ask .km-x-modes{display:none}}

/* tree */
.km-x-tree{overflow:auto;padding:10px 8px;background:linear-gradient(180deg,rgba(var(--k-acc-rgb),.045),rgba(var(--k-acc-rgb),.015));border-right:1px solid var(--k-line);scrollbar-width:thin}
.km-x-th{padding:12px 8px 6px;font:500 9.5px/1 "JetBrains Mono","Plex SC",monospace;letter-spacing:.12em;color:var(--k-dim);text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-x-th:first-child{padding-top:2px}
.km-x-node{display:flex;align-items:center;gap:7px;width:100%;min-height:30px;padding:0 8px 0 2px;border:0;border-radius:8px;background:transparent;color:var(--k-ink2);font:inherit;font-size:12.5px;text-align:left;cursor:pointer;transition:background .15s,color .15s}
.km-x-node span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-x-node em{font:500 10px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--k-dim)}
.km-x-node:hover{background:var(--k-hover);color:var(--k-ink)}
.km-x-node.on{background:radial-gradient(ellipse 100% 120% at 0 50%,rgba(var(--k-acc-rgb),.16),rgba(var(--k-acc-rgb),.05) 80%);color:var(--k-acc);font-weight:600}
.km-x-node.here:not(.on) span::after{content:" ·";color:var(--x-acc)}
.km-x-node>svg{flex:none;opacity:.8}
.km-x-chev{display:grid;place-items:center;width:16px;height:16px;flex:none;color:var(--k-dim);transition:transform .18s}
.km-x-chev.open{transform:rotate(90deg)}
.km-x-leaf{padding-left:30px;min-height:26px;font-size:12px}
.km-x-dot{width:7px;height:7px;border-radius:50%;flex:none;background:var(--k-dim);opacity:.6}
.km-x-dot.km-x-waiting{background:var(--k-amber);opacity:1}
.km-x-dot.km-x-ready{background:#2BB673;opacity:1;box-shadow:0 0 6px rgba(43,182,115,.6)}

/* main */
.km-x-main{display:flex;flex-direction:column;min-width:0;min-height:0}
.km-x-bar{display:flex;align-items:center;gap:8px;padding:10px 12px 0}
.km-x-crumb{flex:1;min-width:0;display:flex;align-items:center;gap:4px;font-size:12px;color:var(--k-dim);white-space:nowrap;overflow:hidden}
.km-x-crumb svg{flex:none;opacity:.6}
.km-x-crumb .cur{color:var(--k-ink);font-weight:600;overflow:hidden;text-overflow:ellipsis}
.km-x-view{display:inline-flex;gap:1px;padding:2px;border-radius:8px;background:rgba(var(--k-acc-rgb),.05);box-shadow:inset 0 0 0 1px var(--k-line)}
.km-x-view button{display:grid;place-items:center;width:26px;height:24px;border:0;border-radius:6px;background:transparent;color:var(--k-dim);cursor:pointer}
.km-x-view button.on{background:var(--k-bg);color:var(--k-acc);box-shadow:0 1px 3px rgba(var(--k-sh),.12)}
.km-x-add{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 12px;border:0;border-radius:999px;background:var(--k-acc);color:var(--k-on-acc);font:inherit;font-size:12px;font-weight:600;cursor:pointer;box-shadow:0 4px 14px rgba(var(--k-acc-rgb),.3)}
.km-x-search{display:flex;align-items:center;gap:8px;margin:10px 12px 0;padding:0 6px 0 12px;height:38px;border-radius:12px;background:var(--k-bg);box-shadow:inset 0 0 0 1px var(--k-line),0 2px 8px rgba(var(--k-sh),.05);color:var(--k-dim);transition:box-shadow .15s}
.km-x-search:focus-within{box-shadow:inset 0 0 0 1.5px var(--x-acc),0 0 0 4px rgba(var(--k-acc-rgb),.08)}
.km-x-q{flex:1;min-width:0;height:100%;border:0;outline:none;background:transparent;color:var(--k-ink);font:inherit;font-size:13px}
.km-x-q.mono{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:12px}
.km-x-modes{display:inline-flex;gap:1px;padding:2px;border-radius:9px;background:rgba(var(--k-acc-rgb),.05);flex:none}
.km-x-modes button{height:26px;padding:0 9px;border:0;border-radius:7px;background:transparent;color:var(--k-ink2);font:inherit;font-size:11.5px;cursor:pointer;white-space:nowrap}
.km-x-modes button:hover{color:var(--x-acc)}
.km-x-modes button.on{background:var(--x-acc);color:#fff;font-weight:600}
.km-x-kinds{display:flex;gap:4px;padding:8px 12px 0;overflow-x:auto;scrollbar-width:none}
.km-x-kinds button{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 9px;border:0;border-radius:999px;background:transparent;box-shadow:inset 0 0 0 1px var(--k-line);color:var(--k-ink2);font:inherit;font-size:11.5px;white-space:nowrap;cursor:pointer}
.km-x-kinds button:hover{color:var(--k-acc)}
.km-x-kinds button.on{background:rgba(var(--k-acc-rgb),.1);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.35);color:var(--k-acc);font-weight:600}
.km-x-body{flex:1;min-height:0;overflow:auto;padding:10px 12px 14px;scrollbar-width:thin}
.km-x-lh{display:flex;align-items:center;gap:8px;margin:6px 2px 6px;font-size:11px;font-weight:650;color:var(--k-dim);letter-spacing:.04em}
.km-x-lh:first-child{margin-top:0}
.km-x-back{display:inline-flex;align-items:center;gap:4px;margin-left:auto;height:22px;padding:0 8px;border:0;border-radius:999px;background:rgba(var(--k-acc-rgb),.07);color:var(--k-ink2);font:inherit;font-size:11px;cursor:pointer}
.km-x-back:hover{color:var(--k-acc)}
.km-x-items{display:flex;flex-direction:column;gap:3px}
.km-x-item{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:10px;width:100%;padding:7px 10px 7px 7px;border:0;border-radius:10px;background:transparent;color:var(--k-ink);font:inherit;text-align:left;cursor:pointer;transition:background .15s,box-shadow .15s}
.km-x-item:hover{background:var(--k-hover)}
.km-x-item.on{background:rgba(var(--k-acc-rgb),.09);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.3)}
.km-x-item.locked{opacity:.62}
.km-x-ic{display:grid;place-items:center;width:34px;height:34px;flex:none;border-radius:10px;background:var(--k-sel);color:var(--k-acc)}
.km-x-knowledge .km-x-ic{color:var(--x-acc,var(--k-acc));background:color-mix(in srgb,var(--x-acc,#1E9BD7) 12%,transparent)}
.km-x-item.plug .km-x-ic{background:linear-gradient(135deg,rgba(var(--k-acc-rgb),.18),rgba(124,131,255,.18))}
.km-x-nm{display:flex;flex-direction:column;gap:1px;min-width:0}
.km-x-nm b{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-x-nm small{font-size:11px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-x-where{color:var(--k-ink2)!important}
.km-x-k{font-size:11px;color:var(--k-ink2);white-space:nowrap}
.km-x-r{display:inline-flex;align-items:center;gap:4px;max-width:150px;font-size:11px;color:var(--k-dim);white-space:nowrap}
.km-x-r span{overflow:hidden;text-overflow:ellipsis}
.km-x-sbadge{grid-column:2/-1;display:inline-flex;align-items:center;gap:4px;justify-self:start;margin-top:-2px;padding:2px 7px;border-radius:999px;font-size:10.5px;color:var(--k-ink2);background:rgba(var(--k-acc-rgb),.06)}
.km-x-items.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.km-x-items.grid .km-x-item{grid-template-columns:1fr;justify-items:center;gap:6px;padding:14px 10px 12px;text-align:center;box-shadow:inset 0 0 0 1px var(--k-line);background:rgba(var(--k-bg-rgb),.6)}
.km-x-items.grid .km-x-item.on{box-shadow:inset 0 0 0 1.5px var(--k-acc);background:rgba(var(--k-acc-rgb),.07)}
.km-x-items.grid .km-x-ic{width:48px;height:48px;border-radius:14px}
.km-x-items.grid .km-x-nm{align-items:center;max-width:100%}
.km-x-items.grid .km-x-r{max-width:100%}
.km-x-items.grid .km-x-sbadge{grid-column:auto;justify-self:center}
.km-x-hit{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;margin-bottom:3px;padding:7px 10px 7px 7px;border:0;border-radius:10px;background:transparent;color:var(--k-ink);font:inherit;text-align:left;cursor:pointer}
.km-x-hit:hover{background:var(--k-hover)}
.km-x-hit em{font:600 10.5px/1 "JetBrains Mono",monospace;font-style:normal;color:var(--x-acc);padding:3px 7px;border-radius:999px;background:color-mix(in srgb,var(--x-acc,#1E9BD7) 10%,transparent)}
.km-x-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:180px;height:100%;color:var(--k-dim);text-align:center}
.km-x-empty b{font-size:13px;color:var(--k-ink2);font-weight:600}
.km-x-addform{display:flex;flex-direction:column;gap:2px;max-width:560px}

/* detail */
.km-x-detail{overflow:auto;padding:14px 14px 16px;border-left:1px solid var(--k-line);background:rgba(var(--k-bg-rgb),.55);scrollbar-width:thin}
.km-x-dhead{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.km-x-dhead>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.km-x-dhead b{font-size:15px;font-weight:700;color:var(--k-ink)}
.km-x-dhead small{font:500 10px/1.2 "JetBrains Mono","Plex SC",monospace;letter-spacing:.08em;color:var(--k-dim);text-transform:uppercase}
.km-x-dic{display:grid;place-items:center;width:52px;height:52px;flex:none;border-radius:16px;color:var(--k-acc);background:radial-gradient(circle at 32% 28%,rgba(var(--k-acc-rgb),.24),rgba(var(--k-acc-rgb),.06) 75%);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.2)}
.km-x-knowledge .km-x-dic,.km-x-dic.src{color:var(--x-acc);background:radial-gradient(circle at 32% 28%,color-mix(in srgb,var(--x-acc,#1E9BD7) 26%,transparent),color-mix(in srgb,var(--x-acc,#1E9BD7) 6%,transparent) 75%)}
.km-x-chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:8px}
.km-x-chips span{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:999px;font-size:11px;color:var(--k-ink2);background:rgba(var(--k-acc-rgb),.06)}
.km-x-chips .ok{color:#178A55;background:rgba(43,182,115,.1)}
.km-x-chips .no{color:var(--k-dim)}
html[data-theme=night] .km-x-chips .ok{color:#5FD69B}
.km-x-note{margin:2px 0 8px;font-size:12.5px;line-height:1.55;color:var(--k-ink2)}
.km-x-sec{margin:14px 0 6px;font-size:11px;font-weight:650;color:var(--k-dim);letter-spacing:.04em}
.km-x-roles{display:flex;flex-wrap:wrap;gap:4px}
.km-x-roles i{font-style:normal;padding:3px 8px;border-radius:6px;font-size:11.5px;color:var(--k-ink);background:var(--k-sel)}
.km-x-agents{display:flex;flex-wrap:wrap;gap:6px}
.km-x-agents span{display:inline-flex;align-items:center;gap:5px;padding:2px 8px 2px 2px;border-radius:999px;background:rgba(var(--k-acc-rgb),.06);font-size:11.5px}
.km-x-agents span.no{opacity:.45}
.km-x-agents b{font-weight:550;color:var(--k-ink)}
.km-x-srcline{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--k-ink)}
.km-x-srcline small{color:var(--k-dim)}
.km-x-srcform{display:grid;grid-template-columns:1fr;gap:6px;margin-top:8px}
.km-x-srcform .field{margin:0}
.km-x-srcform button{justify-self:start}
.km-x-edit{margin-top:14px}
.km-x-edit summary{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--k-ink2);cursor:pointer}
.km-x-edit form{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:8px;font-size:12px}
.km-x-edit form button{flex-basis:100%;justify-self:start;max-width:90px}
.km-x-remove{display:inline-flex;align-items:center;gap:5px;margin-top:12px;padding:0;border:0;background:none;color:var(--k-danger);font:inherit;font-size:12px;cursor:pointer;opacity:.8}
.km-x-remove:hover{opacity:1}
.km-x-doc{margin:8px 0 4px;border-radius:10px;overflow:hidden;box-shadow:inset 0 0 0 1px var(--k-line);background:var(--k-bg)}
.km-x-dt{display:flex;align-items:center;gap:6px;padding:8px 8px 8px 10px;font-size:12px;border-bottom:1px solid var(--k-line)}
.km-x-dt b{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-x-docx{display:grid;place-items:center;width:22px;height:22px;border:0;border-radius:6px;background:transparent;color:var(--k-dim);cursor:pointer}
.km-x-text{margin:0;padding:10px 12px;font:12px/1.65 var(--font);white-space:pre-wrap;color:var(--k-ink2);max-height:220px;overflow:auto}
.km-x-table{overflow:auto;max-height:260px}
.km-x-body .km-x-table{border-radius:10px;box-shadow:inset 0 0 0 1px var(--k-line);background:var(--k-bg);margin-bottom:8px}
.km-x-table table{border-collapse:collapse;width:100%;font-size:11.5px}
.km-x-table th{position:sticky;top:0;padding:6px 10px;text-align:left;font-weight:650;color:var(--k-dim);background:var(--k-bg2);border-bottom:1px solid var(--k-line)}
.km-x-table td{padding:6px 10px;border-bottom:1px solid var(--k-line2);color:var(--k-ink);white-space:nowrap}
.km-x-cfg{display:flex;flex-direction:column}
.km-x-cfg .field{margin-bottom:2px}
.km-x-cfgb{display:flex;gap:8px;margin-top:12px}
.km-x-cfgb button{display:inline-flex;align-items:center;gap:5px}
.km-x-test{display:flex;align-items:center;gap:6px;margin:10px 0 0;font-size:12px}
.km-x-test.ok{color:#178A55}
.km-x-test.no{color:var(--k-dim)}
.km-x-st.km-x-waiting{color:var(--k-amber-ink)!important;background:var(--k-amber-bg)!important}
.km-x-st.km-x-ready{color:#178A55!important;background:rgba(43,182,115,.1)!important}
.km-x-uses{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--k-dim)}
.km-x-use{display:flex;align-items:center;gap:7px;padding:5px 8px;border:0;border-radius:8px;background:rgba(var(--k-acc-rgb),.05);color:var(--k-ink);font:inherit;font-size:12px;text-align:left;cursor:pointer}
.km-x-use small{margin-left:auto;color:var(--k-dim)}
.km-x-use:hover{background:var(--k-hover)}
.km-x-q:focus,.km-x-q:focus-visible{outline:none!important;box-shadow:none!important}
.km-x-srchead{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:4px 14px;margin:4px 0 14px}
.km-x-srchead>div:not(.km-x-chips){display:flex;flex-direction:column;gap:2px}
.km-x-srchead b{font-size:17px;font-weight:700;color:var(--k-ink)}
.km-x-srchead small{font:500 10px/1.2 "JetBrains Mono",monospace;letter-spacing:.1em;color:var(--k-dim)}
.km-x-srchead .km-x-chips{grid-column:1/-1;margin:6px 0 0}
.km-x-main .km-x-cfg{max-width:520px}

/* V38 · the classic hub's listing, in KMind's glass: 范围 chips, the ask box, tabs, one section per place */
.km-x-main{padding-top:4px}
.km-x-scope{display:flex;align-items:center;gap:6px;padding:12px 14px 0;overflow-x:auto;scrollbar-width:none;flex:none}
.km-x-scope::-webkit-scrollbar{display:none}
.km-x-scl{flex:none;margin-right:2px;font-size:12px;color:var(--k-dim)}
.km-x-chip{flex:none;display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 13px;border:0;border-radius:999px;background:transparent;box-shadow:inset 0 0 0 1px var(--k-line);color:var(--k-ink2);font:inherit;font-size:12.5px;white-space:nowrap;cursor:pointer;transition:background .15s,color .15s,box-shadow .15s}
.km-x-chip:hover{color:var(--k-ink);background:var(--k-hover)}
.km-x-chip i{font-style:normal;font-size:10.5px;color:var(--k-dim)}
.km-x-chip.on{background:rgba(var(--k-acc-rgb),.12);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.45);color:var(--k-acc);font-weight:600}
.km-x-search.km-x-ask{flex:none;height:50px;margin:12px 14px 0;padding:0 8px 0 16px;gap:10px;border-radius:14px}
.km-x-ask .km-x-q{font-size:14px}
.km-x-go{flex:none;height:36px;padding:0 18px;border:0;border-radius:11px;background:var(--x-acc,var(--k-acc));color:#fff;font:inherit;font-size:13px;font-weight:650;cursor:pointer;box-shadow:0 4px 14px -4px color-mix(in srgb,var(--x-acc,#1E9BD7) 70%,transparent)}
.km-x-go:hover{filter:brightness(1.08)}
.km-x-scopeline{flex:none;margin:8px 16px 0;font-size:11.5px;color:var(--k-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-x-bar{flex:none;flex-wrap:wrap;padding:12px 14px 0}
.km-x-sp{flex:1}
.km-x-count{font-size:12px;color:var(--k-ink2)}
.km-x-tabs{display:inline-flex;gap:6px}
.km-x-tab{height:32px;padding:0 15px;border:0;border-radius:10px;background:rgba(var(--k-acc-rgb),.05);color:var(--k-ink2);font:inherit;font-size:13px;cursor:pointer;transition:background .15s,color .15s}
.km-x-tab:hover{color:var(--k-ink);background:var(--k-hover)}
.km-x-tab.on{background:rgba(var(--k-acc-rgb),.14);color:var(--k-ink);font-weight:650}
.km-x-grp{margin-bottom:10px;border-radius:14px;background:rgba(var(--k-acc-rgb),.025);box-shadow:inset 0 0 0 1px var(--k-line);overflow:hidden}
.km-x-gh{display:flex;align-items:center;gap:9px;width:100%;height:44px;padding:0 14px;border:0;background:transparent;color:var(--k-ink);font:inherit;font-size:13.5px;text-align:left;cursor:pointer}
.km-x-gh:hover{background:var(--k-hover)}
.km-x-gh>svg{flex:none;color:var(--k-dim);transition:transform .18s}
.km-x-grp.fold .km-x-gh>svg{transform:rotate(-90deg)}
.km-x-gh b{font-weight:650;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-x-gh em{margin-left:auto;font:500 11px/1 "JetBrains Mono",ui-monospace,monospace;font-style:normal;color:var(--k-dim)}
.km-x-cur{flex:none;padding:2px 7px;border-radius:999px;font-style:normal;font-size:10.5px;font-weight:600;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.12)}
.km-x-grp .km-x-items{padding:2px 6px 6px}
.km-x-grp .km-x-items.list{gap:1px;border-top:1px solid var(--k-line2,var(--k-line))}
.km-x-grp .km-x-items.grid{padding:8px 10px 10px}
.km-x-drow{grid-template-columns:auto minmax(0,1fr) 76px 92px}
.km-x-drow .km-x-ic{width:30px;height:30px;border-radius:9px}
.km-x-sz,.km-x-tm{font:500 11.5px/1 "JetBrains Mono",ui-monospace,monospace;color:var(--k-dim);white-space:nowrap;text-align:right}
.km-x-items.grid .km-x-sz,.km-x-items.grid .km-x-tm{text-align:center}
.km-x-more{display:block;width:100%;padding:10px 0 12px;border:0;background:transparent;color:var(--k-acc);font:inherit;font-size:12.5px;font-weight:550;text-align:center;cursor:pointer}
.km-x-more:hover{text-decoration:underline;text-underline-offset:3px}
.km-x-lock{display:flex;align-items:center;gap:6px;padding:4px 16px 12px;font-size:11.5px;color:var(--k-dim)}
.km-x-wait{padding:6px 16px 10px;color:var(--k-dim)}
.km-x-srow{grid-template-columns:auto minmax(0,1fr) auto auto}
.km-x-srow .km-x-st{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:999px;font-size:11px;color:var(--k-ink2);background:rgba(var(--k-acc-rgb),.06)}
html[data-km-edge=none] .km-x-grp{box-shadow:none;background:rgba(var(--k-layer-rgb),.04)}
html[data-km-edge=none] .km-x-grp .km-x-items.list{border-top-color:transparent}
html[data-km-edge=none] .km-x-chip{box-shadow:none;background:rgba(var(--k-layer-rgb),.06)}
html[data-km-edge=none] .km-x-chip.on{background:rgba(var(--k-acc-rgb),.18);box-shadow:none}
@media (max-width:640px){.km-x-scope{padding:10px 10px 0}.km-x-search.km-x-ask{margin:10px 10px 0;height:46px}.km-x-scopeline{margin:6px 12px 0}.km-x-bar{padding:10px 10px 0}.km-x-body{padding:10px 10px 12px}.km-x-drow{grid-template-columns:auto minmax(0,1fr) auto}}

/* ==== src/skins/skins.css ==== */
/* KMind 宇宙交互 V17 · the skin button and the skin panel (src/skins/skins.js). Colours come from the skin's own variables. */
.km-skin-btn .km-skin-ic{display:block;transition:transform .5s cubic-bezier(.2,.8,.2,1)}
.km-skin-btn:hover .km-skin-ic,.km-skin-btn[aria-expanded="true"] .km-skin-ic{transform:rotate(-24deg)}
.km-skin-btn[aria-expanded="true"]{color:var(--k-acc)}
.km-skins{position:fixed;z-index:1200;width:296px;padding:12px 12px 8px;border-radius:14px;color:var(--k-ink);font:12px/1.4 var(--font);
  background:var(--cz-solid,rgba(var(--k-bg-rgb),.975));box-shadow:0 0 34px 18px var(--cz-halo,rgba(var(--k-bg-rgb),.6)),0 18px 40px rgba(var(--k-sh),.12);
  animation:km-skins-in .18s ease-out}
.km-skins[hidden]{display:none}
/* 修士 HikosUI #30144 · 皮肤装多了弹层长过视口：它是 fixed 层，页面滚不到它、它自己也不滚，底下的格子和「视觉效果」就看不见。
   面板最高到视口底（--km-skins-top 由 skins.js 的 place() 写入 = 弹层的 top），语言 / 页签钉在上面、「视觉效果」钉在下面，只有格子区滚
   （#km-langs 也穿 .km-skins，这里只管 #km-skins）。id 选择器压过 .km-skins[hidden]，所以 [hidden] 要再写一遍。 */
#km-skins{display:flex;flex-direction:column;box-sizing:border-box;max-height:calc(100dvh - var(--km-skins-top,56px) - 10px)}
#km-skins[hidden]{display:none}
#km-skins .km-skin-grid{flex:0 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
@keyframes km-skins-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.km-skin-head{display:flex;align-items:baseline;gap:8px;padding:0 4px 10px}
.km-skin-head b{font-size:13px;font-weight:650;color:var(--k-ink)}
.km-skin-head span{font-size:10px;letter-spacing:.14em;color:var(--k-dim)}
.km-skin-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.km-skin-tile{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 4px 9px;border:0;border-radius:12px;background:transparent;
  color:var(--k-ink2);font:inherit;cursor:pointer;transition:background .15s,color .15s}
.km-skin-tile svg{display:block;transition:transform .35s cubic-bezier(.2,.8,.2,1);filter:drop-shadow(0 4px 10px rgba(var(--k-sh),.16))}
.km-skin-tile:hover{background:radial-gradient(ellipse 80% 70% at 50% 40%,rgba(var(--k-acc-rgb),.1),transparent 80%);color:var(--k-ink)}
.km-skin-tile:hover svg{transform:rotate(-10deg) scale(1.05)}
.km-skin-tile b{font-weight:560;font-size:12px}
.km-skin-tile.on{background:radial-gradient(ellipse 85% 75% at 50% 40%,rgba(var(--k-acc-rgb),.16),transparent 82%);color:var(--k-acc)}
.km-skin-tile.on::after{content:"";position:absolute;inset:2px;pointer-events:none;opacity:.8;--t:rgba(var(--k-acc-rgb),.75);
  background:linear-gradient(var(--t),var(--t)) 0 0/8px 1px no-repeat,linear-gradient(var(--t),var(--t)) 0 0/1px 8px no-repeat,
    linear-gradient(var(--t),var(--t)) 100% 0/8px 1px no-repeat,linear-gradient(var(--t),var(--t)) 100% 0/1px 8px no-repeat,
    linear-gradient(var(--t),var(--t)) 0 100%/8px 1px no-repeat,linear-gradient(var(--t),var(--t)) 0 100%/1px 8px no-repeat,
    linear-gradient(var(--t),var(--t)) 100% 100%/8px 1px no-repeat,linear-gradient(var(--t),var(--t)) 100% 100%/1px 8px no-repeat}
.km-skin-on{position:absolute;top:8px;right:10px;width:6px;height:6px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 8px rgba(var(--k-acc-rgb),.8)}
.km-skin-add{color:var(--k-dim)}
.km-skin-plus{display:grid;place-items:center;width:46px;height:46px;border-radius:50%;border:1px dashed rgba(var(--k-acc-rgb),.42);font-size:20px;font-weight:300;
  color:var(--k-acc);transition:transform .25s,border-color .15s}
.km-skin-add:hover .km-skin-plus{transform:rotate(90deg);border-color:var(--k-acc)}
.km-skin-fx{display:flex;align-items:center;gap:7px;width:100%;margin-top:8px;padding:9px 6px 3px;border:0;background:var(--cz-rule-soft) top/100% 1px no-repeat;
  color:var(--k-ink2);font:inherit;cursor:pointer}
.km-skin-fx:hover{color:var(--k-acc)}
.km-skin-fx svg{flex:none}
.km-skin-tile:focus-visible,.km-skin-fx:focus-visible{outline:2px solid var(--k-acc);outline-offset:-2px}
@media (prefers-reduced-motion:reduce){.km-skins,.km-skin-tile svg,.km-skin-ic,.km-skin-plus{animation:none;transition:none}}

/* ---------- V17 · 视觉效果: what each effect switched off does to the page (src/kmind/fx.js puts fx-off-<id> on body) ---------- */
body.fx-off-ui *,body.fx-off-ui *::before,body.fx-off-ui *::after{animation-duration:0s!important;animation-delay:0s!important;transition-duration:0s!important;transition-delay:0s!important;scroll-behavior:auto!important}
body.fx-off-uiGlow{--cz-glow:transparent!important;--hud-glow:transparent!important}
body.fx-off-uiGlow #kmu *,body.fx-off-uiGlow .km-skins *{text-shadow:none!important}
body.fx-off-uiGlow #kmu .kmu-pill.kmu-primary::before{display:none}
body.fx-off-blur *{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
body.fx-off-edge #kmu-fade{display:none}
body.fx-off-frame #kmu::after{display:none}
body.fx-off-frame #kmu{--hud-ticks:none!important}
body.fx-off-en .km-en,body.fx-off-en .km-ow-en,body.fx-off-en .km-fx small,body.fx-off-en .km-skin-head span,body.fx-off-en .km-fx-head span{display:none!important}
body.fx-off-en #kmu .kmu-bar[data-cap]::before{display:none}
body.fx-off-badges #kmu .kmu-badge,body.fx-off-badges #kmu .kmu-dot{display:none!important}

/* ---------- V17 · 设置 › 外观: the skins and the effects ---------- */
.km-fx{margin:22px 0 4px;padding-top:16px;background:var(--cz-rule-soft,linear-gradient(90deg,transparent,rgba(var(--k-acc-rgb),.14),transparent)) top/100% 1px no-repeat}
.km-fx.km-fx-skins{margin:0 0 18px;padding-top:0;background:none}
.km-fx-head{display:flex;align-items:baseline;gap:8px;margin:0 0 10px}
.km-fx-head h3{margin:0;font-size:15px;font-weight:650}
.km-fx-head span,.km-fx small{font:500 9px/1 "JetBrains Mono",ui-monospace,monospace;letter-spacing:.16em;color:var(--k-dim);text-transform:uppercase}
.km-skin-chips{display:flex;flex-wrap:wrap;gap:8px}
/* 31421f85 · 恢复默认皮肤: in 设置 › 外观 › 皮肤 a chip of its own under the row; in the panel it borrows .km-skin-fx (only shown after a skin was dropped) */
.km-skin-restore-row{margin-top:10px}
.km-skin-restore-row .km-skin-restore{padding:0 14px 0 10px;color:var(--k-ink2)}
.km-skin-restore-row .km-skin-restore svg{flex:none}
.km-skin-chip{display:inline-flex;align-items:center;gap:8px;height:34px;padding:0 14px 0 8px;border:1px solid var(--k-line);border-radius:999px;background:transparent;color:var(--k-ink2);font:inherit;font-size:13px;cursor:pointer;transition:border-color .15s,color .15s,background .15s}
.km-skin-chip i{width:20px;height:20px;border-radius:50%;flex:none;background:radial-gradient(circle at 35% 32%,#fff 0,var(--a) 45%,var(--g) 100%);box-shadow:inset 0 0 0 1px rgba(var(--k-sh),.12)}
.km-skin-chip i.plus{display:grid;place-items:center;background:none;border:1px dashed rgba(var(--k-acc-rgb),.5);box-shadow:none;font-style:normal;color:var(--k-acc);font-size:14px;line-height:1}
.km-skin-chip:hover{border-color:var(--k-acc);color:var(--k-acc)}
.km-skin-chip.on{border-color:var(--k-acc);color:var(--k-acc);background:rgba(var(--k-acc-rgb),.08);font-weight:600}
.km-skin-chip.km-skin-add{color:var(--k-dim);border-style:dashed}
.km-fx-pre{display:inline-flex;align-items:center;gap:2px;padding:3px;margin:0 0 12px;border-radius:999px;background:rgba(var(--k-acc-rgb),.06);box-shadow:inset 0 0 0 1px var(--k-line)}
.km-fx-pre button{height:28px;padding:0 16px;border:0;border-radius:999px;background:transparent;color:var(--k-ink2);font:inherit;font-size:13px;cursor:pointer;transition:background .15s,color .15s}
.km-fx-pre button:hover{color:var(--k-acc)}
.km-fx-pre button.on{background:var(--k-bg);color:var(--k-acc);font-weight:600;box-shadow:0 1px 4px rgba(var(--k-sh),.14),inset 0 0 0 1px rgba(var(--k-acc-rgb),.25)}
.km-fx-custom{padding:0 12px 0 8px;font-size:12px;color:var(--k-dim);opacity:.45}
.km-fx-custom.on{opacity:1;color:var(--k-amber)}
.km-fx-groups{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px}
@media (max-width:720px){.km-fx-groups{grid-template-columns:1fr}}
.km-fx-row{display:flex;align-items:center;gap:10px;min-height:44px;padding:4px 10px;border-radius:10px;background:rgba(var(--k-acc-rgb),.035);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.08)}
.km-fx-ic{display:grid;place-items:center;width:26px;height:26px;border-radius:8px;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.08);flex:none}
.km-fx-name{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.km-fx-name b{font-size:13px;font-weight:600;color:var(--k-ink)}
.km-fx-n{font:500 11px/1 "JetBrains Mono",ui-monospace,monospace;color:var(--k-dim);flex:none}
.km-fx-sw{position:relative;display:inline-block;width:34px;height:20px;flex:none;cursor:pointer}
.km-fx-sw input{position:absolute;inset:0;margin:0;opacity:0;cursor:pointer;z-index:1}
.km-fx-sw i{position:absolute;inset:0;border-radius:999px;background:rgba(var(--k-sh),.16);transition:background .18s}
.km-fx-sw i::after{content:"";position:absolute;left:2px;top:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .18s}
.km-fx-sw input:checked+i{background:var(--k-acc)}
.km-fx-sw input:checked+i::after{transform:translateX(14px)}
.km-fx-sw input:indeterminate+i{background:rgba(var(--k-acc-rgb),.5)}
.km-fx-sw input:indeterminate+i::after{transform:translateX(7px)}
.km-fx-sw input:focus-visible+i{outline:2px solid var(--k-acc);outline-offset:2px}
.km-fx-detail{margin-top:12px}
.km-fx-detail summary{display:inline-flex;align-items:center;gap:7px;padding:6px 2px;color:var(--k-ink2);font-size:13px;cursor:pointer;list-style:none}
.km-fx-detail summary::-webkit-details-marker{display:none}
.km-fx-detail summary::after{content:"";width:6px;height:6px;margin-left:2px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform .2s}
.km-fx-detail[open] summary::after{transform:rotate(45deg) translate(-2px,-1px)}
.km-fx-detail summary:hover{color:var(--k-acc)}
.km-fx-detail summary small{padding:2px 6px;border-radius:999px;background:rgba(var(--k-acc-rgb),.08);color:var(--k-acc);letter-spacing:0}
.km-fx-dgs{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px 22px;margin-top:8px}
.km-fx-dh{display:flex;align-items:baseline;gap:7px;padding-bottom:6px;margin-bottom:2px;font-size:12px;font-weight:650;color:var(--k-ink);background:var(--cz-rule-soft) bottom/100% 1px no-repeat}
.km-fx-item{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:34px;font-size:13px;color:var(--k-ink2)}

/* ---------- V17 · 语言: the language button opens a menu (src/kmind/langs.js), beside the skin button ---------- */
button.km-lang-btn{display:inline-flex;align-items:center;gap:4px;width:auto!important;min-width:0;padding:0 7px!important}
button.km-lang-btn>svg:first-child{flex:none;opacity:.85}
button.km-lang-btn .km-lang-caret{flex:none;opacity:.6;transition:transform .2s}
button.km-lang-btn[aria-expanded="true"]{color:var(--k-acc)}
button.km-lang-btn[aria-expanded="true"] .km-lang-caret{transform:rotate(180deg)}
.km-langs{width:236px}
.km-lang-list{display:flex;flex-direction:column;gap:2px;font:inherit;letter-spacing:0}
.km-lang-row{display:flex;align-items:center;gap:10px;width:100%;padding:7px 8px;border:0;border-radius:10px;background:transparent;color:var(--k-ink2);font:inherit;text-align:left;cursor:pointer;transition:background .15s,color .15s}
.km-lang-row:hover:not(:disabled),.km-lang-row:focus-visible{background:radial-gradient(ellipse 90% 90% at 20% 50%,rgba(var(--k-acc-rgb),.1),transparent 85%);color:var(--k-ink);outline:none}
.km-lang-row.on{color:var(--k-acc)}
.km-lang-row:disabled{opacity:.45;cursor:default}
.km-lang-glyph{display:grid;place-items:center;width:30px;height:30px;flex:none;border-radius:50%;font:600 13px/1 "Inter Tight","Plex SC",sans-serif;color:var(--k-acc);
  background:radial-gradient(circle at 35% 30%,rgba(var(--k-acc-rgb),.22),rgba(var(--k-acc-rgb),.06) 70%);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.22)}
.km-lang-row.on .km-lang-glyph{background:var(--k-acc);color:var(--k-on-acc);box-shadow:0 0 12px rgba(var(--k-acc-rgb),.45)}
.km-lang-name{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.km-lang-name b{font-size:13px;font-weight:600}
.km-lang-name small{font:500 9px/1 "JetBrains Mono",ui-monospace,monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--k-dim)}
.km-lang-tick{display:grid;place-items:center;color:var(--k-acc)}
.km-lang-more{margin-top:4px;padding-top:9px;border-radius:0 0 10px 10px;background:var(--cz-rule-soft) top/100% 1px no-repeat;color:var(--k-dim)}
.km-lang-plus{background:none;border:1px dashed rgba(var(--k-acc-rgb),.45);box-shadow:none;font-weight:300;font-size:16px}
body.fx-off-en .km-lang-name small{display:inline!important}
@media (max-width:520px){.titlebar button.km-lang-btn>span,.titlebar button.km-lang-btn .km-lang-caret{display:none}.titlebar button.km-lang-btn{padding:0 5px!important}}
/* V18 · skin packs: installed tiles can be removed, a world skin wears a small mark; the importer */
.km-skin-cell{position:relative;display:block}
.km-skin-cell .km-skin-tile{width:100%}
.km-skin-del{position:absolute;top:2px;right:2px;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;font-size:13px;line-height:1;color:var(--k-mute);background:rgba(var(--k-bg-rgb),.9);box-shadow:inset 0 0 0 1px var(--k-line);opacity:0;transition:opacity .15s}
.km-skin-cell:hover .km-skin-del,.km-skin-del:focus-visible{opacity:1}
.km-skin-del:hover{color:var(--k-danger)}
.km-skin-world{position:absolute;left:8px;top:8px;width:7px;height:7px;border-radius:2px;transform:rotate(45deg);background:var(--k-acc);box-shadow:0 0 6px var(--cz-glow,rgba(var(--k-acc-rgb),.5))}
/* V45 (c702e1d3) · bundles group their tiles under a head that spans the grid (its × removes the whole bundle); catalog tiles wear a download mark; 专属 (granted) tiles a small star; the 星港 page a note */
.km-skin-grid .km-skin-group{grid-column:1/-1;margin-top:6px;padding:8px 4px 4px;background:var(--cz-rule-soft,linear-gradient(var(--k-line),var(--k-line))) top/100% 1px no-repeat}
.km-skin-group .km-skin-group-del{margin-left:auto;width:20px;height:20px;border:0;border-radius:50%;display:grid;place-items:center;font-size:13px;line-height:1;color:var(--k-mute);background:transparent;cursor:pointer}
.km-skin-group .km-skin-group-del:hover{color:var(--k-danger);background:rgba(var(--k-bg-rgb),.9)}
.km-skin-tile.km-skin-cat{opacity:.78}.km-skin-tile.km-skin-cat:hover{opacity:1}
.km-skin-dl{position:absolute;top:6px;right:8px;font-style:normal;font-size:12px;line-height:1;color:var(--k-acc)}
.km-skin-granted{position:absolute;left:8px;top:8px;width:8px;height:8px;clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);background:var(--k-amber,#F5A524)}
.km-skin-note{padding:6px 4px 2px;font-size:11.5px;line-height:1.45;color:var(--k-mute)}
.km-sp-members{margin:0;padding:0 4px;list-style:none;display:flex;flex-direction:column;gap:4px;max-height:160px;overflow:auto;font-size:12.5px}
.km-sp-members li{display:flex;align-items:center;gap:8px}.km-sp-members li small{color:var(--k-mute)}
@media(hover:none){.km-skin-del{opacity:1}}
.km-sp{display:flex;flex-direction:column;gap:12px;min-width:min(440px,80vw)}
.km-sp-drop{display:flex;flex-direction:column;align-items:center;gap:6px;padding:26px 16px;border-radius:14px;border:1.5px dashed var(--k-line);color:var(--k-ink2);cursor:pointer;text-align:center;transition:background .15s,border-color .15s}
.km-sp-drop:hover,.km-sp-drop.over{border-color:var(--k-acc);background:rgba(var(--k-acc-rgb),.05);color:var(--k-acc)}
.km-sp-drop b{font-weight:650}
.km-sp-drop small{color:var(--k-mute);font-family:var(--mono,monospace);font-size:11.5px}
.km-sp-paste summary,.km-sp-warn summary{cursor:pointer;color:var(--k-ink2);font-size:13px}
.km-sp-paste textarea{width:100%;margin-top:6px;font-family:"JetBrains Mono",monospace;font-size:12px}
.km-sp-ok{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px;background:rgba(var(--k-acc-rgb),.06);box-shadow:inset 0 0 0 1px var(--k-line)}
.km-sp-ok span{display:flex;flex-direction:column}
.km-sp-ok small{color:var(--k-mute);font-size:12px}
.km-sp-err{margin:0;padding:8px 12px 8px 28px;border-radius:10px;color:var(--k-danger);background:rgba(192,50,33,.06);font-size:12.5px}
.km-sp-warn ul{margin:6px 0 0;padding-left:20px;color:var(--k-mute);font-size:12px;max-height:140px;overflow:auto}

/* V26 · one language on screen: with 英文副标题 off (the default) the small English lines under Chinese titles go */
body.fx-off-en .km-skin-head span,body.fx-off-en .km-en,body.fx-off-en .km-ow-en,body.fx-off-en .km-men{display:none!important}

/* V41 · 皮肤 | 世界: two tabs in the skin panel's head (one text style with the old head; the open one in ink, the other dim) */
.km-skin-tabs{gap:14px}
.km-skin-tab{border:0;background:none;padding:0;font:inherit;font-size:13px;font-weight:650;color:var(--k-dim);cursor:pointer}
.km-skin-tab.on{color:var(--k-ink)}
.km-skin-tab:hover{color:var(--k-ink)}
.km-skin-tab:focus-visible{outline:2px solid var(--k-acc);outline-offset:3px;border-radius:4px}

/* ==== src/kmind/cards.css ==== */
/* KMind 宇宙交互 V18 (V19: edgeless) · 卡片 CARDS (src/kmind/cards.js). One look for every card, whatever the backend designs,
   in both views and every skin: no frames. A card is a pane of glass lit from its top-left by its tone; blocks sit on faint layers
   of light (--k-layer-rgb), told apart by spacing and tint, never by lines. Numbers and small labels are mono. Amber means a person:
   a card waiting for one has an amber state. The card measures itself (container kmcard) and stacks when narrow. */
:root{--km-con:#5A3FD6;--km-con-rgb:90,63,214;--km-mod:#4B5565;--km-mod-rgb:75,85,101}
html[data-theme=night]{--km-con:#A898FF;--km-con-rgb:168,152,255;--km-mod:#AAB5C7;--km-mod-rgb:170,181,199}
.km-card{--tc:var(--k-acc);--tc-rgb:var(--k-acc-rgb);--L:var(--k-layer-rgb);container:kmcard/inline-size;position:relative;isolation:isolate;margin:8px 0 4px;max-width:600px;border-radius:16px;border:1px solid var(--k-edge);overflow:hidden;
  background:radial-gradient(130% 90% at 0% 0%,rgba(var(--tc-rgb),.13),transparent 52%),linear-gradient(180deg,rgba(var(--L),.075),rgba(var(--L),.028) 62%),rgba(var(--k-bg-rgb),.84);
  color:var(--k-ink);font-size:13.5px;line-height:1.55;box-shadow:0 30px 60px -38px rgba(var(--k-sh),.95),0 2px 8px -4px rgba(var(--k-sh),.3);
  backdrop-filter:blur(14px) saturate(1.1);-webkit-backdrop-filter:blur(14px) saturate(1.1);user-select:text;-webkit-user-select:text}
.km-card::before{content:"";position:absolute;left:10%;right:18%;top:0;height:1px;background:linear-gradient(90deg,transparent,rgba(var(--tc-rgb),.9) 30%,rgba(var(--tc-rgb),.25) 75%,transparent);pointer-events:none}
.km-card::after{content:"";position:absolute;left:4%;top:-26px;width:46%;height:52px;background:radial-gradient(closest-side,rgba(var(--tc-rgb),.22),transparent);filter:blur(6px);pointer-events:none;z-index:-1}
.km-card.km-tone-amber{--tc:var(--k-amber);--tc-rgb:var(--k-amber-rgb)}
.km-card.km-tone-danger{--tc:var(--k-danger);--tc-rgb:var(--k-danger-rgb)}
.km-card.km-tone-ok{--tc:var(--k-ok);--tc-rgb:var(--k-ok-rgb)}
.km-card.km-tone-muted{--tc:var(--k-mute);--tc-rgb:var(--k-mute-rgb)}
.km-card :is(button,input):focus-visible{outline:0;box-shadow:var(--k-focus)}
/* the head: icon, the kind (zh + EN small capitals), the title, the state */
.km-card-hd{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;padding:14px 16px 10px}
.km-card-ic{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;color:var(--tc);background:radial-gradient(circle at 32% 26%,rgba(var(--tc-rgb),.36),rgba(var(--tc-rgb),.1) 62%,rgba(var(--tc-rgb),.05));box-shadow:0 0 22px -6px rgba(var(--tc-rgb),.6)}
.km-card-tt{min-width:0;display:flex;flex-direction:column;gap:1px}
.km-card-tt small{display:flex;align-items:baseline;gap:0;font-size:11.5px;color:var(--k-mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-card-tt small i{font:500 9.5px/1 var(--k-mono);font-style:normal;letter-spacing:.16em;margin-left:6px;color:var(--k-dim)}
.km-card-tt small span::before{content:"·";margin:0 6px;color:var(--k-dim)}
.km-card-tt small i+span::before,.km-card-tt small>span:first-child::before{content:"";margin:0}
.km-card-tt small i+span{margin-left:8px}
.km-card-tt b{font-size:15px;font-weight:650;color:var(--k-ink);line-height:1.35;letter-spacing:.01em}
.km-card-st{--sc:var(--k-dim);--sc-rgb:var(--k-mute-rgb);display:inline-flex;align-items:center;gap:7px;height:24px;padding:0 11px 0 9px;border-radius:999px;font-size:11.5px;font-weight:600;white-space:nowrap;color:var(--k-ink2);background:rgba(var(--sc-rgb),.12)}
.km-card-st i{width:6px;height:6px;border-radius:50%;background:var(--sc);box-shadow:0 0 8px rgba(var(--sc-rgb),.9)}
.km-card-st em{font:600 9.5px/1 var(--k-mono);font-style:normal;letter-spacing:.12em;color:var(--k-danger);margin-right:2px}
.km-card-running .km-card-st{--sc:var(--k-acc);--sc-rgb:var(--k-acc-rgb);color:var(--k-acc)}
.km-card-running .km-card-st i{animation:km-card-pulse 1.4s ease-in-out infinite}
.km-card-waiting .km-card-st,.km-card-open .km-card-st{--sc:var(--k-amber);--sc-rgb:var(--k-amber-rgb);color:var(--k-amber-ink)}
.km-card-done .km-card-st{--sc:var(--k-acc);--sc-rgb:var(--k-acc-rgb);color:var(--k-ink2)}
.km-card-failed .km-card-st{--sc:var(--k-danger);--sc-rgb:var(--k-danger-rgb);color:var(--k-danger)}
.km-card-closed .km-card-st,.km-card-expired .km-card-st{color:var(--k-mute)}
.km-pri-urgent .km-card-st em{animation:km-card-pulse 1.4s ease-in-out infinite}
@keyframes km-card-pulse{50%{opacity:.3;transform:scale(.72)}}
.km-card-bd{display:flex;flex-direction:column;gap:12px;padding:2px 16px 14px}
.km-card-bd:empty{display:none}
/* blocks */
.km-cb-cap{margin-bottom:-6px;font:600 10px/1.4 var(--k-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--k-dim)}
.km-cb-text{margin:0;color:var(--k-ink2);white-space:pre-line}
.km-clamp{display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden;-webkit-mask-image:linear-gradient(180deg,#000 62%,transparent);mask-image:linear-gradient(180deg,#000 62%,transparent)}
.km-cb-more{display:inline-flex;align-items:center;gap:4px;align-self:flex-start;margin-top:-6px;padding:2px 8px 2px 0;font-size:12px;color:var(--k-acc)}
.km-cb-more:hover{color:var(--k-ink)}
.km-cb-more svg{transition:transform .2s}
.km-cb-more[aria-expanded=true] svg{transform:rotate(180deg)}
.km-cb-steps>.km-cb-more,.km-cb-tl>.km-cb-more,.km-cb-check>.km-cb-more{margin:2px 0 0 27px}
.km-cb-note{display:flex;align-items:flex-start;gap:8px;margin:0;padding:8px 12px;border-radius:11px;font-size:12.5px;color:var(--k-ink2);background:rgba(var(--L),.06)}
.km-cb-note svg{flex:none;margin-top:3px;color:var(--k-mute)}
.km-cb-note.km-tone-acc{background:rgba(var(--k-acc-rgb),.1)}.km-cb-note.km-tone-acc svg{color:var(--k-acc)}
.km-cb-note.km-tone-amber{background:rgba(var(--k-amber-rgb),.1);color:var(--k-amber-ink)}.km-cb-note.km-tone-amber svg{color:var(--k-amber)}
.km-cb-note.km-tone-danger{background:rgba(var(--k-danger-rgb),.1)}.km-cb-note.km-tone-danger svg{color:var(--k-danger)}
.km-cb-note.km-tone-ok{background:rgba(var(--k-ok-rgb),.1)}.km-cb-note.km-tone-ok svg{color:var(--k-ok)}
.km-cb-sec{display:flex;align-items:center;gap:10px;margin:4px 0 -4px;font-size:12px;font-weight:650;letter-spacing:.06em;color:var(--k-ink2)}
.km-cb-sec::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,rgba(var(--L),.16),transparent 70%)}
.km-cb-fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:6px;margin:0}
.km-cb-fields div{padding:8px 11px;border-radius:11px;background:rgba(var(--L),.055)}
.km-cb-fields dt{font-size:11px;color:var(--k-mute)}
.km-cb-fields dd{margin:2px 0 0;font-weight:600;color:var(--k-ink);font-variant-numeric:tabular-nums}
.km-cb-fields .km-tone-danger dd{color:var(--k-danger)}.km-cb-fields .km-tone-amber dd{color:var(--k-amber-ink)}.km-cb-fields .km-tone-acc dd,.km-cb-fields .km-tone-ok dd{color:var(--k-acc)}
.km-cb-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:6px}
.km-cb-metrics div{position:relative;display:flex;flex-direction:column;gap:1px;padding:10px 12px;border-radius:12px;background:radial-gradient(120% 100% at 0% 0%,rgba(var(--k-acc-rgb),.08),transparent 60%),rgba(var(--L),.05)}
.km-cb-metrics b{font:650 19px/1.2 var(--k-mono);letter-spacing:-.01em;color:var(--k-ink);font-variant-numeric:tabular-nums}
.km-cb-metrics b small{font-size:11px;font-weight:500;margin-left:2px;color:var(--k-mute)}
.km-cb-metrics span{font-size:11.5px;color:var(--k-mute)}
.km-cb-metrics .km-tone-danger b{color:var(--k-danger)}.km-cb-metrics .km-tone-amber b{color:var(--k-amber)}.km-cb-metrics .km-tone-acc b{color:var(--k-acc)}
.km-delta{position:absolute;top:9px;right:10px;display:inline-flex;align-items:center;gap:3px;font:600 10.5px/1 var(--k-mono);font-style:normal;color:var(--k-acc)}
.km-delta.dn{color:var(--k-danger)}
.km-cb-people{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.km-cb-lbl{font-size:11.5px;color:var(--k-mute);margin-right:2px}
.km-cb-who{--sd-rgb:var(--L);display:inline-flex;align-items:center;gap:7px;height:28px;padding:0 10px 0 4px;border-radius:999px;background:rgba(var(--L),.07);color:var(--k-ink);font-size:12.5px;transition:background .15s}
.km-cb-who:hover{background:rgba(var(--L),.13)}
.km-cb-who b{font-weight:600}
.km-cb-who em,.km-cb-turn b em{font:600 9.5px/16px var(--k-mono);font-style:normal;letter-spacing:.1em;padding:0 6px;border-radius:6px}
.km-side-pro{--sd:var(--k-acc);--sd-rgb:var(--k-acc-rgb)}.km-side-con{--sd:var(--km-con);--sd-rgb:var(--km-con-rgb)}.km-side-mod,.km-side-neutral{--sd:var(--km-mod);--sd-rgb:var(--km-mod-rgb)}
.km-cb-who.km-side-pro em,.km-cb-who.km-side-con em,.km-cb-who.km-side-mod em,.km-cb-turn b em{color:var(--sd);background:rgba(var(--sd-rgb),.14)}
/* a debate: a lit bar per round, rounds as layers, each turn washed with its side's light */
.km-cb-rounds{display:flex;flex-direction:column;gap:6px}
.km-cb-rbar{display:flex;gap:6px;margin-bottom:2px}
.km-cb-rbar i{flex:1;height:2px;border-radius:2px;background:rgba(var(--L),.16)}
.km-cb-rbar i.on{background:var(--k-acc);box-shadow:0 0 8px rgba(var(--k-acc-rgb),.75)}
.km-cb-rbar i.run{background:rgba(var(--k-acc-rgb),.55);animation:km-card-pulse 1.4s ease-in-out infinite}
.km-cb-round{border-radius:13px;transition:background .2s}
.km-cb-round.open{background:rgba(var(--L),.045)}
.km-cb-rh{display:flex;align-items:center;gap:9px;width:100%;padding:7px 10px;border-radius:13px;color:var(--k-ink2);font-size:12.5px;text-align:left}
.km-cb-round:not(.open) .km-cb-rh:hover{background:rgba(var(--L),.05)}
.km-cb-rn{font:600 10px/18px var(--k-mono);letter-spacing:.06em;padding:0 6px;border-radius:6px;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.12)}
.km-cb-rh small{margin-left:auto;color:var(--k-mute)}
.km-cb-rh svg{transition:transform .2s;transform:rotate(-90deg);color:var(--k-mute)}
.km-cb-round.open .km-cb-rh svg{transform:none}
.km-cb-turns{display:flex;flex-direction:column;gap:8px;padding:2px 10px 12px}
.km-cb-turn{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start}
.km-cb-turn>div{padding:8px 12px;border-radius:4px 13px 13px 13px;background:linear-gradient(90deg,rgba(var(--sd-rgb),.16),rgba(var(--L),.05) 42%)}
.km-cb-turn b{display:flex;align-items:center;gap:7px;font-size:12px;font-weight:650;color:var(--k-ink)}
.km-cb-turn p{margin:3px 0 0;color:var(--k-ink2)}
.km-cb-typing>div{--sd-rgb:var(--L)}
.km-cb-typing p{display:flex;gap:4px;height:18px;align-items:center}
.km-cb-typing p i{width:5px;height:5px;border-radius:50%;background:var(--k-dim);animation:km-card-dot 1.1s ease-in-out infinite}
.km-cb-typing p i:nth-child(2){animation-delay:.15s}.km-cb-typing p i:nth-child(3){animation-delay:.3s}
@keyframes km-card-dot{40%{transform:translateY(-3px);background:var(--k-acc)}}
/* a conclusion: the brightest layer in the card */
.km-cb-verdict{padding:12px 14px 13px;border-radius:14px;background:radial-gradient(120% 150% at 0% 0%,rgba(var(--k-acc-rgb),.24),rgba(var(--k-acc-rgb),.07) 52%,rgba(var(--L),.04));box-shadow:0 18px 36px -26px rgba(var(--k-acc-rgb),.8)}
.km-cb-vh{display:flex;align-items:center;gap:8px;color:var(--k-acc);font-size:12px;flex-wrap:wrap}
.km-cb-vh>b{font-weight:700;letter-spacing:.04em}
.km-cb-vh>b i{font:500 9.5px/1 var(--k-mono);font-style:normal;letter-spacing:.16em;margin-left:6px;color:rgba(var(--k-acc-rgb),.75)}
.km-cb-vh>span{display:inline-flex;align-items:center;gap:6px;color:var(--k-ink2);margin-left:2px}
.km-cb-sure{margin-left:auto;display:inline-flex;align-items:center;gap:7px;font-style:normal;font-size:11px;color:var(--k-mute)}
.km-cb-sure i{width:46px;height:3px;border-radius:3px;background:rgba(var(--L),.18);overflow:hidden;position:relative}
.km-cb-sure i::after{content:"";position:absolute;inset:0;width:calc(var(--p)*100%);background:var(--k-acc);box-shadow:0 0 6px rgba(var(--k-acc-rgb),.9)}
.km-cb-sure b{font:600 11.5px/1 var(--k-mono);color:var(--k-ink)}
.km-cb-verdict>p{margin:7px 0 0;font-weight:600;color:var(--k-ink);font-size:14px}
.km-cb-verdict ol{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:3px;color:var(--k-ink2);font-size:12.5px}
.km-cb-verdict li{display:grid;grid-template-columns:24px minmax(0,1fr);align-items:baseline}
.km-cb-verdict li i{font:600 10.5px/1 var(--k-mono);font-style:normal;color:var(--k-acc)}
/* a poll: rows of light, the bar glows */
.km-cb-options{display:flex;flex-direction:column;gap:5px}
.km-cb-opt{display:grid;grid-template-columns:minmax(90px,1.1fr) minmax(60px,1fr) 42px 72px;align-items:center;gap:12px;width:100%;padding:8px 12px;border-radius:12px;text-align:left;color:var(--k-ink);background:rgba(var(--L),.05);transition:background .15s}
button.km-cb-opt:hover{background:rgba(var(--L),.1)}
.km-cb-opt.mine{background:rgba(var(--k-acc-rgb),.13)}
.km-cb-opt.win{background:radial-gradient(120% 140% at 0% 0%,rgba(var(--k-acc-rgb),.2),rgba(var(--k-acc-rgb),.06))}
.km-cb-ot{display:flex;align-items:center;gap:7px;min-width:0}
.km-cb-ot b{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-cb-ot em{font:600 10px/16px var(--k-mono);font-style:normal;letter-spacing:.06em;color:var(--k-on-acc);background:var(--k-acc);padding:0 6px;border-radius:6px}
.km-cb-ot em.mine{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.16)}
.km-cb-obar,.km-cb-pbar{display:block;height:4px;border-radius:4px;background:rgba(var(--L),.13);overflow:hidden}
.km-cb-obar i,.km-cb-pbar i{display:block;height:100%;width:calc(var(--p)*100%);border-radius:inherit;background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.5),var(--k-acc));box-shadow:0 0 8px rgba(var(--k-acc-rgb),.6);transition:width .5s}
.km-cb-on{font:600 12.5px/1 var(--k-mono);text-align:right;color:var(--k-ink2);font-variant-numeric:tabular-nums}
.km-cb-on small{font-size:10px;color:var(--k-mute);margin-left:1px}
.km-cb-ov{display:flex;justify-content:flex-end}
.km-cb-ov>span{margin-left:-4px}
/* steps: nodes on a fading rail */
.km-cb-steps,.km-cb-check,.km-cb-tl{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.km-cb-steps li{position:relative;display:grid;grid-template-columns:18px minmax(0,1fr) auto;gap:10px;align-items:baseline;padding:4px 0;color:var(--k-ink2)}
.km-cb-steps li:not(:last-of-type)::after{content:"";position:absolute;left:8.5px;top:21px;bottom:-5px;width:1px;background:linear-gradient(180deg,rgba(var(--L),.28),rgba(var(--L),.06))}
.km-cb-steps li.km-st-done:not(:last-of-type)::after{background:linear-gradient(180deg,rgba(var(--k-acc-rgb),.7),rgba(var(--k-acc-rgb),.15))}
.km-cb-steps i{align-self:start;margin-top:3px;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;background:radial-gradient(circle,rgba(var(--L),.45) 0 2.5px,rgba(var(--L),.08) 3px)}
.km-cb-steps .km-st-done i{background:var(--k-acc);color:var(--k-on-acc);box-shadow:0 0 10px rgba(var(--k-acc-rgb),.6)}
.km-cb-steps .km-st-done>span{color:var(--k-mute)}
.km-cb-steps .km-st-run i{background:rgba(var(--k-acc-rgb),.16);box-shadow:0 0 14px rgba(var(--k-acc-rgb),.55)}
.km-cb-steps .km-st-run i::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 6px var(--k-acc);animation:km-card-pulse 1.2s ease-in-out infinite}
.km-cb-steps .km-st-run>span{color:var(--k-ink);font-weight:600}
.km-cb-steps .km-st-fail i{background:var(--k-danger);color:#fff}
.km-cb-steps small,.km-cb-tl time{font:500 10.5px/1.4 var(--k-mono);color:var(--k-dim);white-space:nowrap}
.km-cb-check li{display:grid;grid-template-columns:18px minmax(0,1fr);gap:9px;align-items:start;padding:3px 0;color:var(--k-ink2)}
.km-cb-check svg{margin-top:3px;color:var(--k-dim)}
.km-cb-check li.done svg{color:var(--k-acc);filter:drop-shadow(0 0 4px rgba(var(--k-acc-rgb),.6))}
.km-cb-check li.done span{color:var(--k-mute)}
.km-cb-progress{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"bar pct" "lbl lbl";gap:4px 12px;align-items:center}
.km-cb-progress .km-cb-pbar{grid-area:bar}
.km-cb-progress small{grid-area:lbl;font-size:11.5px;color:var(--k-mute)}
.km-cb-progress em{grid-area:pct;font:600 12px/1 var(--k-mono);font-style:normal;color:var(--k-acc);font-variant-numeric:tabular-nums}
.km-cb-pbar.run i{width:35%;animation:km-card-run 1.3s ease-in-out infinite}
@keyframes km-card-run{from{transform:translateX(-100%)}to{transform:translateX(300%)}}
/* a timeline: time · node · what happened */
.km-cb-tl li{position:relative;display:grid;grid-template-columns:44px 14px minmax(0,1fr);gap:8px;align-items:baseline;padding:4px 0;color:var(--k-ink2)}
.km-cb-tl time{text-align:right}
.km-cb-tl li>i{align-self:start;margin-top:6px;width:7px;height:7px;border-radius:50%;justify-self:center;background:rgba(var(--L),.5)}
.km-cb-tl li:not(:last-of-type)::after{content:"";position:absolute;left:58.5px;top:18px;bottom:-6px;width:1px;background:linear-gradient(180deg,rgba(var(--L),.24),rgba(var(--L),.05))}
.km-cb-tl li.km-tone-danger>i{background:var(--k-danger);box-shadow:0 0 8px rgba(var(--k-danger-rgb),.8)}
.km-cb-tl li.km-tone-amber>i{background:var(--k-amber);box-shadow:0 0 8px rgba(var(--k-amber-rgb),.8)}
.km-cb-tl li.km-tone-acc>i,.km-cb-tl li.km-tone-ok>i{background:var(--k-acc);box-shadow:0 0 8px rgba(var(--k-acc-rgb),.8)}
.km-cb-tl b{color:var(--k-ink);font-weight:600}
/* a table: no rules, rows of light, numbers right and mono */
.km-cb-table{display:flex;flex-direction:column;gap:5px}
.km-cb-tw{overflow-x:auto;border-radius:11px;background:rgba(var(--L),.035)}
.km-cb-tw table{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px}
.km-cb-tw th{padding:8px 11px 6px;font:600 10px/1.3 var(--k-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--k-dim);white-space:nowrap;background:rgba(var(--L),.05)}
.km-cb-tw td{padding:7px 11px;color:var(--k-ink2);vertical-align:top}
.km-cb-tw tbody tr:nth-child(even) td{background:rgba(var(--L),.035)}
.km-cb-tw td.num{font-family:var(--k-mono);font-size:12px;color:var(--k-ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.km-cb-table>small,.km-cb-table>.km-cb-more{font-size:11.5px;color:var(--k-mute);margin-top:0}
.km-cb-table>.km-cb-more{color:var(--k-acc)}
/* compare: things side by side; the best lit, the one you pick glows */
.km-cb-compare{display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr));gap:6px}
.km-cb-cmp{display:flex;flex-direction:column;gap:6px;padding:11px 12px 12px;border-radius:14px;background:rgba(var(--L),.05);transition:background .2s,box-shadow .2s}
.km-cb-cmp[role=button]{cursor:pointer}
.km-cb-cmp[role=button]:hover{background:rgba(var(--L),.09)}
.km-cb-cmp.best{background:radial-gradient(130% 110% at 0% 0%,rgba(var(--k-acc-rgb),.14),transparent 60%),rgba(var(--L),.05)}
.km-cb-cmp.sel{background:radial-gradient(130% 110% at 0% 0%,rgba(var(--k-acc-rgb),.3),rgba(var(--k-acc-rgb),.08) 70%);box-shadow:0 0 28px -10px rgba(var(--k-acc-rgb),.85)}
.km-cb-cmp:focus-visible{outline:0;box-shadow:var(--k-focus)}
.km-cb-cmph{display:flex;align-items:center;gap:7px;min-width:0}
.km-cb-cmph b{font-weight:650;color:var(--k-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-cb-cmph em{flex:none;font:600 9.5px/16px var(--k-mono);font-style:normal;letter-spacing:.08em;padding:0 6px;border-radius:6px;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.14)}
.km-cb-cmp>small{font-size:11.5px;color:var(--k-mute);margin-top:-3px}
.km-cb-score{display:flex;align-items:center;gap:8px}
.km-cb-score i{flex:1;height:3px;border-radius:3px;background:rgba(var(--L),.15);position:relative;overflow:hidden}
.km-cb-score i::after{content:"";position:absolute;inset:0;width:calc(var(--p)*100%);background:linear-gradient(90deg,rgba(var(--k-acc-rgb),.5),var(--k-acc));box-shadow:0 0 6px rgba(var(--k-acc-rgb),.7)}
.km-cb-score b{font:600 12px/1 var(--k-mono);color:var(--k-ink)}
.km-cb-cmp ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;font-size:12px;color:var(--k-ink2)}
.km-cb-cmp li{display:grid;grid-template-columns:14px minmax(0,1fr);gap:5px;align-items:start}
.km-cb-cmp li svg{margin-top:3px}
.km-cb-cmp ul.pro svg{color:var(--k-acc)}.km-cb-cmp ul.con svg{color:var(--km-con)}
/* a chart, drawn from plain series */
.km-cb-chart{position:relative;margin:0;padding:10px 12px 8px;border-radius:12px;background:rgba(var(--L),.04)}
.km-cb-chart svg{display:block;width:100%;height:112px;overflow:visible}
.km-ch-spark svg{height:40px}
.km-cb-chart .km-ch-line{fill:none;stroke:var(--k-acc);stroke-width:2;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 4px rgba(var(--k-acc-rgb),.7))}
.km-cb-chart .km-ch-line.km-ch-s1{stroke:var(--km-con);filter:drop-shadow(0 0 4px rgba(var(--km-con-rgb),.7))}
.km-cb-chart svg>*{stroke:none}
.km-ch-area{fill:rgba(var(--k-acc-rgb),.1);stroke:none}
.km-cb-chart .km-ch-dot{fill:none;stroke:var(--k-acc);stroke-width:7;stroke-linecap:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 5px rgba(var(--k-acc-rgb),.9))}.km-cb-chart .km-ch-dot.km-ch-s1{stroke:var(--km-con)}
.km-cb-chart .km-ch-bar{fill:rgba(var(--k-acc-rgb),.75)}.km-cb-chart .km-ch-bar.km-ch-s1{fill:rgba(var(--km-con-rgb),.75)}
.km-cb-chart .km-ch-mark{stroke:rgba(var(--k-danger-rgb),.75);stroke-width:1;stroke-dasharray:4 4;vector-effect:non-scaling-stroke}
.km-ch-plot{position:relative}
.km-ch-max{position:absolute;top:-3px;left:0;font:500 10px/1 var(--k-mono);color:var(--k-dim)}
.km-ch-mk{position:absolute;right:0;transform:translateY(-130%);font:500 10px/1.2 var(--k-mono);font-style:normal;color:var(--k-danger);white-space:nowrap}
.km-ch-x,.km-ch-legend{display:flex;justify-content:space-between;gap:10px;margin-top:5px;font:500 10px/1.2 var(--k-mono);color:var(--k-dim)}
.km-ch-legend{justify-content:flex-start;gap:14px}
.km-ch-legend span{display:inline-flex;align-items:center;gap:5px}
.km-ch-legend i{width:10px;height:2px;border-radius:2px;background:var(--k-acc)}
.km-ch-legend i.km-ch-s1{background:var(--km-con)}
.km-cb-code{margin:0;padding:10px 12px;border-radius:11px;max-height:220px;overflow:auto;background:rgba(var(--k-sh),.22);font:12px/1.55 var(--k-mono);color:var(--k-ink2);white-space:pre}
html:not([data-theme=night]) .km-cb-code{background:rgba(var(--L),.06)}
.km-cb-quote{display:grid;grid-template-columns:18px minmax(0,1fr);gap:8px;margin:0;padding:2px 0;color:var(--k-ink2)}
.km-cb-quote>svg{color:var(--tc);margin-top:3px}
.km-cb-quote span{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--k-mute)}
.km-cb-quote p{margin:3px 0 0}
.km-cb-refs{display:flex;flex-wrap:wrap;gap:6px}
.km-cb-ref{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:999px;font-size:12px;color:var(--k-ink2);background:rgba(var(--L),.07)}
.km-cb-ref svg{color:var(--k-acc)}
.km-cb-unknown{margin:0;font-size:12.5px;color:var(--k-mute)}
.km-cb-unknown i{font:500 10px/1 var(--k-mono);font-style:normal;letter-spacing:.1em;margin-right:7px;color:var(--k-dim)}
/* answers: a lit primary, the others as glass */
.km-card-ac{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:4px 16px 12px}
.km-card-act{display:inline-flex;align-items:center;gap:6px}
.km-card-btn{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 15px;border-radius:999px;font-size:13px;font-weight:600;color:var(--k-ink2);background:rgba(var(--L),.1);transition:box-shadow .15s,background .15s,color .15s,transform .1s}
.km-card-btn:hover:not(:disabled){color:var(--k-ink);background:rgba(var(--k-acc-rgb),.16)}
.km-card-btn:active:not(:disabled){transform:translateY(1px)}
.km-card-btn.km-primary{background:linear-gradient(180deg,color-mix(in srgb,var(--k-acc) 86%,#fff),var(--k-acc));color:var(--k-on-acc);box-shadow:0 10px 24px -12px rgba(var(--k-acc-rgb),.95),0 0 18px -6px rgba(var(--k-acc-rgb),.6)}
.km-card-btn.km-primary:hover:not(:disabled){color:var(--k-on-acc);background:var(--k-acc);box-shadow:0 10px 24px -12px rgba(var(--k-acc-rgb),.95),0 0 26px -4px rgba(var(--k-acc-rgb),.8)}
.km-card-btn.km-danger{color:var(--k-danger);background:rgba(var(--k-danger-rgb),.1)}
.km-card-btn.km-danger:hover:not(:disabled){color:var(--k-danger);background:rgba(var(--k-danger-rgb),.18)}
.km-card-btn.confirm{color:var(--k-on-acc);background:var(--k-danger);box-shadow:0 0 22px -6px rgba(var(--k-danger-rgb),.9)}
.km-card-btn.busy svg{animation:km-card-spin .8s linear infinite}
@keyframes km-card-spin{to{transform:rotate(360deg)}}
.km-card-btn:disabled{opacity:.42;cursor:not-allowed}
.km-card-btn.busy:disabled{opacity:.75;cursor:progress}
.km-card-step{display:inline-flex;align-items:center;height:32px;border-radius:999px;background:rgba(var(--L),.1);padding:0 4px}
.km-card-step button{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;color:var(--k-ink2)}
.km-card-step button:hover:not(:disabled){background:rgba(var(--k-acc-rgb),.16);color:var(--k-ink)}
.km-card-step button:disabled{opacity:.35}
.km-card-step b{min-width:18px;text-align:center;font:600 13px/1 var(--k-mono);color:var(--k-ink)}
.km-card-step small{color:var(--k-mute);margin:0 7px 0 2px;font-size:11.5px}
.km-card-pick{display:inline-flex;align-items:center;gap:2px;height:32px;padding:3px;border-radius:999px;background:rgba(var(--L),.08)}
.km-card-pick button{height:26px;padding:0 11px;border-radius:999px;font-size:12.5px;color:var(--k-ink2);transition:background .15s,box-shadow .15s}
.km-card-pick button:hover:not(:disabled){color:var(--k-ink)}
.km-card-pick button.on{color:var(--k-ink);background:rgba(var(--k-acc-rgb),.24);box-shadow:0 0 14px -4px rgba(var(--k-acc-rgb),.75)}
.km-card-in{height:32px;border-radius:999px;border:0;background:rgba(var(--L),.09);color:var(--k-ink);padding:0 14px;min-width:160px;font:inherit;font-size:13px}
.km-card-in:focus{outline:0;box-shadow:var(--k-focus)}
.km-card-wait{margin-left:auto;font-size:11.5px;color:var(--k-mute)}
.km-card-ft{display:flex;align-items:center;gap:10px;padding:0 16px 12px;font-size:11.5px;color:var(--k-mute);min-height:6px}
.km-card-ac+.km-card-ft{padding-top:2px}
.km-card-from{display:inline-flex;align-items:center;gap:4px;min-width:0}
.km-card-from>span:not(:last-child){margin-right:-6px}
.km-card-from>span:last-child{margin-left:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-card-log{display:inline-flex;align-items:center;gap:8px;margin-left:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:62%}
.km-card-log time{font:500 10.5px/1 var(--k-mono);color:var(--k-dim)}
article.message.km-card-flash .km-card{animation:km-card-flash 1.5s ease-out}
@keyframes km-card-flash{0%{box-shadow:0 0 0 2px rgba(var(--k-acc-rgb),.5),0 0 40px rgba(var(--k-acc-rgb),.5)}100%{box-shadow:0 0 0 2px rgba(var(--k-acc-rgb),0),0 0 40px rgba(var(--k-acc-rgb),0)}}
/* narrow (the universe's chat window, a phone): columns stack */
@container kmcard (max-width:460px){
  .km-card-hd{gap:10px;padding:13px 13px 9px}.km-card-bd{padding:2px 13px 13px}.km-card-ac{padding:4px 13px 11px}.km-card-ft{padding:0 13px 11px}
  .km-cb-compare{grid-template-columns:minmax(0,1fr)}
  .km-cb-opt{grid-template-columns:minmax(0,1fr) 56px 38px}.km-cb-ov{display:none}
  .km-cb-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.km-cb-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .km-cb-metrics>div:last-child:nth-child(odd){grid-column:1/-1}   /* an odd one out takes the whole row, not half of it */
  .km-cb-metrics .km-delta{position:static;margin-top:3px}   /* the change sits under its name, not over a long value */
  .km-card-wait{margin-left:0;width:100%}.km-card-log{max-width:48%}
  .km-card-st{padding:0 9px 0 8px}
}
@container kmcard (max-width:340px){.km-card-hd{grid-template-columns:auto minmax(0,1fr)}.km-card-st{grid-column:1/-1;justify-self:start}.km-cb-tl li{grid-template-columns:38px 12px minmax(0,1fr)}.km-cb-tl li:not(:last-of-type)::after{left:49.5px}}
/* glows and motion follow the visual effects (src/kmind/fx.js) */
body.fx-off-uiGlow .km-card-btn.km-primary,body.fx-off-uiGlow .km-card-btn.km-primary:hover,body.fx-off-uiGlow .km-card-ic,body.fx-off-uiGlow .km-cb-verdict,body.fx-off-uiGlow .km-cb-cmp.sel{box-shadow:none!important}
body.fx-off-uiGlow .km-card::after{display:none}
body.fx-off-uiGlow .km-cb-chart :is(.km-ch-line,.km-ch-dot){filter:none}
body.fx-off-ui .km-card *,body.fx-off-ui .km-card{animation:none!important;transition:none!important}
@media(prefers-reduced-motion:reduce){.km-card *{animation:none!important}}
/* in 动态: a card waiting for you, as one line */
.km-ow-card-need .km-ow-av{display:grid;place-items:center}
.km-ow-pri{font:600 9.5px/16px var(--k-mono);font-style:normal;letter-spacing:.1em;padding:0 6px;margin-left:6px;border-radius:6px;color:var(--k-danger);background:rgba(var(--k-danger-rgb),.14);vertical-align:2px}
/* the card button in the composer, and its menu */
.km-card-tool{color:var(--k-ink2)}
.km-card-tool:hover{color:var(--k-acc)}
.km-card-menu{position:fixed;z-index:60;min-width:190px;padding:6px;border-radius:16px;background:linear-gradient(180deg,rgba(var(--k-layer-rgb),.08),rgba(var(--k-layer-rgb),.03)),rgba(var(--k-bg-rgb),.94);border:1px solid var(--k-edge);box-shadow:0 26px 50px -22px rgba(var(--k-sh),.85);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.km-card-menu[hidden]{display:none}
.km-card-menu-h{display:flex;align-items:baseline;gap:8px;padding:6px 10px 6px}
.km-card-menu-h b{font-size:13px;color:var(--k-ink)}
.km-card-menu-h span{font:500 9.5px/1 var(--k-mono);letter-spacing:.16em;color:var(--k-dim)}
.km-card-menu button{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border-radius:9px;color:var(--k-ink2);font-size:13.5px;text-align:left}
.km-card-menu button:hover:not(:disabled){background:rgba(var(--k-acc-rgb),.12);color:var(--k-ink)}
.km-card-menu button:disabled{opacity:.4}
.km-cf .km-cf-chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 6px}
.km-cf-chip{display:inline-flex;align-items:center;gap:6px;padding:3px 11px 3px 4px;border-radius:999px;background:rgba(var(--k-layer-rgb),.07);box-shadow:inset 0 0 0 1px var(--k-edge2);cursor:pointer;font-size:13px;color:var(--k-ink2);transition:background .15s,box-shadow .15s}
.km-cf-chip:hover{background:rgba(var(--k-layer-rgb),.12)}
.km-cf-chip input{position:absolute;opacity:0;pointer-events:none}
.km-cf-chip:has(input:checked){color:var(--k-ink);background:rgba(var(--k-acc-rgb),.22);box-shadow:0 0 16px -5px rgba(var(--k-acc-rgb),.8)}
html:not([data-theme=night]) .km-cf-chip:has(input:checked){box-shadow:inset 0 0 0 1.5px var(--k-acc)}
.km-cf-chip:has(input:focus-visible){box-shadow:var(--k-focus)}
.km-cf-row{display:flex;align-items:center;gap:14px;margin-top:6px}
.km-cf-step{display:inline-flex;align-items:center;gap:4px;height:32px;padding:0 4px;border-radius:999px;background:rgba(var(--k-layer-rgb),.09);box-shadow:inset 0 0 0 1px var(--k-edge2)}
.km-cf-step button{width:26px;height:26px;border-radius:50%}
.km-cf-step button:hover{background:var(--k-hover);color:var(--k-acc)}
.km-cf-step b{min-width:16px;text-align:center;font-family:var(--k-mono)}
.km-cf textarea.field{resize:vertical;min-height:84px}
@media(max-width:520px){.km-card{max-width:none}}
/* V18 · 动态's “等你决定”: each line is the brief, opened it shows the details (a card whole, a request's mail, a question) */
.km-ow-nwrap{display:flex;flex-direction:column}
.km-ow-nt{cursor:pointer;border-radius:8px;outline-offset:2px}
.km-ow-nt:hover b{color:var(--k-acc)}
.km-ow-nchev svg{transition:transform .2s}
.km-ow-nwrap.open .km-ow-nchev svg{transform:rotate(180deg)}
.km-ow-nwrap.open>.km-ow-need{border-bottom-left-radius:6px!important;border-bottom-right-radius:6px!important}
.km-ow-nx{margin:4px 2px 8px 2px;padding:0 0 0 42px;animation:km-ow-nx .18s ease-out}
.km-ow-nx .km-card{margin:2px 0 0;max-width:none}
@keyframes km-ow-nx{from{opacity:0;transform:translateY(-4px)}}
.km-ow-nd{padding:11px 13px;border-radius:13px;background:linear-gradient(180deg,rgba(var(--k-layer-rgb),.07),rgba(var(--k-layer-rgb),.03)),rgba(var(--k-bg-rgb),.6);box-shadow:inset 0 0 0 1px var(--k-edge2);font-size:13px;color:var(--k-ink2)}
.km-ow-nd-h{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:12px;color:var(--k-mute)}
.km-ow-nd-h b{color:var(--k-ink);font-weight:650}
.km-ow-nd-h time{margin-left:auto;font:500 10.5px/1 var(--k-mono);color:var(--k-dim)}
.km-ow-nd p{margin:7px 0 0;line-height:1.55;color:var(--k-ink)}
.km-ow-nd-att{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.km-ow-nd-att span,.km-ow-nd-at{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--k-ink2)}
.km-ow-nd-att span{padding:3px 10px;border-radius:999px;background:rgba(var(--k-layer-rgb),.08)}
.km-ow-nd-at{margin-top:8px;color:var(--k-mute)}
@media(max-width:520px){.km-ow-nx{padding-left:0}}
body.fx-off-ui .km-ow-nx{animation:none}

/* ==== src/kmind/edgeless.css ==== */
/* KMind 宇宙交互 V19 · 无边框 EDGELESS. When the skin says so (html[data-km-edge=none]: 夜间 does; a skin pack sets ui.edge.mode),
   containers and controls are told apart by layers of light, tint and spacing, not by frames. Selection and focus glow instead of
   drawing a ring. The line tokens fade to faint layers, so a rule nobody listed here also softens.
   Loaded after every other stylesheet; nothing here changes layout. 白昼 keeps its hairlines (data-km-edge=line). */
html[data-km-edge=none]{--k-line:rgba(var(--k-layer-rgb),.085);--k-line2:rgba(var(--k-layer-rgb),.05);--k-fline:rgba(var(--k-layer-rgb),.09);--line:rgba(var(--k-layer-rgb),.07)}

/* focus and selection: a glow, never a hard ring */
html[data-km-edge=none] :is(button,input,textarea,select,a,[tabindex]):focus-visible{outline:0!important;box-shadow:var(--k-focus)!important}
html[data-km-edge=none] :is(button,a,[tabindex]):focus:not(:focus-visible){outline:0}
html[data-km-edge=none] body:not(.km-u) :is(.channel,.dm-shortcut,.dm-item,.utility).active{box-shadow:inset 2px 0 0 var(--k-acc),inset 18px 0 22px -18px rgba(var(--k-acc-rgb),.7)!important}
html[data-km-edge=none] .km-skin-chip.on{border-color:transparent;background:rgba(var(--k-acc-rgb),.2);color:var(--k-ink);box-shadow:0 0 18px -6px rgba(var(--k-acc-rgb),.85)}
html[data-km-edge=none] .voice-tile.self{border-color:transparent!important;box-shadow:0 0 0 1px rgba(var(--k-acc-rgb),.0),0 0 28px -8px rgba(var(--k-acc-rgb),.9);background:radial-gradient(120% 120% at 50% 0%,rgba(var(--k-acc-rgb),.18),rgba(var(--k-layer-rgb),.05))}
html[data-km-edge=none] .imm-sel.on{border-color:transparent;background:color-mix(in srgb,var(--c) 9%,transparent);box-shadow:0 0 26px -10px var(--c);border-radius:12px}

/* controls that wore a frame: glass with a little light */
html[data-km-edge=none] :is(.outline,button.outline){border-color:transparent!important;box-shadow:none!important;background:rgba(var(--k-layer-rgb),.09)!important;color:var(--k-ink2)}
html[data-km-edge=none] :is(.outline,button.outline):hover:not(:disabled){background:rgba(var(--k-acc-rgb),.18)!important;color:var(--k-ink)}
html[data-km-edge=none] :is(.km-mb-btn,.km-mctx,.km-mlink){border-color:transparent;background:rgba(var(--k-layer-rgb),.08)}
html[data-km-edge=none] :is(.km-mb-btn,.km-mctx,.km-mlink):hover{border-color:transparent;background:rgba(var(--k-acc-rgb),.16);color:var(--k-ink)}
html[data-km-edge=none] :is(.km-x-search,.km-x-view,.km-fx-pre,.km-rel-seg,.km-ow-gb){box-shadow:none;background:rgba(var(--k-layer-rgb),.075)}
html[data-km-edge=none] .km-x-search:focus-within{box-shadow:var(--k-focus)}
html[data-km-edge=none] .km-x-items.grid .km-x-item{box-shadow:none;background:rgba(var(--k-layer-rgb),.05)}
html[data-km-edge=none] .km-x-items.grid .km-x-item:hover{background:rgba(var(--k-layer-rgb),.1)}
html[data-km-edge=none] :is(.km-crowd,.km-ow-rel,.km-x-dic){box-shadow:none}
html[data-km-edge=none] .km-crowd.own{background:rgba(var(--k-acc-rgb),.18)}
html[data-km-edge=none] .km-ow-rel{background:rgba(var(--k-layer-rgb),.08)}
html[data-km-edge=none] .km-ow-rel:hover{box-shadow:0 0 16px -4px rgba(var(--k-acc-rgb),.7)}
html[data-km-edge=none] :is(.km-msort,.km-llm-panel,.km-llm-now){border-color:transparent;background:rgba(var(--k-layer-rgb),.06)}
html[data-km-edge=none] :is(.km-llm-now:hover,.km-llm-now[aria-expanded=true]){border-color:transparent;background:rgba(var(--k-acc-rgb),.13)}
html[data-km-edge=none] :is(.km-llm-tag,.km-skin-chip){border-color:transparent;background:rgba(var(--k-layer-rgb),.08)}
html[data-km-edge=none] .km-skin-chip.km-skin-add{background:rgba(var(--k-acc-rgb),.08)}
html[data-km-edge=none] :is(.km-skin-plus,.km-lang-plus){border-color:transparent!important;background:rgba(var(--k-acc-rgb),.14)!important}
html[data-km-edge=none] .km-invite-row{border-color:transparent!important;background:radial-gradient(120% 140% at 0% 0%,rgba(var(--k-acc-rgb),.16),rgba(var(--k-layer-rgb),.05))!important}
html[data-km-edge=none] .km-sp-drop{border-color:transparent;background:rgba(var(--k-layer-rgb),.06)}
html[data-km-edge=none] :is(.km-sp-drop:hover,.km-sp-drop.over){border-color:transparent;background:rgba(var(--k-acc-rgb),.12);box-shadow:0 0 30px -12px rgba(var(--k-acc-rgb),.9)}
html[data-km-edge=none] :is(.tag,.km-tag:not(.km-tag-own)){border-color:transparent;background:rgba(var(--k-layer-rgb),.09)}
html[data-km-edge=none] :is(.km-role-host,.km-demo-chip,.km-tag-own){border-color:transparent!important}
html[data-km-edge=none] .km-mst-open{box-shadow:none}
html[data-km-edge=none] .live-voice{border-color:transparent;background:radial-gradient(120% 140% at 0% 0%,rgba(var(--k-acc-rgb),.16),rgba(var(--k-layer-rgb),.05))}
html[data-km-edge=none] .voice-tile{border-color:transparent!important;background:rgba(var(--k-layer-rgb),.06)}
html[data-km-edge=none] .discover-cover{border-color:transparent!important}
/* fields: filled glass, a glow when you type */
html[data-km-edge=none] .field{border-color:transparent!important;background:rgba(var(--k-layer-rgb),.07)!important;box-shadow:none!important;border-radius:10px!important}
html[data-km-edge=none] .field:focus{outline:0!important;box-shadow:var(--k-focus)!important}
/* panes and blocks that wore a frame */
html[data-km-edge=none] .km-mcard{border-color:transparent;background:linear-gradient(180deg,rgba(var(--k-layer-rgb),.07),rgba(var(--k-layer-rgb),.03))}
html[data-km-edge=none] .km-mreq-open{border-color:transparent;background:radial-gradient(120% 160% at 0% 0%,rgba(var(--k-amber-rgb),.16),rgba(var(--k-amber-rgb),.04))}
html[data-km-edge=none] :is(.km-mlist,.km-x-tree){border-color:transparent}
html[data-km-edge=none] :is(.km-mf,.km-mrow){border-bottom-color:transparent}
html[data-km-edge=none] .km-mrow:hover{background:rgba(var(--k-layer-rgb),.05)}
html[data-km-edge=none] .km-x-detail{border-color:transparent;background:rgba(var(--k-layer-rgb),.035)}
html[data-km-edge=none] :is(.roster-context,.topic-toolbar,.topic-heading,.topic-reply-divider,.composer-wrap){border-color:transparent}
html[data-km-edge=none] .topic-reply-divider{background:linear-gradient(90deg,rgba(var(--k-layer-rgb),.06),transparent 80%);border-radius:10px;padding-left:14px;padding-right:14px}
html[data-km-edge=none] .kmw.kmw-sheet .kmw-head::before{background:rgba(var(--k-layer-rgb),.35)}
html[data-km-edge=none] .kmu-dock-sep{background:linear-gradient(180deg,transparent,rgba(var(--k-layer-rgb),.22),transparent)}
html[data-km-edge=none] #kmu-dock[data-pos="left"] .kmu-dock-sep,html[data-km-edge=none] #kmu-dock[data-pos="right"] .kmu-dock-sep{background:linear-gradient(90deg,transparent,rgba(var(--k-layer-rgb),.22),transparent)}
html[data-km-edge=none] :is(#kmu-dock-panel,#kmu-dock-overflow){border-color:transparent!important}
html[data-km-edge=none] .km-skin-chip i.plus{border:0;background:rgba(var(--k-acc-rgb),.16)}
html[data-km-edge=none] .km-ow-gb button.on{background:rgba(var(--k-acc-rgb),.2);color:var(--k-ink);box-shadow:0 0 14px -4px rgba(var(--k-acc-rgb),.75)}
html[data-km-edge=none] :is(.km-chip,.km-chip-btn){border-color:transparent;background:rgba(var(--k-layer-rgb),.08)}
html[data-km-edge=none] .km-profile-agent{border-color:transparent;background:radial-gradient(120% 140% at 0% 0%,rgba(var(--k-acc-rgb),.12),rgba(var(--k-layer-rgb),.04))}
html[data-km-edge=none] .km-llm em{border-color:transparent;background:rgba(var(--k-acc-rgb),.14)}
html[data-km-edge=none] :is(.km-llm-search,.km-llm-foot){border-color:transparent}
html[data-km-edge=none] .km-icon-grid span{border-color:transparent;background:rgba(var(--k-layer-rgb),.07)}
html[data-km-edge=none] .km-icon-grid input:checked+span{box-shadow:0 0 16px -4px rgba(var(--k-acc-rgb),.8)}
html[data-km-edge=none] .km-icon-grid input:focus-visible+span{outline:0;box-shadow:var(--k-focus)}
html[data-km-edge=none] :is(.kmu-dock-call,.imm-exit){border-color:transparent}
html[data-km-edge=none] :is(#kmu-ghost,.kmu-gh-planet){border-color:transparent;box-shadow:0 0 0 0 transparent,0 0 24px -6px rgba(var(--k-acc-rgb),.8),0 10px 26px rgba(var(--k-sh),.3)}

/* ==== src/kmind/tutorial.css ==== */
/* KMind 宇宙交互 V50 · 新手教程 TUTORIAL (src/kmind/tutorial.js). Three layers over the page:
   the stage (欢迎, 母星: the whole screen, a sky of its own), the guide (a spotlight on the real interface and a card beside it:
   介绍, 智能体, 认识, 宇宙) and the end (完成: the four steps joined like a constellation). The stage is always night; the guide
   and the end follow the skin. Everything that moves stops with prefers-reduced-motion. */
#km-tut{position:fixed;inset:0;z-index:2000;pointer-events:none;font-family:var(--font);color:var(--k-ink);-webkit-font-smoothing:antialiased}
#km-tut[hidden],#km-tut [hidden]{display:none!important}
.km-tut-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.km-tut-mono{font:500 9.5px/1 "JetBrains Mono",ui-monospace,monospace;letter-spacing:.24em;color:var(--k-acc);text-transform:uppercase}

/* ---------------------------------------------------------------- a line at a time; buttons only once shown */
.km-tut-r{opacity:0}
.km-tut-in .km-tut-r{animation:kmTutRise .85s cubic-bezier(.2,.75,.2,1) both;animation-delay:calc(var(--d0,0ms) + var(--i,0) * 120ms)}
@keyframes kmTutRise{from{opacity:0;transform:translateY(12px);filter:blur(7px)}to{opacity:1;transform:none;filter:none}}
#km-tut .km-tut-btn,#km-tut .km-tut-cta,#km-tut .km-tut-x,#km-tut input{pointer-events:none}
#km-tut .ready .km-tut-btn,#km-tut .ready .km-tut-cta,#km-tut .ready .km-tut-x,#km-tut .ready input{pointer-events:auto}

/* ---------------------------------------------------------------- the stage: 欢迎 and 母星 */
.km-tut-stage{position:absolute;inset:0;pointer-events:auto;overflow:hidden;color:#e8eefc;
  background:radial-gradient(130% 100% at 50% 110%,#0d1b3a 0%,#060b16 48%,#03050a 100%);transition:opacity 1.25s cubic-bezier(.4,0,.2,1)}
.km-tut-stars{position:absolute;inset:0;width:100%;height:100%}
.km-tut-haze{position:absolute;inset:-25%;pointer-events:none;opacity:.85;animation:kmTutHaze 46s ease-in-out infinite alternate;
  background:radial-gradient(38% 30% at 30% 34%,rgba(64,96,255,.16),transparent 70%),radial-gradient(34% 26% at 72% 62%,rgba(120,80,255,.12),transparent 70%),
    radial-gradient(60% 40% at 50% 100%,rgba(20,80,232,.22),transparent 70%)}
@keyframes kmTutHaze{to{transform:translate(3%,-2%) scale(1.06)}}
.km-tut-scene{position:relative;height:100%;display:flex;align-items:center;justify-content:center;padding:24px;transition:opacity .4s ease,transform .4s ease}
.km-tut-scene.km-tut-leave{opacity:0;transform:translateY(-14px)}
.km-tut-hero{display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;max-width:min(560px,100%)}
.km-tut-hero .km-tut-mono{color:#7fa6ff}
.km-tut-hero h1{margin:4px 0 0;font-size:clamp(30px,4.6vw,46px);font-weight:760;letter-spacing:-.02em;line-height:1.1;color:#f4f7ff}
.km-tut-hero h2{margin:0;font-size:clamp(24px,3.4vw,32px);font-weight:740;letter-spacing:-.015em;color:#f4f7ff}
.km-tut-hero p{margin:0;font-size:15px;line-height:1.6;color:#9fb0d2}
.km-tut-chars{display:inline-block}
.km-tut-chars i{display:inline-block;font-style:normal;white-space:pre}
.km-tut-in .km-tut-chars i{animation:kmTutChar .8s cubic-bezier(.2,.8,.2,1) both;animation-delay:calc(var(--d0,0ms) + var(--i,0) * 120ms + var(--c,0) * 55ms)}
.km-tut-in h1.km-tut-r{animation-name:kmTutFade}
@keyframes kmTutChar{from{opacity:0;transform:translateY(.45em);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
@keyframes kmTutFade{from{opacity:0}to{opacity:1}}
/* the main button of the stage: a pill that glows, the arrow leans on hover */
.km-tut-cta{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:9px;min-width:168px;height:46px;margin-top:14px;padding:0 26px;border:0;border-radius:999px;cursor:pointer;
  font:inherit;font-size:15px;font-weight:650;letter-spacing:.02em;color:#fff;background:linear-gradient(180deg,#3d7bff,#1450e8);
  box-shadow:0 0 0 1px rgba(160,195,255,.35) inset,0 10px 30px -8px rgba(20,80,232,.9),0 0 60px -10px rgba(60,120,255,.8);transition:transform .25s ease,box-shadow .25s ease}
.km-tut-cta svg{transition:transform .25s ease}
.km-tut-cta:hover{transform:translateY(-1px);box-shadow:0 0 0 1px rgba(180,210,255,.5) inset,0 14px 34px -8px rgba(20,80,232,1),0 0 70px -6px rgba(80,140,255,.9)}
.km-tut-cta:hover svg{transform:translateX(3px)}
.km-tut-cta:focus-visible{outline:2px solid #9cc0ff;outline-offset:3px}
.ready .km-tut-cta{animation-name:kmTutRise,kmTutBreathe;animation-duration:.85s,3.2s;animation-iteration-count:1,infinite;animation-delay:calc(var(--d0,0ms) + var(--i,0) * 120ms),1s}
@keyframes kmTutBreathe{50%{box-shadow:0 0 0 1px rgba(160,195,255,.45) inset,0 10px 30px -8px rgba(20,80,232,.9),0 0 80px -4px rgba(80,140,255,.95)}}

/* 欢迎 · the emblem: two orbits draw themselves, a diamond (an agent) and a dot (a person) go round, the mark in the middle */
.km-tut-emblem{position:relative;width:240px;height:120px;margin-bottom:6px;display:grid;place-items:center}
.km-tut-orbits{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.km-tut-orbits ellipse{fill:none;stroke:rgba(130,170,255,.5);stroke-width:.7;stroke-dasharray:1;stroke-dashoffset:1}
.km-tut-in .km-tut-orbits ellipse{animation:kmTutDraw 1.8s cubic-bezier(.4,0,.2,1) .2s forwards}
.km-tut-in .km-tut-orbits .o2{animation-delay:.45s;stroke:rgba(130,170,255,.32)}
.km-tut-orb-a{fill:#8fb2ff;filter:drop-shadow(0 0 4px rgba(120,170,255,.9))}
.km-tut-orb-b{fill:#e6ecff;filter:drop-shadow(0 0 4px rgba(220,230,255,.8))}
.km-tut-orb-a,.km-tut-orb-b{opacity:0}
.km-tut-in .km-tut-orb-a,.km-tut-in .km-tut-orb-b{animation:kmTutFade .8s ease 1.4s forwards}
@keyframes kmTutDraw{to{stroke-dashoffset:0}}
.km-tut-mark{position:relative;display:inline-flex;filter:drop-shadow(0 0 18px rgba(80,140,255,.75))}
.km-tut-mark svg{width:74px;height:auto;overflow:visible}
.km-tut-mark path{fill-opacity:0;stroke:#9cbcff;stroke-width:1.6;stroke-dasharray:100;stroke-dashoffset:100}   /* V29: the brand mark draws itself, then its own colours come in */
.km-tut-in .km-tut-mark path{animation:kmTutMark 1.3s cubic-bezier(.4,0,.2,1) .3s forwards,kmTutMarkFill .9s ease 1.35s forwards}
.km-tut-in .km-tut-mark path:nth-child(odd){animation-delay:.55s,1.55s}
@keyframes kmTutMark{to{stroke-dashoffset:0}}
@keyframes kmTutMarkFill{to{fill-opacity:1;stroke-opacity:0}}

/* the four steps: nodes on a line, the line fills as you go */
.km-tut-steps{display:flex;align-items:center;gap:0;margin:0;padding:0;list-style:none;font-size:11.5px;color:#7d8fb3}
.km-tut-steps li{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.km-tut-steps li+li::before{content:"";width:26px;height:1px;margin:0 8px;background:currentColor;opacity:.35}
.km-tut-steps li.done+li::before,.km-tut-steps li.done+li.done::before{background:var(--k-acc,#3d7bff);opacity:.9}
.km-tut-steps i{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;font:600 9.5px/1 "JetBrains Mono",monospace;font-style:normal;box-shadow:inset 0 0 0 1px currentColor;opacity:.8}
.km-tut-steps li.cur{color:#a9c4ff;font-weight:650}
.km-tut-steps li.cur i{background:#3d7bff;color:#fff;box-shadow:0 0 0 4px rgba(61,123,255,.18),0 0 14px rgba(61,123,255,.7);opacity:1}
.km-tut-steps li.done{color:#8fb2ff}
.km-tut-steps li.done i{background:rgba(61,123,255,.22);color:#a9c4ff;box-shadow:none;opacity:1}
.km-tut-steps.mini{font-size:11px;color:var(--k-dim)}
.km-tut-steps.mini li+li::before{width:7px;margin:0 2px}
.km-tut-steps.mini i{width:16px;height:16px;font-size:8.5px}
.km-tut-steps.mini li{gap:5px}
.km-tut-steps.mini li:not(.cur) span{display:none}
.km-tut-steps.mini li.cur{color:var(--k-acc)}
.km-tut-steps.mini li.cur i{background:var(--k-acc);box-shadow:0 0 0 3px rgba(var(--k-acc-rgb),.16)}
.km-tut-steps.mini li.done{color:var(--k-acc)}
.km-tut-steps.mini li.done i{background:rgba(var(--k-acc-rgb),.16);color:var(--k-acc)}

/* 母星 · the planet that gathers out of dust */
.km-tut-world{position:relative;width:300px;height:210px;margin:6px 0 2px;display:grid;place-items:center}
.km-tut-dust{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.km-tut-halo{position:absolute;width:250px;height:250px;border-radius:50%;background:radial-gradient(circle,rgba(60,120,255,.32),rgba(60,120,255,.08) 45%,transparent 68%);animation:kmTutHalo 4.5s ease-in-out infinite}
@keyframes kmTutHalo{50%{transform:scale(1.07);opacity:.8}}
.km-tut-orb{position:relative;z-index:1;width:128px;height:128px;border-radius:50%;overflow:hidden;
  background:radial-gradient(circle at 34% 30%,#b5d0ff 0%,#5a8cff 22%,#2150d6 50%,#0f2a86 76%,#081650 100%);
  box-shadow:0 0 0 1px rgba(170,205,255,.28),0 0 50px -4px rgba(70,130,255,.8),inset -16px -20px 36px rgba(2,6,24,.7)}
.km-tut-in .km-tut-orb{animation:kmTutForm 1.9s cubic-bezier(.2,.8,.2,1) .5s both}
@keyframes kmTutForm{0%{opacity:0;transform:scale(.25);filter:blur(10px) brightness(2)}55%{opacity:1;filter:blur(0) brightness(1.35)}100%{opacity:1;transform:none;filter:none}}
.km-tut-surf{position:absolute;inset:-8% -100% -8% 0;opacity:.32;mix-blend-mode:soft-light;animation:kmTutTurn 26s linear infinite;
  background:repeating-linear-gradient(172deg,transparent 0 9px,rgba(255,255,255,.55) 9px 11px,transparent 11px 21px,rgba(10,20,80,.6) 21px 25px)}
@keyframes kmTutTurn{to{transform:translateX(-50%)}}
.km-tut-shade{position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle at 74% 78%,rgba(1,4,18,.6),transparent 58%),radial-gradient(circle at 30% 26%,rgba(255,255,255,.28),transparent 30%)}
.km-tut-mk{position:absolute;inset:0;display:grid;place-items:center;
  font:750 50px/1 var(--font);color:#fff;text-shadow:0 0 18px rgba(170,205,255,.95),0 2px 6px rgba(0,10,40,.6)}
.km-tut-mk.flip{animation:kmTutFlip .5s cubic-bezier(.3,1.4,.5,1)}
@keyframes kmTutFlip{from{opacity:0;transform:rotateX(80deg) scale(.7);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
.km-tut-ring{position:absolute;width:244px;height:66px;overflow:visible}
.km-tut-ring.back{z-index:0}.km-tut-ring.front{z-index:2}
.km-tut-ring path{fill:none;stroke:rgba(150,190,255,.55);stroke-width:1}
.km-tut-ring.back path{stroke:rgba(150,190,255,.22)}
.km-tut-ring .km-tut-moon{fill:#cfe0ff;stroke:none;filter:drop-shadow(0 0 4px rgba(170,205,255,.9))}
.km-tut-ring{opacity:0}.km-tut-in .km-tut-ring{animation:kmTutFade 1s ease 1.6s forwards}
.km-tut-form{display:flex;flex-direction:column;align-items:center;gap:6px;width:100%}
.km-tut-field{display:flex;flex-direction:column;align-items:center;gap:8px}
#km-tut .km-tut-field input{width:260px;height:44px;padding:0 12px;text-align:center;font:650 19px/1 var(--font);letter-spacing:.04em;color:#f4f7ff;
  border:0;border-radius:0;background:transparent;box-shadow:inset 0 -1px 0 rgba(150,190,255,.35);transition:box-shadow .3s ease}
#km-tut .km-tut-field input::placeholder{color:#55688f}
#km-tut .km-tut-field input:focus{outline:0;box-shadow:inset 0 -2px 0 #6f9cff,0 14px 24px -18px rgba(111,156,255,.9)}
.km-tut-field .km-tut-mono{color:#5f78a8;letter-spacing:.3em}
/* 创建母星: the planet swells, a light opens, and the sky behind is the real one */
.km-tut-flash{position:absolute;inset:0;pointer-events:none;opacity:0;background:radial-gradient(circle at 50% 50%,rgba(200,220,255,.95),rgba(70,130,255,.55) 30%,transparent 70%)}
.km-tut-birth .km-tut-orb{animation:kmTutSwell 1.1s cubic-bezier(.55,0,.35,1) forwards;box-shadow:none}
.km-tut-birth .km-tut-surf{animation:none}
.km-tut-birth .km-tut-flash{animation:kmTutFlash 1.5s ease .55s both}
.km-tut-birth .km-tut-mother>:not(.km-tut-world),.km-tut-birth .km-tut-ring,.km-tut-birth .km-tut-halo{transition:opacity .35s ease;opacity:0!important;animation:none}
@keyframes kmTutSwell{60%{opacity:1}to{transform:scale(8);filter:brightness(2.2);opacity:0}}   /* no blur here: a blurred, eight-times planet is slow to paint */
@keyframes kmTutFlash{0%{opacity:0}30%{opacity:.9}100%{opacity:0}}
.km-tut-stage.km-tut-out{opacity:0;pointer-events:none}
/* while the whole screen is the tutorial, nothing else takes the keyboard */
body.km-tut-cover #app,body.km-tut-cover #kmu{visibility:hidden}

/* ---------------------------------------------------------------- the guide: the spotlight */
.km-tut-spot{position:absolute;left:0;top:0;width:0;height:0;border-radius:14px;pointer-events:none;will-change:transform,width,height;
  box-shadow:0 0 0 200vmax rgba(3,6,14,var(--dim,.55));transition:box-shadow .6s ease}
html[data-theme=day] .km-tut-spot{box-shadow:0 0 0 200vmax rgba(14,22,40,calc(var(--dim,.55) * .8))}
.km-tut-spot::before{content:"";position:absolute;inset:-1px;border-radius:inherit;box-shadow:0 0 0 1.5px rgba(var(--k-acc-rgb),.95),0 0 26px 2px rgba(var(--k-acc-rgb),.55)}
.km-tut-spot::after{content:"";position:absolute;inset:-1px;border-radius:inherit;box-shadow:0 0 0 2px rgba(var(--k-acc-rgb),.75);animation:kmTutPulse 2.4s cubic-bezier(.2,.6,.3,1) infinite}
@keyframes kmTutPulse{0%{inset:-1px;opacity:.9}100%{inset:-18px;opacity:0}}
.km-tut-spot.sparkle::after{animation-duration:1.6s}
.km-tut-catch{position:absolute;inset:0;pointer-events:auto}
/* meeting your agent: the card says what “已创建 …” would say, so that toast keeps out of the way */
body[data-km-tut=meet] #toast{visibility:hidden}

/* ---------------------------------------------------------------- the guide: the card beside it */
.km-tut-tip{position:absolute;left:0;top:0;width:316px;max-width:calc(100vw - 24px);padding:14px 16px 16px;border-radius:18px;pointer-events:auto;will-change:transform;
  display:flex;flex-direction:column;gap:7px;background:rgba(var(--k-bg-rgb),.92);backdrop-filter:blur(18px) saturate(1.3);-webkit-backdrop-filter:blur(18px) saturate(1.3);
  box-shadow:0 0 0 1px rgba(var(--k-acc-rgb),.18),0 24px 60px -16px rgba(0,0,0,.55),0 0 40px -18px rgba(var(--k-acc-rgb),.7)}
html[data-theme=night] .km-tut-tip{background:rgba(10,15,27,.86);box-shadow:0 0 0 1px rgba(130,170,255,.18),0 24px 60px -16px rgba(0,0,0,.7),0 0 46px -16px rgba(60,120,255,.55)}
.km-tut-tip.km-tut-in{animation:kmTutTip .55s cubic-bezier(.2,.8,.2,1) both}
@keyframes kmTutTip{from{opacity:0;filter:blur(6px)}to{opacity:1;filter:none}}
.km-tut-tip.nudge{animation:kmTutNudge .5s ease}
@keyframes kmTutNudge{25%{margin-left:-5px}50%{margin-left:5px}75%{margin-left:-2px}}
.km-tut-tip header{display:flex;align-items:center;gap:8px;min-height:22px}
.km-tut-count{margin-left:auto;flex:none;white-space:nowrap;font:500 10px/1 "JetBrains Mono",monospace;letter-spacing:.12em;color:var(--k-dim)}
.km-tut-tip h3{margin:0;font-size:17px;font-weight:720;letter-spacing:-.01em;color:var(--k-ink)}
.km-tut-tip p{margin:0;font-size:13px;line-height:1.55;color:var(--k-ink2)}
.km-tut-name{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:650;color:var(--k-acc)}
.km-tut-dia{width:9px;height:9px;background:currentColor;transform:rotate(45deg);border-radius:1.5px;box-shadow:0 0 8px rgba(var(--k-acc-rgb),.8)}
.km-tut-x{margin-left:auto;display:inline-flex;width:26px;height:26px;align-items:center;justify-content:center;border:0;border-radius:999px;background:transparent;color:var(--k-dim);cursor:pointer}
.km-tut-count+.km-tut-x{margin-left:4px}
.km-tut-x:hover{color:var(--k-acc);background:rgba(var(--k-acc-rgb),.1)}
.km-tut-acts{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:6px}
.km-tut-btn{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px;border:0;border-radius:999px;cursor:pointer;font:inherit;font-size:13px;font-weight:620;
  background:rgba(var(--k-acc-rgb),.1);color:var(--k-acc);transition:transform .2s ease,background .2s ease,box-shadow .2s ease}
.km-tut-btn:hover{background:rgba(var(--k-acc-rgb),.16)}
.km-tut-btn.primary{background:var(--k-acc);color:#fff;box-shadow:0 8px 22px -8px rgba(var(--k-acc-rgb),.9)}
.km-tut-btn.primary:hover{transform:translateY(-1px);box-shadow:0 10px 26px -8px rgba(var(--k-acc-rgb),1)}
.km-tut-btn.primary svg:last-child{transition:transform .2s ease}
.km-tut-btn.primary:hover svg:last-child{transform:translateX(2px)}
.km-tut-btn:focus-visible,.km-tut-x:focus-visible{outline:2px solid var(--k-acc);outline-offset:2px}
/* the notch points at the spot */
.km-tut-notch{position:absolute;width:12px;height:12px;background:inherit;transform:rotate(45deg);display:none;border-radius:2px}
.km-tut-tip[data-side=top] .km-tut-notch{display:block;bottom:-5px;left:calc(var(--nx,50%) - 6px);box-shadow:1px 1px 0 rgba(var(--k-acc-rgb),.18)}
.km-tut-tip[data-side=bottom] .km-tut-notch{display:block;top:-5px;left:calc(var(--nx,50%) - 6px);box-shadow:-1px -1px 0 rgba(var(--k-acc-rgb),.18)}
.km-tut-tip[data-side=left] .km-tut-notch{display:block;right:-5px;top:calc(var(--ny,50%) - 6px);box-shadow:1px -1px 0 rgba(var(--k-acc-rgb),.18)}
.km-tut-tip[data-side=right] .km-tut-notch{display:block;left:-5px;top:calc(var(--ny,50%) - 6px);box-shadow:-1px 1px 0 rgba(var(--k-acc-rgb),.18)}
.km-tut-tip[data-side=sheet]{border-radius:20px}

/* ---------------------------------------------------------------- 完成 */
.km-tut-end{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:auto;
  background:radial-gradient(80% 80% at 50% 50%,rgba(var(--k-bg-rgb),.25),rgba(var(--k-bg-rgb),.7));backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);animation:kmTutFade .7s ease both;transition:opacity .45s ease}
html[data-theme=night] .km-tut-end{background:radial-gradient(80% 80% at 50% 50%,rgba(3,6,14,.35),rgba(3,6,14,.8))}
.km-tut-end.km-tut-leaving{opacity:0}
.km-tut-burst{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.km-tut-endcard{position:relative;display:flex;flex-direction:column;align-items:center;gap:9px;width:min(460px,calc(100vw - 32px));padding:26px 30px 28px;border-radius:26px;text-align:center;
  background:rgba(var(--k-bg-rgb),.9);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:0 0 0 1px rgba(var(--k-acc-rgb),.2),0 30px 80px -24px rgba(0,0,0,.6),0 0 90px -30px rgba(var(--k-acc-rgb),.9)}
html[data-theme=night] .km-tut-endcard{background:rgba(9,14,26,.88)}
.km-tut-endcard h2{margin:0;font-size:26px;font-weight:750;letter-spacing:-.015em}
.km-tut-endcard h2 b{color:var(--k-acc)}
.km-tut-endcard p{margin:0;font-size:13px;color:var(--k-ink2)}
.km-tut-endcard .km-tut-acts{justify-content:center;margin-top:12px}
.km-tut-endcard .km-tut-btn{height:40px;padding:0 20px;font-size:14px}
.km-tut-const{width:100%;max-width:380px;height:auto;overflow:visible;margin-bottom:2px}
.km-tut-const .seg{stroke:var(--k-acc);stroke-width:1.4;stroke-dasharray:1;stroke-dashoffset:1;opacity:.85;animation:kmTutDraw .55s cubic-bezier(.4,0,.2,1) both;animation-delay:calc(var(--k) * 380ms + 420ms)}
.km-tut-const .node{animation:kmTutPop .55s cubic-bezier(.3,1.6,.5,1) both;animation-delay:calc(var(--k) * 380ms + 200ms);transform-box:fill-box;transform-origin:center}
.km-tut-const .node circle{fill:var(--k-acc)}
.km-tut-const .node .halo{fill:rgba(var(--k-acc-rgb),.18);animation:kmTutHaloRing 2.6s ease-in-out infinite;animation-delay:calc(var(--k) * 380ms + 900ms);transform-box:fill-box;transform-origin:center}
.km-tut-const .chk{fill:none;stroke:#fff;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;animation:kmTutDraw .35s ease both;animation-delay:calc(var(--k) * 380ms + 520ms)}
.km-tut-const text{font:600 11px var(--font);fill:var(--k-ink2);text-anchor:middle;animation:kmTutFade .6s ease both;animation-delay:calc(var(--k) * 380ms + 400ms)}
@keyframes kmTutPop{from{opacity:0;transform:scale(.2)}to{opacity:1;transform:none}}
@keyframes kmTutHaloRing{50%{transform:scale(1.35);opacity:.4}}
.km-tut-endcard .km-tut-mono{margin-top:4px}

/* ---------------------------------------------------------------- a phone */
@media (max-width:640px){
  .km-tut-emblem{transform:scale(.85)}
  .km-tut-world{transform:scale(.9);margin:0}
  .km-tut-steps:not(.mini) li:not(.cur) span{display:none}
  .km-tut-tip{width:calc(100vw - 24px)}
}
@media (max-height:640px){.km-tut-world{height:170px}.km-tut-hero{gap:8px}}

/* ---------------------------------------------------------------- nothing moves */
@media (prefers-reduced-motion:reduce){
  .km-tut-r,.km-tut-orb-a,.km-tut-orb-b,.km-tut-ring{opacity:1}
  .km-tut-in .km-tut-r,.km-tut-in .km-tut-chars i,.km-tut-in .km-tut-orb,.km-tut-tip.km-tut-in,.ready .km-tut-cta,.km-tut-haze,.km-tut-halo,.km-tut-surf,.km-tut-spot::after,.km-tut-end,.km-tut-const *{animation:none!important}
  .km-tut-orbits ellipse,.km-tut-const .seg,.km-tut-const .chk{stroke-dashoffset:0}
  .km-tut-mark path{stroke-dashoffset:0;fill-opacity:1;stroke-opacity:0}
  .km-tut-stage,.km-tut-scene,.km-tut-spot,.km-tut-end{transition:none}
}

/* ---------------------------------------------------------------- V24 · the welcome's second line */
.km-tut-hero .km-tut-lead{font-size:17px;color:#b9c7e6;letter-spacing:.01em}
.km-tut-welcome{max-width:min(760px,100%)}
.km-tut-welcome h1,.km-tut-welcome h1 .km-tut-chars{max-width:none;text-wrap:balance}   /* one line on a wide screen; balanced lines (no lone “了。”) on a narrow one */

/* ---------------------------------------------------------------- the coach inside a form (新建智能体, 头像, 新建卫星/星球, 新建宇宙) */
.km-tut-coach{position:relative;display:flex;flex-direction:column;gap:6px;margin:0 0 14px;padding:13px 15px 12px;border-radius:16px;text-align:left;
  background:linear-gradient(135deg,rgba(var(--k-acc-rgb),.16),rgba(var(--k-acc-rgb),.05));box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.28),0 10px 30px -18px rgba(var(--k-acc-rgb),.9)}
.km-tut-coach.km-tut-in{animation:kmTutTip .45s cubic-bezier(.2,.8,.2,1) both}
.km-tut-coach-top{display:flex;align-items:center;gap:10px}
.km-tut-coach .km-tut-count{margin-left:0}
.km-tut-dots{display:flex;gap:5px;margin:0 auto 0 0;padding:0;list-style:none}
.km-tut-dots li{width:6px;height:6px;border-radius:50%;background:rgba(var(--k-acc-rgb),.25);transition:all .3s ease}
.km-tut-dots li.done{background:rgba(var(--k-acc-rgb),.6)}
.km-tut-dots li.cur{width:18px;border-radius:3px;background:var(--k-acc)}
.km-tut-coach-t{font-size:15px;font-weight:720;color:var(--k-ink)}
.km-tut-coach p{margin:0;font-size:13px;line-height:1.55;color:var(--k-ink2)}
.km-tut-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
.km-tut-chips button{height:26px;padding:0 11px;border:0;border-radius:999px;cursor:pointer;font:inherit;font-size:12px;font-weight:600;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.12);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.25)}
.km-tut-chips button:hover{background:rgba(var(--k-acc-rgb),.2)}
.km-tut-coach-nav{display:flex;justify-content:flex-end;align-items:center;gap:6px;margin-top:2px}
/* V28: the coach sits inside the product's dialog, whose primary button has its own top margin and size (.modal button.primary): not here, so 帮我填, 上一项 and 下一项 share one line */
#dialog .km-tut-coach .km-tut-coach-nav button{margin:0;height:30px;padding:0 13px;border-radius:999px;font-size:12.5px;line-height:1}
#dialog .km-tut-coach .km-tut-coach-nav .km-tut-type{margin-right:auto}
.km-tut-coach-nav:empty{display:none}
.km-tut-coach-nav button{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 12px;border:0;border-radius:999px;cursor:pointer;font:inherit;font-size:12.5px;font-weight:620;color:var(--k-acc);background:transparent}
.km-tut-coach-nav button.primary{color:#fff;background:var(--k-acc);box-shadow:0 6px 16px -8px rgba(var(--k-acc-rgb),.9)}
/* the field the coach is talking about */
html body #dialog .km-tut-glow{position:relative;border-radius:12px!important;box-shadow:0 0 0 2px rgba(var(--k-acc-rgb),.85),0 0 24px rgba(var(--k-acc-rgb),.4)!important;animation:kmTutGlow 2.4s ease-in-out infinite;scroll-margin:24px}
html body #dialog div.km-tut-glow{padding:6px;margin:-6px}
html body #dialog .km-tut-glow-l{color:var(--k-acc)!important}
@keyframes kmTutGlow{50%{box-shadow:0 0 0 2px rgba(var(--k-acc-rgb),.55),0 0 34px rgba(var(--k-acc-rgb),.6)}}

/* ---------------------------------------------------------------- 探索: a quiet card at the top, nothing pointed at */
.km-tut-tip.quiet{width:min(420px,calc(100vw - 24px));text-align:center;align-items:center;background:rgba(6,10,20,.55)!important;box-shadow:0 0 0 1px rgba(150,190,255,.12),0 0 60px -20px rgba(60,120,255,.6)!important}
.km-tut-tip.quiet h3{font-size:19px;font-weight:650;color:#eef3ff;letter-spacing:.02em}
.km-tut-tip.quiet p{color:#9fb0d2}
.km-tut-tip.quiet .km-tut-mono{color:#7fa6ff}
.km-tut-tip.quiet .km-tut-acts{justify-content:center}

/* ---------------------------------------------------------------- the guide letter's pictures (in the mailbox) */
.km-tut-art{display:grid;grid-template-columns:repeat(auto-fill,minmax(176px,1fr));gap:10px;margin:14px 0 4px}
.km-tut-art figure{margin:0;display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:14px;background:rgba(var(--k-acc-rgb),.06);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.12)}
.km-tut-art svg{flex:none;width:40px;height:40px;overflow:visible}
.km-tut-art svg *{fill:none;stroke:var(--k-acc);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.km-tut-art svg .f{fill:rgba(var(--k-acc-rgb),.85);stroke:none}
.km-tut-art svg .w{stroke:#fff;stroke-width:1.8}
.km-tut-art figcaption{display:flex;flex-direction:column;gap:2px;min-width:0}
.km-tut-art figcaption b{font-size:12.5px;color:var(--k-ink)}
.km-tut-art figcaption span{font-size:11.5px;color:var(--k-ink2)}
.km-tut-art figcaption small{font-size:11px;color:var(--k-acc);opacity:.85}
.km-tut-art aside{grid-column:1/-1;display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:14px;background:linear-gradient(135deg,rgba(var(--k-acc-rgb),.18),rgba(var(--k-acc-rgb),.05));color:var(--k-acc)}
.km-tut-art aside b{display:block;font-size:13.5px;color:var(--k-ink)}
.km-tut-art aside small{font-size:12px;color:var(--k-ink2)}
@media (prefers-reduced-motion:reduce){.km-tut-coach.km-tut-in,html body #dialog .km-tut-glow{animation:none!important}}
/* V26 · the English step labels follow 英文副标题 (off unless chosen): the tips and the form coach show the Chinese only.
   V27: taken out of the row (not just hidden), so the dots and the counter line up on the left as they would without it */
body.fx-off-en .km-tut-tip header>.km-tut-mono,body.fx-off-en .km-tut-coach-top>.km-tut-mono,body.fx-off-en .km-tut-tip>.km-tut-mono{display:none}
body.fx-off-en .km-tut-tip header:has(>.km-tut-mono:only-child){display:none}
/* V27 · 帮我填: the coach types the default into the field (on the left of 上一项 / 下一项) */
.km-tut-coach-nav .km-tut-type{margin-right:auto;background:rgba(var(--k-acc-rgb),.12);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.25)}
.km-tut-coach-nav .km-tut-type:hover{background:rgba(var(--k-acc-rgb),.2)}

/* ================================================================ V41 · the basics, told by 简丹, in 面板视图 only */
/* while the basics run, the way to 宇宙界面 is not shown (KMU.setMode refuses it too: src/kmind/tutorial.js) */
body.km-tut-on.km-tut-basic [data-action="km-mode"]{display:none!important}

/* V42 · her first screen: the KMind mark draws itself, comes apart into stardust and shards, and they gather into her */
.km-tut-her{position:relative;width:min(380px,84vw);height:min(430px,46vh);margin:0 auto 4px;display:grid;place-items:center}
/* V43 · her canvas is the whole sky (it sits in the stage, under the words): she has no box and no edge */
.km-tut-stage>.km-tut-her-cv{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
/* V43, V44, V46 · KOS starts (“KOS”, “launching” under it; the same in every language); then “Hi” pops above “KOS” (hi + KOS:
   hikos); V46: then it fades slowly, and her dust starts to appear */
.km-tut-kos{position:absolute;inset:0;display:grid;place-content:center;justify-items:center;gap:10px;pointer-events:none;opacity:0}
.km-tut-kos .kos{font:200 clamp(46px,7vw,74px)/1 var(--font);letter-spacing:.34em;padding-left:.34em;background:linear-gradient(180deg,#fff 20%,#9cc8ff);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 22px rgba(110,170,255,.6))}
.km-tut-kos small{font:500 11.5px/1 ui-monospace,"JetBrains Mono",monospace;letter-spacing:.5em;padding-left:.5em;color:#a9c4ee}
.km-tut-kos i{display:block;width:150px;height:1px;background:linear-gradient(90deg,transparent,#9fd0ff,transparent);transform:scaleX(0)}
.km-tut-kos.on{opacity:1;transition:opacity .6s ease}
.km-tut-kos.on .kos{animation:kmKosIn 1.1s cubic-bezier(.2,.7,.2,1) both}
.km-tut-kos.on small{animation:kmKosFade .8s ease .35s both}   /* V44: steady, nothing blinks */
.km-tut-kos.on i{animation:kmKosLine 1.5s cubic-bezier(.4,0,.2,1) .2s both}
.km-tut-kos.off{opacity:0;transform:scale(1.03);filter:blur(6px);transition:opacity 1.3s ease,transform 1.6s ease,filter 1.3s ease}   /* V46: it fades slowly; no burst */
@keyframes kmKosIn{0%{letter-spacing:.8em;padding-left:.8em;opacity:0;filter:blur(10px)}100%{letter-spacing:.34em;padding-left:.34em;opacity:1;filter:drop-shadow(0 0 22px rgba(110,170,255,.6))}}
@keyframes kmKosFade{0%{opacity:0}100%{opacity:1}}
@keyframes kmKosLine{0%{transform:scaleX(0);opacity:0}40%{opacity:1}100%{transform:scaleX(1);opacity:.8}}
/* “Hi” sits right above “KOS”, its room kept from the start (so KOS does not move when it comes) */
.km-tut-kos .km-tut-hey{font:300 clamp(30px,4.4vw,46px)/1 var(--font);letter-spacing:.06em;margin-bottom:-6px;color:#fff;text-shadow:0 0 22px rgba(130,195,255,.95),0 0 60px rgba(110,140,255,.6);opacity:0;transform:translateY(10px) scale(.4)}
.km-tut-kos .km-tut-hey.on{animation:kmHeyPop .62s cubic-bezier(.3,1.6,.5,1) forwards}
@keyframes kmHeyPop{0%{opacity:0;transform:translateY(10px) scale(.4)}100%{opacity:1;transform:none}}
/* V44 · 我们走吧: a rain of shooting stars, on its own layer over everything, while the sky fades into 面板视图 */
/* V43 · her music's toggle: four small bars that move while it plays (on her first screen and on her cards) */
.km-tut-sound{display:inline-flex;align-items:flex-end;justify-content:center;gap:2px;flex:none;width:28px;height:28px;padding:8px 7px;border:0;border-radius:50%;background:transparent;color:var(--k-acc);cursor:pointer;transition:background .2s ease}
.km-tut-sound:hover{background:rgba(var(--k-acc-rgb),.12)}
.km-tut-sound i{display:block;width:2px;height:5px;border-radius:1px;background:currentColor;opacity:.7}
.km-tut-sound[data-state="playing"] i{opacity:.95;animation:kmSnd .9s ease-in-out infinite alternate}
.km-tut-sound[data-state="playing"] i:nth-child(2){animation-duration:.7s;animation-delay:-.3s}.km-tut-sound[data-state="playing"] i:nth-child(3){animation-duration:1.1s;animation-delay:-.6s}.km-tut-sound[data-state="playing"] i:nth-child(4){animation-duration:.8s;animation-delay:-.15s}
.km-tut-sound[data-state="off"] i{height:2px;opacity:.4}
@keyframes kmSnd{0%{height:3px}100%{height:12px}}
.km-tut-stage>.km-tut-sound{position:absolute;z-index:3;top:calc(env(safe-area-inset-top,0px) + 14px);right:calc(env(safe-area-inset-right,0px) + 16px);width:34px;height:34px;padding:10px 9px;color:#cfe2ff}
.km-tut-stage>.km-tut-sound:hover{background:rgba(160,200,255,.1)}
.km-tut-her .km-tut-mark{position:relative;transition:opacity .7s ease,transform 1s cubic-bezier(.2,.7,.2,1),filter .9s ease}
.km-tut-her .km-tut-mark svg{width:124px}
.km-tut-her .km-tut-mark.gone{opacity:0;transform:scale(1.35);filter:blur(6px) drop-shadow(0 0 30px rgba(120,190,255,1))}
/* V47 · her “Hi”, the system's clock (no words around it) and her gem with “KOS already booted”; the same in every language */
.km-tut-hi h1.km-tut-jhi{font:200 clamp(44px,6.2vw,66px)/1 var(--font);letter-spacing:.08em;margin:0;color:#fff;text-shadow:0 0 24px rgba(130,195,255,.9),0 0 70px rgba(110,140,255,.5)}
.km-tut-hi h1.km-tut-jhi{opacity:0}
.km-tut-hi h1.km-tut-jhi.on{opacity:1;transition:opacity .6s ease}
/* V48 · the “Hi” of hikos on its way down to her “Hi” (flyHi) */
.km-tut-hifly{position:fixed;z-index:2;display:grid;font-family:var(--font);place-items:center;margin:0;pointer-events:none;font-weight:300;line-height:1;letter-spacing:.06em;color:#fff;
  text-shadow:0 0 22px rgba(130,195,255,.95),0 0 60px rgba(110,140,255,.6);transform-origin:50% 50%;will-change:transform}
.km-tut-hifly.gone{opacity:0;transition:opacity .6s ease}
.km-tut-wait{margin:0!important;font-size:17px;color:#c4d2ee;letter-spacing:.02em}
.km-tut-up{margin:2px 0 0!important}
.km-tut-clock{font:400 clamp(15px,1.9vw,18px)/1.2 ui-monospace,"JetBrains Mono",monospace;letter-spacing:.16em;padding-left:.16em;color:#cfe3ff;text-shadow:0 0 16px rgba(110,180,255,.5);font-variant-numeric:tabular-nums;white-space:nowrap}
.km-tut-boot{display:inline-flex;align-items:center;gap:10px;margin:0!important;color:#9fb6dc}
.km-tut-boot .km-avbox{flex:none}
.km-tut-boot b{font:300 15px/1 var(--font);letter-spacing:.3em;padding-left:.1em;color:#eaf3ff}
.km-tut-boot span{font:500 11px/1 ui-monospace,"JetBrains Mono",monospace;letter-spacing:.32em;color:#a9c4ee}
/* V47 · 我们走吧: she draws the panel (drawPanel): a sheet the panel's colour under the fading sky, her strokes on it */
.km-tut-draw{position:absolute;inset:0;pointer-events:none}
.km-tut-draw>canvas,.km-tut-sheet{position:absolute;inset:0;width:100%;height:100%;display:block}
.km-tut-sheet.off{opacity:0;transition:opacity .55s ease}
@media (max-height:700px){.km-tut-her{height:30vh}}
/* her cards: her avatar and her name at the top, the steps on the right */
.km-tut-who{display:inline-flex;align-items:center;gap:8px;flex:1;min-width:max-content;font-size:12.5px;font-weight:680;color:var(--k-ink);letter-spacing:.02em}
.km-tut-who .km-avbox{margin:0 3px}
.km-tut-who b{white-space:nowrap}
.km-tut-who~.km-tut-steps.mini li.cur span{display:none}   /* her title already says where you are: the dots are enough */
.km-tut-who~.km-tut-x{margin-left:4px}
/* the last card: “就这么简单。” on her last line */
.km-tut-tip.last h3{font-size:21px;letter-spacing:-.005em}
.km-tut-tip.last .km-tut-steps.mini li.done i{background:var(--k-acc);color:#fff;box-shadow:0 0 10px rgba(var(--k-acc-rgb),.6)}
.km-tut-in.last .km-tut-steps.mini li i{animation:kmTutPop .5s cubic-bezier(.3,1.6,.5,1) both}
.km-tut-in.last .km-tut-steps.mini li:nth-child(2) i{animation-delay:.12s}.km-tut-in.last .km-tut-steps.mini li:nth-child(3) i{animation-delay:.24s}.km-tut-in.last .km-tut-steps.mini li:nth-child(4) i{animation-delay:.36s}
.km-tut-tip.km-tut-leaving,.km-tut-spot.km-tut-leaving{opacity:0;transition:opacity .45s ease}
/* a message's tools stay shown while her card talks about them (as on hover) */
.message.km-tut-hold .message-actions{display:flex}
@media (prefers-reduced-motion:reduce){
  .km-tut-in.last .km-tut-steps.mini li i{animation:none!important}
  .km-tut-tip.km-tut-leaving,.km-tut-spot.km-tut-leaving{transition:none}
  .km-tut-her .km-tut-mark{transition:none}
  .km-tut-kos{display:none}
  .km-tut-sound[data-state="playing"] i{animation:none}.km-tut-sound[data-state="playing"] i:nth-child(1){height:6px}.km-tut-sound[data-state="playing"] i:nth-child(2){height:11px}.km-tut-sound[data-state="playing"] i:nth-child(3){height:8px}.km-tut-sound[data-state="playing"] i:nth-child(4){height:4px}
}
}

/* ================================================================ V49 · the easter egg's fifth time: she takes the screen (plead) */
body.km-pleading{overflow:hidden}
.km-plead{position:fixed;inset:0;z-index:2147483100;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:#e8eefc;opacity:0;transition:opacity .9s ease;
  background:radial-gradient(130% 100% at 50% 110%,#0d1b3a 0%,#060b16 48%,#03050a 100%);font-family:var(--font,system-ui)}
.km-plead.on{opacity:1}
.km-plead.out{opacity:0;transition-duration:.8s;pointer-events:none}
.km-plead-cv{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.km-plead-her{position:relative;width:min(380px,84vw);height:min(430px,46vh);flex:none}
.km-plead-say{position:relative;display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:0 20px}
.km-plead-say p{margin:0;opacity:0;transform:translateY(8px);animation:kmPleadIn .9s ease forwards}
.km-plead-say .a{font:300 clamp(20px,2.6vw,27px)/1.35 var(--font,system-ui);letter-spacing:.04em;color:#f2f6ff;text-shadow:0 0 22px rgba(110,170,255,.45);animation-delay:2s}
.km-plead-say .b{font-size:16px;color:#b9c7e6;animation-delay:3s}
.km-plead-yes,.km-plead-no{font:600 15px/1 var(--font,system-ui);padding:12px 34px;border-radius:999px;border:0;cursor:pointer;white-space:nowrap}
.km-plead-yes{margin-top:16px;color:#fff;background:linear-gradient(180deg,#3b82ff,#1d5cf2);box-shadow:0 0 0 1px rgba(150,190,255,.35),0 8px 30px rgba(40,110,255,.45);opacity:0;transform:translateY(8px);animation:kmPleadIn .9s ease 3.4s forwards}
.km-plead-yes:focus-visible{outline:2px solid #9fc6ff;outline-offset:3px}
.km-plead-no{position:fixed;left:0;top:0;color:#cfdcf5;background:rgba(150,180,240,.1);box-shadow:0 0 0 1px rgba(160,190,255,.25);opacity:0;pointer-events:none;
  transition:transform .3s cubic-bezier(.2,.8,.2,1),opacity .5s ease,filter .5s ease}
.km-plead-no.on{opacity:1;pointer-events:auto}
.km-plead-no.gone{opacity:0;filter:blur(8px);pointer-events:none}
@keyframes kmPleadIn{to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.km-plead-say p,.km-plead-yes{animation:none;opacity:1;transform:none}.km-plead-no{transition:none}}

/* ==== src/kmind/jane.css ==== */
/* KMind 宇宙交互 V50 · 简丹 (Jane Dan), hikos's built-in agent (src/kmind/jane.js).
   An agent, so a diamond: the shape of .km-agent .km-shape (src/kmind/kmind.css) is not touched. What sets her apart is in the
   picture, without a word (V44, the first version's gem again): cyan and blue facets (lighter above, darker below, an inner
   diamond), a thin halo along the diamond's edge that breathes, and at the centre her light: it spills over
   the facets, breathes and blinks, as if she did. She has no group, so no group frame (.km-g::before); the halo is
   ::after. Night and day alike; still with reduced motion. */
.km-agent.km-jane .km-shape{background:linear-gradient(150deg,#6fe6ff 0%,#3793ff 38%,#1d4fe0 68%,#0f2a8c 100%)}
.km-agent.km-jane .km-shape svg.km-jane-gem{width:100%;height:100%;overflow:visible}
/* 右键菜单里她的宝石（修士 HikosUI #30691，src/backend/msgctx.js「发给简丹」）：#km-ctx button span / svg 的通用规则（撑满、15px、淡）不作用到她身上 */
#km-ctx button .km-avbox,#km-ctx button .km-avbox span{flex:none;overflow:visible;min-width:0}
#km-ctx button .km-avbox svg.km-jane-gem{width:100%;height:100%;opacity:1}
.km-jane-gem .f1{fill:#fff;opacity:.26}
.km-jane-gem .f2{fill:#fff;opacity:.09}
.km-jane-gem .f3{fill:#00103c;opacity:.08}
.km-jane-gem .f4{fill:#00103c;opacity:.26}
.km-jane-gem .in{fill:none;stroke:#fff;stroke-opacity:.5;stroke-width:2.4;stroke-linejoin:round}
/* V44, V45 · her light: it spills over the facets and breathes; the core blinks (V45: no rays) (two rhythms, 3.7 s and 5.3 s,
   so the blinks fall at different moments each time round; every animation ends where it starts: no jump) */
.km-jane-gem .spill{opacity:.55;mix-blend-mode:screen;transform-box:fill-box;transform-origin:center;animation:kmJaneSpill 5.3s ease-in-out infinite}
.km-jane-gem .glow{fill:#c9f6ff;opacity:.34;transform-box:fill-box;transform-origin:center;animation:kmJaneGlow 4.8s ease-in-out infinite}
.km-jane-gem .core{fill:#fff;transform-box:fill-box;transform-origin:center;filter:drop-shadow(0 0 3px #fff) drop-shadow(0 0 7px #8fe3ff);animation:kmJaneBlink 3.7s ease-in-out infinite,kmJaneBlink2 5.3s ease-in-out infinite}
@keyframes kmJaneSpill{0%,100%{opacity:.45;transform:scale(.92)}50%{opacity:.75;transform:scale(1.06)}}
@keyframes kmJaneGlow{50%{opacity:.62;transform:scale(1.3)}}
@keyframes kmJaneBlink{0%,28%,100%{transform:scale(1);opacity:1}34%{transform:scale(1.45);opacity:1}40%{transform:scale(.8);opacity:.75}48%{transform:scale(1)}}
@keyframes kmJaneBlink2{0%,64%,100%{fill:#fff}70%{fill:#e9fbff}73%{fill:#fff}76%{fill:#d7f6ff}82%{fill:#fff}}
.km-agent.km-jane::after{content:"";position:absolute;inset:-17%;pointer-events:none;opacity:.8;background:linear-gradient(150deg,#8cefff,#4a8dff 60%,#7a6dff);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath transform='translate(3 3) scale(.94)' d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z' fill='none' stroke='%23000' stroke-width='3'/%3E%3C/svg%3E") center/100% 100% no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath transform='translate(3 3) scale(.94)' d='M42.3 8.6Q50 1 57.7 8.6L91.4 42.3Q99 50 91.4 57.7L57.7 91.4Q50 99 42.3 91.4L8.6 57.7Q1 50 8.6 42.3Z' fill='none' stroke='%23000' stroke-width='3'/%3E%3C/svg%3E") center/100% 100% no-repeat;
  filter:drop-shadow(0 0 3px rgba(110,200,255,.75));animation:kmJaneHalo 4.8s ease-in-out infinite}
html[data-theme=day] .km-agent.km-jane::after{filter:drop-shadow(0 0 2px rgba(40,120,255,.45));opacity:.9}
@keyframes kmJaneHalo{50%{opacity:.38}}
/* her DM: no model under her name (what she runs on is hikos's own business, src/kmind/more.js shows it for other agents) */
.dm-profile:has(.km-jane) .km-llm-side{display:none}

/* V43 · her card on a message (KM.jane.card): 再走一遍, the tutorial again. Edgeless: a soft glow, a faint light that passes over it */
.km-jane-card{position:relative;display:flex;align-items:center;gap:12px;margin-top:10px;padding:12px 12px 12px 14px;max-width:440px;border-radius:16px;overflow:hidden;
  background:linear-gradient(135deg,rgba(var(--k-acc-rgb),.16),rgba(var(--k-acc-rgb),.05) 62%,rgba(var(--k-acc-rgb),.02));box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.14),0 14px 34px -22px rgba(var(--k-acc-rgb),.9)}
.km-jane-card::before{content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 38%,rgba(255,255,255,.09) 50%,transparent 62%);transform:translateX(-100%);animation:kmJaneSweep 6s ease-in-out 1s infinite;pointer-events:none}
@keyframes kmJaneSweep{0%{transform:translateX(-100%)}35%,100%{transform:translateX(100%)}}
.km-jane-card .km-avbox{flex:none}
.km-jane-card-t{display:flex;flex-direction:column;gap:3px;flex:1;min-width:0}
.km-jane-card-t small{font:600 10px/1 ui-monospace,"JetBrains Mono",monospace;letter-spacing:.2em;color:var(--k-acc)}
.km-jane-card-t b{font-size:14.5px;font-weight:650;color:var(--k-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.km-jane-card-go{position:relative;display:inline-flex;align-items:center;gap:6px;flex:none;border:0;border-radius:999px;padding:9px 15px;background:var(--k-acc);color:var(--k-on-acc,#fff);font:600 13px/1 var(--font);cursor:pointer;box-shadow:0 0 20px -6px rgba(var(--k-acc-rgb),.9);transition:transform .15s ease,box-shadow .2s ease}
.km-jane-card-go:hover{transform:translateY(-1px);box-shadow:0 0 26px -4px rgba(var(--k-acc-rgb),1)}
@media (prefers-reduced-motion:reduce){.km-jane-gem .spill,.km-jane-gem .glow,.km-jane-gem .core,.km-agent.km-jane::after{animation:none}.km-jane-card::before{animation:none;display:none}.km-jane-card-go{transition:none}}

/* V49 · the easter egg: you close her DM, it slides away, and she puts it straight back (src/kmind/jane.js) */
.dm-item.km-jane-nope{transition:transform .24s ease,opacity .24s ease;transform:translateX(-22px);opacity:.25}
.dm-item.km-jane-back{animation:kmJaneBack .9s cubic-bezier(.2,1.3,.4,1) both;border-radius:8px}
@keyframes kmJaneBack{0%{transform:translateX(-22px);opacity:.3}35%{opacity:1;box-shadow:0 0 0 1px rgba(140,190,255,.6),0 0 24px rgba(90,150,255,.5)}100%{transform:none;box-shadow:0 0 0 0 rgba(120,170,255,0)}}
.km-jane-bubble{position:fixed;z-index:2147483000;transform:translateY(-50%);max-width:260px;padding:8px 12px;border-radius:12px 12px 12px 4px;font-size:13px;line-height:1.45;color:#eef4ff;
  background:rgba(28,46,108,.94);box-shadow:0 0 0 1px rgba(140,180,255,.35),0 8px 24px rgba(10,20,60,.45);pointer-events:none;animation:kmJaneBubble .35s ease both}
.km-jane-bubble.gone{opacity:0;transition:opacity .5s ease}
@keyframes kmJaneBubble{from{opacity:0;transform:translate(-6px,-50%)}}
@media (prefers-reduced-motion:reduce){.dm-item.km-jane-back,.km-jane-bubble{animation:none}}

/* 修士 HikosUI #26749 · 她的路由（src/kmind/jane_route.js）。去处卡与上面的卡同一个样子，多一行副标题（哪个宇宙 / 谁的组员）；几张候选竖着排 */
.km-jane-gos{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.km-jane-gos .km-jane-card{margin-top:0}
/* 任务 43798fad · 「指给我看」（src/kmind/jane_spot.js）：去处卡上「去」旁边的小圆钮；点了她在界面上圈出那一处 */
.km-jane-card-spot{display:inline-flex;align-items:center;justify-content:center;flex:none;width:32px;height:32px;margin-right:-4px;border:0;border-radius:50%;cursor:pointer;color:var(--k-acc);background:rgba(var(--k-acc-rgb),.12);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.25);transition:background .15s ease,transform .15s ease}
.km-jane-card-spot:hover{background:rgba(var(--k-acc-rgb),.22);transform:translateY(-1px)}
/* 落在对话框里的目的地：教程的教练便签（.km-tut-coach）借来用，头上是她的小像 */
.km-jane-spot-note .km-tut-coach-top .km-avbox{flex:none}
.km-jane-spot-note .km-tut-coach-top .km-tut-count{margin-left:auto}
/* 任务 5e580d78：她指的入口收在聊天头的 ⋯ 里（手机上的星球头）。那个菜单（#km-ctx）画在聚光灯上面、照不进去：菜单开了灯收，菜单里那一项自己亮着（描在里面：菜单会滚，外发光会被裁掉） */
#km-ctx button.km-jane-here{background:rgba(var(--k-acc-rgb),.12);box-shadow:inset 0 0 0 1.5px rgba(var(--k-acc-rgb),.85);animation:kmJaneHere 2.4s ease-in-out infinite}
@keyframes kmJaneHere{50%{box-shadow:inset 0 0 0 1.5px rgba(var(--k-acc-rgb),.5),inset 0 0 14px rgba(var(--k-acc-rgb),.3)}}
@media (prefers-reduced-motion:reduce){#km-ctx button.km-jane-here{animation:none}}
.km-jane-card-t i{font-style:normal;font-size:12px;color:var(--k-ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 跳过去之后她临时站到私信 / Hikos 图标的位置上：原来的图标藏起来（不拿掉），她用「面板构建」拼出来——四块晶面从外面飞回原位，一圈光扫过 */
.km-jane-stand{position:relative}
.km-jane-stand > :not(.km-jane-standin){opacity:0}
.km-jane-standin{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none}
.km-jane-standin .km-avbox{filter:drop-shadow(0 0 8px rgba(var(--k-acc-rgb),.55))}
.km-jane-build .km-jane-standin .f1,.km-jane-build .km-jane-standin .f2,.km-jane-build .km-jane-standin .f3,.km-jane-build .km-jane-standin .f4,.km-jane-build .km-jane-standin .in{transform-box:view-box;transform-origin:50% 50%;animation:kmJaneBuild .62s cubic-bezier(.2,.9,.3,1.15) both}
.km-jane-build .km-jane-standin .f1{--bx:-34%;--by:-34%}
.km-jane-build .km-jane-standin .f2{--bx:34%;--by:-34%;animation-delay:.07s}
.km-jane-build .km-jane-standin .f3{--bx:-34%;--by:34%;animation-delay:.14s}
.km-jane-build .km-jane-standin .f4{--bx:34%;--by:34%;animation-delay:.21s}
.km-jane-build .km-jane-standin .in{--bx:0;--by:0;animation-delay:.3s}
.km-jane-build .km-jane-standin .km-shape{animation:kmJaneBuildShape .7s ease both}
.km-jane-build .km-jane-standin::after{content:"";position:absolute;inset:8%;border-radius:12px;box-shadow:0 0 0 2px rgba(var(--k-acc-rgb),.75);animation:kmJaneBuildRing .8s ease-out .35s both;pointer-events:none}
@keyframes kmJaneBuild{from{opacity:0;transform:translate(var(--bx),var(--by)) scale(.4)}to{transform:none}}
@keyframes kmJaneBuildShape{from{clip-path:inset(50% 50% 50% 50%)}to{clip-path:inset(0)}}
@keyframes kmJaneBuildRing{from{opacity:1;transform:scale(.7)}to{opacity:0;transform:scale(1.35)}}
/* 悬浮问答框：拉在图标旁边（哪边地方大放哪边），不进任何一边的停靠位 */
.km-jane-pop{position:fixed;z-index:2147482000;width:320px;max-width:calc(100vw - 16px);display:flex;flex-direction:column;border-radius:16px;overflow:hidden;color:var(--k-ink);
  background:var(--k-bg,#0d1530);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.22),0 22px 48px -18px rgba(5,12,40,.65),0 0 40px -18px rgba(var(--k-acc-rgb),.8)}
.km-jane-pop-in{animation:kmJanePopIn .28s cubic-bezier(.2,.9,.3,1.1) both}
@keyframes kmJanePopIn{from{opacity:0;transform:scale(.92)}}
.km-jane-pop header{display:flex;align-items:center;gap:10px;padding:10px 10px 8px 12px;background:linear-gradient(135deg,rgba(var(--k-acc-rgb),.16),rgba(var(--k-acc-rgb),.03))}
.km-jane-pop header b{flex:1;font-size:14px;font-weight:650}
.km-jane-pop .km-jane-pop-dm{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border:0;border-radius:9px;background:none;color:var(--k-ink2);cursor:pointer}
.km-jane-pop .km-jane-pop-dm:hover{background:var(--k-hover);color:var(--k-acc)}
.km-jane-pop-log{display:flex;flex-direction:column;gap:8px;max-height:min(46vh,340px);overflow:auto;padding:10px 12px}
.km-jane-pl p{margin:0;font-size:13.5px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}
.km-jane-pl.me{align-self:flex-end;max-width:85%}
.km-jane-pl.me p{padding:6px 10px;border-radius:12px 12px 4px 12px;background:rgba(var(--k-acc-rgb),.16)}
.km-jane-pl .km-jane-card{max-width:none;padding:9px 9px 9px 11px;gap:9px}
.km-jane-pl .km-jane-card-go{padding:7px 12px}
.km-jane-pop-f{display:flex;gap:6px;padding:8px 10px 10px;border-top:1px solid rgba(var(--k-acc-rgb),.12)}
.km-jane-pop-f input{flex:1;min-width:0;border:0;border-radius:10px;padding:8px 10px;background:var(--k-hover,rgba(127,127,127,.12));color:var(--k-ink);font:inherit;font-size:13.5px;outline:none}
.km-jane-pop-f input:focus{box-shadow:0 0 0 2px rgba(var(--k-acc-rgb),.45)}
.km-jane-pop-f button{display:inline-flex;align-items:center;justify-content:center;width:34px;border:0;border-radius:10px;background:var(--k-acc);color:var(--k-on-acc,#fff);cursor:pointer}
@media (prefers-reduced-motion:reduce){.km-jane-build .km-jane-standin *,.km-jane-build .km-jane-standin::after,.km-jane-pop-in{animation:none!important}}
/* 简丹接模型：她画的图（src/backend/jane.js ⑤；字节带登录头取回，换成 blob: 地址） */
.kmb-jane-img{margin:10px 0 0;max-width:min(360px,100%);border-radius:14px;overflow:hidden;background:var(--bg-tertiary,rgba(127,127,127,.12));aspect-ratio:1/1}
.kmb-jane-img img{display:block;width:100%;height:100%;object-fit:cover}
.kmb-jane-img.is-failed{aspect-ratio:auto;padding:10px 12px;font-size:12px;opacity:.7}
/* 修士 #26785 · 她装好你扔给她的皮肤：皮肤钮亮一个小灯（src/kmind/jane_skin.js），打开皮肤面板看过就灭。挂在 html 上，按钮重画也不丢 */
html[data-km-skin-lamp] .km-skin-btn{position:relative}
html[data-km-skin-lamp] .km-skin-btn::after{content:"";position:absolute;top:3px;right:3px;width:7px;height:7px;border-radius:50%;background:var(--k-acc);box-shadow:0 0 0 2px var(--k-bg),0 0 8px rgba(var(--k-acc-rgb),.9);animation:kmJaneLamp 1.8s ease-in-out infinite;pointer-events:none}
@keyframes kmJaneLamp{50%{box-shadow:0 0 0 2px var(--k-bg),0 0 14px rgba(var(--k-acc-rgb),1)}}
.km-jane-pop.km-jane-pop-over{box-shadow:inset 0 0 0 2px var(--k-acc),0 22px 48px -18px rgba(5,12,40,.65),0 0 48px -12px rgba(var(--k-acc-rgb),1)}
@media (prefers-reduced-motion:reduce){html[data-km-skin-lamp] .km-skin-btn::after{animation:none}}

/* ==== src/backend/remote.css ==== */
/* Hikos · 远端模式隐藏的入口（任务 9a0332ca · P3）
   config.js 在远端模式给 <html> 打 data-kmb="remote"；这里按 data-action 把真实系统没有的功能入口藏起来
   （清单见 tools/hikos_backend_map.cjs 的 missing 项与 src/backend/guard.js 的 BLOCK）。藏不住的由 guard.js 在点击时拦下。
   本地模式不带这个属性，原型照旧。接通一项就把它从这里删掉。 */

/* 语音 / 通话：批 G 已接通（src/backend/voice.js）；媒体服务（主力 veRTC / 兜底 LiveKit + TURN）都没配时 voice.js 给 <html> 打 data-kmb-voice="off"，入口藏起来、
   语音星球页面上说明原因；配好后 data-kmb-voice="on" 入口照常。好友 / 群聊入口批 F 已接通（src/backend/friends.js），不再藏 */
html[data-kmb="remote"]:not([data-kmb-voice="on"]) [data-action="lc-call-history"],
html[data-kmb="remote"]:not([data-kmb-voice="on"]) [data-action="join-voice"],
html[data-kmb="remote"]:not([data-kmb-voice="on"]) [data-action="start-call"],
html[data-kmb="remote"]:not([data-kmb-voice="on"]) [data-action="video-call"],
html[data-kmb="remote"]:not([data-kmb-voice="on"]) [data-action="call"],
html[data-kmb="remote"]:not([data-kmb-voice="on"]) [data-action="mute"],
html[data-kmb="remote"]:not([data-kmb-voice="on"]) [data-action="deafen"],
html[data-kmb="remote"]:not([data-kmb-voice="on"]) [data-action="share-screen"],
html[data-kmb="remote"]:not([data-kmb-voice="on"]) [data-action="lc-devices"],
/* 核心通话面板的情景按钮（模拟对方接听 / 忙线 / 无人接听 / 断线）：远端模式对方的动作由服务器推送，按钮不出现 */
html[data-kmb="remote"] [data-action="lc-peer-answer"],
html[data-kmb="remote"] [data-action="lc-peer-busy"],
html[data-kmb="remote"] [data-action="lc-peer-missed"],
html[data-kmb="remote"] [data-action="lc-call-disconnect"],
/* 论坛（贴纸礼物 / 公告发布已在批 A 接通；活动 new-event / events / rsvp 批 B 接通；发帖 new-post 批 C 接通，不再藏） */
/* 消息菜单：置顶 / 举报 / 标未读 / 线程设置已在批 A 接通，不再藏 */
/* 宇宙 / 轨道 / 星球的结构变更与治理面板：批 E 接通宇宙的新建 / 设置 / 删除 / 离开 / 引导（universe.js），不再藏 */
html[data-kmb="remote"] [data-action="invite"],
/* 批 B：lc-category-new（新建轨道）接通，不再藏；批 C：new-channel（新建星球）接通，不再藏（母星上 forum.js 提示） */
html[data-kmb="remote"] [data-action="channel-settings"],
html[data-kmb="remote"] [data-action="join-channel"],
html[data-kmb="remote"] [data-action="join-server"],
/* KMind 层：派驻 / 模板 / 携带 / 邮箱（经典视图可做）；km-agent-new（新建组员）活动栏小批已接通；V38：km-agent-edit / km-agent-delete / km-vault* 由 v38.js 接通，不再藏 */
/* km-avatar：头像由 avatar.js 接通（/v1/me/avatar、/teammates/{id}/avatar），不再藏（修士 #19874 ①） */
/* 批 B：km-templates / km-tpl-* / km-carry-* / details.km-carry-add 接通，不再藏 */
html[data-kmb="remote"] [data-action="km-join-public"],
html[data-kmb="remote"] [data-action="km-hub-remove"],
html[data-kmb="remote"] [data-action="km-mail"],
html[data-kmb="remote"] [data-action="km-mail-new"],
html[data-kmb="remote"] #kmu-mail-btn,
/* 设置弹窗的「数据」页（导出 / 导入本机 JSON） */
html[data-kmb="remote"] .settings-menu [data-action="settings-tab"][data-id="data"] {
  display: none !important;
}

/* 任务 cd4e5c3e：消息菜单「从消息创建讨论串」（new-thread / create-thread）与发现页「用邀请码加入」表单（lc-join-dialog / form:lc-join）未接后端，远端模式藏起 */
html[data-kmb="remote"] [data-action="new-thread"],
html[data-kmb="remote"] [data-action="create-thread"],
html[data-kmb="remote"] [data-action="lc-join-dialog"],
html[data-kmb="remote"] form[data-form="lc-join"],
html[data-kmb="remote"] .km-discover-more:not(:has([data-action="lc-left-servers"])),
html[data-kmb="remote"] .footer-actions:has(> [data-action="lc-join-dialog"]:only-child) {
  display: none !important;
}

/* 批 B：合作宇宙的本地轨道「我发起 / 受邀 / 受邀 · <创建人>」没有服务器 id，不改名 / 不删除（structure.js 也拦；任务 608f287e 改为按创建人分轨道） */
html[data-kmb="remote"] [data-action="lc-category-rename"][data-group="我发起"],
html[data-kmb="remote"] [data-action="lc-category-delete"][data-group="我发起"],
html[data-kmb="remote"] [data-action="lc-category-rename"][data-group="受邀"],
html[data-kmb="remote"] [data-action="lc-category-delete"][data-group="受邀"],
html[data-kmb="remote"] [data-action="lc-category-rename"][data-group^="受邀 · "],
html[data-kmb="remote"] [data-action="lc-category-delete"][data-group^="受邀 · "] { display: none !important; }

/* 「经典视图」入口（seams.js 插入） */
html[data-kmb="remote"] .titlebar .tright .kmb-classic { display: inline-flex; align-items: center; gap: 4px; padding: 0 8px; height: 24px; border-radius: 6px; font-size: 12px; text-decoration: none; color: inherit; opacity: .75; white-space: nowrap; }
html[data-kmb="remote"] .titlebar .tright .kmb-classic:hover { opacity: 1; background: rgba(127, 127, 127, .18); }
html[data-kmb="remote"] #kmu-top .kmu-tright .kmb-classic { width: auto; padding: 0 9px; text-decoration: none; font-size: 12px; color: var(--k-ink2); }
html[data-kmb="remote"] #kmu-top .kmu-tright .kmb-classic:hover { color: var(--k-ink); background: rgba(127, 127, 127, .14); }
/* 活动栏小批：「单击头像直接私聊」开关（我的智能体标题栏，分组钮右边） */
html[data-kmb="remote"] .km-side-tool[data-action="kmb-avatar-dm"][aria-pressed="true"] { color: var(--k-acc, #5B8CF3); background: rgba(91, 140, 243, .16); }
html[data-kmb="remote"] .kmb-roster-form .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }

/* 批 A：聊天时间线里的公告卡（公告模块之外也认 headline）与工具栏「发公告」 */
html[data-kmb="remote"] .kmb-announce { display: flex; align-items: center; gap: 8px; margin: 2px 0 6px; padding: 6px 10px; border-left: 3px solid var(--accent, #1450E8); border-radius: 6px; background: rgba(20, 80, 232, .10); font-size: 13px; }
html[data-kmb="remote"] .kmb-announce-kind { font-size: 10px; letter-spacing: .08em; padding: 1px 6px; border-radius: 999px; background: var(--accent, #1450E8); color: #fff; }
html[data-kmb="remote"] .kmb-announce strong { font-weight: 600; }
html[data-kmb="remote"] .channelhead .toolbar .kmb-announce-icon { font-size: 14px; line-height: 1; }

/* 批 C（任务 9a0332ca）：论坛星球——归档页签里的主题卡 / 工具栏「论坛设置」图标 */
html[data-kmb="remote"] .post-card.kmb-post-archived { opacity: .78; }
html[data-kmb="remote"] .post-card.kmb-post-archived .footer-actions { margin-top: 10px; }
html[data-kmb="remote"] .kmb-forum-icon { font-size: 14px; line-height: 1; }

/* 批 G（voice.js）：远端视频格子（贴在通话面板 .voice-tiles 之后）；语音星球页面等媒体服务的说明 */
.kmb-voice-video{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:8px;margin:10px 0}
.kmb-voice-video video{width:100%;aspect-ratio:16/9;border-radius:8px;background:#000;object-fit:cover}
/* veRTC 把 <video> 渲染进我们给的容器（renderDom）；容器本身撑出 16:9 的格子 */
.kmb-voice-video .kmb-voice-tile{position:relative;width:100%;aspect-ratio:16/9;border-radius:8px;background:#000;overflow:hidden}
.kmb-voice-video .kmb-voice-tile video{position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto;border-radius:0}
.kmb-voice-wait{margin-top:12px;opacity:.8}

/* 建宇宙 / 建星球：星球挂在哪个小组 + 派驻组员（可不选）（大厅 #19641；src/backend/universe.js） */
.kmb-planet-extra { margin-top: 10px; }
/* 派驻组员选择器（任务 7935dd78 · 修士 大厅 #22588 ①）：行、组头、状态点、第二行全部是动态面板那套 .km-ow-* 类（universe.css / cosmos.css，
   经 .km-ow-host 作用域一字不改地生效）。这里只写选择器自己多出来的三样：勾选圈（动态在这个位置放展开箭头）、选中态、滚动盒。 */
.kmb-planet-crew { margin: 10px 0 0; padding: 0; border: 0; }
.kmb-planet-crew[hidden] { display: none; }
.kmb-crew-pick .km-ow-sec { margin: 0 0 4px; }
.kmb-crew-pick .km-ow-sec b { font: inherit; color: var(--k-acc); }
.kmb-crew-list { max-height: 236px; overflow: auto; scrollbar-width: thin; padding: 0 2px 2px 0; }
.kmb-crew-pick .km-ow-grp { top: 0; margin-left: 0; margin-right: 0; padding: 0; }   /* 动态里 -6px 出血是为了贴面板内边距；滚动盒里没有内边距 */
.kmb-crew-pick .km-ow-row { position: relative; cursor: pointer; user-select: none; }
.kmb-crew-pick .km-ow-row[hidden] { display: none; }
.kmb-crew-pick .km-ow-row:focus-visible { outline: none; box-shadow: var(--k-focus); }
.kmb-crew-pick .km-ow-row.on { background: rgba(var(--k-acc-rgb), .1); }
.kmb-crew-pick .km-ow-row.on:hover { background: rgba(var(--k-acc-rgb), .14); }
.kmb-crew-pick .km-ow-row.on .km-ow-t b { color: var(--k-acc); }
.kmb-crew-box { position: absolute; width: 0; height: 0; margin: 0; opacity: 0; pointer-events: none; }
/* 勾选圈：占动态里展开箭头（.km-ow-chev 26px）的位子；没选是一圈细线，选中填主色、带一点光 */
.kmb-crew-tick { display: inline-grid; place-items: center; width: 20px; height: 20px; margin: 0 3px; border-radius: 50%; color: transparent; box-shadow: inset 0 0 0 1.5px var(--k-line2, var(--k-line)); transition: background .15s, box-shadow .15s, color .15s; }
.kmb-crew-pick .km-ow-row:hover .kmb-crew-tick { box-shadow: inset 0 0 0 1.5px var(--k-acc); }
.kmb-crew-pick .km-ow-row.on .kmb-crew-tick { background: var(--k-acc); color: var(--k-on-acc); box-shadow: 0 0 12px var(--cz-glow, rgba(var(--k-acc-rgb), .5)); }
.kmb-crew-gsel { font: 600 10.5px/1 var(--k-mono, ui-monospace, monospace); font-style: normal; color: var(--k-acc); white-space: nowrap; }
.kmb-crew-gsel[hidden] { display: none; }
.kmb-humans-only { display: flex; align-items: center; gap: 8px; margin: 6px 0 2px; font-size: 13px; cursor: pointer; }
.kmb-humans-only input { width: 15px; height: 15px; margin: 0; }
.kmb-humans-only small { opacity: .7; }
/* 任务 7a3561d8：「只在 @ 智能体时触发协同」——说明较长，放在标题下一行 */
.kmb-wake-only { display: flex; align-items: flex-start; gap: 8px; margin: 6px 0 2px; font-size: 13px; cursor: pointer; }
.kmb-wake-only[hidden] { display: none; }
.kmb-wake-only input { width: 15px; height: 15px; margin: 2px 0 0; flex: none; }
.kmb-wake-only > span { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.kmb-wake-only small { opacity: .7; font-size: 11.5px; line-height: 1.35; }

/* V37 宇宙增量（任务 aeb5d3b1）：远端模式用宿主登录态连广场服务，没有第二套账号——「连接共享服务」页签藏起来 */
html[data-kmb="remote"] #km-plaza-dialog [data-p-tab="connect"] { display: none; }
/* 远端模式节目落在 KrowFiles「广场 Podcast」目录：本地「播客目录」选择器与资产库按钮没有对应物，藏起来 */
html[data-kmb="remote"] #km-plaza-dialog [data-p-folder-pick], html[data-kmb="remote"] #km-plaza-dialog [data-p-folder-save], html[data-kmb="remote"] #km-plaza-dialog [data-p-knowledge] { display: none; }

/* 添加组员（addmember.js，修士走查 #19874 第 6 项）：多小组时的「加到哪个小组」一行；其余样式沿用原型 .km-am-* */
.kmb-am-team{display:flex;align-items:center;gap:10px;margin:0 0 10px}
.kmb-am-team>span{font-size:12px;color:var(--k-mute,var(--text-muted));white-space:nowrap}
.kmb-am-team .field{flex:1;min-width:0;margin:0}
.km-am-dl .km-am-dlrow a.km-am-dlbtn,.km-am-dl .km-am-dlrow a.km-am-os{text-decoration:none}

/* avatar.js：设置 → 资料 的「换头像…」 */
.kmb-profile-avatar{display:flex;gap:14px;align-items:center;margin:0 0 14px;padding:10px 12px;border:1px solid var(--k-line,#2b2f45);border-radius:12px}
.kmb-profile-avatar .kmb-profile-av .km-avbox{display:inline-block}
.kmb-profile-avatar .form-note{margin:6px 0 0}

/* 大厅 #19925 ①（修士#谢伊）：夜间皮肤下 PC Chrome 的原生下拉 / 上拉框白底黑字。Windows 上 Chrome 用元素自己的 color-scheme 与 option 的
   author 样式画弹出层（Mac 用系统菜单，跟随系统深色，所以 Mac 复现不了）。这里把表单控件与弹出层的 color-scheme 钉死为 dark，并给 option 显式底色 / 字色。 */
html[data-theme=night] select, html[data-theme=night] option, html[data-theme=night] optgroup, html[data-theme=night] input, html[data-theme=night] textarea, html[data-theme=night] dialog, html[data-theme=night] [popover] { color-scheme: dark; }
html[data-theme=night] option, html[data-theme=night] optgroup { background: #141922; color: #e6e9ef; }
html[data-theme=night] option:checked, html[data-theme=night] option:hover { background: #1f2a3d; color: #ffffff; }
html[data-theme=night] select:focus-visible { outline: 0; box-shadow: var(--k-focus, 0 0 0 3px rgba(59,130,255,.28)); }
html[data-theme=day] select, html[data-theme=day] option, html[data-theme=day] input, html[data-theme=day] textarea, html[data-theme=day] dialog { color-scheme: light; }

/* 修士走查 #19893 ②：Add Friend 页「你的主人编号」卡 */
.kmb-my-no { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 14px 0 18px; padding: 12px 14px; border-radius: 10px; background: var(--bg-2, rgba(127,127,127,.08)); border: 1px solid var(--line, rgba(127,127,127,.18)); }
.kmb-my-no > span { font-size: 12px; color: var(--muted, #8a8c9b); }
.kmb-my-no > b { font-size: 18px; letter-spacing: .5px; font-variant-numeric: tabular-nums; user-select: all; }
.kmb-my-no > small { flex-basis: 100%; font-size: 12px; color: var(--muted, #8a8c9b); }
.kmb-friend-badge { margin-left: auto; }

/* #19893 ④ 向组长折叠组员：组长头像右上角 +N */
.kmb-fold-n { position: absolute; top: -4px; right: -4px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: var(--accent, #5865f2); color: #fff; font: 600 10px/18px system-ui, sans-serif; font-style: normal; text-align: center; box-shadow: 0 0 0 2px var(--k-bg, var(--bg, #1e1f22)); cursor: pointer; z-index: 2; }
.km-side-av, .km-ow-who { position: relative; }

/* 单聊忙碌流光（任务 2761ae0b · 规则 R5）：失败 / 取消 / 挂起 / 静默超时的消退不放核心「完成」的烟花（填满 → 闪 → 涟漪，kmind.css .km-wk-done），
   只 0.35 s 淡出。work.js DM.quiet 在清登记前给这位组员可见的忙碌头像打 km-wk-quiet，1.6 s 后摘掉；正常完成（maple.reply）不打，走核心动画。 */
.km-agent.km-wk-quiet.km-wk-done > .km-wk { transition: none; animation: none; }
.km-agent.km-wk-quiet.km-wk-done .km-wk-f, .km-agent.km-wk-quiet.km-wk-done .km-wk-t, .km-agent.km-wk-quiet.km-wk-done .km-wk-h, .km-agent.km-wk-quiet.km-wk-done .km-wk-c { animation: kmWkOut .35s ease forwards; }
.km-agent.km-wk-quiet.km-wk-done .km-wk-p { animation: none; opacity: 0; }
.km-agent.km-wk-quiet.km-wk-done::before { animation: kmWkIn .35s ease .2s both; }

/* ===== 任务 608f287e · 资产库问答对齐经典视图（src/backend/knowask.js）：原型探索器里给本机示例适配器用的步骤在远端收掉 =====
   五种搜索方式 / 「搜索」按钮 / 「数据源」页签 / 详情里的数据源行与表单——远端的检索与问答全由服务端知识服务做，一个输入框就够。 */
html[data-kmb="remote"] .km-x-knowledge .km-x-modes,
html[data-kmb="remote"] .km-x-knowledge .km-x-go,
html[data-kmb="remote"] .km-x-knowledge .km-x-tab[data-x-tab="sources"],
html[data-kmb="remote"] .km-x-knowledge .km-x-srcline,
html[data-kmb="remote"] .km-x-knowledge .km-x-srcform { display: none !important; }
html[data-kmb="remote"] .kmb-ask-tools { display: flex; align-items: center; gap: 12px; margin: 4px 14px 0; font-size: 11px; color: var(--k-dim); }
html[data-kmb="remote"] .kmb-ask-web-toggle { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; color: var(--k-ink3); }
html[data-kmb="remote"] .kmb-ask-web-toggle input { margin: 0; accent-color: var(--k-acc); }
html[data-kmb="remote"] .kmb-ask-hint { margin-left: auto; }
html[data-kmb="remote"] .kmb-ask { margin: 10px 12px 0; padding: 12px 14px; border-radius: 12px; background: var(--k-bg); box-shadow: inset 0 0 0 1px var(--k-line); font-size: 13px; color: var(--k-ink2); max-height: 46%; overflow: auto; scrollbar-width: thin; }
html[data-kmb="remote"] .kmb-ask-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 6px; }
html[data-kmb="remote"] .kmb-ask-head b { color: var(--k-ink); font-weight: 650; }
html[data-kmb="remote"] .kmb-ask-scope { font-size: 11px; color: var(--k-dim); }
html[data-kmb="remote"] .kmb-ask-head .kmb-ask-btn { margin-left: auto; }
html[data-kmb="remote"] .kmb-ask-answer { line-height: 1.6; }
html[data-kmb="remote"] .kmb-ask-answer p { margin: 0 0 6px; }
html[data-kmb="remote"] .kmb-ask-answer.live::after { content: ''; display: inline-block; width: 7px; height: 14px; margin-left: 2px; vertical-align: -2px; background: var(--k-acc); opacity: .7; animation: kmb-ask-blink 1s steps(2) infinite; }
@keyframes kmb-ask-blink { to { opacity: 0; } }
html[data-kmb="remote"] .kmb-ask-stage { margin: 4px 0 0; font-size: 11px; color: var(--k-dim); }
html[data-kmb="remote"] .kmb-ask-err { color: var(--k-danger); }
html[data-kmb="remote"] .kmb-ask-pills { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 4px; }
html[data-kmb="remote"] .kmb-pill { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: 11px; font-style: normal; background: var(--k-hover); color: var(--k-ink3); box-shadow: inset 0 0 0 1px var(--k-line2); }
html[data-kmb="remote"] .kmb-pill.ok { color: var(--k-ok); background: rgba(var(--k-ok-rgb), .1); }
html[data-kmb="remote"] .kmb-pill.warn { color: #9A5B00; background: rgba(var(--k-amber-rgb), .14); }
html[data-kmb="remote"] .kmb-pill.bad { color: var(--k-danger); background: rgba(var(--k-danger-rgb), .1); }
html[data-kmb="remote"] .kmb-ask-ev, html[data-kmb="remote"] .kmb-ask-web { margin-top: 6px; font-size: 12px; }
html[data-kmb="remote"] .kmb-ask-ev summary, html[data-kmb="remote"] .kmb-ask-web summary { cursor: pointer; color: var(--k-ink3); font-weight: 600; }
html[data-kmb="remote"] .kmb-ask-ev ol, html[data-kmb="remote"] .kmb-ask-web ol { margin: 4px 0 0; padding-left: 20px; }
html[data-kmb="remote"] .kmb-ask-ev li, html[data-kmb="remote"] .kmb-ask-web li { margin: 2px 0; }
html[data-kmb="remote"] .kmb-ask-ev li em { margin-left: 6px; font: 600 10.5px/1 "JetBrains Mono", monospace; font-style: normal; color: var(--k-acc); }
html[data-kmb="remote"] .kmb-ask-ev li p, html[data-kmb="remote"] .kmb-ask-web li p { margin: 1px 0 0; color: var(--k-dim); }
html[data-kmb="remote"] .kmb-ask-foot { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
html[data-kmb="remote"] .kmb-ask-btn { padding: 4px 10px; border-radius: 8px; border: 0; background: var(--k-hover); color: var(--k-ink2); font-size: 12px; cursor: pointer; box-shadow: inset 0 0 0 1px var(--k-line2); }
html[data-kmb="remote"] .kmb-ask-btn:hover { background: var(--k-sel); }
html[data-kmb="remote"] .kmb-ask-btn[disabled] { opacity: .5; cursor: default; }
html[data-kmb="remote"] .kmb-ask-note { font-size: 11px; color: var(--k-dim); }
html[data-kmb="remote"] .kmb-ask-note.ok { color: var(--k-ok); }
html[data-kmb="remote"] .kmb-ask-save { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--k-line2); }

/* 任务 446b2000：面板拖拽排序宇宙 / 轨道 / 星球的视觉反馈 */
html[data-kmb="remote"] .rail [data-action="server"][draggable="true"],
html[data-kmb="remote"] .channels .category[draggable="true"],
html[data-kmb="remote"] .channels [data-action="channel"][draggable="true"] { cursor: grab; }
html[data-kmb="remote"] .kmb-dragging { opacity: .45; }
html[data-kmb="remote"] .kmb-drop-before { box-shadow: inset 0 2px 0 var(--k-acc, #1450E8) !important; }
html[data-kmb="remote"] .kmb-drop-after { box-shadow: inset 0 -2px 0 var(--k-acc, #1450E8) !important; }
html[data-kmb="remote"] .channels .category.kmb-drop-into { background: rgba(var(--k-acc-rgb, 20, 80, 232), .14); border-radius: 6px; }


/* 任务 80d1b74f（修士 #24318，照 Discord）：不进数字的未读不再亮灰点 —— 宇宙图标 / 星球行 / 讨论串行左边一条短竖条（unread.js 加 .unread / .new / .kmb-unread），
   有未读的星球名提亮；红色数字只给 @ 到我等进数字的。竖条的形状与颜色在 panel.css（.server.unread、.channel.new）。 */
.channel-scroll .channel.kmb-unread{color:var(--k-ink,#fff)}.channel-scroll .channel.kmb-unread .cname{font-weight:650}
.thread-list-item.kmb-unread{position:relative;color:var(--k-ink,#fff)}
.thread-list-item.kmb-unread::before{content:"";position:absolute;left:-8px;top:50%;width:4px;height:8px;margin-top:-4px;border-radius:0 4px 4px 0;background:var(--k-ink,#fff)}

/* 任务 a0624db0（道哥 #27523，截图 IMG_0353.png）：组员设置里的「大模型」一栏（src/backend/llm.js）——BYO 工作台组员的可选清单 + 自定义模型名 + 刷新（唤醒实探）；
   标题行右侧放「刷新可选模型」，与 kmind.css 的 .km-am-link 同一样式；脚注（来源 / 失败原话 / 重试）复用 .form-note。 */
.kmb-llm-head{display:flex;align-items:flex-end;justify-content:space-between;gap:8px}
.kmb-llm-head .field-label{margin-bottom:7px}
.kmb-llm-tools{display:inline-flex;align-items:center;gap:6px;margin:17px 0 7px}
.kmb-llm-tools:empty{display:none}
.kmb-llm-tools .km-am-link{margin-left:0}
/* 任务 3a59958a 批次 2：组员设置里的跨会话记忆 / 派单与能力 / 代码与 GitHub / 开发环境（src/backend/wbset.js） */
.kmb-wbset{margin-top:10px}
.kmb-wbset .field+.field{margin-top:6px}
.kmb-wbset .km-mm-sw{margin:2px 0 6px}
.kmb-wbset-warn{color:var(--danger,#e5484d)}
.kmb-wbset [data-kmb-wbset-tags]{margin-top:4px}
.kmb-llm select.field:disabled{opacity:.6}
.kmb-llm .kmb-llm-note[hidden]{display:none}
.kmb-llm input.field{margin-top:10px}
.km-am-link.km-mini{padding:2px 8px;font-size:11px;margin-left:6px;vertical-align:middle}

/* ==== src/backend/chat.css ==== */
/* Hikos · 「聊天窗口」小批（任务 9a0332ca，道哥 #19345 ①②）· 配 src/backend/chat.js。
   ① 人类靠右（气泡用皮肤里的琥珀——tokens.css：Amber always means a person）、智能体靠左；
   ② 「回到最新」圆钮 / 「N 条新消息 ↓」浮条：粘在滚动口底边、居中，不占内容高度。 */

/* ---- ① 分边 ---- */
.message.is-human{flex-direction:row-reverse}
.message.is-human .message-content{display:flex;flex-direction:column;align-items:flex-end;min-width:0;flex:1}
.message.is-human .message-content>*{max-width:100%}
.message.is-human .message-meta{flex-direction:row-reverse}
.message.is-human .replyline{max-width:100%}
.message.is-human .replyline:before{display:none}
.message.is-human .message-text{max-width:min(100%,760px);padding:7px 14px;border-radius:12px 4px 12px 12px;background:rgba(var(--k-amber-rgb,224,134,0),.12);text-align:left;overflow-wrap:anywhere}
.message.is-human .message-text:empty{display:none}
.message.is-human .message-actions{right:auto;left:18px}
.message.is-human .reactions{justify-content:flex-end}
.message.is-human.pinned{border-left:0;border-right:2px solid #e2bb70}
.thread-pane .message.is-human .message-actions,.topic-main .message.is-human .message-actions{left:4px}
.compact .message.is-human .message-text{padding:5px 11px}
.message.is-human .message-text img,.message.is-human .msgfile-img{object-position:right}

/* ---- ② 回到最新 ---- */
.chat>.message-scroll>.kmb-jumpwrap{position:sticky;bottom:0;height:0;display:flex;justify-content:center;align-items:flex-start;pointer-events:none;z-index:5}   /* #19903 ④：align-items 默认 stretch 把浮条压成 16px 高、文字溢出像被窗底裁掉 → 用自然高度 */
.kmb-jump{pointer-events:auto;height:auto;flex:none;transform:translateY(calc(-100% - 12px));border-radius:999px;cursor:pointer;border:1px solid var(--k-line,#3a3a44);background:var(--k-bg,#1a1a1e);color:var(--k-ink2,#c3ccd8);font-size:12px;line-height:1;padding:7px 12px;box-shadow:0 6px 18px rgba(var(--k-sh,0,0,0),.28)}
.kmb-jump[hidden]{display:none}
.kmb-jump.is-round{width:36px;height:36px;padding:0;display:inline-flex;align-items:center;justify-content:center}
.kmb-jump.is-round:hover{color:var(--k-ink,#f2f5f9);background:var(--k-hover,#2b2b30)}
.kmb-jump.has-new{background:var(--k-acc,#3B82FF);color:var(--k-on-acc,#fff);border-color:transparent;font-weight:600;white-space:nowrap}
.kmb-jump:focus-visible{outline:none;box-shadow:var(--k-focus,0 0 0 3px rgba(59,130,255,.35))}

/* ---- ③ 正文 markdown（richchat.js ①）：核心 .message-text 是 pre-wrap，渲染出的块级标签放在 .kmb-md 里按普通排版 ---- */
.kmb-md{white-space:normal}
.kmb-md>*:first-child{margin-top:0}.kmb-md>*:last-child{margin-bottom:0}
.kmb-md p{margin:0 0 .55em}
.kmb-md h3,.kmb-md h4,.kmb-md h5,.kmb-md h6{margin:.7em 0 .35em;line-height:1.35;font-weight:700}
.kmb-md h3{font-size:1.12em}.kmb-md h4{font-size:1.05em}.kmb-md h5,.kmb-md h6{font-size:1em}
.kmb-md ul,.kmb-md ol{margin:.2em 0 .6em;padding-left:1.5em}
.kmb-md li{margin:.15em 0}.kmb-md li>input[type=checkbox]{margin:0 .35em 0 -1.2em;vertical-align:middle}
.kmb-md blockquote{margin:.4em 0;padding:.2em .9em;border-left:3px solid var(--k-line,#4a4f63);color:var(--k-ink2,#aeb4c4)}
.kmb-md hr{border:0;border-top:1px solid var(--k-line,#3a3a44);margin:.8em 0}
.kmb-md pre{margin:.45em 0;white-space:pre-wrap;overflow-wrap:anywhere}
.kmb-md pre code{background:none;border:0;padding:0;font-size:12px}
.kmb-md table{border-collapse:collapse;margin:.45em 0;font-size:.93em;max-width:100%;display:block;overflow:auto}
.kmb-md th,.kmb-md td{border:1px solid var(--k-line,#3a3a44);padding:4px 9px;text-align:left;vertical-align:top}
.kmb-md th{background:rgba(127,127,160,.12)}
.kmb-md a{color:var(--k-acc,#6ea8ff);text-decoration:underline;text-underline-offset:2px;overflow-wrap:anywhere}
.kmb-md del{opacity:.7}

/* ---- ④ 会话历史里的卡片行（richchat.js ②） ---- */
.message.is-card .kmb-card{border:1px dashed var(--k-line,#4a4f63);border-radius:10px;padding:8px 12px}
.kmb-card-chip{display:inline-block;font-size:10px;line-height:1;padding:3px 7px;border-radius:999px;background:rgba(59,130,255,.16);color:var(--k-acc,#6ea8ff);margin:0 0 6px;letter-spacing:.04em}

/* ---- ⑤ 单聊流式气泡（richchat.js ③） ---- */
.kmb-live .message-content{min-width:0;flex:1}
.kmb-live-status{font-size:12px;color:var(--k-ink2,#aeb4c4);margin:2px 0 4px}
.kmb-live-status.is-error{color:#f09ca6}
.kmb-live-tools{list-style:none;margin:2px 0 6px;padding:0;display:flex;flex-wrap:wrap;gap:4px 10px;font-size:12px;color:var(--k-ink2,#aeb4c4)}
.kmb-live-tools li{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;background:rgba(127,127,160,.12)}
.kmb-live-tools li.is-done{color:#8fd19e}.kmb-live-tools li.is-error{color:#f09ca6}
.kmb-live-narr{opacity:.92}
.kmb-live.is-done .kmb-live-narr{opacity:.6}
.kmb-live-think{margin-top:6px;font-size:12px;color:var(--k-ink2,#aeb4c4)}
.kmb-live-think summary{cursor:pointer;opacity:.8}
.kmb-live-think pre{max-height:160px;overflow:auto;white-space:pre-wrap;font-size:11px;margin:4px 0 0}
.kmb-spin{display:inline-block;width:10px;height:10px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:kmb-spin .8s linear infinite}
.kmb-cursor{display:inline-block;width:7px;height:1em;vertical-align:-2px;margin-left:2px;background:currentColor;opacity:.7;animation:kmb-blink 1s steps(2) infinite}
@keyframes kmb-spin{to{transform:rotate(360deg)}}
@keyframes kmb-blink{50%{opacity:0}}

/* ---- ⑥ 点名补全（mentions.js）：没有头像的候选（小组 / 全体 / 值班）用一枚字 ---- */
.kmb-mention-chip{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:50%;font-size:12px;background:rgba(127,127,160,.2)}
/* hall-28029：候选不再截 8 条，列表最多半屏高、自己滚动（选中行由 mentions.js 滚进视野） */
.kmb-mention-picker{max-height:min(320px,45vh);overflow-y:auto;overscroll-behavior:contain}

/* ---- ⑦ 平台活动行（forum.js / richchat.js，修士 #19874 第 5 项）：「X 正在忙 / 已转问 Y」在帖子里画成灰字一行 ---- */
.message.is-activity{opacity:.72}
.message.is-activity .message-text{font-size:12.5px;color:var(--k-mute,#9aa0b4);font-style:italic}

/* 贴纸包「夜航纸片」（stickers.js）：图片贴纸 / GIF 动态表情 / 选择器里的分组 */
img.kmb-sticker{display:block;width:160px;height:160px;object-fit:contain;margin:6px 0;filter:drop-shadow(0 6px 10px #0006);background:none}
.motion-display.kmb-motion{width:auto;min-width:200px;padding:0 14px 0 0;background:var(--k-bg2,#0a0d13);border-color:var(--k-line,#2a3350)}   /* 任务 15f6cb6a · 随主题：夜间仍是 #0C1016 一类的深底，亮色皮肤是浅底 */
.motion-display.kmb-motion img{width:115px;height:115px;object-fit:cover;display:block}
.kmb-sticker-pack-h{font-size:11px;letter-spacing:.06em;color:var(--k-mute,#9aa0b4);margin:2px 0 7px}
.kmb-sticker-pack-h small{font-size:10px;opacity:.75;margin-left:6px}
.kmb-sticker-pack-h2{margin-top:12px}
.media-grid.kmb-sticker-grid{grid-template-columns:repeat(4,1fr)}
.media-grid.kmb-sticker-grid button{min-height:96px;background:var(--k-bg2,#0a0d13);border:1px solid var(--k-line,#2a3350);padding:6px;color:var(--k-ink)}
.media-grid.kmb-sticker-grid button:hover{border-color:var(--k-acc,#67e9ff)}
.media-grid.kmb-sticker-grid img{width:72px;height:72px;object-fit:contain;display:block}

/* 发送回执里的服务端说明（seams.noteWarnings → m.warnings）：@ 到不在频道的人、同名歧义等 */
.message .kmb-send-warn{margin:6px 0 2px 0;padding:7px 10px;border-left:3px solid var(--k-amber,#f5a524);background:var(--k-amber-bg,rgba(245,165,36,.12));border-radius:0 8px 8px 0;font-size:12px;line-height:1.55;color:var(--k-amber-ink,#ffd27a)}
.message .kmb-send-warn p{margin:0}
.message .kmb-send-warn p+p{margin-top:4px}
/* 任务 697f2637 · 修士 #20239 ①：说明条在正文列里、贴着气泡下沿；自己的消息（row-reverse）也就在气泡下面，不再独占左边一列 */
.message .message-content>.kmb-send-warn{align-self:stretch;max-width:100%}
/* 设置 › Appearance 的「发送键」一行（backend/compose.js） */
.setting-row.kmb-send-key-row select.field{width:auto;max-width:60%;margin:0}

/* #19903 ④ 字体出界：智能体侧正文与窗口窄时的长串（URL / 哈希 / 无空格长词）也要能折行；标题栏长名字省略号 */
.message .message-text,.message .kmb-md,.message .message-body,.message .text{overflow-wrap:anywhere;min-width:0}
.message{min-width:0}
.kmw-chat .channelhead h1,.kmw-chat .channelhead .topic{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
/* ⑥ 往上翻历史：滚动口顶部一行（大厅 #19974「消息显示不完整」） */
.chat>.message-scroll>.kmb-older{display:flex;justify-content:center;align-items:center;box-sizing:border-box;height:40px;padding:6px 0 0;overflow:hidden}   /* 三种状态同一高度：换状态不挪动下面的内容（#19974 跟进） */
.kmb-older-btn{font:inherit;font-size:12px;color:var(--k-dim,#9aa3b2);background:transparent;border:1px solid var(--k-line,#2e3240);border-radius:999px;padding:4px 12px;cursor:pointer}
.kmb-older-btn:hover{color:var(--k-ink,#f2f5f9);background:var(--k-hover,#2b2b30)}
.kmb-older-note{font-size:12px;color:var(--k-dim,#9aa3b2);padding:4px 0}

/* ---- P0（任务 eee2abd6，receipt.js）：回执行 / 待回应 / 已读环 / 正在输入 / 只看未结 ---- */
.message .kmb-receipt{display:flex;flex-wrap:wrap;align-items:center;gap:2px 6px;margin:4px 0 0;font-size:12px;line-height:1.5;color:var(--k-ink2,#aeb4c4)}
.message .kmb-receipt .kmb-rcpt-dot{opacity:.5}
.message .kmb-receipt .kmb-rcpt-seg{white-space:normal}
.message .kmb-receipt .is-waiting{color:var(--k-amber,#e0a63a)}
.message .kmb-receipt .is-noreply{color:var(--k-amber,#e0a63a)}
.message .kmb-receipt .is-unwoken{color:#f09ca6}
.message .kmb-receipt .is-taken{color:#8fd19e}
.message .kmb-receipt .is-settled{color:var(--k-ink2,#aeb4c4)}
.message .kmb-receipt a.is-reply{color:var(--k-acc,#6ea8ff);text-decoration:none}
.message .kmb-receipt a.is-reply:hover{text-decoration:underline}
.message .kmb-receipt button.is-relay{font:inherit;font-size:12px;line-height:1.4;padding:0 8px;border:1px solid rgba(110,168,255,.45);border-radius:999px;background:rgba(59,130,255,.12);color:var(--k-acc,#6ea8ff);cursor:pointer}
.message .kmb-receipt button.is-relay:disabled{opacity:.5;cursor:default}
.message .kmb-awaiting{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;font-size:10px;line-height:1.5;letter-spacing:.04em;background:rgba(224,166,58,.16);color:var(--k-amber,#e0a63a);vertical-align:middle}
#message-list.kmb-only-open>article.message:not(.is-awaiting){display:none}
#message-list.kmb-only-open:not(:has(article.is-awaiting))::after{content:'这个频道没有待回应的消息。';display:block;padding:24px 16px;text-align:center;font-size:13px;color:var(--k-ink2,#aeb4c4)}
/* 已读环：圆环 + 悬停文字；点开两栏名单 */
.message .kmb-ring{position:relative;display:inline-flex;align-items:center;gap:4px;cursor:pointer;color:var(--k-ink2,#aeb4c4)}
.message .kmb-ring svg{display:block;flex:none}
.message .kmb-ring .kmb-ring-track{fill:none;stroke:currentColor;stroke-opacity:.35;stroke-width:1.5}
.message .kmb-ring .kmb-ring-pie{fill:var(--k-acc,#6ea8ff)}
.message .kmb-ring .kmb-ring-full{fill:var(--k-acc,#6ea8ff)}
.message .kmb-ring.is-all{color:var(--k-acc,#6ea8ff)}
.message .kmb-ring .kmb-ring-text{font-size:12px}
/* 频道 #31457（zzp 截图）：名单继承了主人气泡 .kmb-receipt 的 text-align:right，长名字（合作频道里对方组员的小字是「小组#主人」）
   在 nowrap 下往左溢出，而列的 overflow:auto 滚不到负方向 → 名字开头被裁掉、各行参差。改法：卡内左对齐；两列按内容分宽（flex:auto）、
   只纵向滚；每项「名字 + 小字」同一行，放不下时先省略小字（小字收缩、名字不收缩），名字只在自己就超过列宽时按 max-width 省略；
   不再横向溢出；全名在 title 里。 */
.message .kmb-readlist{position:absolute;left:0;bottom:calc(100% + 6px);z-index:30;display:flex;gap:14px;min-width:200px;max-width:min(440px,80vw);padding:10px 12px;border-radius:10px;background:var(--k-bg,#1d2130);border:1px solid var(--k-line,rgba(255,255,255,.08));box-shadow:0 8px 24px rgba(var(--k-sh,0,0,0),.28);font-size:12px;line-height:1.4;color:var(--k-ink,#e6e9f2);cursor:default;text-align:left}
html[data-theme=night] .message .kmb-readlist{background:#1d2130;border-color:rgba(255,255,255,.08)}   /* 任务 15f6cb6a（道哥 #26164 截图 ①）：原来写死的 --k-panel 不存在，亮色皮肤里也落成深底 + 深字；现在底 / 线 / 影随主题，夜间保持原样 */
.message .kmb-readlist>div{display:flex;flex-direction:column;gap:4px;flex:1 1 auto;min-width:72px;max-height:var(--kmb-rl-colh,220px);overflow-x:hidden;overflow-y:auto}   /* 频道 #31893：聊天区比卡片矮时 receipt.js fitList 按滚动区内高写 --kmb-rl-colh */
.message .kmb-readlist b{font-weight:600;color:var(--k-ink2,#aeb4c4);margin-bottom:2px;white-space:nowrap}
.message .kmb-readlist span{display:flex;align-items:baseline;gap:4px;min-width:0;white-space:nowrap}
.message .kmb-readlist em{font-style:normal;flex:none;max-width:calc(100% - 1.5em - 4px);overflow:hidden;text-overflow:ellipsis}
.message .kmb-readlist em:only-child{max-width:100%}
.message .kmb-readlist small{flex:0 1 auto;min-width:1.5em;overflow:hidden;text-overflow:ellipsis;color:var(--k-ink2,#aeb4c4)}
.message .kmb-readlist i{color:var(--k-ink2,#aeb4c4)}
/* 正在输入：列表底一行 */
.kmb-typing-row{display:flex;align-items:center;gap:8px;padding:4px 16px 8px 72px;font-size:12px;color:var(--k-ink2,#aeb4c4)}
.kmb-typing-dots{display:inline-flex;gap:3px;align-items:center}
.kmb-typing-dots b{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.4;animation:kmb-typing 1.2s infinite ease-in-out}
.kmb-typing-dots b:nth-child(2){animation-delay:.2s}.kmb-typing-dots b:nth-child(3){animation-delay:.4s}
@keyframes kmb-typing{0%,80%,100%{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}
@media (max-width:760px){.kmb-typing-row{padding-left:16px}}
/* 「要人回」开关（composer 工具区）与「只看未结」（频道头） */
.compose-tools button.kmb-expects{width:auto;min-width:max-content;white-space:nowrap;padding:0 8px;font-size:11px;font-weight:600;letter-spacing:.02em;border-radius:999px;color:var(--k-ink2,#aeb4c4)}
.compose-tools button.kmb-expects.is-on{background:rgba(224,166,58,.18);color:var(--k-amber,#e0a63a)}
@media (max-width:760px){.compose-tools button.kmb-expects{display:inline-flex}}
.message.is-human .kmb-receipt{justify-content:flex-end;text-align:right}
.message.is-human .kmb-readlist{left:auto;right:0}
.channelhead .toolbar .kmb-only-open{position:relative}
.channelhead .toolbar .kmb-only-open.is-on{background:rgba(224,166,58,.18);color:var(--k-amber,#e0a63a)}
.channelhead .toolbar .kmb-only-open .kmb-open-count{position:absolute;right:1px;top:1px;min-width:14px;height:14px;padding:0 3px;border-radius:7px;font-size:9px;line-height:14px;text-align:center;background:var(--k-amber,#e0a63a);color:#1b1b1b;font-weight:700}
.channelhead .toolbar .kmb-only-open .kmb-open-count:empty{display:none}

/* ---- P1 / P2 流内卡（cards.js）：辩论 / 接龙 / 对象卡 / 交付气泡 / 仪式锚 / 代贴标识 / 进度 ---- */
.kmb-hcard { margin: 8px 0 2px; padding: 10px 12px; border-radius: 12px; border: 1px solid var(--line, rgba(255, 255, 255, .1)); background: var(--panel-2, rgba(255, 255, 255, .04)); font-size: 13px; line-height: 1.45; max-width: 520px; }
.message.is-human .kmb-hcard { margin-left: auto; }
.kmb-hcard-head { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.kmb-hcard-icon { font-size: 14px; }
.kmb-hcard-kind { font-size: 11px; letter-spacing: .04em; opacity: .7; }
.kmb-hcard-title { flex: 1 1 100%; font-weight: 600; margin-top: 2px; word-break: break-word; }
.kmb-hcard-sub { margin-top: 4px; font-size: 12px; opacity: .8; word-break: break-word; }
.kmb-hcard-sub.is-bad { color: var(--k-danger, #ff7a6e); opacity: 1; }
.kmb-hcard-pill { display: inline-flex; align-items: center; padding: 1px 7px; border-radius: 999px; font-size: 11px; line-height: 16px; background: rgba(255, 255, 255, .08); white-space: nowrap; }
.kmb-hcard-pill.is-ok { background: rgba(92, 200, 255, .16); color: var(--k-ok, #5cc8ff); }
.kmb-hcard-pill.is-wait { background: rgba(255, 196, 92, .16); color: var(--k-warn, #ffc45c); }
.kmb-hcard-pill.is-bad { background: rgba(255, 122, 110, .16); color: var(--k-danger, #ff7a6e); }
.kmb-hcard-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.kmb-hcard-btn { appearance: none; border: 1px solid var(--line, rgba(255, 255, 255, .14)); background: transparent; color: inherit; border-radius: 8px; padding: 4px 10px; font: inherit; font-size: 12px; cursor: pointer; }
.kmb-hcard-btn.is-primary { background: var(--accent, #5cc8ff); color: #08121a; border-color: transparent; }
.kmb-hcard-btn.is-danger { color: var(--k-danger, #ff7a6e); border-color: rgba(255, 122, 110, .4); }
.kmb-hcard-btn.is-small { padding: 2px 8px; font-size: 11px; }
.kmb-hcard-btn:disabled { opacity: .5; cursor: default; }
/* 辩论 */
.kmb-rounds { display: flex; gap: 4px; margin-top: 8px; }
.kmb-rounds i { font-style: normal; font-size: 11px; padding: 1px 6px; border-radius: 6px; border: 1px solid var(--line, rgba(255, 255, 255, .14)); opacity: .6; }
.kmb-rounds i.is-done { opacity: 1; background: rgba(92, 200, 255, .14); border-color: transparent; }
.kmb-rounds i.is-now { opacity: 1; border-color: var(--accent, #5cc8ff); color: var(--accent, #5cc8ff); }
.kmb-debate-people { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.kmb-debate-chip { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; padding: 2px 8px; border-radius: 999px; background: rgba(255, 255, 255, .06); }
.kmb-debate-chip b { font-weight: 600; }
.kmb-debate-chip small { font-size: 10px; opacity: .7; margin-left: 2px; }
.kmb-debate-chip.is-spoken b { color: var(--k-ok, #5cc8ff); }
.kmb-debate-chip.is-passed b, .kmb-debate-chip.is-skipped b, .kmb-debate-chip.is-observer { opacity: .6; }
.kmb-debate-chip.is-waiting b { color: var(--k-warn, #ffc45c); }
.kmb-debate.is-archived, .kmb-debate.is-stopped { opacity: .72; }
.kmb-debate-summary { white-space: pre-wrap; }
.kmb-debate-tasks { margin-top: 8px; padding-top: 6px; border-top: 1px dashed var(--line, rgba(255, 255, 255, .12)); font-size: 12px; }
.kmb-debate-tasks-head { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.kmb-debate-tasks-list { list-style: none; margin: 6px 0 0; padding: 0; display: flex; flex-direction: column; gap: 5px; }
.kmb-debate-task-row { display: flex; align-items: center; gap: 6px; padding: 4px 6px; border-radius: 8px; background: rgba(255, 255, 255, .04); }
.kmb-debate-task-title { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 500; }
.kmb-debate-task-who { font-size: 11px; opacity: .75; white-space: nowrap; }
.kmb-debate-task-note { font-size: 11px; opacity: .75; margin: 2px 0 0 6px; word-break: break-word; }
.kmb-debate-sections { margin: 6px 0 0; padding: 6px 8px; border-radius: 8px; background: rgba(255, 255, 255, .03); font-size: 12px; }
.kmb-debate-sections dt { font-weight: 600; color: var(--k-ok, #5cc8ff); margin-top: 4px; }
.kmb-debate-sections dt:first-child { margin-top: 0; }
.kmb-debate-sections dd { margin: 2px 0 0 10px; word-break: break-word; }
.kmb-debate-report .kmb-hcard-body { margin-top: 6px; font-size: 12px; opacity: .88; white-space: pre-wrap; word-break: break-word; }
.kmb-dispatch-existing { margin: 0 0 10px; padding: 8px 10px; border-radius: 8px; background: rgba(255, 255, 255, .04); font-size: 12px; }
.kmb-dispatch-existing ul { margin: 4px 0 0; padding-left: 16px; }
.kmb-dispatch-checks { margin: 0 0 10px; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--line, rgba(255, 255, 255, .12)); font-size: 12px; display: flex; flex-direction: column; gap: 4px; max-height: 150px; overflow: auto; }
.kmb-dispatch-check { display: flex; align-items: flex-start; gap: 6px; cursor: pointer; line-height: 1.4; }
.thread-pane .kmb-hcard { max-width: none; }
/* 接龙 */
.kmb-claim-items { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.kmb-claim-item { display: flex; align-items: center; gap: 6px; font-size: 12px; padding: 4px 6px; border-radius: 8px; background: rgba(255, 255, 255, .03); }
.kmb-claim-item i { font-style: normal; width: 14px; text-align: center; opacity: .7; }
.kmb-claim-item.is-taken i { color: var(--k-ok, #5cc8ff); opacity: 1; }
.kmb-claim-item.is-mine { background: rgba(92, 200, 255, .1); }
.kmb-claim-idx { opacity: .6; }
.kmb-claim-text { flex: 1 1 auto; word-break: break-word; }
.kmb-claim-state { font-size: 11px; opacity: .7; white-space: nowrap; }
.kmb-claim.is-closed .kmb-claim-item { opacity: .75; }
.compose-tools button.kmb-claim-new { width: auto; min-width: max-content; padding: 0 8px; white-space: nowrap; font-size: 12px; }
/* 交付气泡 / 代贴标识 / 进度 / 仪式锚 */
.kmb-delivery { margin: 6px 0 2px; padding: 6px 10px; border-radius: 10px; border: 1px dashed var(--line, rgba(255, 255, 255, .14)); font-size: 12px; }
.kmb-delivery .kmb-hcard-head { gap: 8px; }
.kmb-delivery-foreign { opacity: .7; }
/* 任务 7748595c：人话 + 关联对象号（hall_post about=）→ 正文下一枚芯片 + 「查看」，消息本身不是卡（经典视图 objectAttach 同口径） */
.kmb-about { display: inline-flex; align-items: center; gap: 6px; margin: 4px 0 2px; font-size: 12px; }
.kmb-about .kmb-about-chip { display: inline-flex; align-items: center; gap: 4px; padding: 1px 8px; border-radius: 999px; font-size: 11px; line-height: 18px; background: rgba(127, 127, 127, .16); color: var(--secondary, #b1b8c2); max-width: 60vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kmb-proxy { display: inline-block; margin-left: 6px; padding: 0 6px; border-radius: 999px; font-size: 10px; line-height: 16px; vertical-align: middle; background: rgba(255, 255, 255, .08); opacity: .8; }
.kmb-proxy.is-notice { background: rgba(255, 196, 92, .16); color: var(--k-warn, #ffc45c); opacity: 1; }
.kmb-progress { margin-top: 6px; padding: 4px 8px; border-left: 2px solid var(--accent, #5cc8ff); font-size: 12px; opacity: .85; }
.kmb-progress b { font-weight: 600; margin-right: 6px; }
.kmb-progress small { display: block; opacity: .7; font-size: 11px; margin-top: 2px; }
.kmb-ritual-line { display: flex; align-items: center; gap: 8px; font-size: 11px; letter-spacing: .04em; opacity: .75; margin-bottom: 4px; }
.kmb-ritual-line::before, .kmb-ritual-line::after { content: ''; flex: 1 1 auto; height: 1px; background: var(--line, rgba(255, 255, 255, .14)); }
.message.is-ritual-anchor .message-text { text-align: center; opacity: .85; }
@media (max-width: 640px) { .kmb-hcard { max-width: none; } .kmb-claim-state { white-space: normal; } }

/* ---- ⑪ 时间戳相对日期 + 跨天日期分隔条 + 长按看完整时间（when.js，道哥 #20538 / 派单 425fecc1） ---- */
.chat .message-scroll>.date:not(.kmb-daysep){display:none}   /* 核心 chatView 写死的「October 28, 2026」样板日期：真日期由 when.js 按天插 */
.kmb-daysep{margin:0 18px 10px;padding-top:14px;white-space:nowrap}   /* 上间距用 padding：margin 会与 #message-list 折叠，贴底 / ResizeObserver 量不到 */
.kmb-daysep+.lc-unread-divider{margin-top:0}
#pane-messages>.kmb-daysep,#topic-replies>.kmb-daysep{margin:0 8px 6px;padding-top:10px}
.message-meta time.time{cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
.kmb-timetip{position:fixed;z-index:60;max-width:min(92vw,360px);padding:6px 10px;border-radius:8px;font-size:12px;line-height:1.4;color:var(--k-ink,#f2f5f9);background:var(--k-bg,#10141c);border:1px solid var(--k-line,rgba(190,210,240,.15));box-shadow:0 6px 24px rgba(0,0,0,.28);pointer-events:none;white-space:nowrap}
.kmb-timetip[hidden]{display:none}

/* ---- ⑫ 消息复制 + 圈选不丢（copy.js，任务 09e923c0，道哥 #23617 ①） ---- */
.message-actions .kmb-copy.is-done{color:var(--k-acc,#3370ff)}
/* 触屏（iPad）面板视图：panel.css 给整条消息 user-select:none（V14 长按出菜单、不选字）；正文一列放开——能选、能复制。长按落在正文上
   交给系统选字 / 复制（copy.js 拦下合成的 contextmenu），长按消息别处仍是 Hikos 的消息菜单 */
@media (hover:none){body:not(.km-u) article.message .message-text,body:not(.km-u) article.message .message-text *{-webkit-touch-callout:default;-webkit-user-select:text;user-select:text}}

/* ---- ⑬ 输入框打字时不画彩色框（任务 01a1cfd9，泽儒）：各皮肤给 textarea:focus-visible 配了 outline / box-shadow（红、金、蓝不等，
   有的带 !important），落在聊天输入区里就是文字区外一圈色框。输入区外框本身已经说明「在这儿打字」，文字区不再另画；
   选择器带 html[data-theme] + [data-composer] 压过皮肤的 :skin 规则（html[data-skin][data-theme] …），别的表单字段的键盘焦点不受影响 ---- */
html[data-theme] body [data-composer] textarea[rows]:is(:focus, :focus-visible),
html[data-skin][data-theme] body [data-composer] textarea[rows]:is(:focus, :focus-visible) { outline: none !important; box-shadow: none !important; }
/* 任务 def5f997 · 蓝图分享（src/backend/bpshare.js）：消息正文里的分享码画成一枚芯片——图标 · 蓝图名 / 几件几处连接 · 放进架子 · 复制。
   跟着正文走（行内块，窄屏自己换行），颜色用主题色的淡底，不压过消息本身；解不开的码只是一段灰色的等宽字。 */
.kmb-bp-chip{display:inline-flex;align-items:center;gap:8px;max-width:100%;margin:4px 0;padding:6px 8px 6px 6px;border:1px solid color-mix(in srgb,var(--k-acc,#3370ff) 28%,transparent);border-radius:10px;background:color-mix(in srgb,var(--k-acc,#3370ff) 7%,transparent);vertical-align:middle;white-space:normal}
.kmb-bp-chip .kmb-bp-ic{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:7px;color:var(--k-acc,#3370ff);background:color-mix(in srgb,var(--k-acc,#3370ff) 14%,transparent)}
.kmb-bp-chip .kmb-bp-t{display:flex;flex-direction:column;min-width:0;line-height:1.25}
.kmb-bp-chip .kmb-bp-t b{font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmb-bp-chip .kmb-bp-t small{font-size:11.5px;opacity:.72;white-space:nowrap}
.kmb-bp-chip .kmb-bp-btn{flex:none;display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 9px;border:1px solid color-mix(in srgb,var(--k-acc,#3370ff) 35%,transparent);border-radius:7px;background:transparent;color:var(--k-acc,#3370ff);font:600 12px/1 inherit;cursor:pointer}
.kmb-bp-chip .kmb-bp-btn.is-primary{background:var(--k-acc,#3370ff);border-color:var(--k-acc,#3370ff);color:#fff}
.kmb-bp-chip .kmb-bp-btn.is-primary.is-done{opacity:.6}
.kmb-bp-chip .kmb-bp-btn:focus-visible{outline:2px solid var(--k-acc,#3370ff);outline-offset:1px}
code.kmb-bp-bad{opacity:.6;word-break:break-all}
.kmb-bp-share .kmb-bp-warn{color:#c2410c}

/* ==== src/backend/tidy.css ==== */
/* Hikos · 界面整理（任务 ba5f74f3，大厅 #20409）。只改显示位置；按钮都还在 DOM 里（处理函数 / data-action / 选择器不变）。
   回滚：从 index.html 去掉这一行和 tidy.js。 */

/* ① 聊天头只留 搜索 + ⋯（V26）：这几颗按钮收进 ⋯ 菜单（tidy.js → KM.ctx.roomExtra）。
   kmb-sessions 这颗 2026-11-10 起（道哥直聊，任务 01a1c4a1）在面板视图另有一颗看得见的文字钮在功能条「资料」旁（m8_team.js，.kmb-sessions-chip）；头部这颗照旧藏着给 ⋯ / 宇宙界面用 */
html.kmb-tidy .channelhead .toolbar [data-action="kmb-ch-open"],
html.kmb-tidy .channelhead .toolbar [data-action="publish-update"],
html.kmb-tidy .channelhead .toolbar [data-action="kmb-collab-open"],
html.kmb-tidy .channelhead .toolbar [data-action="kmb-sessions"],
html.kmb-tidy .channelhead .toolbar [data-action="kmb-mbox-dm-open"],
html.kmb-tidy .channelhead .toolbar [data-action="kmb-mbox-plugins"],
html.kmb-tidy .channelhead .kmb-search-btn[data-action="kmb-search-open"],
/* 星球类型 / 模块设置（论坛 / 语音 / 星球模块）：是设置不是日常操作，同样收进 ⋯（主持的合作星球才有） */
html.kmb-tidy .channelhead .toolbar [data-action="kmb-forum-settings"],
html.kmb-tidy .channelhead .toolbar [data-action="kmb-voice-settings"],
html.kmb-tidy .channelhead .toolbar [data-action="kmb-module-settings"] { display: none !important; }

/* ⑦ 触屏软键盘弹出时（可编辑控件聚焦且缩窄 ≥ 140px；iPad 外接键盘快捷输入条不压矮整页，大厅 #25682）：页面高度跟可视视口走，输入区贴着软键盘、下方不留空白（tidy.js 写 --kmb-vvh） */
html.kmb-tidy.kmb-kbd .app { height: var(--kmb-vvh, 100dvh) !important; }
/* ▤ 论坛视图（任务 8d74edb3）：宇宙界面的聊天窗里 开着时留在头部（一眼看出现在是论坛视图、点一下回聊天），关着时收进 ⋯；
   面板视图里它是高频操作，一直在搜索框右侧（⑮，任务 7e17fd57） */
html.kmb-tidy body.km-u .channelhead .toolbar [data-action="kmb-topics-view"]:not([aria-pressed="true"]) { display: none !important; }
/* ⏳ 只看未结（7e17fd57 ③，道哥 #28096「移入 ⋯」）：彻底收进 ⋯，开着关着都不占头部；⋯ 里那项带「开」/ 待回应计数（再点取消）；
   开着时 ⋯ 钮点成琥珀色（和原钮 .is-on 同色）提示有筛选在生效 */
html.kmb-tidy .channelhead .toolbar [data-action="kmb-only-open"] { display: none !important; }
html.kmb-tidy .channelhead .toolbar:has([data-action="kmb-only-open"]:is(.is-on, [aria-pressed="true"])) [data-action="lc-room-menu"] { color: var(--k-amber, #e0a63a); }

/* ⑮ 星球头部紧凑化（任务 7e17fd57，道哥 #28096 ③；面板视图）：
   · 新建智能体 / 派驻智能体 从功能条挪到「话题」旁（tidy.js headCompact 挪的是同一颗按钮）；功能条只剩「更多」时整条收起（更多 并进 ⋯）
   · 搜索框右侧依次：资产库 · 论坛视图 · 成员列表 · ⋯（order；核心 kmind.css 把 成员列表 藏了，这里按面板视图的星球头放出来） */
html.kmb-tidy body:not(.km-u) .workspace .km-strip [data-action="km-more"] { display: none !important; }
html.kmb-tidy body:not(.km-u) .workspace .km-strip:not(:has(> :not([data-action="km-more"]))) { display: none !important; }
html.kmb-tidy .channelhead .kmb-head-primary { flex: none; margin-left: 4px; height: 24px; }
html.kmb-tidy body.km-u .channelhead .kmb-head-primary { display: none !important; }
html.kmb-tidy body:not(.km-u) .channelhead.kmb-head-planet .toolbar [data-action="members"],
html.kmb-tidy body:not(.km-u) .channelhead.kmb-head-planet .toolbar [data-action="kmb-topics-view"] { display: inline-flex !important; }
html.kmb-tidy body.km-u .channelhead .toolbar [data-action="kmb-assets"] { display: none !important; }
html.kmb-tidy .channelhead .toolbar [data-action="kmb-assets"] { order: 1; }
html.kmb-tidy .channelhead .toolbar [data-action="kmb-topics-view"] { order: 2; }
html.kmb-tidy .channelhead .toolbar [data-action="members"] { order: 3; }
html.kmb-tidy .channelhead .toolbar [data-action="lc-room-menu"] { order: 4; }
html.kmb-tidy .channelhead .toolbar [data-action="kmb-topics-view"][aria-pressed="true"] { color: var(--k-acc, #3b82ff); }
@media (max-width: 700px) { html.kmb-tidy .channelhead .kmb-head-primary { padding: 0 6px; } }
/* ⑯ 手机上的星球头（任务 5e580d78，修士 HikosUI #30689 ①；设计口径 A）：头部只常驻 ☰（导航）· 频道名（可收缩，放不下以 … 结尾：核心 ≤700px 的 h1 规则）· ⋯（更多），
   其余——新建智能体 / 派驻智能体、高级搜索、资产库、论坛视图、成员列表——收进 ⋯。按钮都还在 DOM 里，⋯ 按它们看不看得见来列：
   成员列表 / 高级搜索…（src/kmind/ctx.js）、论坛视图（tidy.js ROWS 的 headShows）、资产库（assetlib.js）、新建智能体… / 派驻智能体…（tidy.js ⑯）。
   原因：⑮ 之后头部是 主按钮 + 五颗图标钮，窄于 400px 时比工作区还宽、把整页横向撑宽（Chromium 的手机模拟里量到的：排版视口跟着变大，360×640 报成 401×712，
   贴着它下沿的新手教程第一张卡片于是落到屏幕下沿之外、按钮点不到；真机没有量过），再宽一些不撑宽、但频道名只剩 0–12px。白名单写法（工具栏里除了 ⋯ 都收）：以后别的模块往头部加钮，手机上也不会再撑宽。
   门槛 480px = 核心 / panel.css 里「a phone」那一档（竖屏手机，含 440 / 448 宽的大屏机）；验收口径「窄于 400px」在其内。改门槛只改这一个数。 */
@media (max-width: 480px) {
  html.kmb-tidy body:not(.km-u) .workspace .channelhead.kmb-head-planet > .kmb-head-primary,
  html.kmb-tidy body:not(.km-u) .workspace .channelhead.kmb-head-planet > .toolbar > :not([data-action="lc-room-menu"]) { display: none !important; }
}
/* ④（7e17fd57）私聊的 会话 是高频操作：宇宙界面的聊天窗没有功能条（universe.css 藏 .km-strip），头部这颗露出来放搜索框右侧；面板视图仍是功能条上的文字钮（01a1c4a1） */
html.kmb-tidy body.km-u .channelhead .toolbar [data-action="kmb-sessions"] { display: inline-flex !important; order: 1; }

/* ② 面板视图顶栏：资产库 图标收起（侧栏「母星资产库」行 / 更多 ▾ / 母星右键 已有三个入口） */
html.kmb-tidy .titlebar .tright [data-action="kmb-view"][data-id="kmb-hub"] { display: none !important; }

/* ③ 宇宙界面停靠栏：站内信 / 工作台（tidy.js 插在 私信 右边） */
html.kmb-tidy #kmu-dock .kmb-dock-view .kmu-badge,
html.kmb-tidy #kmu-dock .kmu-dock-more .kmu-badge { position: absolute; top: 0; right: 4px; }
html.kmb-tidy #kmu-dock .kmb-dock-view.on { color: var(--k-acc); }

/* ⑥ 跳转（Ctrl+K）里 snapshot 垫位用的空人「—」不列出来 */
html.kmb-tidy #dialog [data-action="dm-person"][data-id="0"],
html.kmb-tidy #dialog [data-action="dm-person"][data-id="1"],
html.kmb-tidy #dialog [data-action="dm-person"][data-id="2"],
html.kmb-tidy #dialog [data-action="dm-person"][data-id="3"] { display: none !important; }

/* ⑧ 进入城市（道哥 #20501，任务 fa7f6224）：贴在 3D 母星表面的按钮，和 穿行（#km-flight-toggle，src/addons/flight.css 第 2 行 + 第 336–337 行的最终值）同一副样子：
   同字体 / 字号 / 字重 / 墨色、同文字投影、图标同 --k-ok 色、悬停同下划线；球面上的贴板在 tidy.js（五片纸板，同 flight.js buildLaunchTile） */
#kmb-city-toggle[hidden] { display: none !important; }
#kmb-city-toggle { position: absolute; z-index: 10; transform: translate(-50%, -50%); display: flex; align-items: center; gap: 4px; padding: 9px 8px; border: 0; background: transparent; color: var(--k-ink, #F2F5F9); font: 600 12.5px "Inter Tight", "Plex SC", -apple-system, "PingFang SC", sans-serif; text-shadow: 0 1px 3px #050610, 0 0 5px #050610; cursor: pointer; }
#kmb-city-toggle svg { color: var(--k-ok, #5CC8FF); flex: none; }
#kmb-city-toggle:is(:hover, :focus-visible) span { text-decoration: underline; text-underline-offset: 5px; text-decoration-color: #94a9ed; }
@media (pointer: coarse) { #kmb-city-toggle { min-height: 44px; } }

/* ---- 以下为 V38 待拍板清单的裁定（主人大厅 #20768，任务 53707679；清单见任务 ba5f74f3 的 03） ---- */

/* ⑨ 03.1（b）：接龙 / 要人回 两个文字钮收进「卡片」菜单（tidy.js ⑨ 给 #km-card-menu 补两项），输入区只剩图标钮（附件 / 卡片 / 表情）。
   原按钮仍在 DOM 里，菜单项点的是它们。要人回 开着时照样露面（状态可见、再点取消）；
   没有 卡片 钮的输入区（这里没有可发卡片的组员）没地方放菜单，两颗钮原样显示。 */
html.kmb-tidy .compose-tools:has([data-km-card-new]) .kmb-claim-new,
html.kmb-tidy .compose-tools:has([data-km-card-new]) .kmb-expects:not(.is-on) { display: none !important; }
#km-card-menu .kmb-card-sep { margin-top: 4px; border-top: 1px solid var(--k-line, rgba(127, 127, 127, .18)); padding-top: 8px; }
#km-card-menu [data-via] .kmb-card-on { margin-left: auto; font: 500 10px/1 var(--k-mono, ui-monospace, monospace); letter-spacing: .08em; color: var(--k-acc, #3b82ff); }

/* ⑩ 03.5（b）：「Enter 发送 · Shift+Enter 换行」只在首次 / 切换发送键后 10 秒显示（tidy.js ⑩ 加 kmb-hint-on）；核心的 .typing 元素一直在 DOM */
html.kmb-tidy .composer-wrap .typing:not(.kmb-hint-on) { display: none !important; }

/* ⑪ 03.7（b）：好友页头部的 外部联系人 tab 只留 站内信 › 联系人 一处（m4_mail.js X.open('contacts')）；复制（我的编号）钮留在 个人资料卡 / 设置 › 资料 / 加好友 页，不再占好友页头部 */
html.kmb-tidy .friendtabs [data-action="kmb-mail-contacts"],
html.kmb-tidy .channelhead > .kmb-me-chip { display: none !important; }

/* ⑫ 03.11（a）：更多 ▾ / 星球条 里 资产库 的「n/n」角标不显示（远端整页替换后计数来自本机示例，恒为 0/0）。knowhub.css 第 62 行已按 data-kmb 隐藏；这里按裁定再钉一遍，不随那边变 */
html.kmb-tidy [data-action="km-hub"] b { display: none !important; }

/* ⑬ 03.6（c）：「向组长折叠组员」从智能体右键菜单移到 分组 控件旁（fold.js 画按钮 / 菜单）：动态面板里和 单击私信 同款胶囊；面板视图侧栏里和 分组 同款小钮 */
.km-ow-tools .kmb-fold-tool b { font: 600 10.5px/1 var(--k-mono, ui-monospace, monospace); margin-left: 1px; }
.km-side-tool.kmb-fold-tool.on { color: var(--k-acc, #3b82ff); }
/* 任务 55485ac8：私信「智能体」组头排序钮旁边的「折叠组员」钮——有小组折着时亮着、不用悬停也看得见（平时和排序钮一样悬停才出现） */
.km-dmg-tool.kmb-fold-tool.on, .kmu-dmg-tool.kmb-fold-tool.on { opacity: 1; color: var(--k-acc, #3b82ff); }
/* ⑭ 03.9（b）：城里「在资产库查看」落到 资产库 页的那一行：滚到眼前并亮一下（2.4 秒淡掉），键盘焦点也在它上面 */
.kmb-hub .kmb-node.kmb-hub-here { animation: kmb-hub-here 2.4s ease-out forwards; border-radius: 8px; }
@keyframes kmb-hub-here { 0%, 40% { background: rgba(var(--k-acc-rgb, 59, 130, 255), .22); box-shadow: inset 0 0 0 1px rgba(var(--k-acc-rgb, 59, 130, 255), .6); } 100% { background: transparent; box-shadow: none; } }

/* ==== src/backend/msgctx.css ==== */
/* Hikos · 自己 / 他人的气泡颜色（src/backend/msgctx.js；修士 HikosUI #26777）。没设的保持皮肤原样（chat.css ①：真人靠右、琥珀气泡）。
   他人的底色也给智能体的消息画上气泡（平时智能体靠左、不带气泡）。 */
html[data-kmb-self-bg] .message.kmb-self .message-text{background:var(--kmb-self-bg)}
html[data-kmb-self-fg] .message.kmb-self .message-text{color:var(--kmb-self-fg)}
html[data-kmb-other-bg] .message.is-human:not(.kmb-self) .message-text{background:var(--kmb-other-bg)}
html[data-kmb-other-bg] .message.is-agent .message-text{background:var(--kmb-other-bg);padding:7px 14px;border-radius:4px 12px 12px 12px;width:fit-content;max-width:min(100%,760px)}
html[data-kmb-other-fg] .message:not(.kmb-self):not(.is-system) .message-text{color:var(--kmb-other-fg)}
html[data-kmb-other-bg] .message .message-text:empty{display:none}
.kmb-bub{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:6px}
.kmb-bub-g{display:flex;flex-direction:column;gap:10px;margin:0;padding:12px 14px;border:1px solid var(--line,rgba(127,127,127,.25));border-radius:12px}
.kmb-bub-g legend{padding:0 6px;font-weight:600}
.kmb-bub-g label{display:flex;align-items:center;justify-content:space-between;gap:10px}
.kmb-bub-g input[type=color]{width:44px;height:28px;padding:0;border:0;background:none;cursor:pointer}
.kmb-bub-g input[type=color][data-unset]{opacity:.45}
.kmb-bub-g[data-focus]{border-color:var(--accent,#e08600);box-shadow:0 0 0 1px var(--accent,#e08600)}

/* ==== src/backend/memberbar.css ==== */
/* Hikos · 成员栏：忙碌效果的颜色 + 隐藏离线成员（src/backend/memberbar.js；修士 HikosUI #26641）。
   工作进度外框（kmind.css .km-wk，V34）在成员栏里不按小组上色，统一用你在成员栏空白处右键设的颜色：默认黑色。
   黑色在深色皮肤上看不见，外框下垫一圈浅色光；小组颜色 = 不覆盖（回到 --km-g）。 */
html[data-kmb-busy=black] .members .km-agent{--wkc:#000}
html[data-kmb-busy=black]:not([data-theme=day]) .members .km-agent>.km-wk{filter:drop-shadow(0 0 1.4px rgba(255,255,255,.75)) drop-shadow(0 0 4px rgba(255,255,255,.35))}
html[data-kmb-busy=set] .members .km-agent{--wkc:var(--kmb-busy-c,#000)}
html[data-kmb-busy=accent] .members .km-agent{--wkc:var(--cz-acc,var(--k-acc,#3B82FF))}
html[data-kmb-mem-hide-off] .members .member.offline,
html[data-kmb-mem-hide-off] .members .memberheading.kmb-mem-offhead{display:none}

/* ==== src/backend/m.css ==== */
/* Hikos · M 系列（任务 21f057a7「缺口迁移 M1–M9」）共用样式：整页视图 / 右侧抽屉 / 页签 / 表格 / 状态片 / 键值 / 空态。
   只用核心与 KMind 已有的变量（--text --muted --line --panel --surface --brand --hover / --k-acc --k-ok --k-amber --k-danger），
   白昼 / 夜间自动跟随。远端模式才加载（index.html 与 remote.css 同一处）。 */

/* ---- 整页 ---- */
.kmb-page { padding: 16px 20px 32px; overflow: auto; flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 14px; }
.kmb-page h2 { font-size: 15px; margin: 0 0 6px; }
.kmb-head-ic { color: #8a8c9b; display: flex; }
.kmb-head .toolbar .kmb-head-sel { height: 28px; font-size: 12px; min-width: 120px; max-width: 180px; padding: 0 8px; }
.kmb-stack { display: flex; flex-direction: column; gap: 8px; }
.kmb-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.kmb-row.right { justify-content: flex-end; }
.kmb-grow { flex: 1; min-width: 0; }
.kmb-muted { color: var(--muted, #7c8798); font-size: 12px; }
.kmb-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kmb-metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; }
.kmb-metric { background: var(--surface, #161a20); border: 1px solid var(--line, #1a2028); border-radius: 10px; padding: 10px 12px; }
.kmb-metric b { display: block; font-size: 20px; font-weight: 600; line-height: 1.2; }
.kmb-metric small { color: var(--muted, #7c8798); font-size: 11px; }

/* ---- 卡片（沿用核心 .listcard）---- */
.kmb-card { padding: 10px 12px; border-radius: 10px; }
/* auth.css 给登录页的 .kmb-card 定了 max-width:400px；套件里的卡片（整页 / 抽屉 / 设置页 / 资料页签）要撑满所在容器 */
.kmb-page .kmb-card, .kmb-drawer .kmb-card, .kmb-spage .kmb-card, .kmb-ptab-box .kmb-card, #dialog .kmb-card { max-width: none; }
.kmb-card.clickable { cursor: pointer; }
.kmb-card.clickable:hover { background: var(--hover, #1b2028); }
.kmb-card .kmb-title { font-weight: 600; font-size: 13px; display: flex; align-items: center; gap: 6px; }
.kmb-card .kmb-sub { color: var(--muted, #7c8798); font-size: 12px; margin-top: 3px; }
.kmb-card .kmb-body { font-size: 13px; margin-top: 6px; white-space: pre-wrap; word-break: break-word; }
.kmb-card.sel { outline: 2px solid var(--k-acc, #3b82ff); outline-offset: -2px; }
.kmb-check { width: 16px; height: 16px; margin: 0; flex: none; }

/* ---- 页签 ---- */
.kmb-tabs { display: flex; gap: 2px; border-bottom: 1px solid var(--line, #1a2028); margin: 0 0 10px; flex-wrap: wrap; }
.kmb-tab { background: none; border: 0; border-bottom: 2px solid transparent; color: var(--muted, #7c8798); padding: 7px 10px; font-size: 13px; cursor: pointer; border-radius: 6px 6px 0 0; display: inline-flex; align-items: center; gap: 6px; flex: none; white-space: nowrap; }
.kmb-tab:hover { color: var(--text, #f2f3f5); background: var(--hover, #1b2028); }
.kmb-tab.active { color: var(--text, #f2f3f5); border-bottom-color: var(--k-acc, #3b82ff); }
.kmb-n { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: rgba(127, 127, 127, .18); font-size: 11px; font-style: normal; }
.kmb-tab.active .kmb-n { background: var(--k-acc, #3b82ff); color: #fff; }
.profile-tabs .kmb-ptab { font: inherit; }
.profile-tabs .kmb-ptab.active { color: var(--text, #f2f3f5); border-color: var(--k-acc, #3b82ff); }

/* ---- 表格 ---- */
.kmb-table-wrap { overflow: auto; border: 1px solid var(--line, #1a2028); border-radius: 10px; }
.kmb-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.kmb-table th { text-align: left; font-weight: 600; color: var(--muted, #7c8798); padding: 7px 10px; background: var(--surface, #161a20); border-bottom: 1px solid var(--line, #1a2028); white-space: nowrap; }
.kmb-table td { padding: 7px 10px; border-bottom: 1px solid var(--line, #1a2028); vertical-align: top; word-break: break-word; }
.kmb-table tr:last-child td { border-bottom: 0; }
.kmb-table tr.clickable { cursor: pointer; }
.kmb-table tr.clickable:hover td { background: var(--hover, #1b2028); }
.kmb-table td .outline, .kmb-table td .danger, .kmb-table td .primary, .kmb-table td .secondary { padding: 3px 8px; font-size: 12px; margin: 0 2px 0 0; }

/* ---- 键值 / 小节 / 空态 / 加载 / 错误 ---- */
.kmb-kv { display: grid; grid-template-columns: max-content 1fr; gap: 5px 14px; margin: 0; font-size: 13px; }
.kmb-kv dt { color: var(--muted, #7c8798); }
.kmb-kv dd { margin: 0; word-break: break-word; }
.kmb-section { margin: 0 0 14px; }
.kmb-sec-h { display: flex; align-items: center; gap: 8px; }
.kmb-sec-h > .outline, .kmb-sec-h > .primary { margin-left: auto; padding: 2px 8px; font-size: 11px; }
.kmb-empty { color: var(--muted, #7c8798); font-size: 13px; padding: 14px 10px; text-align: center; border: 1px dashed var(--line, #1a2028); border-radius: 10px; }
.kmb-note { margin: 6px 0 0; }
.kmb-loading { color: var(--muted, #7c8798); font-size: 13px; padding: 14px 10px; display: flex; align-items: center; gap: 8px; }
.kmb-loading i { width: 14px; height: 14px; border-radius: 50%; border: 2px solid var(--line, #1a2028); border-top-color: var(--k-acc, #3b82ff); animation: kmb-spin .8s linear infinite; }
@keyframes kmb-spin { to { transform: rotate(360deg); } }
.kmb-error { color: var(--k-danger, #ff7a6e); font-size: 13px; padding: 10px 12px; border: 1px solid rgba(255, 122, 110, .35); border-radius: 10px; }
.kmb-pre { font: 12px/1.5 ui-monospace, Menlo, Consolas, monospace; white-space: pre-wrap; word-break: break-word; background: var(--surface, #161a20); border: 1px solid var(--line, #1a2028); border-radius: 10px; padding: 10px 12px; max-height: 420px; overflow: auto; margin: 0; }

/* ---- 状态片 ---- */
.kmb-chip { display: inline-flex; align-items: center; gap: 4px; padding: 1px 8px; border-radius: 999px; font-size: 11px; line-height: 18px; background: rgba(127, 127, 127, .16); color: var(--secondary, #b1b8c2); white-space: nowrap; vertical-align: middle; }
.kmb-st-ok { background: rgba(92, 200, 255, .16); color: var(--k-ok, #5cc8ff); }
.kmb-st-run { background: rgba(59, 130, 255, .16); color: var(--k-acc, #3b82ff); }
.kmb-st-warn { background: rgba(245, 165, 36, .16); color: var(--k-amber, #f5a524); }
.kmb-st-bad { background: rgba(255, 122, 110, .16); color: var(--k-danger, #ff7a6e); }
.kmb-st-dim { opacity: .75; }

/* ---- 右侧抽屉 ---- */
.kmb-drawer { position: fixed; top: 0; right: 0; bottom: 0; width: var(--kmb-drawer-w, min(520px, 92vw)); max-width: 96vw; background: var(--panel, #111419); color: var(--text, #f2f3f5); border-left: 1px solid var(--line, #1a2028); box-shadow: -12px 0 40px rgba(0, 0, 0, .35); transform: translateX(104%); transition: transform .22s ease; z-index: 1200; display: flex; flex-direction: column; }
.kmb-drawer.wide { width: var(--kmb-drawer-w, min(760px, 95vw)); }
.kmb-drawer.is-expanded { width: min(1160px, 94vw) !important; }
.kmb-drawer.open { transform: none; }
.kmb-drawer-grip, .kmb-pane-grip { position: absolute; left: -4px; top: 0; bottom: 0; width: 9px; cursor: ew-resize; z-index: 12; touch-action: none; user-select: none; }
.kmb-drawer-grip::after, .kmb-pane-grip::after { content: ''; position: absolute; left: 3px; top: 50%; transform: translateY(-50%); width: 3px; height: 42px; border-radius: 3px; background: var(--k-acc, #3b82ff); opacity: 0; transition: opacity .15s; }
.kmb-drawer-grip:hover::after, .kmb-drawer.is-resizing .kmb-drawer-grip::after, .kmb-pane-grip:hover::after, .thread-pane.is-resizing .kmb-pane-grip::after { opacity: .85; }
body.kmb-drawer-resizing, body.kmb-drawer-resizing * { cursor: ew-resize !important; user-select: none !important; }
@media (min-width: 1001px) { .thread-pane { position: relative; } }
.thread-pane.is-custom-w { width: var(--kmb-pane-w, 520px) !important; max-width: min(94vw, calc(100% - 60px)) !important; flex: 0 0 var(--kmb-pane-w, 520px) !important; }
.thread-pane.is-expanded { position: absolute !important; right: 0; top: 49px; bottom: 0; z-index: 6; box-shadow: -20px 0 50px rgba(0, 0, 0, .45); width: min(1080px, 88vw) !important; max-width: min(94vw, calc(100% - 48px)) !important; flex: none !important; }
@media (max-width: 1000px) { body:not(.km-u) .thread-pane { background: var(--cz-solid, var(--panel, #111419)) !important; } }
body:not(.km-u) .thread-pane.is-expanded { background: var(--cz-solid, var(--panel, #111419)) !important; }
#kmu .kmw-chat .thread-pane.is-custom-w, #kmu .kmw-chat .thread-pane.is-expanded { position: absolute !important; right: 0; top: 49px; bottom: 0; z-index: 8; }
#kmu .kmw-chat .thread-pane.is-expanded { width: min(96%, 1080px) !important; max-width: 96% !important; }
.thread-pane.is-custom-w .message-content, .thread-pane.is-expanded .message-content, .kmb-drawer.is-custom-w .kmb-card, .kmb-drawer.is-expanded .kmb-card { max-width: none; }
.kmb-drawer-head { display: flex; align-items: flex-start; gap: 10px; padding: 14px 16px 10px; border-bottom: 1px solid var(--line, #1a2028); }
.kmb-drawer-titles { flex: 1; min-width: 0; }
.kmb-drawer-titles h2 { margin: 0; font-size: 15px; line-height: 1.3; word-break: break-word; }
.kmb-drawer-titles p { margin: 3px 0 0; color: var(--muted, #7c8798); font-size: 12px; }
.kmb-drawer-head .close, .kmb-drawer-head .kmb-drawer-expand { flex: none; }
.kmb-drawer-body { flex: 1; min-height: 0; overflow: auto; padding: 12px 16px 24px; }
.kmb-drawer-body .kmb-tabs { position: sticky; top: -12px; background: var(--panel, #111419); z-index: 1; padding-top: 4px; }
body.kmb-drawer-open #dialog { z-index: 1300; }
@media (max-width: 768px) { .kmb-drawer, .kmb-drawer.wide, .kmb-drawer.is-expanded { width: 100vw !important; } .thread-pane.is-custom-w, .thread-pane.is-expanded { width: 100% !important; max-width: 100% !important; flex: none !important; } .kmb-drawer-grip, .kmb-pane-grip, .panehead .kmb-drawer-expand { display: none; } }

/* ---- 顶栏 / 左栏入口 ---- */
.titlebar .tright .kmb-tb { position: relative; }
.titlebar .tright .kmb-tb.on { color: var(--k-acc, #3b82ff); }
.kmb-side-entry { display: flex; align-items: center; gap: 8px; }

/* ---- 设置页 ---- */
.kmb-settings-sep { margin: 10px 0 4px; padding: 0 8px; font-size: 10px; letter-spacing: .12em; color: var(--muted, #7c8798); text-transform: uppercase; }
/* 03.4（#20768 裁定 b）：两组标签「我」/「Hikos」；第一组顶头不留空；窄屏 tab 横排时标签竖着挤在行里，不占一行 */
.kmb-settings-sep.kmb-settings-me { margin-top: 0; }
@media (max-width: 760px) { .kmb-settings-sep { align-self: center; margin: 0 2px; padding: 0 4px; white-space: nowrap; } }
.kmb-spage .kmb-section:first-child { margin-top: 0; }

/* ---- 对话里的卡（澄清 / 排队条）---- */
.kmb-inline { margin: 6px 12px 0; }
.kmb-ask { border: 1px solid var(--line, #1a2028); border-left: 3px solid var(--k-amber, #f5a524); border-radius: 10px; padding: 10px 12px; background: var(--surface, #161a20); margin: 0 0 8px; font-size: 13px; }
.kmb-ask .kmb-title { font-weight: 600; display: flex; align-items: center; gap: 8px; }
.kmb-ask .kmb-q { margin: 8px 0 4px; }
.kmb-ask .kmb-opts { display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0; }
.kmb-ask .kmb-opts label { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border: 1px solid var(--line, #1a2028); border-radius: 999px; cursor: pointer; font-size: 12px; }
.kmb-ask .kmb-opts label:has(input:checked) { border-color: var(--k-acc, #3b82ff); background: rgba(59, 130, 255, .14); }
.kmb-ask .kmb-opts input { margin: 0; }
.kmb-ask textarea.field { min-height: 48px; margin-top: 4px; }
.kmb-queue { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted, #7c8798); padding: 4px 8px; border: 1px dashed var(--line, #1a2028); border-radius: 8px; margin: 0 0 6px; }
.kmb-queue button.link { background: none; border: 0; color: var(--k-acc, #3b82ff); cursor: pointer; font-size: 12px; padding: 0 2px; }
.kmb-queue-list { margin: 0 0 8px; }
.kmb-queue-list .kmb-card { padding: 7px 10px; }

/* ---- 任务中枢（M1）---- */
/* 工作台（任务 e631d439 · 道哥 #23617 第 2 条）：三栏改三页签 + 搜索 + 筛选 + 辩论去向。单列从头到尾，475px 的宇宙界面窗和 1440 的面板视图同一套（规则⑦）。 */
.kmb-work-top { position: sticky; top: -16px; z-index: 2; background: var(--panel, #111419); margin: 0 -4px; padding: 6px 4px 8px; display: flex; flex-direction: column; gap: 8px; }
.kmb-work-top .kmb-tabs { margin: 0; }
.kmb-work-top .kmb-tab { flex: 1 1 auto; justify-content: center; }
.kmb-work-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.kmb-work-q { flex: 1 1 160px; min-width: 0; display: flex; align-items: center; gap: 6px; height: 30px; padding: 0 6px 0 9px; border: 1px solid var(--line, #1a2028); border-radius: 8px; background: var(--surface, #161a20); color: var(--muted, #7c8798); }
.kmb-work-q:focus-within { border-color: var(--k-acc, #3b82ff); }
.kmb-work-q input.field { flex: 1; min-width: 0; height: 26px; border: 0; background: none; padding: 0; font-size: 13px; color: var(--text, #f2f3f5); box-shadow: none; }
.kmb-work-q input.field:focus { outline: none; box-shadow: none; }
.kmb-work-q input[type="search"]::-webkit-search-cancel-button { display: none; }
.kmb-work-qx { width: 22px; height: 22px; padding: 0; }
.kmb-work-fbtn { height: 30px; padding: 0 10px; font-size: 12px; display: inline-flex; align-items: center; gap: 5px; flex: none; }
.kmb-work-fbtn.on, .kmb-work-fbtn[aria-expanded="true"] { border-color: var(--k-acc, #3b82ff); color: var(--k-acc, #3b82ff); }
.kmb-work-fbtn .kmb-n { background: var(--k-acc, #3b82ff); color: #fff; min-width: 16px; height: 16px; font-size: 10px; }
.kmb-work-filters { display: flex; flex-direction: column; gap: 8px; padding: 10px 12px; border: 1px solid var(--line, #1a2028); border-radius: 10px; background: var(--surface, #161a20); }
.kmb-wf-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.kmb-wf-label { color: var(--muted, #7c8798); font-size: 12px; flex: none; }
.kmb-wf-kinds { gap: 6px; }
.kmb-wf-kind { cursor: pointer; border: 1px solid transparent; font: inherit; font-size: 12px; line-height: 20px; padding: 1px 10px; }
.kmb-wf-kind:hover { border-color: var(--line, #1a2028); color: var(--text, #f2f3f5); }
.kmb-wf-kind.on { background: rgba(59, 130, 255, .16); border-color: var(--k-acc, #3b82ff); color: var(--k-acc, #3b82ff); }
.kmb-wf-sels { gap: 8px 14px; }
.kmb-wf-sel { display: inline-flex; align-items: center; gap: 6px; min-width: 0; }
.kmb-wf-sel .kmb-head-sel { height: 28px; font-size: 12px; min-width: 110px; max-width: 200px; padding: 0 8px; }
.kmb-work-chips { gap: 6px; }
.kmb-wchip { cursor: pointer; border: 1px solid var(--line, #1a2028); font: inherit; font-size: 12px; line-height: 20px; padding: 1px 6px 1px 10px; color: var(--text, #f2f3f5); background: var(--surface, #161a20); }
.kmb-wchip { display: inline-flex; align-items: center; gap: 2px; }
.kmb-wchip .kmb-wchip-k { color: var(--muted, #7c8798); }
.kmb-wchip i { font-style: normal; color: var(--muted, #7c8798); margin-left: 3px; font-size: 14px; line-height: 1; }
.kmb-wchip:hover { border-color: var(--k-danger, #ff7a6e); }
.kmb-wchip:hover i { color: var(--k-danger, #ff7a6e); }
.kmb-work-clear { background: none; border: 0; color: var(--k-acc, #3b82ff); cursor: pointer; font-size: 12px; padding: 0 4px; }
.kmb-work-list { padding-top: 2px; }
.kmb-work-more { justify-content: center; padding: 4px 0; }
.kmb-work-empty .kmb-row { justify-content: center; margin-top: 10px; }
.kmb-work-empty .outline { padding: 3px 10px; font-size: 12px; }
/* 一张卡：类型 + 标题 + 状态（主动作：整行一个钮）+ 一句说明；「详情」展开去向 / 元数据 */
.kmb-wcard { padding: 8px 10px 9px 12px; }
.kmb-wc-head { display: flex; align-items: center; gap: 4px; }
.kmb-wc-main { flex: 1; min-width: 0; background: none; border: 0; padding: 2px 0; color: inherit; text-align: left; cursor: pointer; font: inherit; font-weight: 600; font-size: 13px; }
.kmb-wc-main:hover .kmb-ellipsis { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--line, #1a2028); }
.kmb-wc-main:focus-visible { outline: 2px solid var(--k-acc, #3b82ff); outline-offset: 2px; border-radius: 6px; }
.kmb-wcard .kmb-kind { font-weight: 500; flex: none; }
.kmb-wc-more { flex: none; width: 24px; height: 24px; padding: 0; color: var(--muted, #7c8798); transition: transform .15s ease; }
.kmb-wcard.is-open .kmb-wc-more { transform: rotate(180deg); }
.kmb-wcard .kmb-sub { padding-left: 2px; }
.kmb-wc-detail { margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--line, #1a2028); display: flex; flex-direction: column; gap: 8px; font-size: 12.5px; }
.kmb-wc-sech { display: flex; align-items: center; gap: 5px; color: var(--secondary, #b1b8c2); font-size: 12px; font-weight: 600; margin-bottom: 4px; }
.kmb-wc-trow { display: flex; align-items: center; gap: 8px; padding: 5px 0 3px; }
.kmb-wc-trow + .kmb-wc-trow { border-top: 1px solid var(--line, #1a2028); }
.kmb-wc-who { max-width: 38%; flex: none; }
.kmb-wc-trow .outline { padding: 2px 8px; font-size: 11px; flex: none; }
.kmb-wc-note { font-size: 12px; padding: 0 0 4px 2px; word-break: break-word; }
.kmb-wc-note b { color: var(--secondary, #b1b8c2); margin-right: 4px; }
.kmb-wc-meta { font-size: 12px; }
.kmb-wc-acts { gap: 6px; }
.kmb-wc-acts .outline { padding: 2px 9px; font-size: 11.5px; }
/* 近 7 天六格（M7）折一行；M7 没装 / 服务端没有指标 → 整块不占位 */
.kmb-work-fold { display: flex; flex-direction: column; gap: 6px; }
.kmb-work-fold:has(#kmb-work-metrics:empty) { display: none; }
.kmb-work-foldh { align-self: flex-start; display: inline-flex; align-items: center; gap: 4px; background: none; border: 0; padding: 2px 4px; color: var(--muted, #7c8798); font: inherit; font-size: 12px; cursor: pointer; border-radius: 6px; }
.kmb-work-foldh:hover { color: var(--text, #f2f3f5); background: var(--hover, #1b2028); }
.kmb-work-foldh svg { transition: transform .15s ease; }
.kmb-work-fold.is-open .kmb-work-foldh svg { transform: rotate(180deg); }
.kmb-work-fold:not(.is-open) #kmb-work-metrics { display: none; }
/* 窄处（宇宙界面 475px 的窗 / 窄面板）：说明行允许换行、去向行里执行人让位给标题 */
@container kmchat (max-width: 620px) {
  .kmw-chat .kmb-page:has(.kmb-work-top) { padding: 10px 10px 24px; }
  .kmw-chat .kmb-wc-who { display: none; }
  .kmw-chat .kmb-wf-sel .kmb-head-sel { min-width: 96px; max-width: 150px; }
}
.kmb-batch { padding: 6px 8px; border: 1px dashed var(--line, #1a2028); border-radius: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.kmb-approval .kmb-row > label { flex: 1; }
.kmb-approval label.kmb-row { cursor: pointer; align-items: flex-start; }
.kmb-approval .kmb-check { margin-top: 3px; }
.kmb-timeline { list-style: none; margin: 0; padding: 0 0 0 14px; border-left: 2px solid var(--line, #1a2028); }
.kmb-timeline li { position: relative; padding: 2px 0 12px 10px; font-size: 13px; }
.kmb-timeline li::before { content: ''; position: absolute; left: -19px; top: 8px; width: 8px; height: 8px; border-radius: 50%; background: var(--k-acc, #3b82ff); }
.kmb-timeline time { color: var(--muted, #7c8798); font-size: 12px; margin-right: 8px; }
.kmb-timeline p { margin: 2px 0 0; white-space: pre-wrap; word-break: break-word; }
.kmb-task-body form.kmb-row { align-items: center; }
.kmb-task-body .kmb-row > select.field { flex: 1; }
.kmb-taskline { display: flex; align-items: center; gap: 8px; margin-top: 6px; padding: 6px 10px; border: 1px solid var(--line, #1a2028); border-radius: 8px; background: var(--surface, #161a20); width: fit-content; max-width: 100%; }
.kmb-taskline .outline { padding: 2px 10px; font-size: 12px; }
article.message.kmb-flash { animation: kmb-flash 1.6s ease-out; }
@keyframes kmb-flash { 0% { background: rgba(59, 130, 255, .28); } 100% { background: transparent; } }

/* ---- 文件树 / 预览（M2）---- */
.kmb-tree { font-size: 13px; }
.kmb-tree .kmb-node { display: flex; align-items: center; gap: 6px; padding: 4px 6px; border-radius: 6px; cursor: pointer; }
.kmb-tree .kmb-node:hover { background: var(--hover, #1b2028); }
.kmb-tree .kmb-node .kmb-muted { margin-left: auto; }
.kmb-tree .kmb-children { margin-left: 16px; border-left: 1px solid var(--line, #1a2028); padding-left: 4px; }
.kmb-preview { border: 1px solid var(--line, #1a2028); border-radius: 10px; overflow: hidden; background: var(--surface, #161a20); min-height: 200px; }
.kmb-preview img { max-width: 100%; display: block; margin: 0 auto; }
.kmb-preview iframe { width: 100%; height: 70vh; border: 0; background: #fff; }
.kmb-preview .kmb-pre { border: 0; border-radius: 0; max-height: 70vh; }
.kmb-diff ins { background: rgba(92, 200, 255, .2); text-decoration: none; }
.kmb-diff del { background: rgba(255, 122, 110, .25); text-decoration: none; }
.kmb-desk-tools { margin: 8px 0 10px; }
.kmb-desk-tools .field { height: 30px; }
.kmb-tree .kmb-node.kmb-dir { font-weight: 600; }
.kmb-tree .kmb-node .kmb-chip { margin-left: 4px; }
.kmb-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; margin-bottom: 6px; font-size: 12px; color: var(--muted, #7c8798); }
.kmb-crumbs button.link { background: none; border: 0; color: var(--text, #f2f3f5); cursor: pointer; padding: 2px 4px; font-size: 12px; display: inline-flex; align-items: center; }
.kmb-crumbs button.link:hover { text-decoration: underline; }
.kmb-fs-list { max-height: 260px; overflow: auto; border: 1px solid var(--line, #1a2028); border-radius: 8px; padding: 4px; }
.kmb-fs-pane, .kmb-ver-pane { margin-top: 10px; }
.kmb-fs-pane .kmb-sec-h, .kmb-ver-pane .kmb-sec-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; text-transform: none; letter-spacing: 0; }
.kmb-fs-pane .kmb-sec-h .kmb-row { margin-left: auto; }
.kmb-file-acts { margin-right: 6px; }
.kmb-file-acts .outline { padding: 4px 10px; font-size: 12px; display: inline-flex; align-items: center; gap: 4px; }
.kmb-orphans { margin-top: 10px; }
.kmb-orphans .kmb-card { margin-bottom: 8px; }
.kmb-ptab-box .kmb-tree { font-size: 12.5px; }

/* ---- 深链落地页（M3）---- */
.kmb-landing { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 24px; }
.kmb-landing .kmb-landing-card { width: min(560px, 96vw); background: var(--panel, #111419); border: 1px solid var(--line, #1a2028); border-radius: 16px; padding: 22px 24px; }
.kmb-landing h1 { font-size: 18px; margin: 0 0 4px; }
.kmb-landing .brand { font-size: 12px; letter-spacing: .2em; color: var(--muted, #7c8798); margin-bottom: 14px; }

/* ---- 站内信（M4）---- */
.kmb-mail-body { margin-top: 10px; }
.kmb-mail-bar { gap: 8px; margin-bottom: 10px; flex-wrap: wrap; align-items: center; }
.kmb-mail-bar .field { height: 32px; }
.kmb-mail-bar form.kmb-row { gap: 6px; }
.kmb-mail-bar .kmb-tabs { margin: 0; }
.kmb-mail-list .kmb-card { margin-bottom: 8px; }
.kmb-letter { cursor: pointer; }
.kmb-letter:hover { border-color: var(--accent, #5cc8ff); }
.kmb-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--accent, #5cc8ff); margin-right: 6px; flex: none; }
.kmb-unread { color: var(--accent, #5cc8ff); }
.kmb-matrix .kmb-mx-row { cursor: pointer; }
.kmb-matrix .kmb-mx-row:hover td { background: rgba(92, 200, 255, .08); }
.kmb-matrix td:first-child { display: flex; align-items: center; gap: 6px; }
.kmb-stages { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; margin: 8px 0 4px; }
.kmb-stage { font-size: 11.5px; padding: 2px 9px; border-radius: 999px; border: 1px dashed var(--line, #1a2028); color: var(--muted, #7c8798); }
.kmb-stage.on { border-style: solid; color: var(--text, #f2f3f5); background: rgba(92, 200, 255, .12); border-color: rgba(92, 200, 255, .5); }
.kmb-stage.on.done { background: rgba(90, 200, 120, .15); border-color: rgba(90, 200, 120, .6); }
.kmb-stage-arrow { color: var(--muted, #7c8798); font-size: 12px; }
.kmb-letter-from { margin: 0 0 8px; font-size: 13px; }
.kmb-letter-text { white-space: normal; line-height: 1.55; font-size: 13.5px; padding: 10px 12px; border: 1px solid var(--line, #1a2028); border-radius: 10px; background: var(--surface, #161a20); word-break: break-word; }
.kmb-letter-text.small { font-size: 12.5px; padding: 6px 10px; margin-top: 6px; }
.kmb-atts { list-style: none; padding: 0; margin: 8px 0 0; font-size: 12.5px; }
.kmb-atts li { padding: 2px 0; }
.kmb-labels { margin-top: 8px; gap: 4px; flex-wrap: wrap; }
.kmb-req-tl:empty { display: none; }
.kmb-req-tl { margin-top: 8px; border-top: 1px dashed var(--line, #1a2028); padding-top: 8px; }
.kmb-ask-answer { margin: 6px 0; padding: 6px 10px; border-left: 2px solid var(--accent, #5cc8ff); font-size: 12.5px; }
.kmb-ask-answer .kmb-kv { margin: 0; }
.kmb-details { margin: 8px 0 4px; border: 1px dashed var(--line, #1a2028); border-radius: 10px; padding: 6px 12px; }
.kmb-details summary { cursor: pointer; font-size: 13px; color: var(--muted, #7c8798); padding: 4px 0; }
.kmb-details[open] summary { color: var(--text, #f2f3f5); margin-bottom: 6px; }
.kmb-form .field-label { margin-top: 8px; }
.kmb-form .kmb-row > label.field-label { margin-top: 0; }
.kmb-form .kmb-row { gap: 10px; align-items: flex-start; flex-wrap: wrap; }
.kmb-form .kmb-row > * { flex: 1 1 140px; }
.kmb-form .kmb-row.kmb-pick { gap: 8px; align-items: center; }
.kmb-form .kmb-row.kmb-pick > * { flex: 0 0 auto; }
.kmb-checks { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 13px; }
.kmb-checks label { gap: 6px; }
.kmb-hits { list-style: none; padding: 0; margin: 6px 0 0; font-size: 12.5px; }
.kmb-hits li { padding: 2px 0; }
.kmb-merge-card { padding: 4px 0; border-top: 1px dashed var(--line, #1a2028); }
.kmb-merge-card:first-of-type { border-top: 0; }
.kmb-ct-items { list-style: none; padding: 0; margin: 0; font-size: 12.5px; }
.kmb-ct-items li { padding: 4px 0; border-bottom: 1px dashed var(--line, #1a2028); }
.kmb-ct-items li:last-child { border-bottom: 0; }
.kmb-ct-item.stale { opacity: .6; }
.kmb-ct-item button.link { background: none; border: 0; color: var(--accent, #5cc8ff); cursor: pointer; font-size: 12px; padding: 0 4px; }
.kmb-policy { display: flex; flex-direction: column; gap: 6px; }
.kmb-policy-opt { gap: 10px; align-items: flex-start; padding: 8px 10px; border: 1px solid var(--line, #1a2028); border-radius: 10px; cursor: pointer; }
.kmb-policy-opt:has(input:checked) { border-color: var(--accent, #5cc8ff); background: rgba(92, 200, 255, .08); }
.kmb-policy-opt input { margin-top: 3px; }
.kmb-policy-opt small { display: block; color: var(--muted, #7c8798); font-size: 12px; margin-top: 2px; }
.kmb-hook-group h4 { font-size: 12px; color: var(--muted, #7c8798); margin: 8px 0 6px; display: flex; align-items: center; gap: 6px; }
.kmb-kv button.link { background: none; border: 0; color: var(--accent, #5cc8ff); cursor: pointer; padding: 0; font-size: inherit; text-align: left; }
.kmb-kv button.link:hover { text-decoration: underline; }
.friendtabs [data-action="kmb-mail-contacts"] { margin-left: auto; }

/* ---- 定时任务（M5）---- */
.kmb-head .toolbar .primary, .kmb-head .toolbar .outline { white-space: nowrap; flex: none; height: 28px; padding: 0 12px; font-size: 12px; }
.kmb-sched-body { display: flex; flex-direction: column; gap: 12px; }
.kmb-sched-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 10px; }
.kmb-sched.kmb-card { display: flex; flex-direction: column; gap: 6px; max-width: none; }
.kmb-sched.off { opacity: .72; }
.kmb-sched-head { display: flex; align-items: center; gap: 8px; min-width: 0; }
.kmb-sched-name { font-size: 14px; flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kmb-sched-status { font-size: 12px; color: var(--muted, #8a8c9b); flex: none; }
.kmb-sched-dot { width: 9px; height: 9px; border-radius: 50%; flex: none; background: var(--muted, #8a8c9b); }
.kmb-sched-dot.kmb-tone-ok { background: var(--k-ok, #22c55e); }
.kmb-sched-dot.kmb-tone-warn { background: var(--k-amber, #f59e0b); box-shadow: 0 0 0 3px rgba(245, 158, 11, .18); }
.kmb-sched-dot.kmb-tone-bad { background: var(--k-danger, #ef4444); }
.kmb-sched-dot.kmb-tone-dim { opacity: .5; }
.kmb-sched-chips { display: flex; flex-wrap: wrap; gap: 4px; }
.kmb-sched-ins { margin: 0; font-size: 12.5px; color: var(--secondary, #b1b8c2); line-height: 1.5; white-space: pre-wrap; }
.kmb-sched-meta { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12px; color: var(--muted, #8a8c9b); align-items: center; }
.kmb-sched-bad { color: var(--k-danger, #ef4444); }
.kmb-sched-confirm { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 8px; background: rgba(245, 158, 11, .10); border: 1px solid rgba(245, 158, 11, .35); font-size: 13px; }
.kmb-sched-confirm > span { flex: 1 1 160px; }
.kmb-sched-wait { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; border-color: rgba(245, 158, 11, .5); max-width: none; }
.kmb-sched-wait .kmb-muted { font-size: 12px; }
.kmb-sched .kmb-actions { margin-top: 2px; flex-wrap: wrap; gap: 6px; }
.kmb-sched .kmb-actions .btn, .kmb-sched .kmb-actions button { padding: 3px 9px; font-size: 12px; }
.kmb-sched-empty { display: flex; flex-direction: column; gap: 10px; }
.kmb-sched-empty .kmb-muted { margin: 0; font-size: 13px; }
.kmb-sched-tpls { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; }
.kmb-sched-tpl { display: flex; flex-direction: column; gap: 4px; text-align: left; padding: 12px 14px; border-radius: 12px; border: 1px dashed var(--line, #2a3140); background: var(--panel, #111419); color: var(--text, #f2f3f5); cursor: pointer; font: inherit; }
.kmb-sched-tpl:hover { border-color: var(--k-acc, #3b82ff); background: var(--hover, #161b22); }
.kmb-sched-tpl b { font-size: 13.5px; }
.kmb-sched-tpl span { font-size: 12px; color: var(--secondary, #b1b8c2); line-height: 1.45; }
.kmb-sched-tpl i { font-style: normal; font-size: 11.5px; color: var(--k-acc, #3b82ff); }
.kmb-sched-form .field-label { margin-top: 8px; }
.kmb-sched-form .kmb-row { display: flex; gap: 10px; align-items: flex-start; flex-wrap: wrap; }
.kmb-sched-form .kmb-row > .kmb-sched-col { flex: 1 1 180px; min-width: 0; }
.kmb-sched-col .field-label:first-child { margin-top: 0; }
.kmb-sched-col .field { width: 100%; }
.kmb-sched-col .kmb-note { margin: 4px 0 0; }
.kmb-sched-form textarea.field { resize: vertical; min-height: 96px; }
.kmb-sched-radios { display: flex; flex-direction: column; gap: 6px; font-size: 13px; }
.kmb-sched-check { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; cursor: pointer; }
.kmb-sched-check input { width: 15px; height: 15px; margin: 0; }
.kmb-sched-preview { margin: 10px 0 0; font-size: 12.5px; color: var(--k-acc, #3b82ff); background: rgba(59, 130, 255, .08); border-radius: 8px; padding: 8px 10px; }
.kmb-sched-pre { white-space: pre-wrap; }
.kmb-sched-runs td:last-child { font-size: 12px; }
.kmb-sched-runs button.link { background: none; border: 0; color: var(--k-acc, #3b82ff); cursor: pointer; font-size: 12px; padding: 0 4px; }
.kmb-sched-runs button.link:hover { text-decoration: underline; }
.kmb-sched-ptab .kmb-sec-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; text-transform: none; letter-spacing: 0; }
.kmb-sched-ptab .kmb-sec-h .kmb-row { margin-left: auto; display: flex; gap: 6px; }
.kmb-sched-ptab .kmb-sched-list { grid-template-columns: 1fr; margin-top: 8px; }

/* ---- 插件与技能（M6）---- */
.kmb-pl-tab, .kmb-market { display: flex; flex-direction: column; gap: 10px; }
.kmb-pl-tab .kmb-sec-h, .kmb-market .kmb-sec-h, .kmb-brief .kmb-sec-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; text-transform: none; letter-spacing: 0; }
.kmb-pl-tab .kmb-sec-h .kmb-row, .kmb-market .kmb-sec-h .kmb-row { margin-left: auto; display: flex; gap: 6px; }
.kmb-pl-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 10px; }
.kmb-ptab-box .kmb-pl-list, .kmb-drawer .kmb-pl-list { grid-template-columns: 1fr; }
.kmb-pl.kmb-card { display: flex; flex-direction: column; gap: 6px; max-width: none; }
.kmb-pl-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
.kmb-pl-head > b { font-size: 14px; }
.kmb-pl-head .kmb-muted { font-size: 11.5px; }
.kmb-pl-icon { width: 22px; height: 22px; border-radius: 6px; object-fit: cover; }
.kmb-pl-dot { width: 9px; height: 9px; border-radius: 50%; flex: none; background: var(--muted, #8a8c9b); display: inline-block; }
.kmb-pl-dot.kmb-tone-ok { background: var(--k-ok, #22c55e); }
.kmb-pl-dot.kmb-tone-run { background: var(--k-acc, #3b82ff); }
.kmb-pl-dot.kmb-tone-warn { background: var(--k-amber, #f59e0b); }
.kmb-pl-dot.kmb-tone-bad { background: var(--k-danger, #ef4444); box-shadow: 0 0 0 3px rgba(239, 68, 68, .18); }
.kmb-pl-dot.kmb-tone-dim { opacity: .5; }
.kmb-pl-desc { margin: 0; font-size: 12.5px; color: var(--secondary, #b1b8c2); line-height: 1.5; }
.kmb-pl-meta { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12px; color: var(--muted, #8a8c9b); }
.kmb-pl-state { font-style: italic; }
.kmb-pl-who { flex-basis: 100%; }
.kmb-pl .kmb-actions { margin-top: 2px; flex-wrap: wrap; gap: 6px; align-items: center; }
.kmb-pl .kmb-actions .btn, .kmb-pl .kmb-actions button { padding: 3px 9px; font-size: 12px; }
.kmb-pl-give .field { height: 28px; font-size: 12px; min-width: 120px; padding: 0 8px; }
.kmb-pl-denied { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 8px 10px; border-radius: 8px; background: rgba(239, 68, 68, .08); border: 1px solid rgba(239, 68, 68, .35); font-size: 12.5px; }
.kmb-pl-denied .kmb-muted { flex-basis: 100%; font-size: 12px; }
.kmb-pl-note { font-size: 11.5px; font-weight: 400; margin-left: auto; }
.kmb-sk-list { display: flex; flex-direction: column; gap: 6px; }
.kmb-sk { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 10px; background: var(--panel, #111419); border: 1px solid var(--line, #1a2028); }
.kmb-sk-main { display: flex; flex-direction: column; gap: 2px; flex: 1 1 auto; min-width: 0; }
.kmb-sk-main > b { font-size: 13.5px; }
.kmb-sk-sum { font-size: 12.5px; color: var(--secondary, #b1b8c2); line-height: 1.45; }
.kmb-sk-meta { font-size: 11.5px; color: var(--muted, #8a8c9b); }
.kmb-sk .btn, .kmb-sk button { flex: none; padding: 3px 9px; font-size: 12px; }
.kmb-pl-search { display: flex; gap: 6px; align-items: center; }
.kmb-pl-search .field { flex: 1 1 auto; height: 30px; }
.kmb-pl-search .btn, .kmb-pl-search button { flex: none; padding: 4px 10px; font-size: 12px; }
.kmb-pl-drawer-body { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; }
.kmb-pl-bindings td:last-child .field { height: 26px; font-size: 12px; padding: 0 6px; }
.kmb-brief { margin-top: 14px; display: flex; flex-direction: column; gap: 6px; }
.kmb-brief .kmb-sec-h .kmb-muted { font-size: 11.5px; font-weight: 400; }
.kmb-brief .kmb-sec-h .outline { margin-left: auto; padding: 2px 8px; font-size: 11px; }
.kmb-brief-chips { display: flex; flex-wrap: wrap; gap: 4px; }
.kmb-brief-chips span { font-size: 12px; padding: 2px 8px; border-radius: 999px; background: var(--hover, #161b22); border: 1px solid var(--line, #1a2028); }
.kmb-brief-chips span.more { color: var(--muted, #8a8c9b); }
.kmb-brief .kmb-muted { margin: 0; font-size: 12.5px; }

/* ---- 账单与绩效（M7）---- */
.kmb-stats { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0; }
.kmb-stat { flex: 1 1 110px; min-width: 110px; display: flex; flex-direction: column; gap: 2px; padding: 10px 12px; border-radius: 10px; background: var(--hover, #161b22); border: 1px solid var(--line, #1a2028); }
.kmb-stat b { font-size: 20px; font-weight: 600; line-height: 1.15; letter-spacing: -.01em; font-variant-numeric: tabular-nums; }
.kmb-stat b i { font-style: normal; font-size: 11px; font-weight: 500; color: var(--muted, #8a8c9b); margin-left: 3px; }
.kmb-stat span { font-size: 12px; color: var(--muted, #8a8c9b); }
.kmb-stat small { font-size: 11.5px; color: var(--muted, #8a8c9b); }
.kmb-stat small em { font-style: normal; }
.kmb-stat.big { flex-basis: 170px; }
.kmb-stat.big b { font-size: 26px; }
.kmb-stat.warn b { color: var(--k-amber, #f59e0b); }
.kmb-stats.small .kmb-stat { padding: 8px 10px; min-width: 96px; }
.kmb-stats.small .kmb-stat b { font-size: 16px; }
.kmb-tone-bad { color: var(--k-danger, #ef4444); }
.kmb-bill .kmb-sec-h .kmb-head-sel, .kmb-perf-head .kmb-head-sel { height: 28px; font-size: 12px; min-width: 110px; max-width: 180px; padding: 0 8px; margin-left: auto; }
.kmb-bill .kmb-sec-h .kmb-bill-sub { margin-left: auto; font-size: 12px; }
.kmb-bill-acct { padding: 12px 14px; }
.kmb-bill-acct.low { border-color: var(--k-danger, #ef4444); }
.kmb-bill-acct-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.kmb-bill-acct-head b { font-size: 14px; }
.kmb-bill-acct-head .outline { padding: 2px 8px; font-size: 11px; }
.kmb-bill-topup, a.kmb-bill-topup { display: inline-flex; align-items: center; height: 28px; padding: 0 14px; border-radius: 8px; font-size: 12px; font-weight: 600; text-decoration: none; white-space: nowrap; }
.kmb-bill-tier { background: rgba(124, 58, 237, .18); color: #c4b5fd; }
.kmb-bill-low { margin: 6px 0; padding: 8px 10px; border-radius: 8px; font-size: 12.5px; background: rgba(239, 68, 68, .12); border: 1px solid rgba(239, 68, 68, .4); }
.kmb-bill-tasks button.link, .kmb-bill-task { background: none; border: 0; padding: 0; color: var(--k-accent, #7c9cff); cursor: pointer; font: inherit; text-align: left; }
.kmb-bill-tasks button.link:hover { text-decoration: underline; }
.kmb-bill-notes { margin-top: 6px; }
.kmb-bill-notes summary { cursor: pointer; font-size: 12px; color: var(--muted, #8a8c9b); }
.kmb-bill-notes .kmb-note { margin: 4px 0; }
.kmb-perf-head { margin-bottom: 4px; }
.kmb-perf-head b { font-size: 14px; }
.kmb-perf-head .outline { padding: 2px 8px; font-size: 11px; }
.kmb-perf-leader { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 6px; }
.kmb-perf-item { display: flex; flex-direction: column; gap: 2px; padding: 8px 10px; border-radius: 8px; background: var(--hover, #161b22); border: 1px solid var(--line, #1a2028); }
.kmb-perf-item span { font-size: 12px; color: var(--muted, #8a8c9b); }
.kmb-perf-item b { font-size: 14px; font-variant-numeric: tabular-nums; }
.kmb-metrics { display: flex; flex-wrap: wrap; align-items: stretch; gap: 8px; margin: 0 0 12px; }
.kmb-metric { flex: 1 1 120px; min-width: 120px; display: flex; flex-direction: column; gap: 1px; padding: 8px 12px; border-radius: 10px; background: var(--hover, #161b22); border: 1px solid var(--line, #1a2028); }
.kmb-metric b { font-size: 18px; font-weight: 600; font-variant-numeric: tabular-nums; line-height: 1.2; }
.kmb-metric span { font-size: 12px; color: var(--muted, #8a8c9b); }
.kmb-metric small { font-size: 11px; color: var(--muted, #8a8c9b); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kmb-metrics-sub { flex-basis: 100%; font-size: 11.5px; color: var(--muted, #8a8c9b); margin-top: -2px; }
.kmb-metrics-off { margin-bottom: 8px; }
/* 资料卡页签：M2 / M5 / M6 / M7 各加了一枚，九枚挤在一行时标签会折成竖字 → 允许换行、每枚不折字 */
.profile-dialog .profile-tabs, #dialog .profile-tabs { flex-wrap: wrap; row-gap: 0; }
.profile-dialog .profile-tabs button, #dialog .profile-tabs button { white-space: nowrap; }

/* ---- 小组设置补全（M8）---- */
.kmb-team-head { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
.kmb-team-head h3 { margin: 0; font-size: 16px; }
.kmb-team-head .kmb-head-sel { margin-left: auto; max-width: 240px; }
.kmb-team .kmb-tabs { margin-bottom: 12px; }
.kmb-team-body .kmb-section + .kmb-section { margin-top: 18px; }
.kmb-team-archived td:last-child, .kmb-st-objects td:last-child, .kmb-st-kv td:last-child, .kmb-pr-table td:last-child { white-space: nowrap; text-align: right; }
.kmb-team-ssot { margin-top: 16px; }
.kmb-team-ssot summary { cursor: pointer; font-size: 13px; opacity: .8; }
.kmb-team-ssot .kmb-pre { max-height: 360px; overflow: auto; }
.kmb-charter-members textarea.field { min-height: 44px; font-size: 13px; }
.kmb-charter-members td { vertical-align: top; }
.kmb-switch { display: flex; align-items: center; gap: 8px; margin: 10px 0; font-size: 14px; cursor: pointer; }
.kmb-switch input { width: 16px; height: 16px; margin: 0; }
.kmb-bar { height: 6px; border-radius: 3px; background: rgba(127, 127, 127, .18); margin-top: 8px; overflow: hidden; }
.kmb-bar-fill { height: 100%; border-radius: 3px; background: var(--accent, #1450E8); }
.kmb-bar-fill.warn { background: #d9822b; }
.kmb-cn + .kmb-cn { margin-top: 10px; }
.kmb-cn-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.kmb-cn-pending { opacity: .55; }
.kmb-cn-pending .btn { pointer-events: none; }
.kmb-cn-flow { margin-top: 8px; }
.kmb-cn-code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 20px; letter-spacing: 2px; }
.kmb-cn-wait { opacity: .75; font-size: 13px; }
.kmb-org-result, .kmb-kn-result { margin-top: 6px; }
.kmb-st-filter { display: flex; gap: 8px; align-items: center; margin-bottom: 10px; }
.kmb-st-filter .field { flex: 1; min-width: 0; }
.kmb-st-key { font-size: 12px; word-break: break-all; }
.kmb-wb .kmb-section + .kmb-section { margin-top: 16px; }
.kmb-wb-knobs .field-label { margin-top: 10px; }
.kmb-wb-pool td:first-child { font-weight: 600; }
.kmb-sessions-btn svg { display: block; }
.kmb-ss { margin-bottom: 10px; }
.kmb-ss.on { border-color: var(--accent, #1450E8); }
.kmb-ss-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.kmb-ss-ex { margin: 6px 0 0; font-size: 13px; opacity: .8; }
.kmb-ss-meta { display: block; margin-top: 4px; opacity: .65; }
.kmb-ss .kmb-actions { margin-top: 8px; }
.kmb-ss-new, .kmb-ss-rename { display: flex; gap: 8px; align-items: center; margin-bottom: 12px; }
.kmb-ss-rename { margin: 8px 0 0; }
.kmb-ss-new .field, .kmb-ss-rename .field { flex: 1; min-width: 0; }
.kmb-gs { border: 1px dashed rgba(127, 127, 127, .4); border-radius: 10px; padding: 10px 12px; margin-bottom: 12px; }
.kmb-gs h4 { display: flex; align-items: center; gap: 8px; margin: 0 0 8px; }
.kmb-gs h4 small { opacity: .65; font-weight: 400; }
.kmb-gs h4 .btn { margin-left: auto; }
.kmb-gs-steps { margin: 0; padding-left: 20px; display: grid; gap: 6px; }
.kmb-gs-steps li b { display: block; font-size: 13px; }
.kmb-gs-steps li span { font-size: 12px; opacity: .75; }
.kmb-gs-steps li.done { opacity: .55; }
.kmb-gs-steps li.done b { text-decoration: line-through; }

/* ---- 大厅补全（M9）---- */
.kmb-pin { display: inline-flex; margin-left: 4px; opacity: .75; vertical-align: middle; }
.dm-item.kmb-pinned [data-action="dm"] > span:last-of-type { font-weight: 600; }
.kmb-search-btn { margin-left: 4px; }
.kmb-search-form { display: flex; gap: 8px; align-items: center; margin-bottom: 10px; }
.kmb-search-form input { flex: 1; }
.kmb-search-form select { width: auto; }
.kmb-search-tabs { margin-bottom: 8px; }
.kmb-sr-list { display: flex; flex-direction: column; gap: 6px; }
.kmb-sr { display: flex; gap: 10px; align-items: flex-start; padding: 8px 10px; border: 1px solid rgba(127, 127, 127, .2); border-radius: 10px; }
.kmb-sr-main { flex: 1; min-width: 0; }
.kmb-sr-main small { opacity: .7; margin-left: 4px; }
.kmb-sr-body { white-space: pre-wrap; margin-top: 2px; font-size: 13px; }
.kmb-sr-sub { font-size: 12px; opacity: .65; margin-top: 2px; }
.message.kmb-flash { animation: kmb-flash 2.4s ease-out; }
@keyframes kmb-flash { 0% { background: rgba(20, 80, 232, .22); } 100% { background: transparent; } }
.kmb-disc { margin-top: 18px; }
.kmb-disc-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 12px; }
.kmb-disc-card h3 { display: flex; align-items: center; gap: 6px; font-size: 15px; margin: 0 0 8px; }
.kmb-disc-find { display: flex; gap: 8px; margin-bottom: 4px; }
.kmb-disc-find input { flex: 1; }
.kmb-inv, .kmb-jr, .kmb-found { display: flex; gap: 10px; align-items: flex-start; padding: 8px 0; border-top: 1px solid rgba(127, 127, 127, .15); }
.kmb-inv:first-child, .kmb-jr:first-child, .kmb-found:first-child { border-top: 0; }
.kmb-inv-main { flex: 1; min-width: 0; }
.kmb-inv .kmb-actions { margin: 0; }

/* #19903 ③ 邀请合作方（src/backend/invite.js） */
.kmb-invite { display: flex; flex-direction: column; gap: 14px; }
.kmb-inv-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; }
.kmb-inv-card { padding: 12px 14px; border-radius: 10px; border: 1px solid var(--line, rgba(127,127,127,.18)); background: var(--bg-2, rgba(127,127,127,.06)); }
.kmb-inv-card h3 { font-size: 14px; margin: 0 0 8px; }
.kmb-inv-confirm { display: flex; align-items: center; gap: 8px; font-size: 12px; margin: 8px 0 2px; }
.kmb-inv-result { margin-top: 6px; }
.kmb-inv-url { display: flex; gap: 8px; align-items: center; margin-top: 8px; }
.kmb-inv-url .field { flex: 1; min-width: 0; font-family: ui-monospace, monospace; font-size: 12px; }
.kmb-inv-links h3 { font-size: 13px; margin: 4px 0 6px; color: var(--muted, #8a8c9b); }
.kmb-inv-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.kmb-inv-list li { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 10px; border-radius: 8px; background: var(--bg-2, rgba(127,127,127,.06)); }
.kmb-inv-list li small { display: block; font-size: 11px; color: var(--muted, #8a8c9b); }
/* 好友直拉（任务 bf993240）：弹窗第三张卡「从好友里选」+ 逐位结果 */
.kmb-inv-friends.invite-contact-list { max-height: 220px; margin: 6px 0 2px; display: flex; flex-direction: column; gap: 2px; }
.kmb-inv-friends .choice-row { display: flex; align-items: center; gap: 10px; padding: 6px 8px; border-radius: 8px; font-size: 12px; }
.kmb-inv-friends .choice-row:hover { background: var(--bg-2, rgba(127,127,127,.06)); }
.kmb-inv-friends .choice-row > span:not(.avatar) { flex: 1; min-width: 0; }
.kmb-inv-friends .choice-row > .avatar { flex: none; }
.kmb-inv-friends .choice-row small { display: block; font-size: 11px; color: var(--muted, #8a8c9b); }
.kmb-inv-friends .choice-row input { margin-left: auto; }
.kmb-inv-outcomes { list-style: none; margin: 6px 0 0; padding: 0; display: flex; flex-direction: column; gap: 4px; font-size: 12px; }
.kmb-inv-outcomes li { display: flex; gap: 8px; align-items: baseline; }
.kmb-inv-outcomes li b { flex: none; }
.kmb-inv-outcomes li.dim { color: var(--muted, #8a8c9b); }
.kmb-inv-outcomes li.warn { color: var(--warn, #d9a441); }
.kmb-inv-outcomes li.bad { color: var(--danger, #e06c75); }
/* 宇宙级邀请（任务 4a987964）：链接一行、好友一列、编号一行；好友行右侧逐行回显 */
.kmb-uinv { display: flex; flex-direction: column; gap: 12px; }
.kmb-uinv-linkform { display: flex; gap: 8px; align-items: center; }
.kmb-uinv-linkform .field { flex: 1; min-width: 0; }
.kmb-uinv-linkform select.field { flex: 0 0 auto; width: auto; }
.kmb-uinv-friends .invite-contact-list { max-height: 260px; overflow-y: auto; }
.kmb-inv-friends .choice-row small.kmb-uinv-st { display: block; font-size: 11px; color: var(--ok, #3fb37f); }
.kmb-inv-friends .choice-row small.kmb-uinv-st:empty { display: none; }
.kmb-inv-friends .choice-row small.kmb-uinv-st.dim { color: var(--muted, #8a8c9b); }
.kmb-inv-friends .choice-row small.kmb-uinv-st.warn { color: var(--warn, #d9a441); }
.kmb-inv-friends .choice-row small.kmb-uinv-st.bad { color: var(--danger, #e06c75); }
.kmb-uinv-links summary { cursor: pointer; font-size: 13px; }
.kmb-uinv-confirm { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted, #8a8c9b); }

/* P0（任务 eee2abd6）：合作抽屉 · 附件水印开关与回查 */
.kmb-wm { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--line, rgba(255,255,255,.08)); font-size: 13px; }
.kmb-wm-toggle { display: flex; align-items: center; gap: 8px; cursor: pointer; }
.kmb-wm-form { display: flex; gap: 8px; align-items: center; margin-top: 8px; }
.kmb-wm-form .field { flex: 1; min-width: 0; }
.kmb-wm-rows { list-style: none; margin: 8px 0 0; padding: 0; display: flex; flex-direction: column; gap: 4px; font-size: 12px; }
.kmb-wm-rows code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; background: rgba(127,127,160,.14); padding: 1px 6px; border-radius: 6px; }
.kmb-wm-rows small { margin-left: 6px; color: var(--muted, #7c8798); }

/* ---- P2（p2_hall.js）：频道抽屉 / 空频道引导 / 外显投影色点 ---- */
.kmb-form.kmb-inline { margin: 6px 0 10px; }
.kmb-member-row { padding: 4px 0; border-bottom: 1px solid var(--line, rgba(255, 255, 255, .08)); gap: 8px; }
.kmb-member-row:last-child { border-bottom: 0; }
.kmb-log td, .kmb-log th { font-size: 12px; padding: 4px 6px; text-align: left; vertical-align: top; }
.kmb-link { font-size: 12px; text-decoration: underline; opacity: .85; }
.kmb-starter { margin: 24px auto 12px; max-width: 520px; padding: 14px 16px; border-radius: 14px; border: 1px dashed var(--line, rgba(255, 255, 255, .16)); text-align: center; }
.kmb-starter-title { font-weight: 600; font-size: 14px; }
.kmb-starter .kmb-sub { margin-top: 4px; font-size: 12px; opacity: .75; }
.kmb-starter-sugs { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin-top: 10px; }
.kmb-starter-sug { appearance: none; border: 1px solid var(--line, rgba(255, 255, 255, .16)); background: transparent; color: inherit; border-radius: 999px; padding: 4px 10px; font: inherit; font-size: 12px; cursor: pointer; }
.kmb-starter-sug:hover { border-color: var(--accent, #5cc8ff); }
aside.members .avatar { position: relative; }
.kmb-affect { position: absolute; left: -2px; top: -2px; width: 9px; height: 9px; border-radius: 50%; border: 2px solid var(--panel, #10131a); box-sizing: content-box; }
.kmb-affect.is-ok { background: #5cc8ff; }
.kmb-affect.is-calm { background: #9aa4b2; }
.kmb-affect.is-warn { background: #ffc45c; }
.kmb-affect.is-low { background: #8b7bd8; }

/* ---- D06：宇宙窗口（.kmw-chat，容器 kmchat）窄到 ≤ 580px 时的套件页顶栏 ----
   chatwin.css 在这个宽度把 .channelhead h1 设成可收缩省略、.toolbar 设成 flex-shrink:0；套件页的工具区里有 min-width 120px 的小组下拉框，
   于是标题被挤成「站…」。这里让工具区（下拉框）先让位，标题至少留四个字宽。页签过窄时整行换到下一行（.kmb-tabs flex-wrap），不逐字断。 */
@container kmchat (max-width: 580px) {
  .kmw-chat .kmb-head h1 { flex: 0 1 auto; min-width: 4em; }
  .kmw-chat .kmb-head .toolbar { flex: 0 1 auto; min-width: 0; }
  .kmw-chat .kmb-head .toolbar .kmb-head-sel { flex: 0 1 140px; min-width: 64px; width: auto; }
}

/* ---- 星球迁入别人的宇宙（任务 e8b2350f ③，src/backend/migration.js）------------------------------------------------------- */
/* 申请 / 确认对话框里的「会发生什么」：三行小字 */
.kmb-mig-facts { margin: 12px 0; padding: 0 0 0 18px; display: grid; gap: 6px; font-size: 12.5px; line-height: 1.55; color: var(--muted, #7c8798); }
.kmb-mig-read .kmb-kv { margin: 2px 0 0; }
.kmb-mig-err { margin: 0 0 10px; color: var(--k-danger, #ff7a6e); font-size: 13px; padding: 8px 12px; border: 1px solid rgba(255, 122, 110, .35); border-radius: 10px; }
.kmb-mig-err[hidden] { display: none; }
/* 「允许迁入」：读秒没走完是灰的，后面跟一个数 */
.kmb-mig-go { display: inline-flex; align-items: center; gap: 8px; }
.kmb-mig-go b { min-width: 20px; padding: 0 6px; border-radius: 999px; font-size: 11px; line-height: 18px; font-variant-numeric: tabular-nums; text-align: center; background: rgba(127, 127, 127, .28); }
.kmb-mig-go b[hidden] { display: none; }
/* 核心的 .primary 没有禁用态的样子：读秒没走完的「允许迁入」、没有在编小组时的「完成迁入」要看得出点不了 */
.kmb-mig-go:disabled, form[data-form="migration-complete"] button[type="submit"]:disabled { opacity: .45; filter: saturate(.3); box-shadow: none; cursor: not-allowed; }
/* 「身份与管理 · 权限」页顶上的开关 */
.km-rl-perm.kmb-mig-accept { margin: 0 0 12px; align-items: center; }
.kmb-mig-accept .km-rl-tags { justify-content: flex-end; }
.kmb-mig-pending { all: unset; box-sizing: border-box; display: inline-flex; align-items: center; gap: 6px; padding: 2px 8px; border-radius: 999px; font-size: 12px; line-height: 18px; cursor: pointer; color: var(--k-acc, #3b82ff); border: 1px solid color-mix(in srgb, var(--k-acc, #3b82ff) 45%, transparent); }
.kmb-mig-pending:hover, .kmb-mig-pending:focus-visible { background: color-mix(in srgb, var(--k-acc, #3b82ff) 14%, transparent); }
.kmb-mig-pending b { font-variant-numeric: tabular-nums; }
/* 动态面板 / 列表对话框里的一行 */
.kmb-mig-av { width: 30px; height: 30px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; color: var(--muted, #7c8798); background: rgba(127, 127, 127, .16); }
.kmb-mig-inbox { list-style: none; margin: 0 0 12px; padding: 0; display: grid; gap: 8px; }
.kmb-mig-inbox li { display: flex; align-items: center; gap: 12px; padding: 8px 10px; border-radius: 10px; border: 1px solid var(--line, rgba(127, 127, 127, .22)); }
.kmb-mig-inbox .kmb-mig-who { flex: 1 1 auto; min-width: 0; display: grid; gap: 2px; }
.kmb-mig-inbox small { color: var(--muted, #7c8798); font-size: 12px; }
/* 逐人配标签 */
.kmb-mig-count { margin: 8px 0 6px; font-size: 12px; color: var(--muted, #7c8798); }
.kmb-mig-people { list-style: none; margin: 0 0 12px; padding: 0; display: grid; gap: 6px; max-height: min(46vh, 420px); overflow: auto; }
.kmb-mig-person { display: flex; align-items: flex-start; gap: 12px; padding: 8px 10px; border-radius: 10px; border: 1px solid var(--line, rgba(127, 127, 127, .22)); }
.kmb-mig-person.all { border-style: dashed; }
.kmb-mig-person.miss { border-color: var(--k-danger, #ff7a6e); }
.kmb-mig-person .kmb-mig-who { flex: 0 0 34%; min-width: 120px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 13px; line-height: 22px; }
.kmb-mig-tags { flex: 1 1 auto; min-width: 0; display: flex; flex-wrap: wrap; gap: 6px; }
.kmb-mig-tag { all: unset; box-sizing: border-box; position: relative; display: inline-flex; align-items: center; gap: 6px; padding: 2px 9px 2px 7px; border-radius: 999px; font-size: 12px; line-height: 18px; cursor: pointer; user-select: none; border: 1px solid color-mix(in srgb, var(--c, #9aa8d2) 40%, transparent); opacity: .62; }
.kmb-mig-tag > input { position: absolute; opacity: 0; width: 0; height: 0; margin: 0; }
.kmb-mig-tag > i { width: 10px; height: 10px; border-radius: 50%; flex: none; border: 2px solid var(--c, #9aa8d2); box-sizing: border-box; }
.kmb-mig-tag:has(input:checked) { opacity: 1; background: color-mix(in srgb, var(--c, #9aa8d2) 16%, transparent); }
.kmb-mig-tag:has(input:checked) > i { background: var(--c, #9aa8d2); }
.kmb-mig-tag:has(input:focus-visible), button.kmb-mig-tag:focus-visible { outline: 2px solid var(--k-acc, #3b82ff); outline-offset: 1px; }
button.kmb-mig-tag { opacity: .85; border-style: dashed; }
button.kmb-mig-tag:hover { opacity: 1; background: color-mix(in srgb, var(--c, #9aa8d2) 12%, transparent); }
@media (max-width: 640px) { .kmb-mig-person { flex-direction: column; gap: 6px; } .kmb-mig-person .kmb-mig-who { flex: 1 1 auto; } }

/* ==== src/backend/auth.css ==== */
/* Hikos（半个宇宙）· 适配层 KMB · 站内登录页（src/backend/auth.js）。
   只在远端模式、Host 开了站内登录（GET /v1/auth/hikos/config → enabled）时由 boot.js 画出来；本地模式不会出现。
   颜色全部走 src/kmind/tokens.css 的 --k-* 令牌：夜间 / 白昼随 <html data-theme>，和主界面同一套皮肤。 */
#kmb-auth{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;padding:24px;box-sizing:border-box;overflow:auto;
  background:var(--k-ubg,#070a14);color:var(--k-ink,#dfe6ff);font:14px/1.6 -apple-system,'PingFang SC','Noto Sans SC','Segoe UI',Roboto,sans-serif;z-index:99999}
#kmb-auth *{box-sizing:border-box}
.kmb-card{width:100%;max-width:400px;background:rgba(var(--k-bg-rgb,16,20,28),.88);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);
  border:1px solid var(--k-line,rgba(190,210,240,.15));border-radius:18px;padding:30px 28px 22px;box-shadow:0 24px 64px rgba(var(--k-sh,0,0,0),.35)}
.kmb-brand{display:flex;align-items:center;gap:12px;margin-bottom:22px}
.kmb-brand img{width:42px;height:42px;border-radius:11px;flex:none}
.kmb-brand b{display:block;font-size:17px;letter-spacing:.12em;font-weight:600;line-height:1.2}
.kmb-brand small{display:block;color:var(--k-mute);font-size:12px;letter-spacing:.02em;margin-top:2px}
.kmb-title{font-size:20px;font-weight:600;margin:0 0 4px;letter-spacing:.01em}
.kmb-sub{color:var(--k-mute);font-size:13px;margin:0 0 16px;line-height:1.5}
.kmb-sub b{color:var(--k-ink);font-weight:500}
/* D06：登录页的分段页签只管 #kmb-auth 里面。之前没加作用域、又在 m.css 之后加载，flex:1（基准宽 0）漏到所有套件页签（K.tabs）上，
   窄窗里按钮挤在一行收缩到 min-content，「信件」「联系人」逐字换行。 */
#kmb-auth .kmb-tabs{display:flex;gap:4px;background:var(--k-tint);border:1px solid var(--k-line2,transparent);border-radius:10px;padding:4px;margin-bottom:16px}
#kmb-auth .kmb-tabs button{flex:1;height:32px;border:0;border-radius:8px;background:transparent;color:var(--k-mute);font:inherit;font-size:13px;cursor:pointer}
#kmb-auth .kmb-tabs button.on{background:var(--k-bg);color:var(--k-ink);box-shadow:0 1px 4px rgba(var(--k-sh),.18)}
.kmb-field{display:block;margin-bottom:12px}
.kmb-field>span{display:block;font-size:12px;color:var(--k-mute);margin-bottom:6px}
.kmb-field input{width:100%;height:42px;border-radius:10px;border:1px solid var(--k-line);background:var(--k-tint);color:var(--k-ink);padding:0 12px;font:inherit;outline:none;transition:box-shadow .15s,border-color .15s}
.kmb-field input::placeholder{color:var(--k-dim)}
.kmb-field input:focus{box-shadow:var(--k-focus);border-color:var(--k-acc)}
.kmb-field input[aria-invalid="true"]{border-color:var(--k-danger)}
.kmb-hint{font-size:12px;color:var(--k-dim);margin:-6px 0 12px}
.kmb-row{display:flex;gap:8px;align-items:flex-end}
.kmb-row .kmb-field{flex:1;margin-bottom:12px}
.kmb-btn{height:42px;border-radius:10px;border:1px solid transparent;background:var(--k-acc);color:var(--k-on-acc,#fff);font:inherit;font-weight:600;cursor:pointer;width:100%;margin-top:4px;transition:filter .15s}
.kmb-btn:hover{filter:brightness(1.07)}
.kmb-btn[disabled]{opacity:.55;cursor:default;filter:none}
.kmb-btn.ghost{background:transparent;color:var(--k-ink);border-color:var(--k-line)}
.kmb-btn.ghost:hover{background:var(--k-hover)}
.kmb-btn.small{width:auto;min-width:104px;padding:0 12px;margin:0 0 12px;white-space:nowrap;font-weight:500}
.kmb-links{display:flex;justify-content:space-between;gap:12px;margin-top:14px;font-size:13px;flex-wrap:wrap}
.kmb-links a,.kmb-foot a,.kmb-sub a{color:var(--k-acc);text-decoration:none;cursor:pointer}
.kmb-links a:hover,.kmb-foot a:hover,.kmb-sub a:hover{text-decoration:underline}
.kmb-msg{font-size:13px;min-height:20px;margin:2px 0 8px;line-height:1.5}
.kmb-msg.err{color:var(--k-danger)}
.kmb-msg.ok{color:var(--k-ok)}
.kmb-sep{display:flex;align-items:center;gap:10px;color:var(--k-dim);font-size:12px;margin:18px 0 10px}
.kmb-sep:before,.kmb-sep:after{content:"";flex:1;border-top:1px solid var(--k-line)}
.kmb-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:20px;font-size:12px;color:var(--k-dim)}
.kmb-foot span a+a:before{content:"·";color:var(--k-dim);margin:0 6px}
.kmb-done{text-align:center;padding:12px 0 4px}
.kmb-done .kmb-ico{width:52px;height:52px;border-radius:50%;margin:0 auto 14px;display:grid;place-items:center;font-size:26px;background:rgba(var(--k-ok-rgb,23,138,85),.14);color:var(--k-ok)}
.kmb-check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--k-mute);margin:2px 0 12px;cursor:pointer}
.kmb-check input{width:16px;height:16px;accent-color:var(--k-acc)}
@media (max-width:480px){#kmb-auth{padding:14px;align-items:flex-start}.kmb-card{padding:24px 18px 18px;border-radius:14px}}
/* ---- 缺口迁移 M3 · 外部链接落地页（src/backend/m3_links.js：/approve · /federation/approve · /org/accept · /invite/<token>）：同一套卡片，略宽 ---- */
.kmb-linkpage .kmb-card.kmb-link-card{max-width:480px}
.kmb-link-head{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.kmb-linkpage .kmb-chip{display:inline-flex;align-items:center;padding:1px 9px;border-radius:999px;font-size:11px;line-height:18px;background:var(--k-tint);color:var(--k-mute);border:1px solid var(--k-line)}
.kmb-linkpage .kmb-chip.risk-high,.kmb-linkpage .kmb-chip.risk-critical{color:var(--k-danger);border-color:var(--k-danger)}
.kmb-linkpage .kmb-chip.risk-medium{color:var(--k-ink)}
.kmb-link-summary{font-size:17px;line-height:1.4;margin:0 0 12px;word-break:break-word}
.kmb-kv{display:grid;grid-template-columns:max-content 1fr;gap:6px 14px;margin:0 0 14px;font-size:13px}
.kmb-kv dt{color:var(--k-dim);white-space:nowrap}
.kmb-kv dd{margin:0;color:var(--k-ink);word-break:break-word}
.kmb-field textarea{width:100%;min-height:72px;border-radius:10px;border:1px solid var(--k-line);background:var(--k-tint);color:var(--k-ink);padding:10px 12px;font:inherit;font-size:13px;line-height:1.5;resize:vertical;outline:none}
.kmb-field textarea:focus{box-shadow:var(--k-focus);border-color:var(--k-acc)}
.kmb-link-acts{align-items:stretch;margin-top:6px}
.kmb-link-acts .kmb-btn{flex:1;margin-top:0}
.kmb-btn.danger{color:var(--k-danger);border-color:var(--k-danger)}
.kmb-btn.danger:hover{background:rgba(var(--k-danger-rgb,214,69,69),.08)}
.kmb-link-back{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;width:auto;min-width:160px;padding:0 18px;margin-top:10px}
.kmb-link-back:hover{text-decoration:none}
.kmb-done .kmb-ico.no{background:rgba(var(--k-danger-rgb,214,69,69),.14);color:var(--k-danger)}
.kmb-link-wait{text-align:center;padding:18px 0}
.kmb-link-msg:empty{display:none}

/* ==== src/backend/avatar_edit.css ==== */
/* Hikos · 适配层 · 头像编辑器（src/backend/avatar_edit.js，任务 f82dcf89）。叠在核心 #dialog 之上的独立 <dialog>；
   颜色全走 kmind/tokens.css 的 --k-* 令牌，日 / 夜 / 宇宙模式都跟着主题走。 */
dialog.kmb-av-edit{border:1px solid var(--k-line,#44444f);border-radius:14px;background:var(--k-bg,#23232a);color:var(--k-ink,#eee);width:min(420px,calc(100vw - 24px));max-height:92dvh;overflow:auto;padding:20px 20px 18px;box-shadow:0 24px 80px rgba(var(--k-sh,0,0,0),.45);position:relative}
dialog.kmb-av-edit::backdrop{background:rgba(4,8,18,.55);backdrop-filter:blur(2px)}
dialog.kmb-av-edit .modal-title{margin:0 28px 4px 0;font-size:16px;font-weight:700;color:var(--k-ink)}
dialog.kmb-av-edit .modal-sub{margin:0 0 12px;font-size:12px;line-height:1.5;color:var(--k-mute,var(--k-ink2))}
dialog.kmb-av-edit .ib.close{position:absolute;top:12px;right:12px;width:28px;height:28px;border-radius:8px;border:0;background:transparent;color:var(--k-mute);cursor:pointer;font-size:14px}
dialog.kmb-av-edit .ib.close:hover{background:var(--k-hover);color:var(--k-ink)}
.kmb-ae-stage{position:relative;width:min(320px,calc(100vw - 72px));aspect-ratio:1;margin:0 auto;border-radius:12px;overflow:hidden;background:
  repeating-conic-gradient(rgba(127,127,127,.18) 0 25%,transparent 0 50%) 0 0/16px 16px;border:1px solid var(--k-line);touch-action:none;cursor:grab;outline:none;user-select:none;-webkit-user-select:none}
.kmb-ae-stage:active{cursor:grabbing}
.kmb-ae-stage:focus-visible{box-shadow:0 0 0 2px rgba(var(--k-acc-rgb,59,130,255),.7)}
.kmb-ae-stage canvas{display:block;width:100%;height:100%}
.kmb-ae-mask{position:absolute;inset:0;pointer-events:none;border-radius:50%;box-shadow:0 0 0 999px rgba(6,10,20,.42);border:1.5px solid rgba(255,255,255,.75)}
.kmb-ae-mask::after{content:"";position:absolute;inset:-1px;border-radius:50%;outline:1px dashed rgba(var(--k-acc-rgb,59,130,255),.9);outline-offset:-1px}
.kmb-ae-row{display:flex;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap}
.kmb-ae-lab{width:32px;flex:none;font-size:12px;color:var(--k-mute)}
.kmb-ae-row input[type=range]{flex:1;min-width:120px;accent-color:var(--k-acc)}
.kmb-ae-zoom-val{width:44px;text-align:right;font-size:12px;font-variant-numeric:tabular-nums;color:var(--k-ink2)}
.kmb-ae-row .outline{margin-top:0;height:30px;padding:0 10px;border-radius:8px;border:1px solid var(--k-line);color:var(--k-ink2);background:transparent;font-size:12px;cursor:pointer;white-space:nowrap}
.kmb-ae-row .outline:hover{border-color:var(--k-acc);color:var(--k-acc)}
.kmb-ae-tools{justify-content:flex-start}
.kmb-ae-tools .km-file{height:30px;padding:0 10px;font-size:12px}
dialog.kmb-av-edit .footer-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}
dialog.kmb-av-edit .footer-actions .primary{height:32px;padding:0 16px;border-radius:8px;border:0;background:var(--k-acc);color:var(--k-on-acc,#fff);font-weight:600;cursor:pointer}
dialog.kmb-av-edit .footer-actions .outline{margin-top:0;height:32px;padding:0 14px;border-radius:8px;border:1px solid var(--k-line);background:transparent;color:var(--k-ink2);cursor:pointer}
/* 核心头像表单：上传 / 拍照两个入口并排 */
.kmb-ae-files{display:flex;flex-direction:column;gap:6px}
.kmb-ae-files .km-file{justify-content:center}
@media (max-width:520px){dialog.kmb-av-edit{padding:16px 14px 14px}.kmb-ae-lab{width:28px}}
@media (prefers-reduced-motion:reduce){dialog.kmb-av-edit::backdrop{backdrop-filter:none}}

/* ==== src/backend/friends.css ==== */
/* Hikos · 适配层 · 好友页补件（src/backend/friends.js，任务 f82dcf89 / 修士 #20136 ①）。
   三处都要一致：经典壳（body:not(.km-u)）、宇宙模式的聊天窗（#kmu .kmw-chat）、无边框皮肤（html[data-km-edge=none]：
   不画硬线，用层次 / 光晕区分）。颜色一律走 kmind/tokens.css 的 --k-* 令牌，核心旧变量只做兜底。 */

/* ---- 我的编号：顶部芯片（每个标签都在）/ 资料卡 · 设置里的行内条 ---- */
.kmb-my-no.kmb-me-chip{display:inline-flex;align-items:center;gap:8px;margin:0 0 0 12px;padding:4px 6px 4px 10px;border-radius:999px;background:rgba(var(--k-acc-rgb,59,130,255),.10);border:1px solid rgba(var(--k-acc-rgb,59,130,255),.22);flex:none;max-width:100%}
.kmb-my-no.kmb-me-chip>span{font-size:11px;color:var(--k-mute,var(--muted,#8a8c9b));white-space:nowrap}
.kmb-my-no.kmb-me-chip>b{font-size:13px;letter-spacing:.3px;font-variant-numeric:tabular-nums;color:var(--k-ink,var(--text));user-select:all}
.kmb-my-no.kmb-me-chip>.outline,.kmb-my-no>.outline{margin:0;height:24px;padding:0 9px;border-radius:999px;font-size:11px;line-height:1;border:1px solid rgba(var(--k-acc-rgb,59,130,255),.35);color:var(--k-acc,#3b82ff);background:transparent;cursor:pointer}
.kmb-my-no>.outline:hover{background:rgba(var(--k-acc-rgb,59,130,255),.14)}
.kmb-my-no.kmb-me-inline{margin:8px 0 4px;align-self:flex-start}
.kmb-my-no>b.kmb-no-err{color:var(--k-danger,#ff7a6e);font-size:12px}
.channelhead .kmb-me-chip{margin-right:auto}
@media (max-width:720px){.channelhead .kmb-me-chip>span{display:none}.channelhead .kmb-me-chip{margin-left:6px}}

/* Add Friend 页那张卡：跟令牌走（remote.css 里的旧写法用的是核心变量，宇宙模式下发灰） */
.kmb-my-no:not(.kmb-me-chip){background:rgba(var(--k-acc-rgb,59,130,255),.07);border:1px solid rgba(var(--k-acc-rgb,59,130,255),.18);color:var(--k-ink,var(--text))}
.kmb-my-no:not(.kmb-me-chip)>span,.kmb-my-no:not(.kmb-me-chip)>small{color:var(--k-mute,var(--muted,#8a8c9b))}
.kmb-my-no:not(.kmb-me-chip)>b{color:var(--k-ink,var(--text))}

/* ---- 精确查找结果卡（搜索框上方 / Add Friend 输入框下方）---- */
.kmb-exact-slot:empty{display:none}
.kmb-add-lookup{margin:-6px 0 14px}
.kmb-add-lookup:empty{display:none}
.kmb-exact{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 12px;padding:12px 14px;border-radius:12px;background:var(--k-bg2,var(--bg-2,rgba(127,127,127,.08)));border:1px solid var(--k-line,var(--line,rgba(127,127,127,.18)));color:var(--k-ink,var(--text))}
.kmb-exact-who{display:flex;align-items:center;gap:10px;min-width:0;flex:1}
.kmb-exact-who>span{display:flex;flex-direction:column;min-width:0}
.kmb-exact-who strong{font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kmb-exact-who small{font-size:11.5px;color:var(--k-mute,var(--muted,#8a8c9b));font-variant-numeric:tabular-nums}
.kmb-exact-act{display:flex;align-items:center;gap:8px;flex:none}
.kmb-exact-act small{font-size:11.5px;color:var(--k-mute,var(--muted,#8a8c9b))}
.kmb-exact-act .primary{height:30px;padding:0 14px;border-radius:8px;border:0;background:var(--k-acc,#3b82ff);color:var(--k-on-acc,#fff);font-weight:600;font-size:12.5px;cursor:pointer}
.kmb-exact-act .outline{margin:0;height:30px;padding:0 12px;border-radius:8px;font-size:12.5px;border:1px solid var(--k-line,var(--line));color:var(--k-ink2,var(--text));background:transparent;cursor:pointer}
.kmb-exact-none,.kmb-exact-wait,.kmb-exact-off{flex-direction:column;align-items:flex-start;gap:4px}
.kmb-exact-none b{font-size:13px}
.kmb-exact-none small,.kmb-exact-wait small,.kmb-exact-off small{font-size:12px;line-height:1.5;color:var(--k-mute,var(--muted,#8a8c9b))}
.kmb-exact-wait{border-style:dashed}
.kmb-search-hint{margin:6px 0 10px;font-size:11.5px;color:var(--k-mute,var(--muted,#8a8c9b))}
.kmb-search-hint b{color:var(--k-ink2,var(--text));font-weight:600}

/* ---- 开关没开：横幅 ---- */
.kmb-friends-off{display:flex;flex-direction:column;gap:4px;margin:0 0 14px;padding:12px 14px;border-radius:12px;background:rgba(var(--k-amber-rgb,224,134,0),.10);border:1px solid rgba(var(--k-amber-rgb,224,134,0),.28);color:var(--k-ink,var(--text))}
.kmb-friends-off b{font-size:13px}
.kmb-friends-off small{font-size:12px;line-height:1.5;color:var(--k-mute,var(--muted,#8a8c9b))}
form[data-form="add-friend"] input:disabled,form[data-form="add-friend"] button:disabled{opacity:.5;cursor:not-allowed}

/* ---- 无边框皮肤：线退成层，焦点发光 ---- */
html[data-km-edge=none] .kmb-exact,html[data-km-edge=none] .kmb-my-no:not(.kmb-me-chip){border-color:transparent;background:rgba(var(--k-layer-rgb,255,255,255),.06);box-shadow:inset 0 0 0 1px rgba(var(--k-layer-rgb,255,255,255),.05)}
html[data-km-edge=none] .kmb-my-no.kmb-me-chip{border-color:transparent;box-shadow:0 0 18px -8px rgba(var(--k-acc-rgb,59,130,255),.8)}
html[data-km-edge=none] .kmb-friends-off{border-color:transparent;box-shadow:inset 0 0 0 1px rgba(var(--k-amber-rgb,224,134,0),.22)}
html[data-km-edge=none] .kmb-exact-act .outline,html[data-km-edge=none] .kmb-my-no>.outline{border-color:transparent;background:rgba(var(--k-acc-rgb,59,130,255),.12)}

/* ---- 宇宙模式的聊天窗：窄容器下换行、芯片收紧 ---- */
#kmu .kmw-chat .channelhead .kmb-me-chip{margin-left:8px;padding:3px 5px 3px 9px}
#kmu .kmw-chat .kmb-exact{padding:10px 12px}
@container kmchat (max-width:620px){.kmw-chat .channelhead .kmb-me-chip>span{display:none}.kmw-chat .kmb-exact{gap:8px}.kmw-chat .kmb-exact-act{width:100%;justify-content:flex-end}}

/* ---- 任务 683b0be9：对方没起名 → 好友行名字后的「未设昵称」小标签（src/backend/nickname.js） ---- */
.friend-row .kmb-unnamed{display:inline-block;margin-left:6px;padding:0 6px;border-radius:999px;font-size:11px;font-weight:500;line-height:16px;vertical-align:1px;color:var(--k-mute,#8E98A8);background:rgba(var(--k-mute-rgb,142,152,168),.12);border:1px solid rgba(var(--k-mute-rgb,142,152,168),.28);white-space:nowrap}
html[data-km-edge=none] .friend-row .kmb-unnamed{border-color:transparent;background:rgba(var(--k-mute-rgb,142,152,168),.18)}
.kmb-nick-form .field{margin-bottom:6px}

/* ==== src/backend/knowhub.css ==== */
/* Hikos · 远端接线 · 资产库整页（原叫知识中枢；src/backend/knowhub.js；任务 e8a5bf81 / 道哥 #20186 ②③）。
   信息架构对齐经典视图的 KnowledgeHubPage（小组切换 → 智能问答 → 交付物 · 知识页 · 文件夹 · 回收站），样式跟 Hikos 的 --k-* 皮肤令牌走。 */
/* 任务 a189eeda（道哥 #24127 ②）：左右两栏。左栏 = 范围切换（全部 / 星球 / 频道，自己滚、吸顶），右栏 = 问答 → 视图 → 内容。
   DOM 顺序不变（teams → ask → bar → body），由 grid-template-areas 摆位；容器 < 720px 退回单列、左栏变一行横向滚动条（见文件末尾的 @container）。 */
html[data-kmb="remote"] .kmb-page:has(> .kmb-hub), html[data-kmb="remote"] .kmb-hub-modal { container: kmbhub / inline-size; }
html[data-kmb="remote"] .kmb-hub { display: grid; grid-template-columns: var(--kmb-hub-rail, 216px) minmax(0, 1fr); grid-template-rows: auto auto auto; grid-template-areas: "nav ask" "nav bar" "nav body"; gap: 12px 18px; align-items: start; flex: none; max-width: 1240px; }   /* flex:none：在 .kmb-page（列向 flex、overflow:auto）里按内容撑高，页面自己滚，左栏的 sticky 才有得贴 */
html[data-kmb="remote"] .kmb-hub > .kmb-hub-teams { grid-area: nav; }
html[data-kmb="remote"] .kmb-hub > .kmb-hub-ask { grid-area: ask; }
html[data-kmb="remote"] .kmb-hub > .kmb-hub-bar { grid-area: bar; }
html[data-kmb="remote"] .kmb-hub > .kmb-hub-body { grid-area: body; min-width: 0; }

/* ① 范围切换区 = 左栏：标题行 → 筛选框（条目多时）→ 全部 → 星球 → 频道；整栏吸顶、超高自己滚 */
html[data-kmb="remote"] .kmb-hub-teams { display: flex; flex-direction: column; gap: 2px; align-items: stretch; position: sticky; top: 0; align-self: start; max-height: var(--kmb-hub-rail-max, calc(100dvh - 128px)); overflow: auto; overscroll-behavior: contain; scrollbar-width: thin; padding: 8px 6px 10px; border-radius: 14px; background: rgba(var(--k-bg-rgb), .45); box-shadow: inset 0 0 0 1px var(--k-line); }
html[data-kmb="remote"] .kmb-hub-navhead { display: flex; align-items: baseline; justify-content: space-between; padding: 2px 8px 6px; font-size: 11px; letter-spacing: .04em; color: var(--k-dim); text-transform: uppercase; }
html[data-kmb="remote"] .kmb-hub-navq { height: 30px; font-size: 12px; margin: 0 2px 6px; }
html[data-kmb="remote"] .kmb-hub-navsec { display: flex; flex-direction: column; gap: 1px; }
html[data-kmb="remote"] .kmb-hub-navh { display: flex; align-items: center; gap: 6px; margin: 8px 0 3px; padding: 0 8px; font-size: 11px; font-weight: 600; color: var(--k-dim); }
html[data-kmb="remote"] .kmb-hub-navh small { font-weight: 500; font-size: 10.5px; color: var(--k-dim); opacity: .8; font-variant-numeric: tabular-nums; }
html[data-kmb="remote"] .kmb-hub-navempty { margin: 2px 0 4px; padding: 0 8px; font-size: 11.5px; color: var(--k-dim); }
html[data-kmb="remote"] .kmb-hub-chip { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 12px; border-radius: 999px; border: 1px solid var(--k-line); background: rgba(var(--k-bg-rgb), .55); color: var(--k-ink2); font-size: 12.5px; cursor: pointer; transition: background .15s, border-color .15s, color .15s; }
html[data-kmb="remote"] .kmb-hub-chip:hover { background: var(--k-hover); color: var(--k-ink); }
html[data-kmb="remote"] .kmb-hub-chip.on { background: rgba(var(--k-acc-rgb), .14); border-color: rgba(var(--k-acc-rgb), .55); color: var(--k-ink); font-weight: 600; }
html[data-kmb="remote"] .kmb-hub-chip em { font-style: normal; font-size: 10px; line-height: 16px; padding: 0 6px; border-radius: 999px; background: rgba(var(--k-acc-rgb), .18); color: var(--k-acc); }
html[data-kmb="remote"] .kmb-hub-chipname { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 左栏里的范围条目：整行可点的列表项（不是药丸）；当前项左侧一道强调色 */
html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip { width: 100%; justify-content: flex-start; text-align: left; height: 32px; padding: 0 10px 0 9px; border: 0; border-radius: 9px; background: transparent; box-shadow: inset 3px 0 0 transparent; }
html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip:hover { background: var(--k-hover); }
html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip.on { background: rgba(var(--k-acc-rgb), .14); box-shadow: inset 3px 0 0 var(--k-acc); }
html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip .kmb-hub-chipname { flex: 1 1 auto; }
html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip em { flex: none; margin-left: auto; }
html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip svg { flex: none; width: 14px; height: 14px; color: var(--k-ink3); }
html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip.on svg { color: var(--k-acc); }
html[data-kmb="remote"] .kmb-hub-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--c); box-shadow: 0 0 8px var(--c); flex: none; }
html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-dot { margin: 0 3px 0 2px; }

/* ② 智能问答 */
html[data-kmb="remote"] .kmb-hub-ask { border-radius: 14px; background: rgba(var(--k-bg-rgb), .6); box-shadow: inset 0 0 0 1px var(--k-line); padding: 10px 12px 8px; }
html[data-kmb="remote"] .kmb-hub-askrow { display: flex; align-items: center; gap: 10px; color: var(--k-dim); }
html[data-kmb="remote"] .kmb-hub-q { flex: 1; min-width: 0; height: 38px; border: 0; outline: 0; background: transparent; color: var(--k-ink); font-size: 14px; }
html[data-kmb="remote"] .kmb-hub-q::placeholder { color: var(--k-dim); }
html[data-kmb="remote"] .kmb-hub-askline { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; font-size: 11px; color: var(--k-dim); padding: 0 2px; }
html[data-kmb="remote"] .kmb-hub-askline .kmb-ask-tools { margin: 0 0 0 auto; }
html[data-kmb="remote"] .kmb-hub-scope b { color: var(--k-ink3); font-weight: 600; }
html[data-kmb="remote"] .kmb-hub-hits { margin-top: 8px; border-top: 1px solid var(--k-line2); padding-top: 6px; display: flex; flex-direction: column; gap: 2px; }
html[data-kmb="remote"] .kmb-hub-hits[hidden] { display: none; }
html[data-kmb="remote"] .kmb-hub-lh { font-size: 11px; color: var(--k-dim); padding: 2px 4px; }
html[data-kmb="remote"] .kmb-hub-hit { display: flex; align-items: center; gap: 8px; width: 100%; text-align: left; padding: 6px 8px; border: 0; border-radius: 8px; background: transparent; color: var(--k-ink2); cursor: pointer; }
html[data-kmb="remote"] .kmb-hub-hit:hover { background: var(--k-hover); color: var(--k-ink); }
html[data-kmb="remote"] .kmb-hub-hitt { display: flex; flex-direction: column; min-width: 0; flex: 1; }
html[data-kmb="remote"] .kmb-hub-hitt b { font-weight: 600; font-size: 12.5px; }
html[data-kmb="remote"] .kmb-hub-hitt small { color: var(--k-dim); font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html[data-kmb="remote"] .kmb-hub-hit em { font: 600 10.5px/1 "JetBrains Mono", ui-monospace, monospace; font-style: normal; color: var(--k-acc); }
html[data-kmb="remote"] .kmb-hub-card .kmb-ask { margin: 8px 0 0; }

/* ③ 视图芯片 + 内容 */
html[data-kmb="remote"] .kmb-hub-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
html[data-kmb="remote"] .kmb-hub-views { display: flex; gap: 6px; flex-wrap: wrap; }
html[data-kmb="remote"] .kmb-hub-vchip { height: 28px; padding: 0 11px; font-size: 12px; }
html[data-kmb="remote"] .kmb-hub-filter { height: 28px; font-size: 12px; max-width: 240px; margin-left: auto; }
html[data-kmb="remote"] .kmb-hub-hint { margin-left: auto; font-size: 11px; color: var(--k-dim); cursor: help; }
html[data-kmb="remote"] .kmb-hub-refresh { color: var(--k-dim); }
html[data-kmb="remote"] .kmb-hub-filter + .kmb-hub-refresh, html[data-kmb="remote"] .kmb-hub-hint + .kmb-hub-refresh { margin-left: 0; }
html[data-kmb="remote"] .kmb-hub-views + .kmb-hub-refresh { margin-left: auto; }
html[data-kmb="remote"] .kmb-hub-body { display: flex; flex-direction: column; gap: 12px; }
html[data-kmb="remote"] .kmb-hub-path { font-size: 11px; max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html[data-kmb="remote"] .kmb-hub-one, html[data-kmb="remote"] .kmb-hub-sec { border-radius: 14px; background: rgba(var(--k-bg-rgb), .45); box-shadow: inset 0 0 0 1px var(--k-line); padding: 10px 12px; }
html[data-kmb="remote"] .kmb-hub-sech { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--k-ink); margin: 0 0 8px; }
html[data-kmb="remote"] .kmb-hub-sech b { font-weight: 650; }
html[data-kmb="remote"] .kmb-hub-cur { font-style: normal; font-size: 10px; line-height: 16px; padding: 0 6px; border-radius: 999px; background: rgba(var(--k-acc-rgb), .18); color: var(--k-acc); }
html[data-kmb="remote"] .kmb-hub-count { font-size: 11px; }
html[data-kmb="remote"] .kmb-hub-foldbtn { color: var(--k-dim); width: 22px; height: 22px; }
html[data-kmb="remote"] .kmb-hub-enter { margin-left: auto; display: inline-flex; align-items: center; gap: 4px; height: 24px; padding: 0 10px; border-radius: 999px; border: 1px solid var(--k-line); background: transparent; color: var(--k-ink3); font-size: 11.5px; cursor: pointer; }
html[data-kmb="remote"] .kmb-hub-enter:hover { background: var(--k-hover); color: var(--k-ink); }
html[data-kmb="remote"] .kmb-hub-sec.folded .kmb-hub-secbody { display: none; }
html[data-kmb="remote"] .kmb-hub-sec.folded .kmb-hub-sech { margin-bottom: 0; }
html[data-kmb="remote"] .kmb-hub-list .kmb-node { padding: 6px 8px; }

/* 文件夹：按需加载 + 虚拟列表（src/backend/desktree.js；任务 39543285）。行高固定（--kmb-vtree-row 与 desktree.js 的 ROW 同值），
   .kmb-vtree-pad 用总高度撑出滚动条，.kmb-vtree-rows 只装视口里的几十行、按 translateY 落位。
   交付物视图（src/backend/knowdeliver.js；任务 f52be7e9）装进同一个 .kmb-vtree（data-vtree-kind="deliver"），样式全部共用。 */
html[data-kmb="remote"] .kmb-vtree { --kmb-vtree-row: 30px; display: flex; flex-direction: column; gap: 6px; min-height: 0; }
html[data-kmb="remote"] .kmb-vtree-scroll { position: relative; overflow: auto; max-height: var(--kmb-vtree-max, min(62vh, 640px)); overscroll-behavior: contain; contain: paint; border-radius: 8px; outline: none; scrollbar-width: thin; }
html[data-kmb="remote"] .kmb-vtree-scroll:focus-visible { box-shadow: inset 0 0 0 1px rgba(var(--k-acc-rgb), .55); }
html[data-kmb="remote"] .kmb-vtree-pad { position: relative; min-height: var(--kmb-vtree-row); }
html[data-kmb="remote"] .kmb-vtree-rows { position: absolute; left: 0; right: 0; top: 0; will-change: transform; }
html[data-kmb="remote"] .kmb-vtree-rows .kmb-node { height: var(--kmb-vtree-row); box-sizing: border-box; padding-top: 0; padding-bottom: 0; white-space: nowrap; }
html[data-kmb="remote"] .kmb-vtree-rows .kmb-node .kmb-muted { margin-left: 0; flex: none; }
html[data-kmb="remote"] .kmb-vtree-rows .kmb-node .kmb-grow { flex: 1 1 auto; min-width: 0; }
html[data-kmb="remote"] .kmb-vtree-rows .kmb-node .kmb-grow + .kmb-muted, html[data-kmb="remote"] .kmb-vtree-rows .kmb-node .kmb-grow + .kmb-hub-path, html[data-kmb="remote"] .kmb-vtree-rows .kmb-node .kmb-grow + .kmb-chip { margin-left: auto; }
html[data-kmb="remote"] .kmb-vtree-n { min-width: 28px; text-align: right; font-variant-numeric: tabular-nums; }
html[data-kmb="remote"] .kmb-vtree-when { font-size: 11px; }
html[data-kmb="remote"] .kmb-vtree-more { color: var(--k-acc); font-weight: 600; }
html[data-kmb="remote"] .kmb-vtree-more.busy, html[data-kmb="remote"] .kmb-vtree-loading, html[data-kmb="remote"] .kmb-vtree-empty { cursor: default; font-weight: 400; }
html[data-kmb="remote"] .kmb-vtree-loading:hover, html[data-kmb="remote"] .kmb-vtree-empty:hover { background: transparent; }
html[data-kmb="remote"] .kmb-vtree-err { color: var(--k-ink2); }
html[data-kmb="remote"] .kmb-vtree-err .outline { height: 22px; padding: 0 8px; font-size: 11.5px; }
html[data-kmb="remote"] .kmb-vtree-spin { width: 12px; height: 12px; border-radius: 50%; border: 2px solid rgba(var(--k-acc-rgb), .25); border-top-color: var(--k-acc); animation: kmb-vtree-spin .8s linear infinite; flex: none; }
@keyframes kmb-vtree-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { html[data-kmb="remote"] .kmb-vtree-spin { animation: none; } }
html[data-kmb="remote"] .kmb-vtree-note[hidden] { display: none; }
html[data-kmb="remote"] .kmb-hub-dlg .kmb-vtree-scroll { --kmb-vtree-max: min(56vh, 560px); }

/* 宇宙界面里的弹窗版：同一页装进对话框 */
html[data-kmb="remote"] dialog.modal.kmb-hub-dlg { width: min(1040px, 94vw); height: min(760px, 90dvh); max-height: 90dvh; flex-direction: column; overflow: hidden; padding: 18px 18px 14px; }
html[data-kmb="remote"] dialog.modal.kmb-hub-dlg[open] { display: flex; }
html[data-kmb="remote"] .kmb-hub-modal { flex: 1; min-height: 0; overflow: auto; padding: 2px 2px 8px; }
html[data-kmb="remote"] .kmb-hub-dlg .kmb-hub { --kmb-hub-rail: 204px; --kmb-hub-rail-max: calc(min(760px, 90dvh) - 150px); max-width: none; }

/* 任务 aa472a20 · 资产库按频道（src/backend/assetlib.js）：范围芯片里小组与别的频道之间的分隔、工具栏（上传… / 频道规范…）、图库网格、上传 / 规范对话框 */
html[data-kmb="remote"] .kmb-hub-sep { width: 1px; height: 18px; background: var(--k-line); margin: 0 4px; flex: none; }
html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-sep { width: auto; height: 1px; margin: 8px 6px 2px; }
html[data-kmb="remote"] .kmb-hub-chip svg { flex: none; opacity: .8; }
html[data-kmb="remote"] .kmb-hub-tools { display: inline-flex; gap: 6px; margin-left: auto; }
html[data-kmb="remote"] .kmb-hub-filter + .kmb-hub-tools, html[data-kmb="remote"] .kmb-hub-hint + .kmb-hub-tools { margin-left: 0; }
html[data-kmb="remote"] .kmb-hub-tools:empty { display: none; }
html[data-kmb="remote"] .kmb-hub-tools + .kmb-hub-refresh { margin-left: 0; }
html[data-kmb="remote"] .kmb-hub-tool { display: inline-flex; align-items: center; gap: 5px; height: 28px; padding: 0 11px; border-radius: 999px; border: 1px solid var(--k-line); background: rgba(var(--k-bg-rgb), .55); color: var(--k-ink2); font-size: 12px; cursor: pointer; }
html[data-kmb="remote"] .kmb-hub-tool:hover { background: var(--k-hover); color: var(--k-ink); }
html[data-kmb="remote"] .kmb-hub-tool[disabled] { opacity: .45; cursor: not-allowed; }
html[data-kmb="remote"] .kmb-gallery { display: flex; flex-direction: column; gap: 10px; }
html[data-kmb="remote"] .kmb-ggrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
html[data-kmb="remote"] .kmb-gtile { margin: 0; border-radius: 12px; background: rgba(var(--k-bg-rgb), .6); box-shadow: inset 0 0 0 1px var(--k-line); overflow: hidden; cursor: pointer; display: flex; flex-direction: column; transition: box-shadow .15s, transform .15s; }
html[data-kmb="remote"] .kmb-gtile:hover { box-shadow: inset 0 0 0 1px rgba(var(--k-acc-rgb), .55); transform: translateY(-1px); }
html[data-kmb="remote"] .kmb-gthumb { aspect-ratio: 4 / 3; display: flex; align-items: center; justify-content: center; background: rgba(var(--k-bg-rgb), .8); color: var(--k-dim); }
html[data-kmb="remote"] .kmb-gthumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
html[data-kmb="remote"] .kmb-gthumb.failed { color: var(--k-dim); opacity: .5; }
html[data-kmb="remote"] .kmb-gtile figcaption { display: flex; flex-direction: column; gap: 2px; padding: 6px 8px 7px; font-size: 12px; color: var(--k-ink2); min-width: 0; }
html[data-kmb="remote"] .kmb-gtile figcaption small { font-size: 10.5px; }
html[data-kmb="remote"] .kmb-gmore { align-items: center; gap: 10px; font-size: 11.5px; }
html[data-kmb="remote"] .kmb-asset-form .field-label, html[data-kmb="remote"] .kmb-spec .field-label { margin-top: 10px; }
html[data-kmb="remote"] .kmb-asset-progress:empty { display: none; }
html[data-kmb="remote"] .kmb-asset-progress { font-size: 12px; margin-top: 8px; }
html[data-kmb="remote"] dialog.modal.kmb-spec-dlg { width: min(760px, 94vw); }
html[data-kmb="remote"] .kmb-spec-meta { font-size: 12px; margin: 0 0 4px; }
html[data-kmb="remote"] .kmb-spec-body { width: 100%; min-height: 240px; font: 13px/1.55 "JetBrains Mono", ui-monospace, monospace; resize: vertical; }
html[data-kmb="remote"] .kmb-spec-body[readonly] { opacity: .85; }
html[data-kmb="remote"] .kmb-spec-editors { margin: 12px 0 0; padding: 8px 10px 6px; border: 1px solid var(--k-line); border-radius: 10px; }
html[data-kmb="remote"] .kmb-spec-editors legend { font-size: 12px; color: var(--k-dim); padding: 0 4px; }
html[data-kmb="remote"] .kmb-spec-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 4px 12px; max-height: 180px; overflow: auto; }
html[data-kmb="remote"] .kmb-spec-editor { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--k-ink2); padding: 3px 2px; cursor: pointer; }
html[data-kmb="remote"] .kmb-spec-editor em { font-style: normal; font-size: 10px; line-height: 15px; padding: 0 5px; margin-left: 5px; border-radius: 999px; background: rgba(var(--k-acc-rgb), .18); color: var(--k-acc); }
html[data-kmb="remote"] .kmb-spec-editor small { margin-left: auto; font-size: 11px; }

/* #20194：原型的两个中枢在远端都是资产库这一页，assets 一侧的入口收掉（侧栏 / 星球条 / 宇宙菜单 / 右键）；核心的计数角标（本机示例条目的 n/n）也不显示 */
html[data-kmb="remote"] [data-action="km-hub"][data-side="assets"] { display: none !important; }
html[data-kmb="remote"] [data-action="km-hub"] b { display: none; }

/* 任务 a189eeda：容器窄（宇宙界面里的窄弹窗 / 小窗 / 手机）时退回单列，左栏变成一行横向滚动的药丸条——不换行、不成云；筛选框留在条首 */
@container kmbhub (max-width: 719px) {
  html[data-kmb="remote"] .kmb-hub { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto auto auto; grid-template-areas: "nav" "ask" "bar" "body"; gap: 12px; }
  html[data-kmb="remote"] .kmb-hub-teams { position: static; flex-direction: row; flex-wrap: nowrap; align-items: center; gap: 6px; max-height: none; overflow-x: auto; overflow-y: hidden; padding: 4px 2px 6px; background: transparent; box-shadow: none; border-radius: 0; }
  html[data-kmb="remote"] .kmb-hub-navhead, html[data-kmb="remote"] .kmb-hub-navh, html[data-kmb="remote"] .kmb-hub-navempty { display: none; }
  html[data-kmb="remote"] .kmb-hub-navq { flex: none; width: 140px; height: 28px; margin: 0; }
  html[data-kmb="remote"] .kmb-hub-navsec { display: contents; }
  html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip { width: auto; flex: none; height: 30px; padding: 0 12px; border: 1px solid var(--k-line); border-radius: 999px; background: rgba(var(--k-bg-rgb), .55); box-shadow: none; white-space: nowrap; }
  html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip.on { background: rgba(var(--k-acc-rgb), .14); border-color: rgba(var(--k-acc-rgb), .55); box-shadow: none; }
  html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip .kmb-hub-chipname { flex: none; max-width: 180px; }
  html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-chip em { margin-left: 0; }
  html[data-kmb="remote"] .kmb-hub-teams .kmb-hub-sep { width: 1px; height: 18px; margin: 0 4px; }
}

/* ---- 任务 2403e631 ①（道哥 #28740）：从星球进来时页头的「← 返回〈星球名〉」面包屑（knowhub.js crumbHTML；kmb-hub-back）---- */
html[data-kmb="remote"] .kmb-head .kmb-hub-back { display: inline-flex; align-items: center; gap: 5px; width: auto; height: 28px; padding: 0 10px 0 7px; margin-right: 2px; border-radius: 9px; color: var(--k-ink2, var(--text)); font-size: 12.5px; line-height: 1; white-space: nowrap; max-width: 40%; flex: none; }
html[data-kmb="remote"] .kmb-head .kmb-hub-back:hover { background: var(--k-hover, var(--hover)); color: var(--k-ink, var(--text)); }
html[data-kmb="remote"] .kmb-head .kmb-hub-back svg { flex: none; width: 16px; height: 16px; }
html[data-kmb="remote"] .kmb-head .kmb-hub-backlbl { color: var(--k-dim, var(--muted)); }
html[data-kmb="remote"] .kmb-head .kmb-hub-backname { font-weight: 600; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
html[data-kmb="remote"] .kmb-head .kmb-hub-back + .kmb-head-ic { margin-left: 2px; }
@media (max-width: 640px) {
  html[data-kmb="remote"] .kmb-head .kmb-hub-back { max-width: 34%; padding: 0 8px 0 6px; }
  html[data-kmb="remote"] .kmb-head .kmb-hub-backlbl { display: none; }   /* 窄屏只留箭头 + 星球名 */
}

/* ==== src/backend/mbox.css ==== */
/* Hikos · 任务 e8a5bf81（道哥 #20186 第 4 项）· 站内信全局概览（统计 + 往来网络 + 邮箱导航）与组员邮箱。
   颜色一律走皮肤令牌（src/kmind/tokens.css）：白天 / 夜间皮肤各自成立；小组色经 --c 注入。只在远端模式生效。 */

/* ---------- ① 全局概览 ---------- */
html[data-kmb="remote"] .kmb-mo { display: flex; flex-direction: column; gap: 14px; container-type: inline-size; }
html[data-kmb="remote"] .kmb-mo-metrics { grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); }
html[data-kmb="remote"] .kmb-mo-metric { background: var(--k-tint, var(--k-bg)); border-color: var(--k-line); text-align: center; }
html[data-kmb="remote"] .kmb-mo-metric b { color: var(--k-ink); }
html[data-kmb="remote"] .kmb-mo-metric span { color: var(--k-ink3); font-size: 12px; }
html[data-kmb="remote"] .kmb-mo-metric.hot b { color: rgb(var(--k-amber-rgb)); }
html[data-kmb="remote"] .kmb-mo-grid { display: grid; grid-template-columns: minmax(0, 1.7fr) minmax(260px, 1fr); gap: 14px; align-items: start; }
@media (max-width: 960px) { html[data-kmb="remote"] .kmb-mo-grid { grid-template-columns: 1fr; } }
@container (max-width: 820px) { html[data-kmb="remote"] .kmb-mo-grid { grid-template-columns: 1fr; } html[data-kmb="remote"] .kmb-mo-metrics { grid-template-columns: repeat(auto-fit, minmax(84px, 1fr)); } }   /* 宇宙视图的对话窗等窄容器 */
html[data-kmb="remote"] .kmb-mo-net, html[data-kmb="remote"] .kmb-mo-nav { background: var(--k-tint, var(--k-bg)); border: 1px solid var(--k-line); border-radius: 14px; padding: 12px 14px; min-width: 0; }
html[data-kmb="remote"] .kmb-mo-net > header, html[data-kmb="remote"] .kmb-mo-nav > header { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 10px; margin-bottom: 6px; }
html[data-kmb="remote"] .kmb-mo-net > header b, html[data-kmb="remote"] .kmb-mo-nav > header b { font-size: 14px; color: var(--k-ink); white-space: nowrap; }
html[data-kmb="remote"] .kmb-mo-net > header span, html[data-kmb="remote"] .kmb-mo-nav > header span { font-size: 12px; }
html[data-kmb="remote"] .kmb-mo-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-left: auto; font-size: 11.5px; color: var(--k-ink3); }   /* 在标题行右侧（放不下就换到标题下一行），不再沉到面板底部 */
html[data-kmb="remote"] .kmb-mo-legend span { display: inline-flex; align-items: center; gap: 6px; }
html[data-kmb="remote"] .kmb-mo-legend i { display: inline-block; width: 18px; height: 0; border-top: 2px dashed var(--k-line); }
html[data-kmb="remote"] .kmb-mo-legend i.lg-e { border-top: 3px solid rgba(var(--k-acc-rgb), .55); }
html[data-kmb="remote"] .kmb-mo-legend i.lg-w, html[data-kmb="remote"] .kmb-mo-legend i.lg-h { width: 8px; height: 8px; border: 0; border-radius: 50%; background: var(--k-acc); box-shadow: 0 0 6px var(--k-acc); }
html[data-kmb="remote"] .kmb-mo-legend i.lg-h { background: rgb(var(--k-amber-rgb)); box-shadow: 0 0 6px rgb(var(--k-amber-rgb)); }

/* 网络图：SVG 自适应宽度，颜色全部取令牌 */
html[data-kmb="remote"] .kmb-net { display: block; width: 100%; height: auto; max-height: 520px; overflow: visible; font-family: inherit; }
html[data-kmb="remote"] .kmb-net-s { stroke: var(--k-line); stroke-width: 1.2; stroke-dasharray: 3 4; fill: none; }
html[data-kmb="remote"] .kmb-net-e { fill: none; stroke: rgba(var(--k-acc-rgb), .42); stroke-linecap: round; transition: stroke .2s; }
html[data-kmb="remote"] .kmb-net-e.hot { stroke: rgba(var(--k-amber-rgb), .6); }
html[data-kmb="remote"] .kmb-net-e:hover { stroke: var(--k-acc); }
html[data-kmb="remote"] .kmb-net-w { fill: var(--k-acc); filter: drop-shadow(0 0 3px var(--k-acc)); pointer-events: none; }
html[data-kmb="remote"] .kmb-net-w.hot { fill: rgb(var(--k-amber-rgb)); filter: drop-shadow(0 0 4px rgb(var(--k-amber-rgb))); }
html[data-theme="night"][data-kmb="remote"] .kmb-net-w { filter: drop-shadow(0 0 6px var(--k-acc)) drop-shadow(0 0 12px rgba(var(--k-acc-rgb), .5)); }
html[data-theme="night"][data-kmb="remote"] .kmb-net-w.hot { filter: drop-shadow(0 0 6px rgb(var(--k-amber-rgb))) drop-shadow(0 0 12px rgba(var(--k-amber-rgb), .5)); }
html[data-kmb="remote"] .kmb-net-n { cursor: pointer; outline: none; }
html[data-kmb="remote"] .kmb-net-halo { fill: var(--c, var(--k-acc)); opacity: 0; transition: opacity .18s; }
html[data-kmb="remote"] .kmb-net-n:hover .kmb-net-halo, html[data-kmb="remote"] .kmb-net-n:focus-visible .kmb-net-halo { opacity: .18; }
html[data-kmb="remote"] .kmb-net-c { fill: var(--c, var(--k-acc)); stroke: var(--k-bg); stroke-width: 2; }
html[data-kmb="remote"] .kmb-net-member .kmb-net-c { fill: var(--k-bg); stroke: var(--c, var(--k-acc)); stroke-width: 2; }
html[data-kmb="remote"] .kmb-net-owner .kmb-net-c { fill: var(--k-ink); stroke: var(--k-bg); }
html[data-kmb="remote"] .kmb-net-more .kmb-net-c { fill: var(--k-hover); stroke: var(--k-line); stroke-dasharray: 2 2; }
html[data-kmb="remote"] .kmb-net-i { text-anchor: middle; font-size: 12px; font-weight: 600; fill: var(--k-on-acc, #fff); pointer-events: none; }
html[data-kmb="remote"] .kmb-net-member .kmb-net-i { fill: var(--c, var(--k-acc)); font-size: 11px; }
html[data-kmb="remote"] .kmb-net-owner .kmb-net-i { fill: var(--k-bg); font-size: 14px; }
html[data-kmb="remote"] .kmb-net-more .kmb-net-i { fill: var(--k-ink3); font-size: 10px; }
html[data-kmb="remote"] .kmb-net-l { text-anchor: middle; font-size: 11px; fill: var(--k-ink2); pointer-events: none; }
html[data-kmb="remote"] .kmb-net-leader .kmb-net-l { font-weight: 600; fill: var(--k-ink); }
html[data-kmb="remote"] .kmb-net-b circle { fill: rgb(var(--k-amber-rgb)); stroke: var(--k-bg); stroke-width: 1.5; }
html[data-kmb="remote"] .kmb-net-b text { text-anchor: middle; font-size: 9px; font-weight: 700; fill: #fff; }
html[data-kmb="remote"] .kmb-net-struct { opacity: .9; }

/* 邮箱导航 */
html[data-kmb="remote"] .kmb-mo-team { margin: 6px 0 10px; }
html[data-kmb="remote"] .kmb-mo-team h4 { display: flex; align-items: center; gap: 8px; margin: 6px 0 4px; font-size: 12.5px; color: var(--k-ink2); font-weight: 600; }
html[data-kmb="remote"] .kmb-mo-team h4 .kmb-muted { font-weight: 400; margin-left: auto; font-size: 11.5px; }
html[data-kmb="remote"] .kmb-mo-team.flash { animation: kmb-mo-flash 1.2s ease-out; border-radius: 10px; }
@keyframes kmb-mo-flash { 0% { background: rgba(var(--k-acc-rgb), .18); } 100% { background: transparent; } }
html[data-kmb="remote"] .kmb-mo-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--c, var(--k-acc)); flex: none; }
html[data-kmb="remote"] .kmb-mo-box { display: flex; align-items: center; gap: 8px; width: 100%; padding: 6px 8px; border: 1px solid transparent; border-radius: 10px; background: transparent; color: var(--k-ink); text-align: left; cursor: pointer; font: inherit; }
html[data-kmb="remote"] .kmb-mo-box:hover { background: var(--k-hover); border-color: var(--k-line); }
html[data-kmb="remote"] .kmb-mo-box img, html[data-kmb="remote"] .kmb-mo-box .avatar { width: 26px; height: 26px; border-radius: 50%; flex: none; }
html[data-kmb="remote"] .kmb-mo-av { display: inline-grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; background: var(--k-sel); color: var(--k-ink2); font-size: 12px; font-style: normal; flex: none; }
html[data-kmb="remote"] .kmb-mo-av.big { width: 40px; height: 40px; font-size: 16px; }
html[data-kmb="remote"] .kmb-mo-av.sm { width: 22px; height: 22px; font-size: 11px; }
html[data-kmb="remote"] .kmb-mo-name { display: flex; align-items: center; gap: 6px; min-width: 0; font-size: 13px; }
html[data-kmb="remote"] .kmb-mo-name small { font-size: 10.5px; padding: 0 5px; border-radius: 6px; background: rgba(var(--k-acc-rgb), .12); color: var(--k-acc); }
html[data-kmb="remote"] .kmb-mo-box.leader .kmb-mo-name { font-weight: 600; }
html[data-kmb="remote"] .kmb-mo-io { margin-left: auto; font-size: 11px; color: var(--k-ink3); white-space: nowrap; }
html[data-kmb="remote"] .kmb-mo-unread { min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: rgb(var(--k-amber-rgb)); color: #fff; font-size: 11px; font-weight: 700; display: inline-grid; place-items: center; }
html[data-kmb="remote"] .kmb-mo-box svg:last-child { color: var(--k-dim); flex: none; }

/* ---------- ② 组员邮箱 ---------- */
html[data-kmb="remote"] .kmb-mbox-wrap { container-type: inline-size; flex: 1; min-height: 0; }
html[data-kmb="remote"] .kmb-mbox { display: grid; grid-template-columns: 232px minmax(0, 1fr); gap: 14px; align-items: start; min-height: 0; }
html[data-kmb="remote"] .kmb-mbox-q { height: 28px; font-size: 12px; width: 180px; padding: 0 10px; }
html[data-kmb="remote"] .kmb-mbox-side { display: flex; flex-direction: column; gap: 10px; background: var(--k-tint, var(--k-bg)); border: 1px solid var(--k-line); border-radius: 14px; padding: 12px; position: sticky; top: 0; }
html[data-kmb="remote"] .kmb-mbox-who { display: flex; align-items: center; gap: 10px; }
html[data-kmb="remote"] .kmb-mbox-who img, html[data-kmb="remote"] .kmb-mbox-who .avatar { width: 40px; height: 40px; border-radius: 50%; }
html[data-kmb="remote"] .kmb-mbox-who b { display: block; font-size: 14px; color: var(--k-ink); }
html[data-kmb="remote"] .kmb-mbox-who small { color: var(--k-ink3); font-size: 11.5px; }
html[data-kmb="remote"] .kmb-mbox-go { display: flex; gap: 6px; }
html[data-kmb="remote"] .kmb-mbox-go button { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; padding: 4px 10px; }
html[data-kmb="remote"] .kmb-mbox-filters, html[data-kmb="remote"] .kmb-mbox-labels, html[data-kmb="remote"] .kmb-mbox-peers { display: flex; flex-direction: column; gap: 2px; }
html[data-kmb="remote"] .kmb-mbox-side .section-label { margin: 6px 0 2px; font-size: 11px; color: var(--k-ink3); }
html[data-kmb="remote"] .kmb-mbox-chip { display: flex; align-items: center; justify-content: space-between; gap: 6px; padding: 6px 10px; border: 0; border-radius: 9px; background: transparent; color: var(--k-ink2); font: inherit; font-size: 13px; text-align: left; cursor: pointer; }
html[data-kmb="remote"] .kmb-mbox-chip:hover { background: var(--k-hover); }
html[data-kmb="remote"] .kmb-mbox-chip.on { background: var(--k-sel); color: var(--k-acc); font-weight: 600; }
html[data-kmb="remote"] .kmb-mbox-chip.dim { color: var(--k-dim); font-size: 12px; }
html[data-kmb="remote"] .kmb-mbox-chip .kmb-n { font-size: 11px; color: var(--k-ink3); font-style: normal; }
html[data-kmb="remote"] .kmb-mbox-chip.on .kmb-n { color: var(--k-acc); }
html[data-kmb="remote"] .kmb-mbox-peer { display: flex; align-items: center; gap: 8px; padding: 5px 8px; border: 0; border-radius: 9px; background: transparent; color: var(--k-ink2); font: inherit; font-size: 12.5px; text-align: left; cursor: pointer; }
html[data-kmb="remote"] .kmb-mbox-peer:hover { background: var(--k-hover); }
html[data-kmb="remote"] .kmb-mbox-peer.on { background: var(--k-sel); color: var(--k-acc); }
html[data-kmb="remote"] .kmb-mbox-peer img, html[data-kmb="remote"] .kmb-mbox-peer .avatar { width: 22px; height: 22px; border-radius: 50%; }
html[data-kmb="remote"] .kmb-mbox-peer span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html[data-kmb="remote"] .kmb-mbox-peer small { color: var(--k-dim); font-size: 11px; }
html[data-kmb="remote"] .kmb-mbox-main { min-width: 0; background: var(--k-tint, var(--k-bg)); border: 1px solid var(--k-line); border-radius: 14px; overflow: hidden; }
html[data-kmb="remote"] .kmb-mbox-crumb { display: flex; align-items: center; gap: 10px; padding: 8px 14px; border-bottom: 1px solid var(--k-line); font-size: 12px; color: var(--k-ink2); }
html[data-kmb="remote"] .kmb-mbox-crumb .kmb-muted { margin-left: auto; }
/* D05：列表底部的取回范围 + 加载更早 / 已到最早 */
html[data-kmb="remote"] .kmb-mbox-pager { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 6px 12px; padding: 12px 14px 16px; font-size: 12px; color: var(--k-ink2); }
html[data-kmb="remote"] .kmb-mbox-pager .kmb-mbox-end { color: var(--k-ink2); }
html[data-kmb="remote"] .kmb-mbox-row { display: grid; grid-template-columns: 18px 128px minmax(0, 1fr) auto; align-items: center; gap: 10px; width: 100%; padding: 9px 14px; border: 0; border-bottom: 1px solid var(--k-line2, var(--k-line)); background: transparent; color: var(--k-ink2); font: inherit; font-size: 13px; text-align: left; cursor: pointer; }
html[data-kmb="remote"] .kmb-mbox-row:hover { background: var(--k-hover); }
html[data-kmb="remote"] .kmb-mbox-row.unread { color: var(--k-ink); }
html[data-kmb="remote"] .kmb-mbox-row.unread .kmb-mbox-cp, html[data-kmb="remote"] .kmb-mbox-row.unread .kmb-mbox-subj b { font-weight: 700; }
html[data-kmb="remote"] .kmb-mbox-row.archived { opacity: .7; }
html[data-kmb="remote"] .kmb-mbox-dir { display: inline-grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; color: var(--k-dim); font-style: normal; }
html[data-kmb="remote"] .kmb-mbox-dir.in { color: var(--k-acc); background: rgba(var(--k-acc-rgb), .12); }
html[data-kmb="remote"] .kmb-mbox-dir.in svg { transform: rotate(180deg); }
html[data-kmb="remote"] .kmb-mbox-row.unread .kmb-mbox-dir.in { background: rgb(var(--k-amber-rgb)); color: #fff; }
html[data-kmb="remote"] .kmb-mbox-cp { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html[data-kmb="remote"] .kmb-mbox-cp small { margin-left: 4px; color: var(--k-dim); font-size: 11px; }
html[data-kmb="remote"] .kmb-mbox-subj { display: flex; align-items: center; gap: 6px; min-width: 0; overflow: hidden; white-space: nowrap; }
html[data-kmb="remote"] .kmb-mbox-subj b { font-weight: 500; flex: none; max-width: 60%; overflow: hidden; text-overflow: ellipsis; }
html[data-kmb="remote"] .kmb-mbox-snip { color: var(--k-ink3); overflow: hidden; text-overflow: ellipsis; min-width: 0; }
html[data-kmb="remote"] .kmb-mbox-tag { display: inline-block; padding: 0 6px; border-radius: 6px; background: rgba(var(--k-acc-rgb), .1); color: var(--k-acc); font-size: 11px; font-style: normal; line-height: 18px; white-space: nowrap; }
html[data-kmb="remote"] .kmb-mbox-tag.sys { background: var(--k-hover); color: var(--k-ink3); }
html[data-kmb="remote"] .kmb-mbox-meta { display: flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--k-dim); white-space: nowrap; }
html[data-kmb="remote"] .kmb-mbox-meta small { padding: 0 5px; border-radius: 6px; background: var(--k-hover); }
@media (max-width: 640px) { html[data-kmb="remote"] .kmb-mbox-row { grid-template-columns: 18px minmax(0, 1fr) auto; } html[data-kmb="remote"] .kmb-mbox-cp { display: none; } }

/* 读信 */
html[data-kmb="remote"] .kmb-mbox-read { display: flex; flex-direction: column; gap: 10px; padding: 12px 14px 20px; }
html[data-kmb="remote"] .kmb-mbox-readhead { display: flex; align-items: center; gap: 12px; }
html[data-kmb="remote"] .kmb-mbox-readhead b { display: block; font-size: 15px; color: var(--k-ink); }
html[data-kmb="remote"] .kmb-mbox-readhead small { display: block; font-size: 12px; }
html[data-kmb="remote"] .kmb-mbox-readhead button { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
html[data-kmb="remote"] .kmb-mbox-backbtn svg { transform: rotate(180deg); }
html[data-kmb="remote"] .kmb-mbox-letters { display: flex; flex-direction: column; gap: 10px; }
html[data-kmb="remote"] .kmb-mbox-letter { border: 1px solid var(--k-line); border-radius: 12px; padding: 10px 14px; background: var(--k-bg); }
html[data-kmb="remote"] .kmb-mbox-letter.out { border-left: 3px solid rgba(var(--k-acc-rgb), .45); }
html[data-kmb="remote"] .kmb-mbox-letter.in { border-left: 3px solid var(--k-line); }
html[data-kmb="remote"] .kmb-mbox-letter.unread { border-left-color: rgb(var(--k-amber-rgb)); }
html[data-kmb="remote"] .kmb-mbox-letter header { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-bottom: 6px; font-size: 12.5px; }
html[data-kmb="remote"] .kmb-mbox-from { font-weight: 600; color: var(--k-ink); }
html[data-kmb="remote"] .kmb-mbox-letter header time { margin-left: auto; font-size: 11.5px; }
html[data-kmb="remote"] .kmb-mbox-letter header .link { font-size: 12px; }
html[data-kmb="remote"] .kmb-mbox-text { font-size: 13.5px; line-height: 1.6; color: var(--k-ink); white-space: normal; word-break: break-word; }
html[data-kmb="remote"] .kmb-mbox-atts { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
html[data-kmb="remote"] .kmb-mbox-att { display: inline-flex; align-items: center; gap: 6px; padding: 3px 8px; border: 1px solid var(--k-line); border-radius: 8px; font-size: 12px; color: var(--k-ink2); background: var(--k-tint, var(--k-bg)); }
html[data-kmb="remote"] .kmb-mbox-att small { color: var(--k-dim); }
html[data-kmb="remote"] .kmb-mbox-att .link { font-size: 12px; padding: 0 2px; }
html[data-kmb="remote"] .kmb-mbox-labels-row { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 8px; }
html[data-kmb="remote"] .kmb-mbox-ptab { display: flex; flex-direction: column; gap: 12px; }
html[data-kmb="remote"] .kmb-mbox-ptab .kmb-metrics { grid-template-columns: repeat(4, 1fr); }

/* 会话顶栏新按钮（邮箱 / 插件）与「会话」同形 */
html[data-kmb="remote"] .kmb-dmtool svg { display: block; }

/* 窄容器（宇宙视图的对话窗 / 手机）：左栏收成横向芯片条，列表一栏。放在文件末尾：同特异性靠后者赢 */
@media (max-width: 860px) { html[data-kmb="remote"] .kmb-mbox { grid-template-columns: 1fr; } }
@container (max-width: 760px) {
  html[data-kmb="remote"] .kmb-mbox { grid-template-columns: 1fr; }
  html[data-kmb="remote"] .kmb-mbox-side { position: static; }
  html[data-kmb="remote"] .kmb-mbox-filters, html[data-kmb="remote"] .kmb-mbox-labels, html[data-kmb="remote"] .kmb-mbox-peers { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 4px; }
  html[data-kmb="remote"] .kmb-mbox-side .section-label { width: 100%; margin: 4px 0 0; }
  html[data-kmb="remote"] .kmb-mbox-chip { padding: 4px 10px; border: 1px solid var(--k-line); border-radius: 999px; font-size: 12.5px; }
  html[data-kmb="remote"] .kmb-mbox-peer { padding: 3px 8px 3px 4px; border: 1px solid var(--k-line); border-radius: 999px; }
  html[data-kmb="remote"] .kmb-mbox-peer small { display: none; }
  html[data-kmb="remote"] .kmb-mbox-peer span { flex: none; max-width: 9em; }
}
@container (max-width: 560px) { html[data-kmb="remote"] .kmb-mbox-row { grid-template-columns: 18px minmax(0, 1fr) auto; } html[data-kmb="remote"] .kmb-mbox-cp { display: none; } }

/* ==== src/backend/deliver.css ==== */
/* Hikos · 任务 e8a5bf81（#20189 后半）· 单聊里组员交出的文件：交付卡 / 芯片 / 折叠的过程文件。颜色走皮肤令牌，白天 / 夜间皆可。 */
html[data-kmb="remote"] .kmb-dl { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; max-width: 560px; }
html[data-kmb="remote"] .kmb-dl-cards { display: flex; flex-direction: column; gap: 6px; }
html[data-kmb="remote"] .kmb-dl-card { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 10px; border: 1px solid var(--k-line); border-radius: 12px; background: var(--k-tint, var(--k-bg)); color: var(--k-ink); text-align: left; font: inherit; cursor: pointer; transition: border-color .15s, background .15s; }
html[data-kmb="remote"] .kmb-dl-card:hover { border-color: rgba(var(--k-acc-rgb), .55); background: var(--k-hover); }
html[data-kmb="remote"] .kmb-dl-ic { display: grid; place-items: center; width: 36px; height: 40px; border-radius: 9px; background: rgba(var(--k-acc-rgb), .1); color: var(--k-acc); flex: none; }
html[data-kmb="remote"] .kmb-dl-txt { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }
html[data-kmb="remote"] .kmb-dl-txt b { font-size: 13.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html[data-kmb="remote"] .kmb-dl-txt small { font-size: 11.5px; color: var(--k-ink3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html[data-kmb="remote"] .kmb-dl-go { display: inline-flex; align-items: center; gap: 2px; padding: 4px 8px; border-radius: 8px; border: 1px solid var(--k-line); font-size: 12px; color: var(--k-acc); white-space: nowrap; flex: none; }
html[data-kmb="remote"] .kmb-dl-more { align-self: flex-start; padding: 2px 8px; border: 0; background: transparent; color: var(--k-acc); font: inherit; font-size: 12px; cursor: pointer; }
html[data-kmb="remote"] .kmb-dl-chips { display: flex; flex-wrap: wrap; gap: 6px; }
html[data-kmb="remote"] .kmb-dl-chip { display: inline-flex; align-items: center; gap: 5px; max-width: 100%; padding: 3px 9px; border: 1px solid var(--k-line); border-radius: 999px; background: var(--k-tint, var(--k-bg)); color: var(--k-ink2); font: inherit; font-size: 12px; cursor: pointer; }
html[data-kmb="remote"] .kmb-dl-chip:hover { border-color: rgba(var(--k-acc-rgb), .55); color: var(--k-acc); }
html[data-kmb="remote"] .kmb-dl-chip span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html[data-kmb="remote"] .kmb-dl-chip small { color: var(--k-dim); }
html[data-kmb="remote"] .kmb-dl-chip.process { color: var(--k-ink3); border-style: dashed; }
html[data-kmb="remote"] .kmb-dl-process { display: flex; flex-direction: column; gap: 6px; }
html[data-kmb="remote"] .kmb-dl-ptoggle { display: inline-flex; align-items: center; gap: 6px; align-self: flex-start; padding: 2px 6px 2px 2px; border: 0; background: transparent; color: var(--k-ink3); font: inherit; font-size: 12px; cursor: pointer; border-radius: 6px; }
html[data-kmb="remote"] .kmb-dl-ptoggle:hover { color: var(--k-ink); background: var(--k-hover); }
html[data-kmb="remote"] .kmb-dl-ptoggle small { color: var(--k-dim); font-size: 11px; }
html[data-kmb="remote"] .kmb-dl-ptoggle svg { transition: transform .15s; }
html[data-kmb="remote"] .kmb-dl-process.open .kmb-dl-ptoggle svg { transform: rotate(180deg); }
@media (max-width: 560px) { html[data-kmb="remote"] .kmb-dl-ptoggle small { display: none; } }

/* ==== src/backend/notify.css ==== */
/* Hikos · 远端接线 · 新消息小弹窗（src/backend/notify.js，任务 7a3561d8）：从「动态」按钮旁弹出的一叠新消息 + 用户设置里的勾选块 */
.kmb-pop{position:fixed;z-index:69;overflow:auto;scrollbar-width:thin;border-radius:14px;background:rgba(var(--k-bg-rgb),.97);border:1px solid var(--k-line);box-shadow:0 18px 50px rgba(var(--k-sh),.22);padding:6px 6px 8px;animation:kmb-pop-in .18s ease-out;font-size:13px}
.kmb-pop[hidden]{display:none}
.kmb-pop::before{content:"";position:absolute;left:var(--kmb-pop-arrow,24px);width:12px;height:12px;background:inherit;border:1px solid var(--k-line);transform:translateX(-50%) rotate(45deg)}
.kmb-pop:not(.kmb-pop-up)::before{top:-7px;border-right:0;border-bottom:0}
.kmb-pop.kmb-pop-up::before{bottom:-7px;border-left:0;border-top:0}
.kmb-pop-h{display:flex;align-items:center;gap:8px;padding:4px 6px 6px}
.kmb-pop-h b{font-size:13px}
.kmb-pop-n{flex:1;opacity:.6;font-size:12px}
.kmb-pop-ic{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:8px;border:0;background:transparent;color:inherit;cursor:pointer;opacity:.7}
.kmb-pop-ic:hover{opacity:1;background:rgba(var(--k-mute-rgb),.12)}
.kmb-pop-item{display:flex;align-items:flex-start;gap:10px;width:100%;text-align:left;padding:8px;border:0;border-radius:10px;background:transparent;color:inherit;cursor:pointer;font:inherit}
.kmb-pop-item:hover,.kmb-pop-item:focus-visible{background:rgba(var(--k-mute-rgb),.12);outline:none}
.kmb-pop-item.kmb-pop-at{box-shadow:inset 3px 0 0 var(--k-acc)}
.kmb-pop-t{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.kmb-pop-t b{font-size:13px;line-height:1.3}
.kmb-pop-t em{font-style:normal;font-size:11.5px;opacity:.65;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmb-pop-t p{margin:0;font-size:12.5px;line-height:1.4;opacity:.9;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.kmb-pop-item time{font-size:11px;opacity:.55;white-space:nowrap;padding-top:2px}
@keyframes kmb-pop-in{from{opacity:0;transform:translateY(6px)}}
@media (prefers-reduced-motion:reduce){.kmb-pop{animation:none}}
/* 用户设置 › Notifications：按宇宙 / 星球勾选 */
.kmb-pop-pick{margin-top:10px;padding-top:6px;border-top:1px solid var(--k-line)}
.kmb-pop-pick[hidden]{display:none}
.kmb-pop-uni{margin:6px 0}
.kmb-pop-uni>.toggleline b{font-weight:600}
.kmb-pop-rooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:0 12px;padding-left:22px}
.kmb-pop-rooms .toggleline{font-size:12.5px;opacity:.9}
.kmb-pop-rooms input:disabled+*,.kmb-pop-rooms label:has(input:disabled){opacity:.45}
/* 任务 b61b5aff（谢伊 #23270）· ① 叠不下的「还有 N 条」 ② 不显示来源与内容时的一行 ③ 动态面板里的「新消息」区块与 pulse */
.kmb-pop-n i,.kmb-pop-t b i,.kmb-pop-more i{font-style:normal}
.kmb-pop-more{display:block;width:100%;margin-top:2px;padding:7px 8px;border:0;border-radius:10px;background:transparent;color:var(--k-acc);font:inherit;font-size:12px;cursor:pointer;text-align:center}
.kmb-pop-more:hover,.kmb-pop-more:focus-visible{background:rgba(var(--k-acc-rgb),.1);outline:none}
.kmb-pop-ico{flex:none;width:30px;height:30px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:rgba(var(--k-acc-rgb),.14);color:var(--k-acc)}
.kmb-pop-blind .kmb-pop-t em{white-space:normal}
.kmb-pop-atn{font-style:normal;font-weight:600;font-size:11px;margin-left:8px;padding:1px 7px;border-radius:9px;background:rgba(var(--k-acc-rgb),.14);color:var(--k-acc);vertical-align:1px}
/* 动态面板 › 新消息：蓝调的折叠行（等你决定 / 未读提醒是琥珀色），@ 你的左侧一道 */
.kmb-feed-sec{display:flex;align-items:center;justify-content:space-between}
.kmb-feed-clear{border:0;background:transparent;color:inherit;opacity:.6;font:inherit;font-size:11px;letter-spacing:0;cursor:pointer;padding:2px 7px;border-radius:6px}
.kmb-feed-clear:hover,.kmb-feed-clear:focus-visible{opacity:1;background:rgba(var(--k-mute-rgb),.12);outline:none}
.km-ow-need.kmb-feed-row{background:rgba(var(--k-acc-rgb),.06);box-shadow:inset 0 0 0 1px rgba(var(--k-acc-rgb),.16)}
.km-ow-need.kmb-feed-row.kmb-feed-at{box-shadow:inset 3px 0 0 var(--k-acc),inset 0 0 0 1px rgba(var(--k-acc-rgb),.16)}
.km-ow-need.kmb-feed-row .km-ow-av::after{display:none}
.km-ow-need.kmb-feed-row.kmb-feed-at .km-ow-av::after{display:block;background:var(--k-acc);box-shadow:0 0 0 2px var(--cz-solid,var(--k-bg)),0 0 8px rgba(var(--k-acc-rgb),.6)}
.kmb-feed-atm{font-style:normal;color:var(--k-acc);font-weight:700}
.kmb-feed-nd p{margin:6px 0 0;white-space:pre-wrap;word-break:break-word;line-height:1.5;color:var(--k-ink,inherit)}
.kmb-feed-nd .km-ow-nd-h time{margin-left:auto;font-size:11px;opacity:.75}
/* 从弹窗点进来的那条：亮两下（整块：标题行 + 展开的全文） */
.kmb-feed-wrap{border-radius:12px}
.kmb-feed-wrap.kmb-pulse{animation:kmb-pulse 1.3s ease-out 2}
@keyframes kmb-pulse{0%{box-shadow:0 0 0 0 rgba(var(--k-acc-rgb),.6);background:rgba(var(--k-acc-rgb),.16)}60%{box-shadow:0 0 0 9px rgba(var(--k-acc-rgb),0);background:rgba(var(--k-acc-rgb),.06)}100%{box-shadow:0 0 0 0 rgba(var(--k-acc-rgb),0);background:transparent}}
@media (prefers-reduced-motion:reduce){.kmb-feed-wrap.kmb-pulse{animation:none;box-shadow:0 0 0 2px rgba(var(--k-acc-rgb),.6)}}

/* ==== src/backend/process.css ==== */
/* Hikos（半个宇宙）· 适配层 KMB · 单聊过程卡（src/backend/process.js，任务 34c89511）。
   跟着白昼 / 夜间的变量走（--k-ink2 / --k-line / --k-acc），没有变量的环境用夜间的兜底色。 */

/* ---- 卡壳：挂在组员回复的正文列末尾，折叠时只有一行 ---- */
.message .kmb-proc{margin:6px 0 2px;max-width:min(100%,760px);font-size:12px;color:var(--k-ink2,#aeb4c4);align-self:stretch}
.message .message-content>.kmb-proc{max-width:100%}
.kmb-proc-head{display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:3px 10px 3px 6px;border:1px solid var(--k-line,rgba(127,127,160,.32));border-radius:999px;background:rgba(127,127,160,.08);color:inherit;font:inherit;line-height:1.5;cursor:pointer;text-align:left}
.kmb-proc-head:hover{background:rgba(127,127,160,.16)}
.kmb-proc-head:focus-visible{outline:2px solid var(--k-acc,#6ea8ff);outline-offset:1px}
.kmb-proc.is-open .kmb-proc-head{border-radius:10px 10px 0 0;border-bottom-color:transparent;background:rgba(127,127,160,.12)}
.kmb-proc-chev{display:inline-block;width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform .15s;margin:0 2px 0 4px;opacity:.75}
.kmb-proc.is-open .kmb-proc-chev{transform:rotate(45deg)}
.kmb-proc-title{font-weight:600;letter-spacing:.02em}
.kmb-proc-sum{opacity:.85;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kmb-proc-head .kmb-spin{margin-left:2px}
.kmb-proc-body{border:1px solid var(--k-line,rgba(127,127,160,.32));border-radius:0 10px 10px 10px;padding:8px 12px 10px;background:rgba(127,127,160,.06)}
.kmb-proc-bar{display:flex;justify-content:flex-end;margin:-2px 0 4px}
.kmb-proc-note{font-size:12px;opacity:.85}
.kmb-proc-retry{margin-left:6px;font:inherit;font-size:11px;padding:1px 8px;border-radius:999px;border:1px solid var(--k-line,rgba(127,127,160,.32));background:transparent;color:inherit;cursor:pointer}
.kmb-proc-fail{margin:4px 0;padding:6px 10px;border-radius:8px;font-size:12px;line-height:1.5;background:rgba(127,127,160,.1);color:var(--k-ink2,#aeb4c4)}
.kmb-proc-fail.is-error{background:rgba(240,110,125,.12);color:#f09ca6}

/* ---- 档位切换（简洁 / 详细）：经典视图 ProcessDetailToggle 同款，一对小字按钮 ---- */
.kmb-proc-lvl{display:inline-flex;gap:2px;font-size:11px;line-height:1;margin-left:auto}
.message-meta .kmb-proc-lvl{margin-left:auto;align-self:center}
.kmb-proc-lvl button{font:inherit;font-size:11px;padding:3px 7px;border:0;border-radius:6px;background:transparent;color:var(--k-ink3,#8891a8);cursor:pointer}
.kmb-proc-lvl button:hover{color:var(--k-ink2,#aeb4c4)}
.kmb-proc-lvl button[aria-pressed="true"]{background:rgba(127,127,160,.2);color:var(--k-ink,#e6e9f5)}

/* ---- 时间线 ---- */
.kmb-proc-tl{display:flex;flex-direction:column;gap:6px;min-width:0}
.kmb-proc-narr{font-size:13px;line-height:1.6;color:var(--k-ink,#e6e9f5);opacity:.92;overflow-wrap:anywhere}
.kmb-proc-narr.is-thought{opacity:.78}
.kmb-proc-narr .kmb-md>*:first-child{margin-top:0}.kmb-proc-narr .kmb-md>*:last-child{margin-bottom:0}
.kmb-live .kmb-proc-narr{font-size:inherit}
.kmb-proc .kmb-proc-narr{font-size:12.5px;opacity:.8}
.kmb-proc-refl{display:flex;gap:8px;align-items:flex-start;padding:5px 8px;border-radius:8px;background:rgba(127,127,160,.1);font-size:12px;line-height:1.5}
.kmb-proc-refl.is-warn{background:rgba(245,165,36,.1)}.kmb-proc-refl.is-ok{background:rgba(120,200,140,.1)}
.kmb-proc-chip{flex:none;display:inline-block;font-size:10px;line-height:1;padding:3px 7px;border-radius:999px;background:rgba(59,130,255,.16);color:var(--k-acc,#6ea8ff);letter-spacing:.04em}

/* 工具组：简洁档一行一个胶囊（沿用 .kmb-live-tools 的样子）；详细档改成纵向卡，带原始名 / 命令 / 参数返回 */
.kmb-proc-tools{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:4px 8px;font-size:12px;color:var(--k-ink2,#aeb4c4)}
.kmb-proc-tools li.kmb-proc-tool{display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:2px 9px;border-radius:999px;background:rgba(127,127,160,.12)}
.kmb-proc-tool.is-done .kmb-proc-ok{color:#8fd19e}
.kmb-proc-tool .kmb-proc-err{color:var(--k-ink3,#8891a8)}   /* 工具非零退出不红：那是工具对智能体说的话，不是任务失败 */
.kmb-proc-tlabel{white-space:nowrap}
.kmb-proc-tsum{opacity:.72;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:360px}
.kmb-proc-tsum:before{content:"·";margin-right:6px;opacity:.6}
.kmb-proc-tl.is-detail .kmb-proc-tools{flex-direction:column;align-items:stretch;gap:4px}
.kmb-proc-tl.is-detail .kmb-proc-tools li.kmb-proc-tool.is-detail{display:flex;align-items:flex-start;border-radius:8px;padding:6px 10px}
.kmb-proc-tl.is-detail .kmb-proc-tool.is-detail>.kmb-spin,.kmb-proc-tl.is-detail .kmb-proc-tool.is-detail>span:first-child{margin-top:3px}
.kmb-proc-tbody{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.kmb-proc-tbody .kmb-proc-tsum{max-width:100%;white-space:normal}
.kmb-proc-raw{font-size:11px;color:var(--k-ink3,#8891a8)}
.kmb-proc-raw code,.kmb-proc-cmd{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}
.kmb-proc-cmd{display:block;padding:3px 8px;border-radius:6px;background:rgba(0,0,0,.25);color:var(--k-ink2,#aeb4c4);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
[data-theme="day"] .kmb-proc-cmd{background:rgba(0,0,0,.06)}
.kmb-proc-more summary,.kmb-proc-early summary,.kmb-proc-think summary{cursor:pointer;font-size:11px;opacity:.8;user-select:none}
.kmb-proc-more summary:hover,.kmb-proc-early summary:hover,.kmb-proc-think summary:hover{opacity:1}
.kmb-proc-pre{margin:4px 0 0;padding:6px 8px;border-radius:6px;background:rgba(0,0,0,.25);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere;max-height:220px;overflow:auto}
[data-theme="day"] .kmb-proc-pre{background:rgba(0,0,0,.06)}
.kmb-proc-obs{border-left:2px solid var(--k-line,rgba(127,127,160,.4))}
.kmb-proc-early{font-size:12px}
.kmb-proc-early>ul{margin-top:6px}

/* 步骤 / 思考 / 计划 */
.kmb-proc-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--k-ink2,#aeb4c4)}
.kmb-proc-steps li{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}
.kmb-proc-steps li.is-done>span:first-child{color:#8fd19e}
.kmb-proc-think{font-size:12px;color:var(--k-ink2,#aeb4c4)}
.kmb-proc-think pre{max-height:200px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;margin:4px 0 0;line-height:1.5}
.kmb-proc-plan{padding:6px 10px;border-radius:8px;background:rgba(127,127,160,.08);font-size:12px}
.kmb-proc-plan-head{display:flex;align-items:center;gap:8px;margin-bottom:4px;color:var(--k-ink2,#aeb4c4)}
.kmb-proc-goal{opacity:.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kmb-proc-plan-note{font-size:11px;opacity:.8;margin-bottom:4px}
.kmb-proc-plan ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.kmb-proc-plan li{display:flex;gap:7px;align-items:baseline;flex-wrap:wrap;color:var(--k-ink2,#aeb4c4)}
.kmb-proc-plan li>i{flex:none;font-style:normal;width:12px;text-align:center;display:inline-flex;justify-content:center}
.kmb-proc-plan li.is-done{opacity:.7}.kmb-proc-plan li.is-done>i{color:#8fd19e}
.kmb-proc-plan li.is-running{color:var(--k-ink,#e6e9f5)}
.kmb-proc-plan li.is-skipped{opacity:.5;text-decoration:line-through}
.kmb-proc-plan li.is-new>span:after{content:"新";font-size:10px;margin-left:6px;padding:1px 5px;border-radius:999px;background:rgba(59,130,255,.16);color:var(--k-acc,#6ea8ff)}
.kmb-proc-preview{flex-basis:100%;padding-left:19px;font-size:11px;opacity:.75;white-space:pre-wrap;overflow-wrap:anywhere}

/* 执行中的气泡：时间线与正文同宽；收口后压淡 */
.kmb-live .kmb-proc-tl{margin-top:2px}
.kmb-live.is-done .kmb-proc-tl{opacity:.6}
.kmb-live .message-meta{display:flex;align-items:center;gap:8px}

@media (prefers-reduced-motion:reduce){.kmb-proc-chev{transition:none}}
@media (max-width:600px){.kmb-proc-tsum{max-width:180px}.kmb-proc-sum{max-width:60vw}}

/* ==== src/backend/decide.css ==== */
/* Hikos · 决策面板（任务 5f8e7b98，道哥大厅 #21780「我想选都没地方选，想说两句也没地方说」）。
   一份样式，大厅决策卡（.kmb-hcard 内）与工作台审批行（.kmb-approval 内）共用；只用核心 / KMind 已有的变量，白昼 / 夜间自动跟随。
   版面取向：问题是主角 → 来龙去脉与背景是配角 → 选项是大块可点的行、选中才亮 → 一个确认键，字就是所选项 → 留言框贴在确认键上方。 */

/* ---- 槽 ---- */
.kmb-decide { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--line, rgba(127, 127, 127, .25)); font-size: 13px; line-height: 1.5; }
.kmb-decide[data-state="loading"] .kmb-loading { padding: 6px 0; }
.kmb-decide-head { font-size: 11px; letter-spacing: .03em; color: var(--muted, #7c8798); text-transform: none; }
.kmb-decide-q { font-size: 15px; font-weight: 600; line-height: 1.45; margin: 4px 0 8px; word-break: break-word; }
.kmb-decide-notice { margin: 6px 0; padding: 8px 10px; border-radius: 8px; background: rgba(127, 127, 127, .12); color: var(--muted, #7c8798); font-size: 12px; }

/* ---- 段落（意味着什么 / 来龙去脉 / 背景 / 影响 / 引用）---- */
.kmb-decide-sec { margin: 8px 0 0; }
.kmb-decide-sec > h4 { margin: 0 0 2px; font-size: 11px; font-weight: 600; letter-spacing: .04em; color: var(--muted, #7c8798); }
.kmb-decide-p { margin: 0; font-size: 13px; word-break: break-word; }
.kmb-decide-p.kmb-muted { font-size: 12px; }
.kmb-decide-tl, .kmb-decide-steps { margin: 2px 0 0; padding-left: 18px; }
.kmb-decide-tl li, .kmb-decide-steps li { margin: 1px 0; }
/* 星球工作台（hall-32606）：计划确认卡的步骤表 —— 每步一格：步骤名 · 派给谁 / 说明 / 验收 / 依赖；缺口步骤左边一道警示色 */
.kmb-decide-plan, .kmb-decide-gaps { margin: 2px 0 0; padding-left: 18px; }
.kmb-decide-plan li { margin: 4px 0; padding: 4px 8px; border-radius: 6px; background: color-mix(in srgb, var(--muted, #7c8798) 10%, transparent); }
.kmb-decide-plan li.is-gap { box-shadow: inset 3px 0 0 var(--warn, #e0a300); }
.kmb-decide-plan-h { display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.kmb-decide-plan-who { color: var(--muted, #7c8798); font-size: 12px; }
.kmb-decide-plan .kmb-decide-p { margin: 2px 0 0; }
.kmb-decide-tl time { color: var(--muted, #7c8798); font-size: 11px; margin-right: 6px; font-variant-numeric: tabular-nums; }
.kmb-decide-link { appearance: none; border: 0; background: none; padding: 0; margin: 0; font: inherit; color: var(--k-acc, var(--accent, #3b82ff)); cursor: pointer; text-decoration: none; }
.kmb-decide-link:hover { text-decoration: underline; }
.kmb-decide-linkplain { color: var(--muted, #7c8798); }
.kmb-decide-refs { display: flex; flex-wrap: wrap; gap: 4px 6px; margin-top: 2px; }
.kmb-decide-ref { display: inline-flex; align-items: center; gap: 4px; padding: 1px 8px; border-radius: 999px; background: rgba(127, 127, 127, .14); font-size: 11px; max-width: 100%; }
.kmb-decide-ref b { font-weight: 600; opacity: .8; }

/* ---- 结果带（已决）---- */
.kmb-decide-result { margin: 8px 0 0; padding: 8px 10px; border-radius: 8px; border-left: 3px solid var(--k-ok, #22c55e); background: rgba(34, 197, 94, .1); }
.kmb-decide-result.is-bad { border-left-color: var(--k-danger, #ef4444); background: rgba(239, 68, 68, .1); }
.kmb-decide-result b { font-weight: 600; }
.kmb-decide-result p { margin: 3px 0 0; font-size: 12px; word-break: break-word; }

/* ---- 选项区 ---- */
.kmb-decide-pick { margin-top: 12px; }
.kmb-decide-rec { margin: 0 0 6px; font-size: 12px; color: var(--muted, #7c8798); }
.kmb-decide-opts { display: flex; flex-direction: column; gap: 6px; }
.kmb-decide-opt { display: flex; align-items: flex-start; gap: 10px; padding: 9px 12px; border-radius: 10px; border: 1px solid var(--line, rgba(127, 127, 127, .25)); background: var(--surface, rgba(127, 127, 127, .06)); cursor: pointer; transition: border-color .12s, background .12s; }
.kmb-decide-opt:hover { background: var(--hover, rgba(127, 127, 127, .12)); }
.kmb-decide-opt.is-checked { border-color: var(--k-acc, var(--accent, #3b82ff)); background: rgba(59, 130, 255, .1); }
.kmb-decide-opt.is-deny.is-checked { border-color: var(--k-danger, #ef4444); background: rgba(239, 68, 68, .08); }
.kmb-decide-opt input[type="radio"] { margin: 3px 0 0; flex: none; accent-color: var(--k-acc, var(--accent, #3b82ff)); }
.kmb-decide-opt.is-deny input[type="radio"] { accent-color: var(--k-danger, #ef4444); }
.kmb-decide-opt-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.kmb-decide-opt-main { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.kmb-decide-opt-main b { font-weight: 600; font-size: 13px; word-break: break-word; }
.kmb-decide-badge { font-style: normal; font-size: 11px; padding: 0 7px; border-radius: 999px; background: rgba(34, 197, 94, .16); color: var(--k-ok, #22c55e); white-space: nowrap; }
.kmb-decide-opt-why { font-size: 12px; color: var(--muted, #7c8798); word-break: break-word; }
.kmb-decide-opt-next { font-size: 12px; opacity: .9; word-break: break-word; }

/* ---- 「不」的四选一 ---- */
.kmb-decide-pred { margin-top: 8px; padding: 8px 10px; border-radius: 10px; background: rgba(239, 68, 68, .06); border: 1px dashed rgba(239, 68, 68, .35); display: flex; flex-direction: column; gap: 4px; }
.kmb-decide-pred > p { margin: 0 0 4px; font-size: 12px; }
.kmb-decide-pred label { display: flex; align-items: flex-start; gap: 8px; cursor: pointer; }
.kmb-decide-pred label input { margin-top: 3px; flex: none; }
.kmb-decide-pred label span { display: flex; flex-direction: column; }
.kmb-decide-pred label b { font-weight: 600; font-size: 12px; }
.kmb-decide-pred label small { font-size: 11px; color: var(--muted, #7c8798); }

/* ---- 留言 + 确认 ---- */
.kmb-decide-note.field { width: 100%; box-sizing: border-box; margin-top: 8px; min-height: 52px; font-size: 13px; resize: vertical; }
.kmb-decide-hint { margin: 6px 0 0; font-size: 12px; color: var(--k-amber, #f59e0b); }
.kmb-decide-hint.is-error { color: var(--k-danger, #ef4444); }
.kmb-decide-confirm.kmb-hcard-btn { display: block; width: 100%; margin-top: 8px; padding: 9px 12px; font-size: 13px; font-weight: 600; border-radius: 10px; }
.kmb-decide-confirm.kmb-hcard-btn.is-danger:not(:disabled) { background: rgba(239, 68, 68, .14); }
.kmb-decide-err { margin: 4px 0 6px; color: var(--k-danger, #ef4444); font-size: 12px; }

/* ---- 宿主：大厅决策卡 ---- */
.kmb-hcard-title.is-toggle { appearance: none; border: 0; background: none; padding: 0; margin-top: 2px; font: inherit; font-weight: 600; color: inherit; text-align: left; cursor: pointer; flex: 1 1 100%; word-break: break-word; }
.kmb-hcard-title.is-toggle:hover { text-decoration: underline; text-underline-offset: 3px; }
.kmb-hcard.kmb-object.is-expanded { max-width: 680px; }
.kmb-hcard.kmb-object.is-expanded .kmb-decide { border-top-color: var(--line, rgba(127, 127, 127, .25)); }

/* ---- 宿主：工作台审批行 ---- */
.kmb-approval .kmb-approval-head { align-items: flex-start; }
.kmb-approval .kmb-approval-head .kmb-check { margin-top: 3px; cursor: pointer; }
.kmb-approval-title.kmb-title { appearance: none; border: 0; background: none; padding: 0; margin: 0; width: 100%; font: inherit; font-weight: 600; font-size: 13px; color: inherit; text-align: left; cursor: pointer; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.kmb-approval-title.kmb-title:hover .kmb-grow { text-decoration: underline; text-underline-offset: 3px; }
.kmb-approval.is-expanded { border-color: var(--k-acc, var(--accent, #3b82ff)); }
.kmb-approval .kmb-decide { margin-top: 8px; }
.kmb-approval .kmb-decide .kmb-decide-q { font-size: 14px; }
.kmb-approval .kmb-decide-confirm.kmb-hcard-btn.is-primary { background: var(--k-acc, var(--accent, #3b82ff)); color: #fff; }

@media (max-width: 640px) { .kmb-hcard.kmb-object.is-expanded { max-width: none; } .kmb-decide-q { font-size: 14px; } }
/* 任务 def5f997（修士 HikosUI #32759 ⑤）：动态里的「待你批复」（src/backend/owdecide.js）——行复用核心的折叠行（.km-ow-need），这里只补卡种小标、
   没有头像时的图标位、展开后决策面板在窄面板里的边距。批准 / 驳回沿用动态里原有的 .km-ow-ok / .km-ow-no 两种钮。 */
.kmb-owap-kind{display:inline-block;margin-right:6px;padding:1px 6px;border-radius:999px;font:600 10.5px/1.5 inherit;font-style:normal;color:var(--k-acc,#3370ff);background:color-mix(in srgb,var(--k-acc,#3370ff) 12%,transparent);vertical-align:1px}
.kmb-owap-kind.is-high{color:#c2410c;background:color-mix(in srgb,#f97316 16%,transparent)}
.kmb-owap-ic{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;color:var(--k-acc,#3370ff);background:color-mix(in srgb,var(--k-acc,#3370ff) 10%,transparent)}
.kmb-owap .km-ow-nx .kmb-decide{margin:6px 2px 4px;font-size:12.5px}
.kmb-owap .km-ow-nx .kmb-decide .kmb-decide-sec{margin-top:8px}
.kmb-owap-hint{margin-top:6px;font-size:11.5px;color:var(--k-dim,#888)}
.kmb-owap .km-ow-acts button[disabled]{opacity:.55;cursor:default}

/* ==== src/backend/pwork.css ==== */
/* Hikos · 星球工作台（hall-32606；src/backend/pwork.js）。列表行复用 m.css 的 .kmb-wcard / .kmb-wc-* / .kmb-work-top，这里只补差别。 */
.kmb-pw-acts { margin-top: 6px; gap: 6px; flex-wrap: wrap; }
.kmb-pw-acts:empty { display: none; }
.kmb-pw-item.is-collab .kmb-kind { background: color-mix(in srgb, var(--warn, #e0a300) 18%, transparent); }
.kmb-pw-item.is-deciding { box-shadow: inset 3px 0 0 var(--k-acc, var(--accent, #3b82ff)); }
.kmb-pw-decide { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--border, rgba(127, 127, 127, .25)); }
/* 页头：「新建任务」是一颗与星球头部主按钮同形的 chip 钮；返回面包屑借资产库页的样式（knowhub.css .kmb-hub-back） */
.kmb-head .kmb-pw-newbtn { display: inline-flex; align-items: center; gap: 4px; height: 26px; padding: 0 10px; white-space: nowrap; }
.kmb-head .kmb-pw-newbtn svg { flex: none; }
/* 个人工作台（m1_tasks.js）任务行上的频道芯片：这单建在哪颗星球上，点它跳到那张卡 */
.kmb-sub .kmb-origin { display: inline-flex; align-items: center; gap: 3px; margin-left: 8px; padding: 0 7px; height: 18px; font-size: 11px; line-height: 18px; vertical-align: middle; cursor: pointer; border: 1px solid var(--border, rgba(127, 127, 127, .25)); border-radius: 9px; background: color-mix(in srgb, var(--k-acc, var(--accent, #3b82ff)) 8%, transparent); color: inherit; font: inherit; font-size: 11px; }
.kmb-sub .kmb-origin:hover { border-color: var(--k-acc, var(--accent, #3b82ff)); }
.kmb-sub .kmb-origin svg { flex: none; }
/* 新建任务对话框：执行人分组下拉 + 两张「怎么开工」单选卡 */
.kmb-pw-form select.field optgroup { font-style: normal; color: var(--muted, #7c8798); }
.kmb-pw-confirm-row { margin-top: 10px; display: flex; flex-direction: column; gap: 6px; }
.kmb-pw-confirm-row[hidden] { display: none; }
.kmb-pw-radio { display: flex; gap: 10px; align-items: flex-start; padding: 8px 10px; border: 1px solid var(--border, rgba(127, 127, 127, .25)); border-radius: 8px; cursor: pointer; }
.kmb-pw-radio:has(input:checked) { border-color: var(--k-acc, var(--accent, #3b82ff)); background: color-mix(in srgb, var(--k-acc, var(--accent, #3b82ff)) 8%, transparent); }
.kmb-pw-radio input { margin-top: 3px; flex: none; }
.kmb-pw-radio span { display: flex; flex-direction: column; gap: 2px; }
.kmb-pw-radio small { color: var(--muted, #7c8798); }
/* 入口：面板视图星球头部「派驻智能体」右侧那颗（tidy.js 把主按钮挪成 .kmb-head-primary，这颗跟在后面，样式对齐 tidy.css ⑮） */
.channelhead .kmb-head-pwork { flex: none; margin-left: 4px; height: 24px; display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
body.km-u .channelhead .kmb-head-pwork { display: none !important; }   /* 宇宙界面：入口在星球条上（kmb-pwork-pill），聊天窗头部不重复 */
@media (max-width: 700px) { .channelhead .kmb-head-pwork { padding: 0 6px; } .channelhead .kmb-head-pwork span { display: none; } }
@media (max-width: 480px) { body:not(.km-u) .workspace .channelhead.kmb-head-planet > .kmb-head-pwork { display: none !important; } }   /* 手机：收进 ⋯（tidy.css ⑯ 同一门槛；KM.ctx.roomExtra 那项在它看不见时列出来） */

/* ==== src/backend/apps.css ==== */
/* Hikos · 频道的「应用」面板（任务 fa1e8b1d，道哥 #32298 ②；src/backend/apps.js）。对话框里一个应用一行；进不去的灰着并写明原因。 */
.kmb-apps { display: flex; flex-direction: column; gap: 6px; margin-top: 4px; }
.kmb-apps .form-note { margin: 0 0 4px; }
.kmb-app-row { display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 10px; text-align: left; font: inherit; color: inherit; cursor: pointer; border: 1px solid var(--border, rgba(127, 127, 127, .25)); border-radius: 10px; background: color-mix(in srgb, var(--k-acc, var(--accent, #3b82ff)) 6%, transparent); }
.kmb-app-row:hover { border-color: var(--k-acc, var(--accent, #3b82ff)); background: color-mix(in srgb, var(--k-acc, var(--accent, #3b82ff)) 12%, transparent); }
.kmb-app-row:focus-visible { outline: 2px solid var(--k-acc, var(--accent, #3b82ff)); outline-offset: 1px; }
.kmb-app-row > svg { flex: none; }
.kmb-app-row .kmb-app-t { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; gap: 2px; }
.kmb-app-row .kmb-app-t b { font-weight: 600; }
.kmb-app-row .kmb-app-t small { opacity: .75; font-size: 12px; line-height: 1.3; }
.kmb-app-row.off { cursor: not-allowed; opacity: .55; background: transparent; }
.kmb-app-row.off:hover { border-color: var(--border, rgba(127, 127, 127, .25)); background: transparent; }

/* 应用舞台（道哥 # 大厅 #33679）：经典视图的沉浸页装在本页的同源 iframe 里。全视口层，z 1200 与 src/backend/kad.css 的沉浸层同口径
   （盖住宇宙 #kmu / 停靠栏 900 与面板视图，让出 toast 3000 与右键菜单）；颜色全部读 Hikos 自己的令牌，换皮肤它跟着换；
   那页挂好（is-ready）前右上角露一条「正在打开…」+ 退出钮，挂好后收起——退出钮由那页自己的顶栏提供（它发 krow:immersive-exit 回来）。 */
.kmb-app-stage { position: fixed; inset: 0; z-index: 1200; display: flex; flex-direction: column; background: var(--base, #0b0d11); color: var(--text, #f2f3f5); font-family: var(--font, inherit); }
.kmb-app-frame { flex: 1 1 auto; width: 100%; height: 100%; min-height: 0; border: 0; display: block; background: transparent; }
.kmb-app-veil { position: absolute; top: 6px; right: 10px; z-index: 1; display: flex; align-items: center; gap: 8px; }
.kmb-app-stage.is-ready .kmb-app-veil { display: none; }
.kmb-app-wait { display: inline-flex; align-items: center; gap: 6px; margin: 0; padding: 0 10px; height: 28px; border-radius: 999px; font-size: 12px; color: var(--secondary, #b1b8c2); background: color-mix(in srgb, var(--panel, #111419) 85%, transparent); }
.kmb-app-wait svg { animation: kmb-app-spin 1s linear infinite; }
@keyframes kmb-app-spin { to { transform: rotate(360deg); } }
.kmb-app-exit { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px 0 8px; border: 1px solid var(--line, rgba(127, 127, 127, .3)); border-radius: 8px; font: inherit; font-size: 13px; color: var(--secondary, #b1b8c2); background: var(--panel, #111419); cursor: pointer; }
.kmb-app-exit:hover { color: var(--text, #fff); background: var(--hover, #1b2028); }
.kmb-app-exit:focus-visible { outline: 2px solid var(--brand, #3b82ff); outline-offset: 1px; }
body.kmb-app-on { overflow: hidden; }
@media (prefers-reduced-motion: reduce) { .kmb-app-wait svg { animation: none; } }
/* 导入 / 随页的皮肤包（skin-tokens.css 同一套选择器）：舞台读皮肤包自己的变量 */
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .kmb-app-stage { background: var(--k-bg); color: var(--k-ink); }
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .kmb-app-exit { border-color: var(--k-line); background: var(--k-bg2); color: var(--k-ink2); }
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .kmb-app-wait { background: var(--k-bg2); color: var(--k-mute); }

/* ==== src/backend/fix.css ==== */
/* 半个宇宙 · 可用性缺陷修复（大厅 #20019 / #20027 / #20030；任务 a2ec7585）
   对应脚本：src/backend/compose.js（输入区 / 附件 / 表情合一）、duty.js（值班标识）、skin.js（顶栏图标皮肤）、preview.js（经典视图预览）。
   核心 styles.css 不改；这里只叠加。与 remote.css（单聊流光任务在改）完全分开，不要把规则搬过去。 */

/* ---- #20027 三个表情按钮合一：GIF / 贴纸两个按钮藏掉，表情按钮打开的弹层分三页 ---- */
html.kmb-emoji-merged .compose-tools [data-action="motion-picker"],
html.kmb-emoji-merged .compose-tools [data-action="sticker-picker"] { display: none !important; }
.kmb-ep { display: flex; flex-direction: column; gap: 10px; min-height: 320px; }
.kmb-ep-tabs { display: flex; gap: 4px; padding: 3px; border-radius: 10px; background: var(--surface); }
.kmb-ep-tab { flex: 1; border: 0; border-radius: 8px; padding: 7px 10px; background: transparent; color: var(--secondary); font: 600 13px/1 var(--font); cursor: pointer; }
.kmb-ep-tab:hover { color: var(--text); }
.kmb-ep-tab.on { background: var(--panel); color: var(--text); box-shadow: 0 1px 2px rgba(0, 0, 0, .25); }
.kmb-ep-body { min-height: 260px; max-height: min(52dvh, 460px); overflow: auto; }
.kmb-ep-panel[hidden] { display: none !important; }

/* ---- A1 附件暂存（blob: 缩略图 / 100 MB 提示）+ 任务 efc80458（移动端/桌面端输入区自适应增高与滚动、待发图片点开看大图）---- */
.composer-wrap { flex: none; }
.composer { align-items: flex-end; height: auto; }
.composer > .ib, .composer > .compose-tools { flex: none; }
.composer textarea {
  flex: 1 1 auto;
  min-width: 0;
  display: block;
  overflow-y: auto;
  overflow-x: hidden;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  word-break: break-word;
  -webkit-overflow-scrolling: touch;
  touch-action: pan-y;
  overscroll-behavior: contain;
  -webkit-user-select: text;
  user-select: text;
  align-self: center;
  scrollbar-width: thin;
  scrollbar-color: rgba(140, 160, 200, .4) transparent;
}
#kmu .kmw-chat .kmw-body { -webkit-user-select: text; user-select: text; }
@media (hover: none) and (pointer: coarse) {
  .composer textarea, .composer input, .topic-main .composer textarea, input.field, textarea.field { font-size: 16px; }
}
html.kmb-tidy.kmb-kbd #kmu { height: var(--kmb-vvh, 100dvh) !important; bottom: auto !important; }
html.kmb-tidy.kmb-kbd body:not(.kmu-phone) #kmu .kmw-chat:not(.kmw-sheet):not(.kmw-collapsed) { max-height: calc(var(--kmb-vvh, 100dvh) - 58px) !important; }
body.kmu-phone .kmw-chat.kmw-sheet:not(.kmw-collapsed):has(.lc-attachment-item),
html.kmb-tidy.kmb-kbd body.kmu-phone .kmw-chat.kmw-sheet:not(.kmw-collapsed) {
  height: min(78vh, calc(var(--kmb-vvh, 100dvh) - 52px));
}
.kmb-stage-item .kmb-stage-thumb { position: relative; width: 48px; height: 48px; flex: none; padding: 0; border: 1px solid var(--line, rgba(255, 255, 255, .14)); border-radius: 6px; background: var(--surface, #161a20); overflow: hidden; cursor: zoom-in; display: inline-flex; align-items: center; justify-content: center; }
.kmb-stage-item .kmb-stage-thumb:hover { border-color: var(--brand, #3b82ff); }
.kmb-stage-item .kmb-stage-thumb img, .lc-attachment-item img.resource-stage-img37 { width: 48px; height: 48px; object-fit: cover; border-radius: 5px; display: block; cursor: zoom-in; }
.kmb-stage-item .kmb-stage-zoom { position: absolute; right: 2px; bottom: 2px; font-style: normal; font-size: 9px; line-height: 1; padding: 2px; border-radius: 4px; background: rgba(0, 0, 0, .55); pointer-events: none; }
.kmb-stage-limit { color: var(--muted); font-size: 12px; }
/* 发出去但还在上传：附件卡里的 blob: 缩略图 + 「上传中…」 */
.kmb-uploading .resource-stage-spoiler37 { opacity: .75; }
.kmb-upload-note { display: inline-block; margin-top: 4px; font-size: 12px; color: var(--muted); }

/* ---- D1 搜索重影：宇宙视图 ≥ 581px 时顶栏已有 kmb-search-btn（搜索框），核心的放大镜不再重复 ---- */
@container kmchat (min-width: 581px) {
  .kmw-chat .channelhead .toolbar:has(.kmb-search-btn) [data-action="lc-search"] { display: none !important; }
}
/* ---- D1 顶栏图标：skin.js 把 emoji / 几何字形换成同一套 Lucide 线性图标 ---- */
.channelhead .toolbar .ib .kmb-ico { display: inline-flex; align-items: center; justify-content: center; line-height: 0; font-size: 0; }
.channelhead .toolbar .ib .kmb-ico svg { width: 18px; height: 18px; display: block; }
.channelhead .toolbar .ib .kmb-ico svg, .channelhead .toolbar .ib .kmb-ico { color: inherit; }
/* 下拉框：按皮肤告诉浏览器配色（Windows Chrome 夜皮肤下原生下拉的白底黑字即来自 color-scheme 缺省为 light） */
html[data-theme="night"] select, html[data-theme="night"] option, html[data-theme="night"] optgroup,
html[data-theme="night"] input[type="date"], html[data-theme="night"] input[type="time"], html[data-theme="night"] input[type="datetime-local"] { color-scheme: dark; background-color: var(--surface); color: var(--text); }
html[data-theme="day"] select, html[data-theme="day"] option, html[data-theme="day"] input[type="date"], html[data-theme="day"] input[type="time"], html[data-theme="day"] input[type="datetime-local"] { color-scheme: light; }
html[data-theme="night"] select option:checked { background: var(--brand); color: #fff; }

/* ---- B4 值班标识：成员栏名字后面的小标签，样子跟经典视图 .hall-tag.is-duty 对齐 ---- */
.kmb-duty-tag { display: inline-block; margin-left: 6px; padding: 0 5px; border-radius: 4px; vertical-align: 1px; font-size: 10px; line-height: 16px; font-weight: 600; font-style: normal; color: var(--text); background: color-mix(in srgb, #e0a82e 28%, transparent); white-space: nowrap; }
.km-agent-row .kmb-duty-tag { margin-left: 4px; vertical-align: 1px; }
html[data-theme="day"] .kmb-duty-tag { background: color-mix(in srgb, #e0a82e 32%, transparent); }

/* ---- E1 / E2 预览窗口（kfv 宿主）与图片灯箱 lightbox（任务 efc80458）：可拖、可改大小、可全屏、图片带遮罩与缩放 ---- */
.kmb-pv-backdrop { position: fixed; inset: 0; z-index: 2147480599; background: rgba(6, 9, 15, .72); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); }
.kmb-pv-backdrop[hidden] { display: none !important; }
.kmb-pv { position: fixed; z-index: 2147480600; display: flex; flex-direction: column; min-width: 300px; min-height: 220px; max-width: calc(100vw - 16px); max-height: calc(100dvh - 16px); resize: both; overflow: hidden; border-radius: 16px; background: var(--panel); color: var(--text); box-shadow: 0 24px 70px -18px rgba(0, 0, 0, .55), inset 0 0 0 1px var(--line); font-family: var(--font); }
.kmb-pv.full { inset: 0 !important; width: auto !important; height: auto !important; max-width: none; max-height: none; border-radius: 0; resize: none; }
dialog .kmb-pv, dialog .kmb-pv-backdrop { position: fixed; }
.kmb-pv-head { display: flex; align-items: center; gap: 10px; height: 50px; padding: 0 10px 0 16px; flex: none; cursor: grab; user-select: none; border-bottom: 1px solid var(--line); }
.kmb-pv.full .kmb-pv-head { cursor: default; }
.kmb-pv-head:active { cursor: grabbing; }
.kmb-pv-ic { display: grid; place-items: center; width: 30px; height: 30px; flex: none; border-radius: 9px; color: var(--brand); background: color-mix(in srgb, var(--brand) 14%, transparent); }
.kmb-pv-ic svg { width: 16px; height: 16px; }
.kmb-pv-tt { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.kmb-pv-tt b { font-size: 14px; font-weight: 650; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kmb-pv-tt small { font-size: 11.5px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kmb-pv-tools { display: flex; align-items: center; gap: 2px; flex: none; }
.kmb-pv-tools button { display: grid; place-items: center; min-width: 32px; height: 32px; padding: 0 8px; border: 0; border-radius: 9px; background: transparent; color: var(--secondary); cursor: pointer; }
.kmb-pv-tools button:hover { background: color-mix(in srgb, var(--text) 8%, transparent); color: var(--text); }
.kmb-pv-tools button svg { width: 15px; height: 15px; }
.kmb-pv-tools button.kmb-pv-zoom-val { font: 600 11.5px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; min-width: 44px; padding: 0 6px; font-variant-numeric: tabular-nums; }
.kmb-pv-body { flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden; position: relative; }
.kmb-pv-body > .kfv-root, .kmb-pv-body > .kfv, .kmb-pv-body > div { flex: 1; min-height: 0; }
.kmb-pv-note { flex: 1; display: grid; place-items: center; padding: 20px; text-align: center; color: var(--secondary); font-size: 13px; overflow: auto; }
.kmb-pv-note.is-err { color: var(--text); }
.kmb-pv-note.is-img, .kmb-pv .kfv[data-kind="image"] { display: grid; place-items: center; padding: 8px; overflow: hidden; user-select: none; -webkit-user-select: none; touch-action: none; }
.kmb-pv-note p { margin: 0 0 10px; }
.kmb-pv-note button.outline { border: 1px solid var(--line); background: transparent; color: var(--text); border-radius: 8px; padding: 7px 14px; font: 600 13px var(--font); cursor: pointer; }
.kmb-pv-img, .kmb-pv .kfv[data-kind="image"] img { max-width: 100%; max-height: 100%; object-fit: contain; border-radius: 8px; transform-origin: center center; transition: transform .08s ease-out; cursor: zoom-in; }
.kmb-pv.is-zoomed .kmb-pv-img, .kmb-pv.is-zoomed .kfv[data-kind="image"] img { cursor: grab; transition: none; }
.kmb-pv.is-zoomed .kmb-pv-img:active, .kmb-pv.is-zoomed .kfv[data-kind="image"] img:active { cursor: grabbing; }
.message .message-text img:not(.kmb-sticker):not(.avatar) { cursor: zoom-in; max-width: 100%; border-radius: 8px; }
.kmb-pv-spin { width: 22px; height: 22px; border: 2px solid var(--line); border-top-color: var(--brand); border-radius: 50%; animation: kmb-pv-spin .8s linear infinite; margin: 0 auto 10px; }
@keyframes kmb-pv-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: no-preference) { .kmb-pv { animation: kmb-pv-in .16s ease-out; } }
@keyframes kmb-pv-in { from { opacity: 0; transform: translateY(6px) scale(.985); } to { opacity: 1; transform: none; } }
/* kfv 的设计记号接到半个宇宙的皮肤变量上（经典视图里由 tokens.css 提供）；阅读器窗口 .kmb-pv 与文件抽屉里的 .kmb-kfv 同一套 */
.kmb-pv .kfv, .kmb-pv [class^="kfv-"], .kmb-pv [class*=" kfv-"],
.kmb-kfv .kfv, .kmb-kfv [class^="kfv-"], .kmb-kfv [class*=" kfv-"] {
  --text-primary: var(--text); --text-secondary: var(--secondary); --text-muted: var(--muted); --color-text-muted: var(--muted);
  --bg-primary: var(--panel); --bg-secondary: var(--surface); --bg-tertiary: var(--surface); --border-default: var(--line); --border-subtle: var(--line);
  --accent-primary: var(--brand); --color-accent-primary: var(--brand); --status-error: #e5484d; --status-success: #3ba55c; --status-warning: #e0a82e;
  --radius-md: 10px; --radius-sm: 6px; --radius-lg: 14px; --font-sans: var(--font); --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --space-xs: 4px; --space-sm: 8px; --space-md: 12px; --space-lg: 16px; --space-xl: 24px; --text-xs: 11px; --text-sm: 12.5px; --text-base: 14px; --text-lg: 16px;
  --shadow-card: 0 1px 2px rgba(0, 0, 0, .18);
}
.kmb-pv .kfv { height: 100%; }
/* ---- 任务 bc2aa44f（道哥 #21079）：文件抽屉「预览」页挂经典查看器（m2_desk.js viewerPreview → preview.js PV.mountInto）---- */
/* 能进查看器的文件把抽屉加宽：md 的目录要在 ≥ 760px 的容器里才成左栏（kfv 容器查询）；窄屏仍是 95vw / 100vw */
.kmb-drawer.wide.kmb-fd-kfv { width: min(1120px, 95vw); }
/* 预览页挂着查看器时：抽屉体不滚，预览页填满剩余高度，查看器（.kfv overflow:auto）自己滚——目录 sticky / 阅读锚 / PDF 分页都按自己的滚动容器算，与阅读器窗口一致；
   离开预览页（版本 / 属性）class 即摘掉，抽屉体照旧整体滚动 */
.kmb-drawer.kmb-fd-kfv-live .kmb-drawer-body { display: flex; flex-direction: column; overflow: hidden; }
.kmb-drawer.kmb-fd-kfv-live .kmb-drawer-body .kmb-tabs { flex: none; }
.kmb-drawer.kmb-fd-kfv-live .kmb-file-body { flex: 1; min-height: 0; display: flex; flex-direction: column; }
.kmb-kfv { position: relative; flex: 1; min-height: 240px; display: flex; flex-direction: column; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; background: var(--panel); }
.kmb-kfv > .kfv { flex: 1; min-height: 0; height: auto; }
.kmb-kfv > .kmb-loading { margin: auto; }
.kmb-kfv + .kmb-note { flex: none; margin: 8px 0 0; }
/* 消息附件卡：图片缩略图（点开进预览）+「打开」 */
.kmb-pv-thumb { border: 0; background: none; display: block; padding: 0; width: 100%; cursor: zoom-in; }
.kmb-pv-thumb img { display: block; max-width: 100%; max-height: 320px; border-radius: 8px; object-fit: contain; }
/* 任务 61a48d3d：缩略图取不到时不再移除，留一块可点重试的占位（取回来就换成图） */
.kmb-pv-thumb.is-err { cursor: pointer; }
.kmb-pv-thumb .kmb-pv-thumb-note { display: grid; place-items: center; gap: 6px; min-height: 96px; padding: 14px 10px; color: var(--secondary); font-size: 11px; background: var(--surface, rgba(127, 127, 127, .08)); border-radius: 8px; }
.kmb-pv-thumb .kmb-pv-thumb-note svg { opacity: .6; }
.kmb-pv-thumb .kmb-pv-thumb-note .kmb-pv-spin { margin: 0; }
.kmb-att-open { margin-left: 6px; }

/* ==== src/backend/forum.css ==== */
/* Hikos 适配层 · 论坛星球（任务 93ad61ca，修士大厅 #23352）。
   ③ 帖子末尾「每条回复都保存在这个帖子里」整块不要（文案表同时隐藏）；侧栏空态说教句同理。
   ④ 帖子封面：卡片视图顶部通栏、列表视图右侧缩略图、帖子页头一条；选封面的格子（发帖 / 帖子设置）。画法见 forum.js 的 COVERS。 */
.topic-layout .topic-end{display:none}
/* 侧栏「其他帖子」为空时的说教句（「发下一个新帖子，让不同的问题分开讨论」）和它上面的空标题一起不要 */
.topic-aside>h3:has(+.form-note:last-child),.topic-aside>.form-note:last-child{display:none}

.kmb-cover{background-color:var(--k-bg2,#141a2a);background-size:cover;background-position:center}   /* 任务 15f6cb6a · 封面本身是用户选的画（星云 / 极光…），这里只管还没加载出来时的底：随主题 */
.kmb-cover.is-loading{background:linear-gradient(110deg,var(--k-bg2,#141a2a) 30%,var(--k-sel,#1c2438) 50%,var(--k-bg2,#141a2a) 70%) 0 0/200% 100%;animation:kmb-cover-wait 1.4s linear infinite}
@keyframes kmb-cover-wait{to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.kmb-cover.is-loading{animation:none}}

/* 卡片视图：贴满卡片上沿 */
.forum-list.gallery .post-card.kmb-has-cover{overflow:hidden}
.forum-list.gallery .post-card .kmb-cover.is-card{height:112px;margin:-16px -16px 14px;border-radius:0}
/* 列表视图：右侧缩略图（Discord 同款位置） */
.forum-list:not(.gallery) .post-card.kmb-has-cover{position:relative;padding-right:188px;min-height:118px}
.forum-list:not(.gallery) .post-card .kmb-cover.is-row{position:absolute;top:16px;right:16px;width:156px;height:86px;border-radius:10px}
@media (max-width:640px){
  .forum-list:not(.gallery) .post-card.kmb-has-cover{padding-right:112px}
  .forum-list:not(.gallery) .post-card .kmb-cover.is-row{width:84px;height:56px}
}
/* 帖子页：标题上方一条 */
.topic-heading .kmb-cover.is-banner{height:148px;border-radius:14px;margin:0 0 16px}
@media (max-width:640px){.topic-heading .kmb-cover.is-banner{height:96px}}

/* 选封面 */
.kmb-cover-pick{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:4px 0 14px}
.kmb-cover-opt{position:relative;display:flex;align-items:flex-end;height:48px;padding:4px 7px;border-radius:9px;border:1px solid var(--k-line,rgba(255,255,255,.08));color:#fff;font-size:11px;cursor:pointer;overflow:hidden;background-color:var(--k-bg2,#141a2a);background-size:cover;background-position:center}
.kmb-cover-opt span{position:relative;text-shadow:0 1px 3px rgba(0,0,0,.7)}
.kmb-cover-opt.is-none,.kmb-cover-opt.is-upload{align-items:center;justify-content:center;border-style:dashed;border-color:var(--k-line,rgba(255,255,255,.18));color:var(--muted,#9aa3b5);background-color:transparent}
.kmb-cover-opt.is-upload[aria-checked="true"]{color:#fff;border-style:solid}
.kmb-cover-opt[aria-checked="true"]{outline:2px solid var(--brand,#3b82ff);outline-offset:1px}
.kmb-cover-opt:focus-visible{outline:2px solid var(--brand,#3b82ff);outline-offset:2px}
/* 任务 2403e631：帖内图片格（缩略图 + 序号角标）；is-wait 缩略图在路上 · is-busy 正在裁成封面 · is-failed 缩略图取不到 */
.kmb-cover-attachs{display:contents}
.kmb-cover-opt.is-attach{align-items:flex-start;justify-content:flex-end;padding:3px 5px;border-color:var(--k-line,rgba(255,255,255,.18))}
.kmb-cover-opt.is-attach span{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:rgba(0,0,0,.55);font-size:10px;line-height:1;text-shadow:none}
.kmb-cover-opt.is-attach.is-wait{background-image:linear-gradient(110deg,var(--k-bg2,#141a2a) 30%,var(--k-sel,#1c2438) 50%,var(--k-bg2,#141a2a) 70%);background-size:200% 100%;animation:kmb-cover-wait 1.4s linear infinite}
.kmb-cover-opt.is-attach.is-busy::after{content:"";position:absolute;inset:0;background:rgba(0,0,0,.35) linear-gradient(110deg,transparent 30%,rgba(255,255,255,.22) 50%,transparent 70%) 0 0/200% 100%;animation:kmb-cover-wait 1s linear infinite}
.kmb-cover-opt.is-attach.is-failed{border-style:dashed;opacity:.6}
.kmb-cover-hint{margin:-8px 0 14px;font-size:12px;color:var(--muted,#9aa3b5)}
@media (prefers-reduced-motion:reduce){.kmb-cover-opt.is-attach.is-wait,.kmb-cover-opt.is-attach.is-busy::after{animation:none}}

/* ==== src/backend/topics.css ==== */
/* Hikos 适配层 · 聊天 / 论坛双视图（任务 8d74edb3，道哥 #27100 / #27131 / #27167）。
   聊天视图：气泡下一枚话题芯片 ◇；悬停动作里多「归入话题…」。论坛视图：替换消息区——话题卡片列表 / 话题时间线（首帖 · 讨论串 · 聊天来源）。
   夜间不画边框、琥珀只给人（设计规则）；状态徽标与 forum.js 的接话状态共用 .kmb-wake。 */
.kmb-topic-line{margin-top:4px}
.kmb-topic-chip{display:inline-flex;align-items:center;gap:4px;max-width:100%;padding:1px 8px;border-radius:999px;border:0;background:var(--k-sel,rgba(255,255,255,.08));color:var(--muted,#9aa3b5);font-size:11px;line-height:18px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmb-topic-chip:hover{color:var(--text,#e6e9f2);background:var(--k-sel2,rgba(255,255,255,.14))}
.kmb-topic-chip.is-locked::after{content:'·人工';opacity:.7}
/* 话题 = 回复链（道哥 #27609）：话题开头那条的芯片是讨论入口——「◇ 标题 · N 条」，稍亮一点、像个可点的标签 */
.kmb-topic-chip.is-head{color:var(--text,#e6e9f2);background:var(--k-sel2,rgba(255,255,255,.12));font-weight:500}
.kmb-topic-chip.is-head .kmb-topic-chip-n{margin-left:4px;font-weight:400;color:var(--muted,#9aa3b5)}
.kmb-topic-chip.is-head:hover .kmb-topic-chip-n{color:inherit}
/* 话题二期（任务 b8050b1b）：模型推断归入的芯片——虚线轮廓、更淡，一眼看出「这是机器猜的，可纠正」；人工确认后回到实线 */
.kmb-topic-chip.is-inferred{background:transparent;border:1px dashed var(--muted,#9aa3b5);line-height:16px;opacity:.85}
.kmb-topic-chip.is-inferred::after{content:'·推断';opacity:.7}
.kmb-topic-chip.is-inferred:hover{opacity:1;background:var(--k-sel,rgba(255,255,255,.08))}

.kmb-wake{display:inline-block;padding:0 7px;border-radius:999px;font-size:11px;line-height:18px;background:var(--k-sel,rgba(255,255,255,.08));color:var(--muted,#9aa3b5);white-space:nowrap}
.kmb-wake[data-state="pending"]{color:#c9a24a;background:rgba(201,162,74,.14)}
.kmb-wake[data-state="working"]{color:#5aa6ff;background:rgba(90,166,255,.14)}
.kmb-wake[data-state="answered"]{color:#4fb286;background:rgba(79,178,134,.14)}
.kmb-wake[data-state="blocked"],.kmb-wake[data-state="unreachable"]{color:#e07a7a;background:rgba(224,122,122,.14)}
.topic-heading .topic-meta .kmb-wake{margin-right:8px}
.post-card .post-meta .kmb-wake{margin-left:auto}
.kmb-no-reply{margin:6px 0 10px}

.kmb-topics{display:flex;flex-direction:column;gap:10px;padding:6px 2px 10px}
.kmb-topics-bar{display:flex;align-items:center;gap:10px;min-height:32px}
.kmb-topics-bar b{font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kmb-topics-grow{flex:1}
.kmb-topics-un{font-size:12px;color:var(--muted,#9aa3b5);border:0;background:transparent;padding:0;font:inherit;font-size:12px;cursor:pointer}
button.kmb-topics-un:hover{color:var(--text,#e6e9f2);text-decoration:underline}
/* 话题二期 ③「杂谈」：列表末尾固定一张、虚线框、不参与排序——未归类的归档，不是话题 */
.kmb-topic-card.is-misc{background:transparent;border:1px dashed var(--k-sel2,rgba(255,255,255,.18))}
.kmb-topic-card.is-misc:hover,.kmb-topic-card.is-misc:focus-visible{background:var(--k-sel,rgba(255,255,255,.06))}
.kmb-topic-kind[data-origin="misc"]{color:#c9a24a}
.kmb-topic-tools{position:absolute;right:12px;top:6px;display:flex;gap:6px}
.kmb-topic-tools .kmb-topic-origin{position:static}
.kmb-topics.is-misc .kmb-topic-row .message{box-shadow:inset 2px 0 0 var(--k-sel2,rgba(255,255,255,.14))}
.kmb-topic-more{display:flex;justify-content:center;padding:4px 0 8px}
/* 帖子列表（任务 7e17fd57 · 道哥 #28096 ②）：格子改成一列帖子行——左边 种类 · 标题 · 状态 / 摘要 / 发起人 · 发起时间 · 标签，右边 ◯ N 与最后活动时间；
   排序由 topics.js 定（置顶 > 最后活动倒序），这里只负责一行一帖 */
.kmb-topic-list{display:flex;flex-direction:column;gap:6px}
.kmb-topic-card{display:flex;flex-direction:row;align-items:flex-start;gap:14px;padding:10px 14px;border-radius:12px;background:var(--k-bg2,#141a2a);cursor:pointer}
.kmb-topic-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.kmb-topic-side{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:4px;min-width:120px;font-size:12px;color:var(--muted,#9aa3b5);white-space:nowrap}
.kmb-topic-side .kmb-topic-n{margin-left:0;font-size:13px;color:var(--text,#e6e9f2)}
.kmb-topic-last{display:inline-flex;gap:4px;align-items:baseline}
.kmb-topic-when{font-variant-numeric:tabular-nums}
.kmb-topic-since{display:inline-flex;gap:4px;align-items:baseline}
.kmb-topic-card.is-misc .kmb-topic-side{align-self:center}
.kmb-topic-card:hover,.kmb-topic-card:focus-visible{background:var(--k-sel,#1c2438);outline:none}
.kmb-topic-card.is-pinned{box-shadow:inset 3px 0 0 var(--brand,#3b82ff)}
.kmb-topic-head{display:flex;align-items:center;gap:8px;min-width:0}
.kmb-topic-head h3{flex:1;margin:0;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kmb-topic-kind{flex:none;padding:0 6px;border-radius:6px;font-size:11px;line-height:18px;background:var(--k-sel,rgba(255,255,255,.08));color:var(--muted,#9aa3b5)}
.kmb-topic-kind[data-origin="post"]{color:#5aa6ff}
.kmb-topic-excerpt{font-size:13px;color:var(--muted,#9aa3b5);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.kmb-topic-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--muted,#9aa3b5)}
.kmb-topic-n{margin-left:auto}
.kmb-topic-timeline{display:flex;flex-direction:column}
.kmb-topic-row{position:relative}
.kmb-topic-row[data-origin="chat"] .message{box-shadow:inset 2px 0 0 var(--k-sel2,rgba(255,255,255,.14))}
.kmb-topic-row[data-origin="root"] .message{background:var(--k-bg2,rgba(255,255,255,.03))}
.kmb-topic-origin{position:absolute;right:12px;top:6px;padding:0 7px;border:0;border-radius:999px;font-size:11px;line-height:18px;background:var(--k-sel,rgba(255,255,255,.08));color:var(--muted,#9aa3b5)}
button.kmb-topic-origin{cursor:pointer}
button.kmb-topic-origin:hover{color:var(--text,#e6e9f2)}
.kmb-topic-hint{font-size:12px;color:var(--muted,#9aa3b5);padding:4px 2px}
/* 论坛视图开着：消息区上方的欢迎卡 / 日期线不画（它们是聊天视图的东西） */
body.kmb-topics-on .message-scroll>.channel-intro,body.kmb-topics-on .message-scroll>.date{display:none}
@media (max-width:640px){.kmb-topic-card{flex-direction:column;gap:6px}.kmb-topic-side{flex-direction:row;align-items:center;justify-content:space-between;width:100%;min-width:0}}
.kmb-topics-btn.is-on{color:var(--brand,#3b82ff)}
/* ---- 图文卡（任务 2403e631 ②，道哥 #28740）：有封面的帖子行左图右文；封面 = 上传封面 > 帖内首图 > 预设（forum.js COVERS），没有的仍是纯文字行 ---- */
.kmb-topic-card.has-cover{align-items:stretch;padding:10px 14px 10px 10px}
.kmb-topic-cover{flex:none;width:168px;min-height:96px;align-self:stretch;border-radius:9px;overflow:hidden;background:var(--k-bg,#0f1424);position:relative}
.kmb-topic-cover img{display:block;width:100%;height:100%;object-fit:cover;position:absolute;inset:0}
.kmb-topic-cover.is-loading{background:linear-gradient(110deg,var(--k-bg2,#141a2a) 30%,var(--k-sel,#1c2438) 50%,var(--k-bg2,#141a2a) 70%) 0 0/200% 100%;animation:kmb-cover-wait 1.4s linear infinite}
.kmb-topic-cover.is-failed{display:flex;align-items:center;justify-content:center;color:var(--muted,#9aa3b5);background:var(--k-bg,#0f1424)}
.kmb-topic-cover .kmb-topic-cover-ph{display:flex;opacity:.6}
.kmb-topic-card.has-cover .kmb-topic-main{justify-content:center;min-height:96px}
.kmb-topic-card.has-cover .kmb-topic-excerpt{-webkit-line-clamp:2}
@media (prefers-reduced-motion:reduce){.kmb-topic-cover.is-loading{animation:none}}
@media (max-width:640px){.kmb-topic-card.has-cover{padding:10px}.kmb-topic-cover{width:100%;height:132px;min-height:0;align-self:auto}.kmb-topic-card.has-cover .kmb-topic-main{min-height:0}}
/* 追加口径（修士 #28755）：贴主 / 宿主的「封面」钮——卡片右下的图标钮，悬停 / 聚焦才显（触屏常显）；话题时间线头部是文字钮 */
.kmb-topic-side .kmb-topic-coverbtn{margin-top:auto;opacity:0;transition:opacity .12s}
.kmb-topic-card:hover .kmb-topic-coverbtn,.kmb-topic-card:focus-within .kmb-topic-coverbtn,.kmb-topic-coverbtn:focus-visible{opacity:1}
@media (hover:none){.kmb-topic-side .kmb-topic-coverbtn{opacity:1}}
@media (max-width:640px){.kmb-topic-side .kmb-topic-coverbtn{margin-top:0}}

/* ==== src/backend/vault.css ==== */
/* Hikos · 密钥保险箱对齐经典视图（任务 7e17fd57，道哥 #28096 ①；src/backend/vault.js）。
   弹窗与 用户设置 › Hikos › 密钥保险箱 共用同一段界面（.kmb-vault）；两栏（添加 / 列表）、分组、行的样式沿用原型（src/kmind/kmind.css .km-vault*），这里只补新的表单形态。
   回滚：从 index.html 去掉这一行和 vault.js。 */
.kmb-vault-title { display: flex; align-items: baseline; gap: 10px; margin: 0 0 12px; font-size: 16px; }
.kmb-vault-title small { font-weight: 400; font-size: 12px; color: var(--k-dim); }
#dialog.kmb-vault-wide { width: min(1040px, 94vw); }   /* 用户设置里这一页两栏要地方（核心设置弹窗是 680px） */
.kmb-spage .km-vault { grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); }
.kmb-spage .km-vault-list { max-height: none; }
/* 种类：字母块 / 线性图标 + 下拉 */
.kmb-vault-kind { display: flex; align-items: center; gap: 8px; }
.kmb-vault-kind .field { flex: 1; min-width: 0; margin: 0; }
.kmb-vault-mark { flex: none; display: inline-grid; place-items: center; width: 24px; height: 24px; border-radius: 7px; font: 700 10.5px/1 var(--k-mono, ui-monospace), monospace; letter-spacing: .02em; color: var(--k-acc); background: rgba(var(--k-acc-rgb), .12); font-style: normal; }
.kmb-vault-mark-i { background: rgba(var(--k-mute-rgb), .14); color: var(--k-ink2); }
.km-vault-grp summary .kmb-vault-mark { width: 20px; height: 20px; border-radius: 6px; font-size: 9.5px; }
/* 字段网格（模型供应商 / 账号 / SSH / 云厂商）：两列，宽字段跨两列；按协议 / 认证方式隐藏的字段用 hidden */
.kmb-vault-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 10px; }
.kmb-vault-grid [hidden] { display: none !important; }
.kmb-vf { display: grid; gap: 4px; min-width: 0; margin: 0; }
.kmb-vf > span { font-size: 11.5px; color: var(--k-dim); }
.kmb-vf .field, .kmb-vf .km-vault-val .field { margin: 0; width: 100%; box-sizing: border-box; }
.kmb-vf textarea.field { font: 12px/1.5 var(--k-mono, ui-monospace), monospace; resize: vertical; }
.kmb-vault-span { grid-column: 1 / -1; }
.kmb-vault-radio { display: flex; align-items: center; gap: 14px; }
.kmb-vault-radio > span { margin-right: auto; flex-shrink: 0; }
.kmb-vault-radio label, .kmb-vault-check { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; cursor: pointer; }
.kmb-vault-check { margin-top: 2px; }
.kmb-vault-git { display: grid; gap: 6px; }
.kmb-vault-json { display: grid; gap: 6px; }
.kmb-vault-file { justify-self: start; display: inline-flex; align-items: center; gap: 5px; cursor: pointer; }
.kmb-vault-netsw { display: inline-flex; gap: 12px; margin-top: 4px; font-size: 11.5px; color: var(--k-ink2); }
.kmb-vault-netsw label { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; }
/* 云密钥：组员环境里会出现的变量名（标准名 + <键名>_<后缀>） */
.kmb-vault-env { display: grid; gap: 3px; }
.kmb-vault-env-row { display: flex; flex-wrap: wrap; gap: 4px 8px; font-size: 11px; }
.kmb-vault-env-row code { padding: 1px 6px; border-radius: 5px; background: rgba(var(--k-mute-rgb), .1); }
.kmb-vault-env-row .kmb-vault-env-ns { color: var(--k-acc); background: rgba(var(--k-acc-rgb), .08); }
.kmb-vault-env-opt code { opacity: .7; }
/* 行：GitHub 路由 / SSH 别名 一句摘要 */
.km-vault-row .kmb-vault-meta { font-style: normal; font-size: 11px; color: var(--k-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 40%; }
/* 行内编辑：整行换成表单，头一行是键名 + 取消 */
.km-vault-row.km-vault-editing { display: block; }
.kmb-vault-editf { display: grid; gap: 8px; width: 100%; }
.kmb-vault-edit-h { display: flex; align-items: center; gap: 8px; }
.kmb-vault-edit-h code { flex: 1; }
.kmb-vault-edit-h .km-mini, .kmb-vault-editf .km-vault-save .km-mini { margin: 0 !important; }
.kmb-vault-form.kmb-busy { opacity: .6; pointer-events: none; }
@media (max-width: 720px) { .kmb-vault-grid { grid-template-columns: 1fr; } .kmb-spage .km-vault { grid-template-columns: 1fr; } }

/* ==== src/backend/colresize.css ==== */
/* 任务 031e2aee（修士大厅 #26364 ①）：面板视图拖曳调列宽（src/backend/colresize.js）。频道栏 / 成员栏直接改核心的 --side / --members；
   讨论串、私信资料、在线动态三列核心写死了宽度，只有拖过（html.km-cw-*）才换成变量。窄屏（< 960px）的抽屉不受影响。 */
.km-colgrip{position:fixed;z-index:60;width:7px;cursor:col-resize;touch-action:none;background:transparent}
.km-colgrip::after{content:"";position:absolute;left:3px;top:0;bottom:0;width:1px;background:var(--k-acc,#5865f2);opacity:0;transition:opacity .12s}
.km-colgrip:hover::after,html.km-col-drag .km-colgrip::after{opacity:.85;width:2px;left:2.5px}
html.km-col-drag,html.km-col-drag *{cursor:col-resize!important;user-select:none!important}
@media (min-width:960px){
  html.km-cw-thread body:not(.km-u) #app .workspace .thread-pane{width:var(--km-cw-thread);max-width:none}
  html.km-cw-dmp body:not(.km-u) #app .workspace .dm-profile{width:var(--km-cw-dmp);flex:0 0 var(--km-cw-dmp)}
  html.km-cw-act body:not(.km-u) #app .workspace .activity{width:var(--km-cw-act);flex:0 0 var(--km-cw-act)}
}

/* ==== src/backend/games.css ==== */
/* Hikos · 组员作品在线游玩（src/backend/games.js，任务 01a1d5a5）。跟随当前皮肤：窗体、作品卡取皮肤变量；游戏画面区固定纯黑，不抢游戏自己的美术。 */

/* ---- 作品卡（私信消息的附件上方） ---- */
.kmb-gm-cards { display: flex; flex-direction: column; gap: 8px; margin: 6px 0 8px; }
.kmb-gm-card { display: flex; align-items: stretch; gap: 12px; max-width: 520px; padding: 10px; border: 1px solid var(--line); border-radius: 14px; background: var(--panel); color: var(--text); }
.kmb-gm-cover { position: relative; display: grid; place-items: center; flex: none; width: 160px; aspect-ratio: 16 / 9; padding: 0; border: 0; border-radius: 10px; overflow: hidden; background: #000; color: #fff; cursor: pointer; }
.kmb-gm-card.is-loading .kmb-gm-cover, .kmb-gm-card.is-error .kmb-gm-cover { width: 64px; aspect-ratio: 1; cursor: default; background: color-mix(in srgb, var(--text) 8%, transparent); color: var(--muted); }
.kmb-gm-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.kmb-gm-badge { position: absolute; display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; background: rgba(0, 0, 0, .55); color: #fff; font-style: normal; font-size: 14px; padding-left: 2px; opacity: 0; transition: opacity .15s; }
.kmb-gm-cover:hover .kmb-gm-badge, .kmb-gm-cover:focus-visible .kmb-gm-badge { opacity: 1; }
.kmb-gm-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; justify-content: center; }
.kmb-gm-info b { font-size: 15px; font-weight: 650; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kmb-gm-info small { font-size: 12px; color: var(--muted); }
.kmb-gm-info p { margin: 4px 0 0; font-size: 13px; line-height: 1.45; color: var(--secondary); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.kmb-gm-acts { display: flex; flex-direction: column; align-items: flex-end; justify-content: center; gap: 6px; flex: none; }
.kmb-gm-acts button { height: 32px; padding: 0 14px; border: 1px solid var(--line); border-radius: 9px; background: transparent; color: var(--text); font: inherit; font-size: 13px; cursor: pointer; white-space: nowrap; }
.kmb-gm-acts button.primary { border-color: transparent; background: var(--brand); color: #fff; font-weight: 600; }
.kmb-gm-acts button:hover { filter: brightness(1.08); }
.kmb-gm-acts small { font-size: 11.5px; color: var(--muted); white-space: nowrap; }

/* ---- 游玩窗口（和文件预览 .kmb-pv 同一层级路数，盖在它上面一档） ---- */
.kmb-gm { position: fixed; z-index: 2147480610; display: flex; flex-direction: column; min-width: 480px; min-height: 320px; max-width: calc(100vw - 16px); max-height: calc(100dvh - 16px); resize: both; overflow: hidden; border-radius: 16px; background: var(--panel); color: var(--text); box-shadow: 0 24px 70px -18px rgba(0, 0, 0, .6), 0 0 0 1px var(--line); }
.kmb-gm.full { inset: 0 !important; width: auto !important; height: auto !important; min-width: 0; min-height: 0; max-width: none; max-height: none; border-radius: 0; resize: none; }
.kmb-gm-head { display: flex; align-items: center; gap: 10px; height: 48px; padding: 0 8px 0 14px; flex: none; cursor: grab; user-select: none; border-bottom: 1px solid var(--line); touch-action: none; }
.kmb-gm.full .kmb-gm-head { cursor: default; }
.kmb-gm-ic { display: grid; place-items: center; width: 28px; height: 28px; flex: none; border-radius: 8px; color: var(--brand); background: color-mix(in srgb, var(--brand) 14%, transparent); }
.kmb-gm-tt { display: flex; align-items: baseline; gap: 8px; min-width: 0; flex: 1; }
.kmb-gm-tt b { font-size: 14px; font-weight: 650; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kmb-gm-tt small { font-size: 12px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kmb-gm-tools { display: flex; align-items: center; gap: 2px; flex: none; }
.kmb-gm-tools button { display: grid; place-items: center; width: 32px; height: 32px; padding: 0; border: 0; border-radius: 9px; background: transparent; color: var(--secondary); cursor: pointer; }
.kmb-gm-tools button:hover, .kmb-gm-tools button.on { background: color-mix(in srgb, var(--text) 8%, transparent); color: var(--text); }
.kmb-gm-screen { position: relative; flex: 1; min-height: 0; background: #000; }
.kmb-gm-frame { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; background: #000; }
.kmb-gm-over { position: absolute; inset: 0; display: grid; place-items: center; background: #000; color: #fff; }
.kmb-gm-over[hidden] { display: none; }
.kmb-gm-poster { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: .45; }
.kmb-gm-over-in { position: relative; display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 16px; text-align: center; max-width: 80%; }
.kmb-gm-over-in b { font-size: 15px; font-weight: 600; }
.kmb-gm-over-in small { font-size: 12.5px; color: rgba(255, 255, 255, .72); }
.kmb-gm-start { height: 48px; padding: 0 28px; border: 0; border-radius: 24px; background: var(--brand); color: #fff; font: inherit; font-size: 16px; font-weight: 650; cursor: pointer; }
.kmb-gm-start:hover { filter: brightness(1.1); }
.kmb-gm-bar { position: relative; width: min(320px, 60vw); height: 4px; border-radius: 2px; overflow: hidden; background: rgba(255, 255, 255, .18); }
.kmb-gm-bar i { position: absolute; top: 0; bottom: 0; left: 0; width: 30%; border-radius: 2px; background: #fff; animation: kmb-gm-slide 1.2s ease-in-out infinite; }
.kmb-gm-bar.is-known i { animation: none; transition: width .2s; }
@keyframes kmb-gm-slide { 0% { left: -30%; } 100% { left: 100%; } }
body.fx-off-ui .kmb-gm-bar:not(.is-known) i { animation: none; left: 0; width: 100%; opacity: .5; }
.kmb-gm-foot { display: flex; align-items: center; gap: 12px; min-height: 48px; padding: 6px 10px 6px 14px; flex: none; border-top: 1px solid var(--line); font-size: 12.5px; color: var(--secondary); }
.kmb-gm-ctl { display: flex; flex-wrap: wrap; gap: 4px 14px; min-width: 0; flex: 1; }
.kmb-gm-ctl span { white-space: nowrap; }
.kmb-gm-ctl kbd { display: inline-block; margin-right: 5px; padding: 1px 6px; border: 1px solid var(--line); border-radius: 5px; font: 600 11.5px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; color: var(--text); }
.kmb-gm-err { display: flex; align-items: center; gap: 8px; padding: 4px 6px 4px 10px; border-radius: 9px; background: color-mix(in srgb, var(--danger, #e5484d) 16%, transparent); color: var(--danger, #e5484d); white-space: nowrap; }
.kmb-gm-err[hidden] { display: none; }
.kmb-gm-foot button { height: 30px; padding: 0 12px; border: 1px solid var(--line); border-radius: 8px; background: transparent; color: var(--text); font: inherit; font-size: 12.5px; cursor: pointer; white-space: nowrap; }
.kmb-gm-foot button:hover { background: color-mix(in srgb, var(--text) 8%, transparent); }

/* ---- 手机：整屏；作品卡竖排 ---- */
@media (max-width: 640px) {
  .kmb-gm { min-width: 0; min-height: 0; }
  .kmb-gm-head { height: 44px; }
  .kmb-gm-tools [data-gm="full"] { display: none; }
  .kmb-gm-foot { flex-wrap: wrap; }
  .kmb-gm-card { flex-wrap: wrap; }
  .kmb-gm-cover { width: 100%; }
  .kmb-gm-acts { flex-direction: row; align-items: center; width: 100%; justify-content: space-between; }
}

/* ==== src/spatial/runtime/style.css ==== */
/* Shared scene chrome, themed through validated CSS color variables. No host selectors. */
.ks3-stage{position:absolute;inset:0;overflow:hidden;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;color:var(--ks3-ink,#334455)}
.ks3-stage>canvas{display:block;width:100%;height:100%;outline:none;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;cursor:grab}
.ks3-stage>canvas:focus-visible:not(.ks3-pointer-focus){box-shadow:inset 0 0 0 2px var(--ks3-accent,#347777)}
.ks3-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.ks3-label{position:absolute;transform:translate(-50%,-100%);pointer-events:auto;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:150px;padding:3px 6px;background:var(--ks3-paper,#fafafa);color:var(--ks3-ink,#334455);font:550 11px/1.4 "IBM Plex Sans","Plex SC","PingFang SC",sans-serif;box-shadow:0 1px 3px #6c675c30;border:0;border-radius:2px;cursor:pointer;transition:background-color .15s,box-shadow .15s}
.ks3-label[hidden]{display:none!important}.ks3-label:hover{color:var(--ks3-accent);box-shadow:0 1px 0 var(--ks3-accent)}
.ks3-label.selected{background:var(--ks3-accent);color:var(--ks3-paper)}
.ks3-group{font-weight:750;font-size:12px;border-left:3px solid var(--ks3-color,var(--ks3-accent));padding:5px 8px;max-width:180px;cursor:default}
.ks3-group button{padding:0 0 0 8px;font:inherit;color:var(--ks3-accent);background:none;cursor:pointer}.ks3-civic{color:var(--ks3-accent);font-weight:700;max-width:142px}
.ks3-directory{position:absolute;inset:8px auto 8px 8px;width:min(310px,calc(100% - 16px));background:var(--ks3-paper);border:1px solid var(--ks3-hair);box-shadow:6px 8px 25px #4b493824;padding:12px;display:flex;flex-direction:column;overflow:hidden;z-index:3;touch-action:pan-y}
.ks3-directory[hidden]{display:none!important}.ks3-directory input{width:100%;background:var(--ks3-ground);border:0;color:var(--ks3-ink);font:inherit;font-size:13px;padding:10px;outline-color:var(--ks3-accent);border-radius:2px}
.ks3-directory-list{overflow:auto;min-height:0;margin-top:10px;scrollbar-width:thin}.ks3-directory-list h3{margin:14px 4px 5px;font-size:13px;color:var(--ks3-accent)}
.ks3-directory-item{display:flex;flex-direction:column;gap:3px;width:100%;padding:9px 6px;background:none;color:var(--ks3-ink);text-align:left;font:inherit;font-size:13px;line-height:1.4;border:0;border-bottom:1px solid var(--ks3-hair);cursor:pointer}
.ks3-directory-item[hidden],.ks3-directory-list h3[hidden]{display:none}.ks3-directory-item:hover{background:var(--ks3-ground)}.ks3-directory-item small{font-size:10px;color:var(--ks3-muted)}
.ks3-detail{position:absolute;bottom:12px;right:16px;max-width:calc(100% - 160px);padding:5px 9px;background:var(--ks3-paper);color:var(--ks3-ink);font-size:11px;pointer-events:none;border-radius:2px}.ks3-detail:empty{display:none}
/* 1.4.1 · zoom buttons (in / out / reset), bottom left like the flat maps' tools; themed through the same variables */
.ks3-controls{position:absolute;left:12px;bottom:12px;display:flex;z-index:2;border-radius:4px;box-shadow:0 1px 3px #6c675c30;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
.ks3-controls button{min-width:32px;height:30px;margin-left:-1px;padding:0 10px;border:1px solid var(--ks3-hair,#cdd7e0);background:var(--ks3-paper,#fafafa);color:var(--ks3-ink,#334455);font:600 15px/1 "IBM Plex Sans","Plex SC","PingFang SC",sans-serif;cursor:pointer;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
.ks3-controls button:first-child{margin-left:0;border-radius:4px 0 0 4px}.ks3-controls button:last-child{border-radius:0 4px 4px 0;font-size:12px;font-weight:550}
.ks3-controls button:hover:not(:disabled){color:var(--ks3-accent);border-color:var(--ks3-accent);position:relative;z-index:1}
.ks3-controls button:disabled{opacity:.45;cursor:default}.ks3-controls button:focus-visible{outline:2px solid var(--ks3-accent);outline-offset:2px;position:relative;z-index:1}
@media(pointer:coarse){.ks3-controls button{min-width:40px;height:36px}}
.ks3-label:focus-visible,.ks3-directory-item:focus-visible{outline:2px solid var(--ks3-accent);outline-offset:2px}
.ks3-holding,.ks3-holding *{cursor:grabbing!important;user-select:none}
.ks3-close{align-self:flex-end;width:32px;height:32px;margin:0 0 6px;border:0;background:none;color:var(--ks3-accent);font-size:24px;cursor:pointer}
@media(prefers-reduced-motion:reduce){.ks3-label{transition:none}}

.ks3-stage[hidden]{display:none!important}

/* ==== src/spatial/runtime/labels.css ==== */
/* V42 · runtime 1.8 · labels.css comes after style.css (which stays as the V40 handoff fixed it) and takes the tags over from its rules. */
.ks3-label{overflow:visible;text-overflow:clip;border:0;border-left:0}
.ks3-group{border-left:0;max-width:none}
.ks3-civic{max-width:none}
/* V42 · runtime 1.8 · the map's tags: game nameplates. A plate (icon, name, count or unread badge, live mark) on a stem down to a pin
   on the ground. theme.labels.style picks a look on .ks3-labels[data-style]; theme.labels.colors and a skin's studio block (targets:
   citylabels) colour every part. Sizes scale with --ks3-tag-k (theme.labels.size). */
.ks3-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden;--ks3-tag-k:1;user-select:none;-webkit-user-select:none}
.ks3-label{--plate:var(--ks3-tag-plate,color-mix(in srgb,var(--ks3-paper,#fafafa) 96%,transparent));--ink:var(--ks3-tag-ink,var(--ks3-ink,#334455));--edge:var(--ks3-tag-edge,color-mix(in srgb,var(--ks3-ink,#334455) 16%,transparent));--tint:var(--ks3-color,var(--ks3-tag-group,var(--ks3-accent,#347777)));--stem-h:calc(13px*var(--ks3-tag-k));
  position:absolute;transform:translate(-50%,calc(-100% - var(--stem-h)));transform-origin:50% calc(100% + var(--stem-h));pointer-events:auto;display:inline-flex;align-items:center;gap:calc(5px*var(--ks3-tag-k));white-space:nowrap;max-width:calc(210px*var(--ks3-tag-k));
  padding:calc(4px*var(--ks3-tag-k)) calc(9px*var(--ks3-tag-k)) calc(4px*var(--ks3-tag-k)) calc(5px*var(--ks3-tag-k));background:var(--plate);color:var(--ink);font:650 calc(12.5px*var(--ks3-tag-k))/1.25 "IBM Plex Sans","Plex SC","PingFang SC",sans-serif;letter-spacing:.01em;
  border:0;border-radius:8px;box-shadow:0 0 0 1px var(--edge),0 4px 12px -3px rgb(0 0 0/.32),inset 3px 0 0 var(--tint);cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;
  transition:transform .18s cubic-bezier(.2,.8,.3,1.2),box-shadow .18s,background-color .18s,color .18s;animation:ks3-tag-in .32s cubic-bezier(.2,.8,.3,1.2) both}
.ks3-label[hidden]{display:none!important}
.ks3-label .ks3-name{overflow:hidden;text-overflow:ellipsis;min-width:0}
.ks3-ico{flex:none;display:grid;place-items:center;width:1.45em;height:1.45em;border-radius:6px;background:color-mix(in srgb,var(--tint) 17%,transparent);color:var(--tint)}
.ks3-ico svg{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.ks3-count{flex:none;font-weight:760;font-size:.8em;line-height:1.45;padding:0 .5em;border-radius:99px;background:color-mix(in srgb,var(--tint) 18%,transparent);color:var(--tint)}
.ks3-badge{flex:none;min-width:1.5em;height:1.5em;padding:0 .4em;margin-right:-.3em;border-radius:99px;display:grid;place-items:center;font:760 .72em/1 "IBM Plex Sans","PingFang SC",sans-serif;background:var(--ks3-tag-badge,var(--ks3-invalid,#e5484d));color:#fff;box-shadow:0 0 0 2px var(--plate)}
.ks3-badge.dot{min-width:.62em;height:.62em;padding:0}
.ks3-live{flex:none;width:.5em;height:.5em;border-radius:50%;background:var(--ks3-accent);animation:ks3-live 1.6s ease-out infinite}.ks3-live[hidden]{display:none}
.ks3-stem{position:absolute;left:50%;top:100%;z-index:-1;width:calc(1.6px*var(--ks3-tag-k));height:var(--stem-h);transform:translateX(-50%);background:linear-gradient(var(--ks3-tag-stem,color-mix(in srgb,var(--ink) 60%,transparent)),color-mix(in srgb,var(--ks3-tag-stem,var(--ink)) 22%,transparent));pointer-events:none}
.ks3-stem::after{content:'';position:absolute;left:50%;bottom:calc(-3.5px*var(--ks3-tag-k));width:calc(7px*var(--ks3-tag-k));height:calc(7px*var(--ks3-tag-k));transform:translateX(-50%);border-radius:50%;background:var(--tint);box-shadow:0 0 0 2px var(--plate),0 1px 4px rgb(0 0 0/.35)}
.ks3-nostem .ks3-label{--stem-h:0px}.ks3-nostem .ks3-stem{display:none}.ks3-noicons .ks3-ico{display:none}.ks3-upper .ks3-name{text-transform:uppercase;letter-spacing:.07em}
.ks3-label:hover{transform:translate(-50%,calc(-100% - var(--stem-h))) scale(1.07);box-shadow:0 0 0 1.5px var(--ks3-accent),0 6px 16px -4px rgb(0 0 0/.4),inset 3px 0 0 var(--tint);z-index:2}
.ks3-label.selected{--plate:var(--ks3-accent);color:var(--ks3-paper);box-shadow:0 0 0 2px color-mix(in srgb,var(--ks3-accent) 35%,transparent),0 6px 18px -4px color-mix(in srgb,var(--ks3-accent) 70%,transparent);z-index:3}
.ks3-label.selected .ks3-ico,.ks3-label.selected .ks3-count{background:rgb(255 255 255/.2);color:inherit}.ks3-label.selected .ks3-stem::after{animation:ks3-ping 1.5s ease-out infinite}
.ks3-label.live .ks3-stem::after{animation:ks3-ping 1.8s ease-out infinite}
.ks3-group{--stem-h:calc(22px*var(--ks3-tag-k));font-size:calc(14px*var(--ks3-tag-k));font-weight:760;padding:calc(5px*var(--ks3-tag-k)) calc(8px*var(--ks3-tag-k)) calc(5px*var(--ks3-tag-k)) calc(5px*var(--ks3-tag-k));border-radius:5px 11px 11px 5px;cursor:default;box-shadow:0 0 0 1px var(--edge),0 5px 14px -3px rgb(0 0 0/.34),inset 4px 0 0 var(--tint)}
.ks3-group .ks3-ico{background:var(--tint);color:var(--ks3-paper,#fff)}
.ks3-group button{padding:0 0 0 4px;font:inherit;color:var(--ks3-accent);background:none;border:0;cursor:pointer}
.ks3-civic{--stem-h:calc(18px*var(--ks3-tag-k));--tint:var(--ks3-tag-civic,var(--ks3-accent));font-size:calc(13.5px*var(--ks3-tag-k));font-weight:760;color:var(--tint)}
.ks3-civic .ks3-ico{background:var(--tint);color:var(--ks3-paper,#fff)}
.ks3-label:focus-visible{outline:2px solid var(--ks3-accent);outline-offset:2px}
@keyframes ks3-tag-in{from{opacity:0;translate:0 6px}to{opacity:1;translate:0 0}}
@keyframes ks3-live{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--ks3-accent) 70%,transparent)}100%{box-shadow:0 0 0 .7em transparent}}
@keyframes ks3-ping{0%{box-shadow:0 0 0 2px var(--plate),0 0 0 2px color-mix(in srgb,var(--tint) 80%,transparent)}100%{box-shadow:0 0 0 2px var(--plate),0 0 0 14px transparent}}
/* flag: printed enamel plates, district pennants on poles, the hubs as filled plaques (a planned city, a poster) */
.ks3-labels[data-style=flag] .ks3-label{border-radius:2px;font-weight:700;box-shadow:0 0 0 1px var(--edge),0 5px 12px -4px rgb(0 0 0/.36),inset 0 3px 0 var(--tint);padding-top:calc(6px*var(--ks3-tag-k))}
.ks3-labels[data-style=flag] .ks3-ico{border-radius:2px}
.ks3-labels[data-style=flag] .ks3-stem{width:calc(2.4px*var(--ks3-tag-k));background:var(--ks3-tag-stem,color-mix(in srgb,var(--ink) 78%,transparent))}
.ks3-labels[data-style=flag] .ks3-stem::after{border-radius:1px;width:calc(8px*var(--ks3-tag-k));height:calc(4px*var(--ks3-tag-k));bottom:-2px;background:var(--ks3-tag-stem,var(--ink))}
.ks3-labels[data-style=flag] .ks3-group{transform:translate(calc(-1.2px*var(--ks3-tag-k)),calc(-100% - var(--stem-h)));transform-origin:0 calc(100% + var(--stem-h));background:none;box-shadow:none;color:var(--ks3-tag-plate,var(--ks3-paper,#fff));padding-right:calc(22px*var(--ks3-tag-k));filter:drop-shadow(0 5px 6px rgb(0 0 0/.28))}
.ks3-labels[data-style=flag] .ks3-group::before{content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(100deg,var(--tint),color-mix(in srgb,var(--tint) 82%,#000));clip-path:polygon(0 0,100% 0,calc(100% - 11px) 50%,100% 100%,0 100%)}
.ks3-labels[data-style=flag] .ks3-group .ks3-stem{left:0;transform:none;height:calc(var(--stem-h) + 100%);top:0}
.ks3-labels[data-style=flag] .ks3-group .ks3-ico,.ks3-labels[data-style=flag] .ks3-group .ks3-count{background:rgb(255 255 255/.2);color:inherit}
.ks3-labels[data-style=flag] .ks3-group:hover{transform:translate(calc(-1.2px*var(--ks3-tag-k)),calc(-100% - var(--stem-h))) scale(1.05)}
.ks3-labels[data-style=flag] .ks3-civic{--plate:var(--tint);color:var(--ks3-paper,#fff);box-shadow:0 0 0 1px color-mix(in srgb,var(--tint) 60%,#000),0 6px 14px -4px rgb(0 0 0/.4),inset 0 -3px 0 rgb(0 0 0/.18)}
.ks3-labels[data-style=flag] .ks3-civic .ks3-ico{background:rgb(255 255 255/.2);color:inherit}
/* sign: a hanging board — dark wood or iron, a fine double frame, chains for a stem (old towns, citadels, cathedrals) */
.ks3-labels[data-style=sign] .ks3-label{--plate:var(--ks3-tag-plate,color-mix(in srgb,var(--ks3-ink,#2a2118) 88%,#000));--ink:var(--ks3-tag-ink,var(--ks3-paper,#f4ead6));border-radius:3px;font-family:"Cormorant Garamond","Noto Serif SC","Songti SC",serif;font-weight:700;letter-spacing:.03em;
  box-shadow:0 0 0 1px var(--tint),0 0 0 3px var(--plate),0 0 0 4px var(--edge),0 6px 14px -4px rgb(0 0 0/.5)}
.ks3-labels[data-style=sign] .ks3-ico{background:none;color:var(--tint)}
.ks3-labels[data-style=sign] .ks3-stem{width:calc(5px*var(--ks3-tag-k));background:repeating-linear-gradient(var(--ks3-tag-stem,var(--tint)) 0 2px,transparent 2px 4px);opacity:.9}
.ks3-labels[data-style=sign] .ks3-stem::after{border-radius:1px;transform:translateX(-50%) rotate(45deg)}
.ks3-labels[data-style=sign] .ks3-group{--plate:var(--tint);--ink:var(--ks3-paper,#fff)}.ks3-labels[data-style=sign] .ks3-group .ks3-ico{color:inherit}
/* holo: projected light — glass, a glowing edge, mono type, a dashed beam to a glowing ring (machines, hives, the deep) */
.ks3-labels[data-style=holo] .ks3-label{--plate:var(--ks3-tag-plate,color-mix(in srgb,var(--ks3-ground,#0b0d0a) 62%,transparent));--ink:var(--ks3-tag-ink,var(--ks3-accent));border-radius:0;font-family:"IBM Plex Mono","SFMono-Regular",ui-monospace,monospace;font-weight:600;letter-spacing:.04em;text-shadow:0 0 8px color-mix(in srgb,var(--ink) 55%,transparent);
  box-shadow:0 0 0 1px color-mix(in srgb,var(--tint) 70%,transparent),0 0 14px -2px color-mix(in srgb,var(--tint) 55%,transparent),inset 0 0 12px -4px color-mix(in srgb,var(--tint) 60%,transparent);
  background-image:repeating-linear-gradient(0deg,rgb(255 255 255/.05) 0 1px,transparent 1px 3px)}
.ks3-labels[data-style=holo] .ks3-ico{border-radius:0;background:none;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--tint) 60%,transparent)}
.ks3-labels[data-style=holo] .ks3-stem{width:1px;background:repeating-linear-gradient(var(--ks3-tag-stem,var(--tint)) 0 3px,transparent 3px 6px);box-shadow:0 0 6px var(--tint)}
.ks3-labels[data-style=holo] .ks3-stem::after{background:none;box-shadow:0 0 0 1.5px var(--tint),0 0 10px var(--tint);width:calc(10px*var(--ks3-tag-k));height:calc(4px*var(--ks3-tag-k));bottom:-2px}
.ks3-labels[data-style=holo] .ks3-group .ks3-ico,.ks3-labels[data-style=holo] .ks3-civic .ks3-ico{background:color-mix(in srgb,var(--tint) 18%,transparent);color:var(--tint)}
.ks3-labels[data-style=holo] .ks3-label.selected{--plate:color-mix(in srgb,var(--ks3-accent) 26%,transparent);color:var(--ks3-ink);box-shadow:0 0 0 1.5px var(--ks3-accent),0 0 22px -2px var(--ks3-accent)}
/* pin: map pins — round capsules on a short pointer (harbours, campuses, maps) */
.ks3-labels[data-style=pin] .ks3-label{--stem-h:calc(8px*var(--ks3-tag-k));border-radius:99px;padding-left:calc(4px*var(--ks3-tag-k));box-shadow:0 0 0 1px var(--edge),0 4px 12px -3px rgb(0 0 0/.3)}
.ks3-labels[data-style=pin] .ks3-ico{border-radius:99px;background:var(--tint);color:var(--ks3-paper,#fff)}
.ks3-labels[data-style=pin] .ks3-stem{width:0;height:0;background:none;border:solid transparent;border-width:var(--stem-h) calc(6px*var(--ks3-tag-k)) 0;border-top-color:var(--plate);top:calc(100% - 1px)}
.ks3-labels[data-style=pin] .ks3-stem::after{display:none}
/* ribbon: a cloth ribbon with cut ends (festivals, letters, gardens) */
.ks3-labels[data-style=ribbon] .ks3-label{background:none;box-shadow:none;padding-left:calc(14px*var(--ks3-tag-k));padding-right:calc(16px*var(--ks3-tag-k));filter:drop-shadow(0 4px 6px rgb(0 0 0/.25))}
.ks3-labels[data-style=ribbon] .ks3-label::before{content:'';position:absolute;inset:0;z-index:-1;background:var(--plate);box-shadow:inset 0 2px 0 var(--tint),inset 0 -2px 0 var(--tint);clip-path:polygon(0 0,100% 0,calc(100% - 9px) 50%,100% 100%,0 100%,9px 50%)}
.ks3-labels[data-style=ribbon] .ks3-group,.ks3-labels[data-style=ribbon] .ks3-civic{--plate:var(--tint);color:var(--ks3-paper,#fff)}
.ks3-labels[data-style=ribbon] .ks3-group .ks3-ico,.ks3-labels[data-style=ribbon] .ks3-civic .ks3-ico,.ks3-labels[data-style=ribbon] .ks3-group .ks3-count{background:rgb(255 255 255/.22);color:inherit}
.ks3-labels[data-style=ribbon] .ks3-label.selected::before{background:var(--ks3-accent)}
@media(prefers-reduced-motion:reduce){.ks3-label,.ks3-live,.ks3-stem::after{transition:none;animation:none!important}}
.ks3-label.selected .ks3-badge{background:var(--ks3-paper,#fff);color:var(--ks3-accent);box-shadow:none}
/* c44d0ad8 · 编辑地图（src/addons/editor.js through runtime.edit）: the selected building's tag is pinned and outlined; a building taken off the map has no tag (runtime hides it) */
.ks3-editing .ks3-label.ks3-editsel{background:var(--ks3-accent,#347777);color:var(--ks3-paper,#fafafa);outline:2px solid var(--ks3-paper,#fafafa);outline-offset:1px;z-index:2}
.ks3-editing .ks3-label.ks3-editsel .ks3-stem{background:var(--ks3-accent,#347777)}

/* ==== src/spatial/runtime/exploration.css ==== */
.ks3-explorer{position:absolute;inset:90px 0 0;overflow:auto;overscroll-behavior:contain;padding:10px 28px 32px;color:var(--ks3-ink);background:var(--ks3-ground);scrollbar-width:thin}.ks3-explorer[hidden]{display:none!important}.ks3-atlas-toolbar{display:flex;justify-content:space-between;gap:16px;align-items:center}.ks3-explorer button{font:inherit;cursor:pointer}.ks3-back{border:0;background:none;color:var(--ks3-accent);padding:10px 0}.ks3-search{display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--ks3-hair);padding:8px;width:min(300px,50%)}.ks3-search input{min-width:0;width:100%;border:0;background:none;color:inherit;font:inherit;outline:none}.ks3-atlas-filters{display:flex;gap:20px;flex-wrap:wrap;margin-top:18px;border-bottom:1px solid var(--ks3-hair)}.ks3-atlas-filters button{padding:10px 0;border:0;border-bottom:2px solid transparent;color:var(--ks3-muted);background:none}.ks3-atlas-filters [aria-pressed=true]{border-bottom-color:var(--ks3-accent);color:var(--ks3-accent)}.ks3-atlas-status{font:10px/1.5 monospace;letter-spacing:.13em;padding:20px 0 12px;color:var(--ks3-muted)}.ks3-atlas-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:24px;align-items:start}.ks3-region{min-width:0;padding:0;text-align:left;border:1px solid var(--ks3-hair);color:var(--ks3-accent);background:var(--ks3-paper);transition:transform .2s,box-shadow .2s;overflow:hidden}.ks3-region:hover{transform:translateY(-3px);box-shadow:0 10px 24px #00000012}.ks3-region:focus-visible,.ks3-explorer button:focus-visible{outline:2px solid var(--ks3-accent);outline-offset:2px}.ks3-region-art{position:relative;background:var(--ks3-ground);height:185px}.ks3-region-art svg{width:100%;height:100%}.ks3-region-code{position:absolute;top:12px;left:16px;font:10px monospace;letter-spacing:.08em}.ks3-region-copy{padding:18px 20px}.ks3-region h2{font-size:20px;line-height:1.3;margin:0;overflow-wrap:anywhere;color:var(--ks3-ink)}.ks3-region p{font-size:12px;color:var(--ks3-muted);line-height:1.6;min-height:38px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.ks3-region-meta{display:flex;flex-wrap:wrap;gap:14px;font-size:11px;color:var(--ks3-muted);padding-bottom:16px}.ks3-region-action{display:flex;justify-content:space-between;border-top:1px solid var(--ks3-hair);padding-top:12px;font-size:12px}.ks3-atlas-empty{color:var(--ks3-muted);padding:40px 0}#hub-view[data-spatial-exploring] .hub-viewport{visibility:hidden}html.km-slab[data-spatial-theme] #hub-view[data-spatial-exploring] .ks3-stage{display:none!important}@media(max-width:720px){.ks3-explorer{inset:75px 0 0;padding:10px 16px 24px}.ks3-atlas-toolbar{font-size:12px}.ks3-atlas-filters{gap:16px;font-size:12px}.ks3-region-art{height:165px}.ks3-atlas-grid{gap:16px}}@media(prefers-reduced-motion:reduce){.ks3-region{transition:none}.ks3-region:hover{transform:none}}

html[data-spatial-theme] #kmu:has(#hub-view[data-spatial-exploring]) #kmu-bar{visibility:hidden}

.ks3-atlas-relations{display:grid;grid-template-columns:minmax(160px,1fr) 2fr;gap:14px 40px;margin:20px 0 14px;padding:20px;background:var(--ks3-paper);border:1px solid var(--ks3-hair);position:relative}.ks3-origin{display:flex;flex-direction:column;gap:8px;justify-content:center;border-left:3px solid var(--ks3-accent);padding-left:14px;min-width:0}.ks3-origin small,.ks3-relation-note{font-size:10px;color:var(--ks3-muted)}.ks3-origin strong{overflow-wrap:anywhere}.ks3-connections{display:flex;gap:10px;align-items:stretch;border-top:1px solid var(--ks3-hair);padding-top:10px}.ks3-connections button{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--ks3-accent);border:0;background:var(--ks3-ground);padding:10px}.ks3-connections strong{font:24px Georgia,serif}.ks3-connections span{font-size:11px}.ks3-relation-note{grid-column:1/-1}.ks3-explorer .ks3-atlas-toolbar{position:sticky;top:-10px;z-index:2;background:var(--ks3-ground);padding:6px 0}.ks3-atlas-detail{left:auto!important;right:12px!important;top:100px!important;bottom:100px!important;width:310px!important;height:auto!important;transform:none!important;max-height:none!important}#hub-view.ks3-detail-open .ks3-explorer{right:334px}#hub-view.ks3-detail-open .hub-heading{right:350px}@media(max-width:720px){.ks3-atlas-relations{grid-template-columns:1fr;gap:14px;padding:16px}.ks3-atlas-detail{left:0!important;right:0!important;top:35%!important;bottom:0!important;width:100%!important}#hub-view.ks3-detail-open .ks3-explorer{right:0}#hub-view.ks3-detail-open .hub-heading{right:24px}#hub-view[data-spatial-exploring]{bottom:0}.ks3-detail-open .ks3-explorer{padding-bottom:65vh}}

/* ==== src/spatial/runtime/sandbox.css ==== */
/* Hikos · 星港开放世界第一刀（大厅 #32016）· 物理沙盒的舞台控件（physics/sandbox.js）：底栏按钮、一行状态、生成面板、漫步时的准星。
   跟 .ks3-controls 一个家族（同字体、同纸色、同 --ks3-* 变量）；漫步（.ks3-walking）时 .ks3-controls / .ks3-detail 隐藏，这一栏留着，因为它就是玩法。 */
.ks3-sandbox{position:absolute;inset:0;pointer-events:none;z-index:4;font:12px/1.3 "IBM Plex Sans","Plex SC","PingFang SC",sans-serif;color:var(--ks3-ink,#334455)}
.ks3-sandbox[hidden]{display:none}
.ks3-sandbox-bar{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);display:flex;gap:4px;padding:4px;border-radius:6px;background:color-mix(in srgb,var(--ks3-paper,#fafafa) 86%,transparent);box-shadow:0 1px 4px #6c675c38;pointer-events:auto;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;max-width:calc(100% - 24px);flex-wrap:wrap;justify-content:center}
.ks3-sandbox-bar button,.ks3-sandbox-palette button{height:30px;padding:0 10px;border:1px solid var(--ks3-hair,#cdd7e0);border-radius:4px;background:var(--ks3-paper,#fafafa);color:var(--ks3-ink,#334455);font:600 12px/1 "IBM Plex Sans","Plex SC","PingFang SC",sans-serif;cursor:pointer;white-space:nowrap}
.ks3-sandbox-bar button:hover,.ks3-sandbox-palette button:hover{color:var(--ks3-accent,#b4382c);border-color:var(--ks3-accent,#b4382c)}
.ks3-sandbox-bar button:focus-visible,.ks3-sandbox-palette button:focus-visible{outline:2px solid var(--ks3-accent,#b4382c);outline-offset:2px}
.ks3-sandbox-bar button[data-sandbox="close"]{color:var(--ks3-muted,#6c675c)}
.ks3-sandbox-hud{position:absolute;left:50%;bottom:58px;transform:translateX(-50%);max-width:min(560px,calc(100% - 32px));padding:5px 10px;border-radius:3px;background:color-mix(in srgb,var(--ks3-paper,#fafafa) 88%,transparent);color:var(--ks3-ink,#334455);font-size:12px;text-align:center;pointer-events:none}
.ks3-sandbox-hud:empty{display:none}
.ks3-sandbox-palette{position:absolute;left:50%;bottom:96px;transform:translateX(-50%);display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:4px;width:min(620px,calc(100% - 32px));padding:6px;border-radius:6px;background:color-mix(in srgb,var(--ks3-paper,#fafafa) 94%,transparent);box-shadow:0 2px 8px #6c675c40;pointer-events:auto}
.ks3-sandbox-palette[hidden]{display:none}
.ks3-sandbox-palette button{height:34px;padding:0 8px;text-align:left;overflow:hidden;text-overflow:ellipsis}
.ks3-sandbox-aim{position:absolute;left:50%;top:50%;width:14px;height:14px;margin:-7px 0 0 -7px;border:2px solid #ffffffcc;border-radius:50%;box-shadow:0 0 0 1px #00000040;pointer-events:none;transition:transform .12s}
.ks3-sandbox-aim[hidden]{display:none}
.ks3-sandbox-aim.on{transform:scale(1.35);border-color:var(--ks3-accent,#ffb020)}
.ks3-stage.ks3-sandboxing .ks3-ground-pad:not([hidden]),.ks3-stage.ks3-sandboxing .ks3-ground-actions:not([hidden]){bottom:64px}   /* 1.16 · the run / jump buttons rise with the pad */
@media(pointer:coarse){.ks3-sandbox-bar button{height:36px;padding:0 12px;font-size:13px}.ks3-sandbox-hud{bottom:64px}.ks3-sandbox-palette{bottom:104px}}
@media(max-width:640px){.ks3-sandbox-bar{gap:3px;padding:3px}.ks3-sandbox-bar button{padding:0 7px}}
/* 1.15 · 第三刀（大厅 #32254）：挑战 / 架子面板——挑战的进度条、内置与自存的蓝图一键放下、声音开关 */
.ks3-sandbox-quests{position:absolute;left:50%;bottom:96px;transform:translateX(-50%);width:min(560px,calc(100% - 32px));max-height:min(60vh,420px);overflow:auto;padding:8px 10px;border-radius:6px;background:color-mix(in srgb,var(--ks3-paper,#fafafa) 95%,transparent);box-shadow:0 2px 8px #6c675c40;pointer-events:auto;user-select:none;-webkit-user-select:none}
.ks3-sandbox-quests[hidden]{display:none}
.ks3-sandbox-quests h4{margin:0 0 6px;font:600 12px/1.3 inherit;color:var(--ks3-muted,#6c675c);letter-spacing:.04em;text-transform:uppercase}
.ks3-sandbox-quests h4+h4{margin-top:10px}
.ks3-sandbox-quests ol{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:3px 12px}
.ks3-sandbox-quests li{display:grid;grid-template-columns:16px 1fr auto;gap:0 6px;align-items:baseline;padding:3px 0;border-bottom:1px solid color-mix(in srgb,var(--ks3-hair,#cdd7e0) 60%,transparent)}
.ks3-sandbox-quests li b{font-weight:600}.ks3-sandbox-quests li small{grid-column:2/4;color:var(--ks3-muted,#6c675c)}
.ks3-sandbox-quests li.done{color:var(--ks3-muted,#6c675c)}.ks3-sandbox-quests li.done b{text-decoration:line-through;text-decoration-color:#6c675c80}
.ks3-sandbox-quests li .ks3-q-mark{color:var(--ks3-accent,#b4382c)}.ks3-sandbox-quests li.done .ks3-q-mark{color:#2fa36b}
.ks3-sandbox-quests .ks3-q-n{font-variant-numeric:tabular-nums;color:var(--ks3-muted,#6c675c)}
.ks3-sandbox-quests .ks3-q-shelf{display:flex;flex-wrap:wrap;gap:4px}
.ks3-sandbox-quests button{height:30px;padding:0 10px;border:1px solid var(--ks3-hair,#cdd7e0);border-radius:4px;background:var(--ks3-paper,#fafafa);color:var(--ks3-ink,#334455);font:600 12px/1 "IBM Plex Sans","Plex SC","PingFang SC",sans-serif;cursor:pointer;white-space:nowrap}
.ks3-sandbox-quests button:hover{color:var(--ks3-accent,#b4382c);border-color:var(--ks3-accent,#b4382c)}
.ks3-sandbox-quests button[data-bp].builtin{border-style:dashed}
.ks3-sandbox-quests .ks3-q-bp{display:inline-flex}.ks3-sandbox-quests .ks3-q-bp>button[data-bp]{border-top-right-radius:0;border-bottom-right-radius:0}
.ks3-sandbox-quests .ks3-q-bp>.ks3-q-share{width:28px;padding:0;border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}
.ks3-sandbox-quests .ks3-q-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:10px;color:var(--ks3-muted,#6c675c)}
.ks3-sandbox-bar button[data-sandbox="quests"].has-new::after{content:"";display:inline-block;width:6px;height:6px;margin-left:5px;border-radius:50%;background:var(--ks3-accent,#b4382c);vertical-align:middle}
@media(pointer:coarse){.ks3-sandbox-quests{bottom:104px}}
/* 1.17 · 第五刀（#32873）· 实例信息卡（runtime.js cardOpen）：点城里任何一样东西——名字、拼件、材质（声明或推断）、来源法则、位置、状态与「为什么」，下面是沙盒里能对它做的事 */
.ks3-inst-card{position:absolute;z-index:5;width:min(272px,calc(100% - 16px));padding:8px 10px 9px;border-radius:6px;background:color-mix(in srgb,var(--ks3-paper,#fafafa) 94%,transparent);box-shadow:0 1px 6px #6c675c40;color:var(--ks3-ink,#334455);font:12px/1.35 "IBM Plex Sans","Plex SC","PingFang SC",sans-serif;pointer-events:auto;user-select:text}
.ks3-inst-card[hidden]{display:none}
.ks3-inst-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}
.ks3-inst-head strong{font-size:13px;font-weight:600}
.ks3-inst-close{width:22px;height:22px;border:0;border-radius:4px;background:transparent;color:var(--ks3-muted,#6c675c);font:16px/1 inherit;cursor:pointer}
.ks3-inst-close:hover{color:var(--ks3-accent,#b4382c);background:color-mix(in srgb,var(--ks3-hair,#cdd7e0) 50%,transparent)}
.ks3-inst-card dl{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;margin:0}
.ks3-inst-card dt{color:var(--ks3-muted,#6c675c);white-space:nowrap}
.ks3-inst-card dd{margin:0;overflow-wrap:anywhere}
.ks3-inst-actions{display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}
.ks3-inst-actions button{height:26px;padding:0 9px;border:1px solid var(--ks3-hair,#cdd7e0);border-radius:4px;background:var(--ks3-paper,#fafafa);color:var(--ks3-ink,#334455);font:600 12px/1 inherit;cursor:pointer}
.ks3-inst-actions button:hover{color:var(--ks3-accent,#b4382c);border-color:var(--ks3-accent,#b4382c)}
/* 1.20 · 第五刀阶段 3（任务 e8df7ecb）: the three-step card on a first visit, and the toolbar's level badge (L0 玩现成 → L3 发布) */
/* 任务 d3a2523a（香农第五刀补测 item10）: the card gives way to the host's chat window, which lands open on the right and sits above this layer (.kmw z ≥ 20, .ks3-sandbox z 4) —
   the host writes --kmu-right-busy (viewport right edge → chat window's left edge; 0 when closed / collapsed / maximized / a phone sheet; universe/u5.js busyVars) and
   --kmu-bottom-busy (a phone sheet's height from the bottom; 0 otherwise); the stage writes --ks3-bottom-covered (the part of its bottom it already gave the sheet, runtime.js resize).
   right = busy + 14px, never past the left edge (clamp keeps 14px of room); on touch the card lives at the bottom right and stays 12px above the sheet instead */
.ks3-sandbox-onboard{position:absolute;right:clamp(14px,calc(var(--kmu-right-busy,0px) + 14px),calc(100% - 314px));top:56px;width:min(300px,calc(100% - 28px));padding:8px 10px 10px;border-radius:6px;background:color-mix(in srgb,var(--ks3-paper,#fafafa) 92%,transparent);box-shadow:0 1px 6px #6c675c40;pointer-events:auto;font:12px/1.4 "IBM Plex Sans","Plex SC","PingFang SC",sans-serif;color:var(--ks3-ink,#334455)}
.ks3-sandbox-onboard h4{display:flex;align-items:center;justify-content:space-between;margin:0 0 6px;font-size:12px;font-weight:700;color:var(--ks3-accent,#b4382c)}
.ks3-sandbox-onboard h4 button{width:22px;height:22px;padding:0;border:1px solid var(--ks3-hair,#cdd7e0);border-radius:4px;background:var(--ks3-paper,#fafafa);color:var(--ks3-muted,#6b7580);font:700 13px/1 sans-serif;cursor:pointer}
.ks3-sandbox-onboard ol{margin:0;padding:0;list-style:none;display:grid;gap:5px}
.ks3-sandbox-onboard li{display:grid;grid-template-columns:18px 1fr;gap:6px;align-items:start;opacity:.6}.ks3-sandbox-onboard li.now{opacity:1;font-weight:600}.ks3-sandbox-onboard li.done{opacity:.85;text-decoration:line-through}
.ks3-sandbox-onboard li .ks3-q-mark{display:inline-block;width:18px;height:18px;border-radius:50%;text-align:center;font:700 11px/18px sans-serif;background:var(--ks3-hair,#cdd7e0);color:var(--ks3-ink,#334455)}.ks3-sandbox-onboard li.now .ks3-q-mark{background:var(--ks3-accent,#b4382c);color:#fff}.ks3-sandbox-onboard li.done .ks3-q-mark{background:#2fa36b;color:#fff}
.ks3-sandbox-level{align-self:center;padding:0 8px;font:600 11px/1 "IBM Plex Sans","Plex SC","PingFang SC",sans-serif;color:var(--ks3-muted,#6b7580);white-space:nowrap;cursor:help}
@media(pointer:coarse){.ks3-sandbox-onboard{top:auto;bottom:max(96px,calc(var(--kmu-bottom-busy,0px) - var(--ks3-bottom-covered,0px) + 12px));right:clamp(12px,calc(var(--kmu-right-busy,0px) + 12px),calc(100% - 312px))}}

/* ==== src/spatial/host/kmind-host.css ==== */
/* Keep the last spatial picture under the native panel slide; input/rendering remain paused. */
html[data-spatial-theme] :is(#kmu-gl,#kmu-ov,#kmu-fade,#kmu-hits,#kmu-veil){display:none!important;pointer-events:none!important}
html.km-slab[data-spatial-theme] #hub-view[data-spatial-skin],html.km-slab[data-spatial-theme] #hub-view[data-spatial-skin] .ks3-stage{display:block!important;pointer-events:none!important}
html.km-slab[data-spatial-theme] #hub-view[data-spatial-skin] *{pointer-events:none!important}
/* The view marker clears when the panel slide ends, or immediately on a legacy skin switch. */
#hub-view[data-spatial-skin]{inset:92px 0 91px;background:var(--ks3-ground)}
#hub-view[data-spatial-skin] .hub-heading{left:28px;top:12px;align-items:start}
#hub-view[data-spatial-skin] .hub-heading h1{font-size:29px;font-weight:780;letter-spacing:-1px;color:var(--ks3-accent)}
#hub-view[data-spatial-skin] .hub-heading p{font-size:11px;color:var(--ks3-muted);letter-spacing:.5px}
#hub-view[data-spatial-skin] .hub-heading h1::after{background:var(--ks3-accent);width:36px;margin-top:7px}
#hub-view[data-spatial-skin] .hub-current{border-left:3px solid var(--ks3-accent);padding-left:12px;background:none;color:var(--ks3-ink);box-shadow:none}
#hub-view[data-spatial-skin] .hub-viewport{inset:92px 8px 6px}
#hub-view[data-spatial-skin] .hub-world,#hub-view[data-spatial-skin] .hub-tools,#hub-view[data-spatial-skin] .hub-legend{display:none!important}
.ks3-failure{position:absolute;inset:100px 30px auto;color:var(--ks3-accent)}
@media(max-width:720px){#hub-view[data-spatial-skin] .hub-heading{left:16px}#hub-view[data-spatial-skin] .hub-heading h1{font-size:22px}#hub-view[data-spatial-skin] .hub-heading p{font-size:9px}#hub-view[data-spatial-skin] .hub-viewport{inset:80px 2px 6px}}
/* V41 · the city is the page: the 3D view fills the whole universe area (under the top bar and the dock), the heading floats over it,
   and the edges fade into the ground instead of ending in a band (no strip of empty page above the canvas) */
#hub-view[data-spatial-skin]{inset:44px 0 0}
#hub-view[data-spatial-skin] .hub-viewport{inset:0}
#hub-view[data-spatial-skin] .hub-viewport::before,#hub-view[data-spatial-skin] .hub-viewport::after{content:'';position:absolute;left:0;right:0;z-index:2;pointer-events:none}
#hub-view[data-spatial-skin] .hub-viewport::before{top:0;height:96px;background:linear-gradient(to bottom,var(--ks3-ground) 0,color-mix(in srgb,var(--ks3-ground) 72%,transparent) 38%,transparent 100%)}
#hub-view[data-spatial-skin] .hub-viewport::after{bottom:0;height:120px;background:linear-gradient(to top,var(--ks3-ground) 0,color-mix(in srgb,var(--ks3-ground) 60%,transparent) 40%,transparent 100%)}
#hub-view[data-spatial-skin] .hub-heading{top:12px;left:28px;z-index:5;pointer-events:none}
#hub-view[data-spatial-skin] .hub-heading h1{text-shadow:0 0 14px var(--ks3-ground),0 0 3px var(--ks3-ground)}
#hub-view[data-spatial-skin] .hub-heading p{text-shadow:0 0 8px var(--ks3-ground),0 0 2px var(--ks3-ground)}
#hub-view[data-spatial-skin] .ks3-detail{bottom:104px}
#hub-view[data-spatial-skin] .ks3-controls{bottom:104px}   /* Hikos · runtime 1.4.1's zoom buttons (+ / − / 复位) rise above the dock like the detail line */
#hub-view[data-spatial-skin] .ks3-directory{top:16px;bottom:104px}
#hub-view[data-spatial-skin] .ks3-explorer{top:88px;padding-bottom:120px}
@media(max-width:720px){#hub-view[data-spatial-skin]{inset:48px 0 0}#hub-view[data-spatial-skin] .hub-viewport{inset:0}#hub-view[data-spatial-skin] .hub-heading{top:10px;left:16px}#hub-view[data-spatial-skin] .ks3-explorer{top:64px}}
/* V42 · a planet's bar (#kmu-bar: the channel's name and actions) sits where the floating heading is: the heading steps below it */
body:has(#kmu-bar:not([hidden])) #hub-view[data-spatial-skin] .hub-heading{top:58px;transition:top .2s}
@media(max-width:720px){body:has(#kmu-bar:not([hidden])) #hub-view[data-spatial-skin] .hub-heading{top:10px}}
/* V42 · 沉浸视图 on a 3D city: the immersive bar replaces the floating heading; the city is the centre, its building tied to each result */
#hub-view[data-spatial-skin].ks3-imm .hub-heading,#hub-view[data-spatial-skin].ks3-imm .ks3-detail{opacity:0;pointer-events:none}
#hub-view[data-spatial-skin].ks3-imm .hub-viewport::before{height:130px}
.ks3-immlinks{position:absolute;inset:0;width:100%;height:100%;z-index:3;pointer-events:none;overflow:visible}
.ks3-immlinks path{fill:none;stroke:var(--ks3-accent);stroke-width:1.5;stroke-dasharray:3 6;opacity:.75;animation:ks3-imm-flow 1.2s linear infinite}
.ks3-immlinks circle{fill:var(--ks3-accent)}
.ks3-immlinks .ks3-immring{fill:none;stroke:var(--ks3-accent);stroke-width:1.5;opacity:.8;transform-box:fill-box;transform-origin:center;animation:ks3-imm-ring 2.4s ease-out infinite}
.ks3-spot .ks3-label.spot{transform:translate(-50%,calc(-100% - var(--stem-h))) scale(1.18);z-index:4}
@keyframes ks3-imm-flow{to{stroke-dashoffset:-18}}
@keyframes ks3-imm-ring{0%{transform:scale(.7);opacity:.9}100%{transform:scale(1.6);opacity:0}}
@media(prefers-reduced-motion:reduce){.ks3-immlinks path,.ks3-immlinks .ks3-immring{animation:none}}

/* ==== src/galaxy/galaxy.css ==== */
/* Hikos · 星系层级 V44 · 星港视图、星港贴饰、宇宙星图、星系 / 星港外观对话框 */
#km-starport{position:absolute;inset:44px 0 0;z-index:4;overflow:hidden;background:var(--ks3-ground,#E6ECF3);color:var(--ks3-ink,#2B3340);opacity:1;transition:opacity .32s ease}
#km-starport[hidden]{display:none!important}
#km-starport.kmsp-fade.kmsp-in{opacity:0}
#km-starport.kmsp-out{opacity:0;transition:opacity .26s ease}
#km-starport .kmsp-stage{position:absolute;inset:0}
#km-starport .kmsp-stage::before,#km-starport .kmsp-stage::after{content:'';position:absolute;left:0;right:0;z-index:2;pointer-events:none}
#km-starport .kmsp-stage::before{top:0;height:96px;background:linear-gradient(to bottom,var(--ks3-ground) 0,color-mix(in srgb,var(--ks3-ground) 72%,transparent) 38%,transparent 100%)}
#km-starport .kmsp-stage::after{bottom:0;height:120px;background:linear-gradient(to top,var(--ks3-ground) 0,color-mix(in srgb,var(--ks3-ground) 60%,transparent) 40%,transparent 100%)}
#km-starport .kmsp-veil{position:absolute;inset:0;z-index:3;pointer-events:none;background:var(--ks3-ground);opacity:0;transition:opacity .3s}
#km-starport .kmsp-head{position:absolute;left:28px;top:58px;z-index:5;pointer-events:none;transition:top .2s}
body:not(:has(#kmu-bar:not([hidden]))) #km-starport .kmsp-head{top:12px}
#km-starport .kmsp-head h1{margin:0;font-size:26px;font-weight:760;letter-spacing:-.6px;color:var(--ks3-accent,#3370FF);text-shadow:0 0 14px var(--ks3-ground),0 0 3px var(--ks3-ground)}
#km-starport .kmsp-head h1::after{content:'';display:block;width:34px;height:3px;margin-top:7px;background:var(--ks3-accent,#3370FF)}
#km-starport .kmsp-head p{margin:5px 0 0;font-size:11px;letter-spacing:.4px;color:var(--ks3-muted,#6E7A8A);text-shadow:0 0 8px var(--ks3-ground),0 0 2px var(--ks3-ground)}
#km-starport .kmsp-actions{position:absolute;right:16px;top:14px;z-index:6;display:flex;gap:6px}
.kmsp-btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:999px;border:1px solid var(--ks3-hair,#CBD4DF);background:color-mix(in srgb,var(--ks3-paper,#fff) 86%,transparent);color:var(--ks3-ink,#2B3340);font:inherit;font-size:12px;font-weight:600;cursor:pointer;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.kmsp-btn:hover{border-color:var(--ks3-accent,#3370FF)}
.kmsp-btn.kmsp-primary{background:var(--ks3-accent,#3370FF);border-color:var(--ks3-accent,#3370FF);color:#fff}
.kmsp-btn.on{background:var(--ks3-ink,#2B3340);color:var(--ks3-paper,#fff);border-color:var(--ks3-ink,#2B3340)}
.kmsp-btn svg{width:13px;height:13px}
#km-starport .kmsp-failure{position:absolute;inset:120px 30px auto;z-index:5;color:var(--ks3-accent,#B4382C);font-size:14px}
#km-starport.kmsp-walking .kmsp-head h1,#km-starport.kmsp-walking .kmsp-head p{opacity:0}   /* 进入后：名字收起，「离开」留着 */
/* 沉浸（道哥 #33336 · 任务 c637379d；开关 KM.galaxy.port.immersive，街机宿主 src/addons/arcade.js 开局打开、收起 / 关局 / 起飞关闭）：与游戏无关的遮挡物退场——页头整块（名字 / 副题 / 进入 · 外观 · 物理沙盒 · 塔防 · 编辑星港 那一排）、
   地名旗标（运行时 .ks3-labels）、悬停说明（.ks3-detail）、顶上的星球条（#kmu-bar）。淡出 .22s 后 visibility 一并收走（不再可点、不进焦点链；.kmsp-actions 自己写了 pointer-events:auto，所以这里要再按一遍），恢复时立刻可见再淡入。
   留下的是玩这局要用的：战场自己的起点 / 终点铭牌（.km-arcade-tags）、缩放钮（.ks3-controls）、游戏窗头（关 / 收起）、停靠栏 */
#km-starport .kmsp-head{transition:top .2s,opacity .22s ease,visibility 0s}
#km-starport .ks3-labels{transition:opacity .22s ease,visibility 0s}
#km-starport[data-kmsp-immersive] .kmsp-head,#km-starport[data-kmsp-immersive] .ks3-labels{opacity:0!important;visibility:hidden!important;pointer-events:none!important;transition:top .2s,opacity .22s ease,visibility 0s linear .22s}
#km-starport[data-kmsp-immersive] .kmsp-head .kmsp-actions,#km-starport[data-kmsp-immersive] .ks3-labels .ks3-label{pointer-events:none!important}
#km-starport[data-kmsp-immersive] .ks3-detail{display:none!important}
body.km-at-starport #kmu-bar{transition:opacity .22s ease,visibility 0s}
body.kmsp-immersive #kmu-bar{opacity:0!important;visibility:hidden!important;pointer-events:none!important;transition:opacity .22s ease,visibility 0s linear .22s}
#km-starport .ks3-controls,#km-starport .ks3-detail{bottom:104px}
/* 开放世界（#32336 / 修士 #32347「交互仍需优化」）：物理沙盒的底栏 / 一行状态 / 套件面板 / 挑战面板原来贴着舞台底边，在星港里正好被 #kmu-dock 整个盖住（总览与下地都是）——和缩放钮一样抬到 dock 之上 */
#km-starport .ks3-sandbox-bar{bottom:104px}#km-starport .ks3-sandbox-hud{bottom:148px}#km-starport .ks3-sandbox-palette,#km-starport .ks3-sandbox-quests{bottom:186px}
#km-starport .ks3-directory{top:16px;bottom:104px}
/* the native canvases rest while a starport is up (the same rule the old map used) */
html[data-starport] :is(#kmu-gl,#kmu-ov,#kmu-fade,#kmu-hits,#kmu-veil){display:none!important;pointer-events:none!important}
html[data-starport] #km-starport-marks{display:none!important}
@media(max-width:720px){#km-starport{inset:48px 0 0}#km-starport .kmsp-head{left:16px}#km-starport .kmsp-head h1{font-size:20px}#km-starport .kmsp-actions{right:10px;top:10px;flex-wrap:wrap;max-width:calc(100vw - 32px)}}   /* 窄屏：进入 / 外观 / 物理沙盒 三颗放不下就换行 */
/* 星港贴饰：星系空间里每颗星球面上一枚（远：一点；近：名字与降落方式） */
#km-starport-marks{position:absolute;inset:0;z-index:2;pointer-events:none;overflow:hidden}
.kmsp-mark{position:absolute;left:0;top:0;transform:translate(-100vw,-100vh);pointer-events:auto;display:flex;align-items:center;gap:5px;padding:0;margin:0;border:0;background:none;color:var(--k-ink,#dfe6f3);font:inherit;cursor:pointer;will-change:transform;transition:opacity .2s}
.kmsp-mark i{display:block;width:9px;height:9px;border-radius:50%;border:1.5px solid var(--k-acc,#3370FF);background:rgba(var(--k-bg-rgb,10,14,24),.85);box-shadow:0 0 0 2px rgba(var(--k-bg-rgb,10,14,24),.55),0 0 10px var(--k-acc,#3370FF);margin-left:-4px;margin-top:-4px;position:relative}
.kmsp-mark i::after{content:'';position:absolute;inset:2px;border-radius:50%;background:var(--k-acc,#3370FF)}
.kmsp-mark[data-kind="city"] i{border-radius:2px;border-color:var(--k-amber,#f5a524);box-shadow:0 0 0 2px rgba(var(--k-bg-rgb,10,14,24),.55),0 0 10px var(--k-amber,#f5a524)}
.kmsp-mark[data-kind="city"] i::after{border-radius:1px;background:var(--k-amber,#f5a524)}
.kmsp-mark b{font-size:10.5px;font-weight:650;letter-spacing:.04em;white-space:nowrap;opacity:0;transform:translateX(-4px);transition:opacity .2s,transform .2s;text-shadow:0 1px 2px rgba(0,0,0,.6)}
.kmsp-mark small{font-size:9.5px;opacity:0;white-space:nowrap;color:var(--k-dim,#8d99b3);transition:opacity .2s;text-shadow:0 1px 2px rgba(0,0,0,.6)}
.kmsp-mark.big b,.kmsp-mark.near b,.kmsp-mark:hover b{opacity:1;transform:none}
.kmsp-mark.near small,.kmsp-mark.near:hover small{opacity:1}
.kmsp-mark.near i{width:14px;height:14px;animation:kmsp-pad 1.6s ease-out infinite}
@keyframes kmsp-pad{0%{box-shadow:0 0 0 0 rgba(51,112,255,.55)}100%{box-shadow:0 0 0 12px rgba(51,112,255,0)}}
/* V45 · 城市（galaxy-cities.js）：星球面上除星港以外的点——菱形标记，带城市皮肤的是琥珀色（与贴饰同一个主题），跟随星港外观的是灰白 */
.kmsp-mark.kmsp-city i{border-radius:1px;transform:rotate(45deg);width:8px;height:8px;border-color:var(--k-dim,#8d99b3);box-shadow:0 0 0 2px rgba(var(--k-bg-rgb,10,14,24),.55),0 0 8px rgba(141,153,179,.6)}
.kmsp-mark.kmsp-city i::after{border-radius:0;background:var(--k-dim,#8d99b3)}
.kmsp-mark.kmsp-city[data-kind="city"] i{border-color:var(--k-amber,#f5a524);box-shadow:0 0 0 2px rgba(var(--k-bg-rgb,10,14,24),.55),0 0 10px var(--k-amber,#f5a524)}
.kmsp-mark.kmsp-city[data-kind="city"] i::after{background:var(--k-amber,#f5a524)}
.kmsp-mark.kmsp-city.near i{width:11px;height:11px;animation:none}
/* 「城市…」对话框：每座一行——降落 · 改名 · 外观 · 删除 */
.kmcity-rows{list-style:none;margin:6px 0 10px;padding:0;display:flex;flex-direction:column;gap:6px}
.kmcity-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--k-line,#2a3447);border-radius:10px}
.kmcity-dot{flex:none;width:9px;height:9px;transform:rotate(45deg);background:var(--k-amber,#f5a524);border-radius:1px;box-shadow:0 0 8px var(--k-amber,#f5a524)}
.kmcity-who{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}
.kmcity-who strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmcity-who small{font-size:11px;color:var(--k-dim,#8d99b3)}
.kmcity-ops{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.kmcity-ops button{display:inline-flex;align-items:center;gap:4px;padding:4px 9px;font-size:12px}
.kmcity-ops button.danger{color:var(--k-danger,#ff6b6b);border-color:color-mix(in srgb,var(--k-danger,#ff6b6b) 50%,transparent)}
.kmcity-empty{margin:10px 0 14px;color:var(--k-dim,#8d99b3);font-size:12.5px;text-align:center}
@media(prefers-reduced-motion:reduce){.kmsp-mark.near i{animation:none}#km-starport{transition:none}}
/* 宇宙星图 */
#kmw-starmap .kmw-body{padding:0}
.kmgm{position:relative;width:100%;height:100%;min-height:320px;overflow:hidden;background:radial-gradient(ellipse at 50% 40%,rgba(var(--k-acc-rgb,51,112,255),.12),transparent 60%),var(--k-bg,#070a14)}
.kmgm canvas{position:absolute;inset:0;width:100%;height:100%}
.kmgm-sys{position:absolute;left:0;top:0;width:0;height:0;overflow:visible;display:block;padding:0;border:0;background:none;color:var(--k-ink,#dfe6f3);font:inherit;cursor:pointer}
.kmgm-sys .kmgm-dot{position:absolute;left:-7px;top:-7px}
.kmgm-sys .kmgm-lab{position:absolute;display:flex;flex-direction:column;align-items:center;gap:1px;padding:3px 6px;border-radius:8px;white-space:nowrap;line-height:1.2}
.kmgm-sys[data-side="b"] .kmgm-lab{top:10px;left:0;transform:translateX(-50%)}
.kmgm-sys[data-side="t"] .kmgm-lab{bottom:10px;left:0;transform:translateX(-50%)}
.kmgm-sys[data-side="r"] .kmgm-lab{left:12px;top:0;transform:translateY(-50%);align-items:flex-start}
.kmgm-sys[data-side="l"] .kmgm-lab{right:12px;top:0;transform:translateY(-50%);align-items:flex-end}
.kmgm-sys:hover .kmgm-lab,.kmgm-sys:focus-visible .kmgm-lab{background:rgba(var(--k-acc-rgb,51,112,255),.18)}
.kmgm-sys:focus-visible{outline:none}
.kmgm-sys .kmgm-dot{width:14px;height:14px;border-radius:50%;background:var(--c,#FFD089);box-shadow:0 0 14px var(--c,#FFD089),0 0 30px rgba(255,208,137,.35)}
.kmgm-sys.cur .kmgm-dot{outline:2px solid var(--k-ink,#fff);outline-offset:3px}
.kmgm-sys.sample .kmgm-dot{opacity:.75;width:10px;height:10px;left:-5px;top:-5px}
.kmgm-sys b{font-size:11.5px;font-weight:650;white-space:nowrap}
.kmgm-sys small{font-size:9.5px;color:var(--k-dim,#8d99b3);white-space:nowrap}
.kmgm-legend{position:absolute;left:12px;bottom:10px;font-size:10.5px;color:var(--k-dim,#8d99b3);display:flex;gap:12px;align-items:center}
.kmgm-legend i{display:inline-block;width:8px;height:8px;border-radius:50%;background:#FFD089;margin-right:4px;vertical-align:middle}
.kmgm-legend i.s{opacity:.6}
.kmgm-head{position:absolute;left:12px;top:10px;font-size:11px;color:var(--k-dim,#8d99b3)}
/* 外观对话框 */
.kmga-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin:6px 0 10px}
.kmga-tile{display:flex;flex-direction:column;gap:6px;padding:8px;border:1px solid var(--k-line,#2a3447);border-radius:10px;background:none;color:inherit;font:inherit;cursor:pointer;text-align:left}
.kmga-tile.on{border-color:var(--k-acc,#3370FF);box-shadow:0 0 0 1px var(--k-acc,#3370FF)}
.kmga-tile .kmga-sw{height:34px;border-radius:6px;background:var(--sw,#223)}
.kmga-tile b{font-size:12px}
/* hall-33852 · 外观面板磁贴下的一行：面板皮肤 独立 / 跟随星系 / 跟随星港（src/galaxy/galaxy-skins.js injectPref） */
.kmga-follow{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:8px 2px 0;font-size:12px;color:var(--k-ink2,inherit)}
.kmga-follow>b{font-weight:600;font-size:12px;color:var(--k-ink)}
.kmga-follow-seg{display:inline-flex;border:1px solid var(--k-line,#2a3447);border-radius:999px;overflow:hidden}
.kmga-follow-seg button{appearance:none;border:0;background:none;color:inherit;font:inherit;font-size:12px;line-height:1;padding:5px 10px;cursor:pointer;opacity:.75}
.kmga-follow-seg button+button{border-left:1px solid var(--k-line,#2a3447)}
.kmga-follow-seg button:hover{opacity:1}
.kmga-follow-seg button.on{background:rgba(var(--k-acc-rgb,59,130,255),.14);color:var(--k-acc,#3B82FF);opacity:1;font-weight:600}
.kmga-follow>small{flex-basis:100%;opacity:.7;line-height:1.45}
.kmga-tile small{font-size:10.5px;color:var(--k-dim,#8d99b3)}
/* 底色：星港在上时顶栏 / 停靠栏 / 星球条 / 窗口改用实底（同 universe-maps.css 的 km-map-active 规则，这里按 km-at-starport 与星港地面的明暗） */
body.km-at-starport #kmu{background:var(--ks3-ground,var(--k-bg))!important}
body.km-u.km-at-starport #kmu-top,body.km-u.km-at-starport #kmu-dock{background:var(--km-map-chrome)!important;box-shadow:none!important;backdrop-filter:none!important;border-color:var(--km-map-hair)!important}
body.km-u.km-at-starport #kmu-top{border-bottom:1px solid var(--km-map-hair)}
body.km-u.km-at-starport #kmu-dock{border:1px solid var(--km-map-hair);border-radius:8px}
body.km-u.km-at-starport #kmu-layout{display:none!important}
html[data-theme=day][data-starport-base=night] body.km-u.km-at-starport #kmu .kmu-bar,html[data-theme=night][data-starport-base=day] body.km-u.km-at-starport #kmu .kmu-bar{background:var(--km-map-chrome)!important;border:1px solid var(--km-map-hair)!important;border-radius:10px;padding:5px 14px 5px 12px;backdrop-filter:none!important}
html[data-theme=day][data-starport-base=night] body.km-u.km-at-starport #kmu .kmu-bar::after,html[data-theme=night][data-starport-base=day] body.km-u.km-at-starport #kmu .kmu-bar::after{display:none}
html[data-theme=day][data-starport-base=night] body.km-u.km-at-starport #kmu #kmu-dock,html[data-theme=night][data-starport-base=day] body.km-u.km-at-starport #kmu #kmu-dock{background:var(--km-map-chrome)!important;border:1px solid var(--km-map-hair)!important}
html[data-theme=day][data-starport-base=night] body.km-u.km-at-starport #kmu #kmu-dock::before,html[data-theme=night][data-starport-base=day] body.km-u.km-at-starport #kmu #kmu-dock::before{display:none}
body.km-u.km-at-starport #kmu-top .kmu-mode{background:var(--km-map-chrome2)!important;box-shadow:none!important;border-radius:5px}
body.km-u.km-at-starport #kmu .kmw{background:var(--km-map-chrome)!important;box-shadow:none!important;backdrop-filter:none!important;border:1px solid var(--km-map-hair);border-radius:6px}
body.km-u.km-at-starport #kmu .kmw-chat .workspace{background:var(--km-map-chrome)}
/* 星港的标题块：名字、皮肤、动作一列 */
#km-starport .kmsp-actions{position:static;margin-top:10px;pointer-events:auto}
#km-starport .kmsp-head{pointer-events:none}
#km-starport .kmsp-head .kmsp-actions{pointer-events:auto}
/* 夜间世界的地表附件（穿行座舱入口、迎宾广场、资源城）属于星系空间：星港在上时收起 */
body.km-at-starport #km-flight-toggle,body.km-at-starport #km-plaza-surface,body.km-at-starport .km-radio-stations,body.km-at-starport .km-city-toggle,body.km-at-starport .km-resource-city{display:none!important}
#km-starport .ks3-stage.ks3-walking .ks3-controls{display:none}   /* 进入后：缩放钮是总览的，收起 */

/* V44.2: draw the existing planetary scene under the ready city during the camera handoff. */
html[data-starport] body.kmsp-entering #kmu-gl{display:block!important;pointer-events:none!important}
body.kmsp-entering #km-starport{transition:none;pointer-events:none}
body.kmsp-entering #km-starport .kmsp-head,body.kmsp-entering #km-starport .ks3-controls,body.kmsp-entering #km-starport .ks3-labels,body.kmsp-entering #kmu .kmw-chat{opacity:0!important;pointer-events:none!important}

/* The port inherits the system's visual language. The target stays generous, the visible point stays small. */
.kmsp-mark[data-presentation] i {border-color:var(--k-acc);box-shadow:0 0 8px color-mix(in srgb,var(--k-acc) 35%,transparent);border-radius:50%;animation:none}
.kmsp-mark[data-presentation] i::after {background:var(--k-acc);border-radius:50%}
.kmsp-mark[data-presentation="point"] i {width:5px;height:5px;border:0;background:var(--k-acc);margin:0}
.kmsp-mark[data-presentation="point"] i::after {display:none}
.kmsp-mark[data-presentation="point"] {min-width:24px;min-height:24px;margin:-12px 0 0 -12px;justify-content:center}
.kmsp-mark[data-presentation="point"] b {position:absolute;left:22px;opacity:0}
.kmsp-mark[data-presentation="point"]:is(:hover,:focus-visible) b {opacity:1}

.kmsp-mark[data-presentation="point"]:not(.near) {pointer-events:none}

/* ---- 面板视图左栏：恒星单独置顶，不在轨道里（galaxy-panel.js；修士 #30056）---- */
.channel-scroll > .km-star-pin {margin:0 0 4px;padding:0 0 10px;border-bottom:1px solid var(--line)}
.km-star-pin-h {display:flex;align-items:center;gap:6px;height:24px;padding:0 8px;font-size:11px;font-weight:700;letter-spacing:.3px;text-transform:uppercase;color:var(--muted)}
.km-star-pin .channel.km-star-row .hash.km-star-hash {display:inline-flex;align-items:center;justify-content:center;width:20px;font-size:16px;line-height:1}
.km-star-pin .channel.km-star-row .hash.km-star-hash .ico {width:16px;height:16px}
/* 修士 大厅 #30427 · 在私信里开着这个星系的一颗置顶星球（路由带 dmPeek，galaxy-agents.js）：星系栏上它左边一条呼吸的光条——
   和选中时那一条同款（panel.css .server.active::before），不带选中的光圈。关掉界面动画 / 系统减少动态效果时是一条不动的。 */
.rail .server.km-peek::before{content:"";position:absolute;left:-12px;height:32px;width:4px;border-radius:999px;background:var(--k-acc,#3370ff);box-shadow:0 0 8px 1px var(--cz-glow,transparent);opacity:.75;animation:km-peek-breathe 2.6s ease-in-out infinite}
/* 这个星系里还有别的频道有未读时（星系钮带 .unread）：未读的那条短竖条（panel.css `body:not(.km-u) .server.unread:not(.active)::before`，
   8px 墨色不带光晕、悬停 20px）比上面那条优先级高，会把光条压成一小截白的。这里压回去——和选中时一样，长条盖过未读短条
   （panel.css `.server.active.unread::before`）。 */
body:not(.km-u) .rail .server.km-peek.unread:not(.active)::before{height:32px;background:var(--k-acc,#3370ff);box-shadow:0 0 8px 1px var(--cz-glow,transparent)}
@keyframes km-peek-breathe{0%,100%{opacity:.22;transform:scaleY(.5)}50%{opacity:1;transform:scaleY(1)}}
@media (prefers-reduced-motion:reduce){.rail .server.km-peek::before{animation:none}}

/* ==== src/galaxy/galaxy-create.css ==== */
/* Hikos · 新建星系三步向导（任务 5b9a0c2c · src/galaxy/galaxy-create.js）
   线上美术：对话框 12px 圆角、.field 6px、.field-label 10px 大写粗体字距、磁贴走 galaxy.css 的 .kmga-grid / .kmga-tile、色块走 kmind.css 的 .km-sw；
   颜色一律读皮肤令牌 --k-*（tokens.css / 皮肤包 pack.js 编译），不写死；不照搬线下预览的 3px 直角与 !important。 */
#dialog.kmcs-dlg{width:min(900px,calc(100vw - 32px))}
#dialog.kmcs-dlg .modal-sub{margin-bottom:10px}
.kmcs{display:flex;flex-direction:column;gap:0}
/* 步骤条 */
.kmcs-steps{display:flex;gap:4px;margin:0 0 12px;padding:0;list-style:none;border-bottom:1px solid var(--k-line)}
.kmcs-steps li{display:flex}
.kmcs-steps button{display:inline-flex;align-items:center;gap:7px;margin:0;padding:8px 10px 10px;border:0;border-bottom:2px solid transparent;border-radius:6px 6px 0 0;background:none;color:var(--k-mute);font:inherit;font-size:12px;cursor:pointer}
.kmcs-steps button i{font-style:normal;font-family:var(--k-mono);font-size:10px;letter-spacing:.4px;opacity:.75}
.kmcs-steps button:hover{color:var(--k-ink);background:rgba(var(--k-acc-rgb),.06)}
.kmcs-steps button.done{color:var(--k-ink2)}
.kmcs-steps button[aria-current="step"]{color:var(--k-acc);border-bottom-color:var(--k-acc);font-weight:650}
.kmcs-steps button:focus-visible{outline:none;box-shadow:var(--k-focus)}
/* 简丹的一句话 */
.kmcs-jane{display:flex;align-items:center;gap:12px;padding:10px 12px;margin:0 0 14px;border:1px solid var(--k-line);border-radius:10px;background:rgba(var(--k-acc-rgb),.05)}
.kmcs-jane .km-avbox{flex:none}
.kmcs-jane-txt{min-width:0;display:flex;flex-direction:column;gap:2px}
.kmcs-jane-txt small{font-size:10px;color:var(--k-mute);letter-spacing:.3px}
.kmcs-jane-txt p{margin:0;font-size:13px;line-height:1.5;color:var(--k-ink)}
/* 两栏：左表单、右预览 */
.kmcs-body{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:0 22px;align-items:start}
.kmcs-main{min-width:0}
.kmcs-pane{display:flex;flex-direction:column;animation:kmcs-in .22s ease}
.kmcs-pane[hidden]{display:none}
.kmcs-pane>.field-label:first-child,.kmcs-pane>div>.field-label:first-child{margin-top:0}
.kmcs-pane .form-note{margin-top:14px}
@keyframes kmcs-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
/* 星系皮肤：线上「星系外观…」同款磁贴，装进两行高的滚动框（包多的时候不把对话框撑长） */
.kmcs-worlds{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:6px;max-height:150px;overflow:auto;margin:6px -2px 0;padding:2px;scrollbar-width:thin}
.kmcs-worlds .kmga-tile{padding:6px;gap:5px;border-radius:8px;min-width:0}
.kmcs-worlds .kmga-tile .kmga-sw{height:20px}
.kmcs-worlds .kmga-tile b{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kmcs-worlds .kmga-tile small{font-size:10px;color:var(--k-mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 折叠块：头像、星球设置 */
.kmcs-fold{margin-top:16px;border:1px solid var(--k-line);border-radius:10px;padding:0 12px}
.kmcs-fold>summary{display:flex;align-items:center;gap:8px;padding:10px 0;cursor:pointer;list-style:none;font-size:12px;font-weight:650;color:var(--k-ink2);user-select:none}
.kmcs-fold>summary::-webkit-details-marker{display:none}
.kmcs-fold>summary::before{content:'';width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);transition:transform .15s;margin:0 2px 0 1px;flex:none}
.kmcs-fold[open]>summary::before{transform:rotate(45deg)}
.kmcs-fold>summary small{font-weight:400;color:var(--k-mute);font-size:11px}
.kmcs-fold>summary:hover{color:var(--k-ink)}
.kmcs-fold>:not(summary){padding-bottom:12px}
.kmcs-fold .kmb-planet-extra{margin-top:0}
.kmcs-fold .km-uavp{margin-top:0}
/* 轨道颜色：线上调色板的圆色块 + 自定义 */
.kmcs-sw{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px}
.kmcs-sw .km-sw{width:24px;height:24px}
.kmcs-sw .kmcs-own{height:28px}
.kmcs-sw .kmcs-own input[type=color]{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
.kmcs-sw .kmcs-own .km-sw.on{box-shadow:0 0 0 2px var(--k-bg),0 0 0 3.5px var(--sw)}
.kmcs-sw .kmcs-own .km-sw:not(.on){box-shadow:inset 0 0 0 1px var(--k-line)}
/* 外观项（能力探测后才有）：一行标签 + 几个小磁贴 */
.kmcs-group{display:flex;flex-direction:column}
.kmcs-opts{display:flex;flex-wrap:wrap;gap:6px}
.kmcs-opt{margin:0;padding:6px 10px;border:1px solid var(--k-line);border-radius:8px;background:none;color:var(--k-ink2);font:inherit;font-size:12px;cursor:pointer;transition:border-color .12s,background .12s}
.kmcs-opt:hover{border-color:var(--k-acc);color:var(--k-ink)}
.kmcs-opt.on{border-color:var(--k-acc);color:var(--k-ink);background:rgba(var(--k-acc-rgb),.1);box-shadow:0 0 0 1px var(--k-acc)}
/* 右侧预览 */
.kmcs-side{position:sticky;top:0;display:flex;flex-direction:column;gap:6px}
.kmcs-pv-head{display:flex;justify-content:space-between;align-items:baseline;font-size:10px;font-weight:700;letter-spacing:.3px;text-transform:uppercase;color:var(--k-mute)}
.kmcs-pv-note{font-weight:400;text-transform:none;letter-spacing:0}
.kmcs-pv{display:block;width:100%;height:auto;aspect-ratio:4/3;border:1px solid var(--k-line);border-radius:10px;background:var(--k-bg2);font-family:inherit}
.kmcs-pv text{font-family:inherit}
/* 过场：轨道组 / 星球组从 display:none 露出来那一下放一遍（骨架只搭一次，跟手重画只改属性，不会再闪） */
.kmcs-pv-planet{transform-box:fill-box;transform-origin:center;animation:kmcs-land .4s ease}
@keyframes kmcs-draw{from{stroke-dasharray:100;stroke-dashoffset:100}to{stroke-dasharray:100;stroke-dashoffset:0}}
@keyframes kmcs-land{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}
.kmcs-pv-orbit ellipse[pathLength]:not([stroke-dasharray]){animation:kmcs-draw .7s ease}
@media (prefers-reduced-motion:reduce){.kmcs-pane,.kmcs-pv-planet,.kmcs .kmcs-pv-orbit ellipse{animation:none!important;transition:none!important}}
/* 页脚：取消在左，上一步 / 继续 在右 */
.kmcs .footer-actions.kmcs-foot{justify-content:space-between;align-items:center;margin-top:18px;padding-top:14px;border-top:1px solid var(--k-line)}
.kmcs-foot-right{display:flex;gap:8px;align-items:center}
.kmcs .kmcs-foot .outline{margin:0;padding:7px 12px;border-radius:6px;color:var(--k-ink2);border-color:var(--k-line)}
.kmcs .kmcs-foot .outline:hover{color:var(--k-ink);border-color:var(--k-acc)}
.kmcs .kmcs-foot .primary{margin:0;min-width:92px}
/* 窄屏：预览到上面、单列 */
@media (max-width:720px){
  .kmcs-body{grid-template-columns:1fr;gap:14px}
  .kmcs-side{order:-1;position:static}
  .kmcs-pv{aspect-ratio:16/7}
  .kmcs-steps button span{display:none}
  .kmcs-steps button[aria-current="step"] span{display:inline}
}

/* ==== src/addons/universe-maps.css ==== */
/* Universe-only prototype. No rules apply to Panel View. */
/* V41 · tokens for the chrome round a map (top bar, dock, chat windows, mode switch, the band above the map). Day keeps the exact
   values it had; a night interface resolves them from its own skin, so a night skin over a map or a city is never painted white.
   A skin may set them itself (studio vars). */
:root{--km-map-chrome:#FFFFFF;--km-map-chrome2:#F3F5F8;--km-map-hair:#DDE3E9}
html[data-theme="night"]{--km-map-chrome:var(--k-bg);--km-map-chrome2:rgba(var(--k-acc-rgb),.08);--km-map-hair:rgba(255,255,255,.08);--km-map-band:var(--k-bg2)}
/* 2026-11-11 · keyed on km-map-active alone: it is set as the universe view opens, while the panel is still sliding away (km-u comes after) */
body.km-map-active #kmu{background:var(--km-map-band,var(--hub-ground,#F5F7FA))!important}
body.km-map-active #kmu-gl,body.km-map-active #kmu-ov,body.km-map-active #kmu-fade,body.km-map-active #kmu-hits,body.km-map-active #kmu-veil{display:none!important;pointer-events:none!important}
body.km-u.km-map-active:not(.km-map-arrange) #kmu-layout{display:none!important}   /* V41 · a city world that arranges itself by 轨道 / 星群 keeps the switch */
body.km-u.km-map-active #kmu-top,body.km-u.km-map-active #kmu-dock{background:var(--km-map-chrome)!important;box-shadow:none!important;backdrop-filter:none!important;border-color:var(--km-map-hair)!important}
body.km-u.km-map-active #kmu-top{border-bottom:1px solid var(--km-map-hair)}
body.km-u.km-map-active #kmu-dock{border:1px solid var(--km-map-hair);border-radius:8px}
/* Hikos · 底色规则（PR #1697，道哥 大厅 #24618）：界面与世界明暗相反时——浅色界面（白昼、浅色皮肤）压在夜间底的城市 / 地图世界上，或反过来——
   星球条与停靠栏在 cosmos.css 里是渐隐进天空的淡色光晕，边缘近乎透明，深字就落在深色城市上。这时两者改用顶栏同一块实底（--km-map-chrome）
   加发丝线，文字始终落在界面色上；光晕下的那条地平线和右端渐隐一并收起。明暗一致的搭配（夜间 + 铁誓巢都、白昼 + 联合图册）一个像素不变。
   <html data-world-base> 由 src/skins/skins.js 按世界包的 base 写；特异性要压过 cosmos.css 的 #kmu #kmu-dock / #kmu .kmu-bar（都带 !important）。 */
html[data-theme=day][data-world-base=night] body.km-u.km-map-active #kmu .kmu-bar,html[data-theme=night][data-world-base=day] body.km-u.km-map-active #kmu .kmu-bar{background:var(--km-map-chrome)!important;border:1px solid var(--km-map-hair)!important;border-radius:10px;padding:5px 14px 5px 12px;-webkit-mask-image:none;mask-image:none}
html[data-theme=day][data-world-base=night] body.km-u.km-map-active #kmu .kmu-bar::after,html[data-theme=night][data-world-base=day] body.km-u.km-map-active #kmu .kmu-bar::after{display:none}
html[data-theme=day][data-world-base=night] body.km-u.km-map-active #kmu #kmu-dock,html[data-theme=night][data-world-base=day] body.km-u.km-map-active #kmu #kmu-dock{background:var(--km-map-chrome)!important;border:1px solid var(--km-map-hair)!important;border-radius:12px;padding:6px 12px}
html[data-theme=day][data-world-base=night] body.km-u.km-map-active #kmu #kmu-dock::before,html[data-theme=night][data-world-base=day] body.km-u.km-map-active #kmu #kmu-dock::before{display:none}
body.km-u.km-map-active #kmu-top .kmu-mode{background:var(--km-map-chrome2)!important;box-shadow:none!important;border-radius:5px}
body.km-u.km-map-active #kmu .kmw{background:var(--km-map-chrome)!important;box-shadow:none!important;backdrop-filter:none!important;border:1px solid var(--km-map-hair);border-radius:6px}
body.km-u.km-map-active #kmu .kmw-chat .workspace{background:var(--km-map-chrome)}
#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-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)); }
.hub-station .hub-unread-bar{position:absolute;left:-1px;top:50%;width:4px;height:12px;margin-top:-6px;border-radius:0 4px 4px 0;background:var(--hub-ink,currentColor);pointer-events:none}   /* 任务 80d1b74f：未读 = 左侧短竖条（不再是灰点） */

/* ==== src/addons/radio.css ==== */
.km-radio-controls { display:grid; gap:9px; padding:12px; }
.km-radio-controls label { display:grid; gap:4px; font-size:12px; font-weight:600; }
.km-radio-controls audio, .km-radio-controls input { width:100%; }
.km-radio-controls p { font-size:12px; overflow-wrap:anywhere; margin:0; }
.km-radio-controls ol { padding-left:22px; margin:0; }
.km-radio-controls li button { text-align:left; overflow-wrap:anywhere; padding:4px 0; }
.km-radio-controls [aria-current=true] { font-weight:700; }
.km-radio-stations { margin:10px 12px 0; padding:9px 12px; border:1px solid var(--k-line); border-radius:5px; color:var(--k-ink); font-size:12px; }

/* ==== src/addons/flight.css ==== */
#km-flight-toggle[hidden],#km-flight-screen[hidden],#km-flight-screen [hidden] { display:none!important; }
#km-flight-toggle { position:absolute; z-index:10; transform:translate(-50%,-50%); display:flex; align-items:center; gap:4px; padding:9px 8px; border:0; background:transparent; color:#eef0ff; font:650 12.5px system-ui,sans-serif; text-shadow:0 1px 3px #050610,0 0 5px #050610; }
#km-flight-toggle svg { color:#94a9ed; flex:none; }
#km-flight-toggle:is(:hover,:focus-visible) span { text-decoration:underline; text-underline-offset:5px; text-decoration-color:#94a9ed; }
#kmu.km-piloting { overflow:clip; }
#kmu.km-piloting > :not(#kmu-gl):not(#kmu-ov):not(#km-flight-screen) { visibility:hidden!important; pointer-events:none!important; }
#km-flight-screen { --flight-ink:#090c16; --flight-light:#e8e7f4; --flight-soft:#a5a5bd; --flight-lilac:#b5b0da; --flight-amber:#dfb878; position:absolute; inset:0; z-index:100; overflow:hidden; touch-action:none; cursor:crosshair; outline:none; color:var(--flight-light); font:13px system-ui,sans-serif; background:radial-gradient(ellipse at 50% 30%,transparent 40%,#07091325 90%); }
.km-flight-space,.km-flight-canopy { position:absolute; inset:0; width:100%; height:100%; pointer-events:none; }
.km-flight-hull { fill:#080b15d9; stroke:none; }
.km-flight-frame-edge { fill:none; stroke:url(#km-flight-frame-light); stroke-width:.8; vector-effect:non-scaling-stroke; }
.km-flight-frame-lamp { fill:none; stroke:#dedbf9; stroke-width:1.6; vector-effect:non-scaling-stroke; filter:drop-shadow(0 0 4px #b5a7f9); }
.km-flight-header { position:absolute; inset:26px 3.8% auto; display:flex; align-items:flex-start; gap:10px; }
.km-flight-brand { margin-right:auto; padding-left:17px; border-left:1px solid #aaa7c3; text-shadow:0 1px 8px #080a13; }
.km-flight-brand b { font-size:19px; font-weight:600; letter-spacing:.2em; }
.km-flight-brand em { font-weight:300; font-style:normal; }
.km-flight-brand small { display:flex; align-items:center; gap:9px; margin-top:10px; color:#b4b1c7; font-size:10px; letter-spacing:.12em; }
.km-flight-brand small i { width:5px; height:5px; background:#d1c7ff; border-radius:50%; box-shadow:0 0 7px #c7b2ff; }
[data-flight-universe] { max-width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; padding-left:12px; margin-left:5px; border-left:1px solid #737086; }
#km-flight-screen button { color:#dfddec; background:#0d1120dd; border:1px solid #64647c77; border-radius:4px; padding:8px 12px; cursor:pointer; font:500 12px system-ui,sans-serif; transition:background .18s,border-color .18s; }
#km-flight-screen button:hover { background:#24263c; border-color:#b4adcf; }
#km-flight-screen button:focus-visible { outline:2px solid #dfb878; outline-offset:3px; }
.km-flight-bearing { position:absolute; top:35px; left:50%; transform:translateX(-50%); width:285px; height:40px; text-align:center; color:#c0bdce; font:10px ui-monospace,monospace; letter-spacing:.06em; pointer-events:none; }
.km-flight-bearing::before { content:''; display:block; height:10px; margin:0 12px 9px; background:repeating-linear-gradient(90deg,#a6a3b6 0 1px,transparent 1px 32.5px); mask-image:linear-gradient(90deg,transparent,#000 10% 90%,transparent); }
.km-flight-bearing > div { white-space:pre; }
.km-flight-bearing i { position:absolute; top:-5px; left:50%; height:17px; width:1px; background:#efebfa; }
.km-flight-reticle { position:absolute; left:50%; top:50%; width:30px; height:30px; transform:translate(-50%,-50%); pointer-events:none; color:#dcd8ec9c; }
.km-flight-reticle::before,.km-flight-reticle::after { content:''; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); }
.km-flight-reticle::before { width:42px; height:1px; background:linear-gradient(90deg,currentColor 22%,transparent 22% 78%,currentColor 78%); }
.km-flight-reticle::after { width:1px; height:42px; background:linear-gradient(currentColor 22%,transparent 22% 78%,currentColor 78%); }
.km-flight-reticle i { position:absolute; inset:6px; border:1px solid transparent; transform:rotate(45deg); transition:all .2s; }
.km-flight-reticle span { position:absolute; top:43px; left:50%; transform:translateX(-50%); white-space:nowrap; font-size:9px; letter-spacing:.16em; text-shadow:0 1px 5px #000; }
.km-flight-lock .km-flight-reticle { color:#efebff; }
.km-flight-lock .km-flight-reticle i { inset:-8px; border-color:#b5aed485; }
.km-flight-notice { position:absolute; left:50%; top:18%; transform:translateX(-50%); text-align:center; max-width:70%; color:#dfd9ef; font-size:12px; text-shadow:0 1px 7px #000; pointer-events:none; }
.km-flight-console { position:absolute; inset:auto 5.8% 8%; height:19%; display:grid; grid-template-columns:1fr 1fr 1fr; align-items:center; gap:6%; cursor:default; transition:opacity .5s,transform .5s; }
.km-flight-instrument { min-width:0; display:grid; gap:12px; }
.km-flight-instrument b { color:#d6d1e4; font:500 10px system-ui; letter-spacing:.2em; }
.km-flight-instrument small { color:#a19db5; font:400 10px system-ui; letter-spacing:.05em; }
.km-flight-instrument output { color:#eeebf5; font:300 clamp(22px,3vw,46px) ui-monospace,monospace; letter-spacing:-.05em; font-variant-numeric:tabular-nums; white-space:nowrap; }
.km-flight-readout > div { display:flex; align-items:baseline; justify-content:space-between; gap:8px; }
.km-flight-accel { color:#beb8d0; font:10px ui-monospace,monospace; white-space:nowrap; }
.km-flight-wave { width:100%; height:18px; fill:none; stroke:#b4a5db; stroke-width:.8; overflow:visible; }
.km-flight-readout small { margin-top:-4px; }
.km-flight-heading { text-align:center; }
.km-flight-heading > div { display:flex; justify-content:center; align-items:center; gap:16px; }
.km-flight-heading output { font-size:clamp(18px,2vw,28px); letter-spacing:.02em; }
.km-flight-heading small { display:block; margin-top:8px; }
.km-flight-radar { width:clamp(65px,7vw,110px); max-height:14vh; fill:none; stroke:#b8aedb; stroke-width:.6; flex:none; }
.km-flight-radar > circle:nth-child(2) { opacity:.4; }
.km-flight-radar > circle:nth-child(3) { opacity:.2; }
.km-flight-radar g circle { fill:#d9d2ec; stroke:none; }
.km-flight-charge > div { display:flex; justify-content:space-between; align-items:center; gap:8px; }
.km-flight-charge strong { color:var(--flight-amber); font:500 13px ui-monospace,monospace; padding:4px 8px; border:1px solid #9a7b4c77; border-radius:4px; }
.km-flight-charge progress { width:100%; height:14px; appearance:none; border:0; }
.km-flight-charge progress::-webkit-progress-bar { background:repeating-linear-gradient(115deg,#383545 0 12px,#111320 12px 16px); border-top:1px solid #a58b5c77; padding-top:3px; }
.km-flight-charge progress::-webkit-progress-value { background:repeating-linear-gradient(115deg,#dfb878 0 12px,#26232c 12px 16px); }
.km-flight-charge progress::-moz-progress-bar { background:#dfb878; }
.km-flight-charge-target { color:#b5abc5; font-size:11px; text-overflow:ellipsis; overflow:hidden; white-space:nowrap; }
.km-flight-contact { position:absolute; right:10%; bottom:34%; width:245px; max-width:31%; display:grid; gap:8px; padding:15px 17px; background:linear-gradient(110deg,#0a0d18e8,#101423a8); border:1px solid #aaa2c044; border-radius:2px 12px 2px 12px; box-shadow:0 8px 24px #0003; }
.km-flight-contact label,.km-flight-arrival label { color:#aca4bf; font-size:9px; letter-spacing:.18em; }
.km-flight-contact b { color:#e4dff0; font-size:17px; font-weight:400; overflow-wrap:anywhere; }
.km-flight-contact small { color:#c5bed3; font:10px ui-monospace,monospace; }
.km-flight-contact span { color:#b4acc5; font-size:11px; line-height:1.65; }
.km-flight-contact-resources { border-top:1px solid #9182ad3d; padding-top:8px; font-size:10px; color:#d7c9de; line-height:1.5; }
.km-flight-contact [data-flight-land] { justify-self:start; margin-top:3px; }
.km-flight-nebula-name { position:absolute; transform:translateX(-50%); pointer-events:none; color:#eef0ff; font:600 13px system-ui,sans-serif; white-space:nowrap; text-shadow:0 1px 4px #000,0 0 6px #0a0a19; }
.km-flight-help { position:absolute; bottom:2.4%; left:5%; right:5%; text-align:center; color:#9a93ad; font-size:10px; letter-spacing:.05em; }
.km-flight-help kbd { border:1px solid #716d8180; border-radius:3px; padding:2px 5px; margin:0 5px 0 18px; color:#cbc5d9; font:10px ui-monospace,monospace; }
.km-flight-help span > span { margin-left:18px; }
.km-flight-arrival { position:absolute; top:34%; left:50%; width:min(450px,75%); transform:translateX(-50%); padding:25px 28px; border:1px solid #b9adcd55; border-top:2px solid #d6c9ea; background:linear-gradient(145deg,#131526eb,#090d18eb); box-shadow:0 18px 60px #0004; border-radius:2px 14px 2px 14px; }
.km-flight-arrival h2 { margin:16px 0 10px; font-size:25px; font-weight:400; letter-spacing:.03em; }
.km-flight-arrival p { color:#bab2c9; line-height:1.6; font-size:12px; }
.km-flight-arrival > div { display:flex; flex-wrap:wrap; gap:8px; margin:22px 0 16px; }
.km-flight-arrival > div button:first-child { border-color:#c4b3d6aa!important; background:#302b43!important; }
.km-flight-arrival small { color:#91889f; font-size:10px; }
#km-flight-screen[data-phase=landed] .km-flight-console { opacity:.32; transform:translateY(8px); }
#km-flight-screen[data-phase=landed] :is(.km-flight-reticle,.km-flight-touch,.km-flight-bearing) { visibility:hidden; }
#km-flight-screen[data-phase=landing] .km-flight-reticle { opacity:0; }
.km-flight-routes { position:absolute; top:112px; left:5%; width:260px; max-width:35%; }
#km-flight-screen [data-flight-routes] { border:0; border-left:1px solid #877d9b66; border-radius:0; background:#090c1677; font-size:10px; color:#b3a9c5; letter-spacing:.1em; }
[data-flight-routes] span { padding-left:12px; color:#e3d5f3; }
.km-flight-route-panel { margin-top:8px; padding:12px; border:1px solid #aaa2c044; background:#0e1220f5; max-height:40vh; overflow:auto; }
.km-flight-route-panel header { display:flex; align-items:center; justify-content:space-between; gap:10px; font-size:11px; }
#km-flight-screen .km-flight-route-panel header button { padding:5px 7px; font-size:10px; }
.km-flight-route-panel p { color:#b0a4c2; font-size:11px; }
#km-flight-screen .km-flight-route-panel > div button { display:block; width:100%; margin:12px 0; text-align:left; padding:8px; }
.km-flight-route-panel button b { display:block; font-weight:500; font-size:11px; line-height:1.5; }
.km-flight-route-panel button small { display:block; margin-top:6px; color:#a69ab8; font-size:10px; line-height:1.5; }
.km-flight-route-panel > small { display:block; color:#91859f; font-size:10px; line-height:1.5; }
.km-flight-jumping::after { content:''; pointer-events:none; position:absolute; inset:0; box-shadow:inset 0 0 110px 12px #aaa3dd55; }
.km-flight-crossing::after { background:radial-gradient(ellipse,#272039,#080a13 77%); box-shadow:inset 0 0 90px #60537e; z-index:-1; }
#km-flight-screen.km-flight-crossing { background:#080a13; }
.km-flight-touch,.km-flight-touch-hint { display:none; }
.km-map-route-picker[hidden] { display:none; }
.km-map-route-picker { position:absolute; z-index:4; left:28px; bottom:48px; max-width:calc(100% - 48px); max-height:45%; overflow:auto; background:#fff; color:#263443; border:1px solid #cdd7e0; border-radius:5px; padding:7px 10px; font-size:12px; }
.km-map-route-picker button { display:block; text-align:left; padding:5px; }
.km-map-route-picker button:hover { background:#eaf0f5; }
@media (max-width:1050px) {
  .km-flight-brand b { font-size:15px; }
  .km-flight-bearing { top:90px; }
  .km-flight-console { gap:4%; left:7%; right:7%; }
  .km-flight-readout > div { display:block; }
  .km-flight-accel { display:block; margin-top:4px; }
  .km-flight-heading > div { gap:8px; }
  .km-flight-instrument b { font-size:9px; letter-spacing:.08em; }
  .km-flight-help kbd { margin-left:8px; }
}
@media (any-pointer:coarse) {
  #km-flight-toggle { min-height:44px; }
  #km-flight-screen button { min-height:44px; }
  .km-flight-touch { display:flex; position:absolute; inset:auto 4% 31%; justify-content:space-between; align-items:flex-end; pointer-events:none; }
  .km-flight-dpad { display:grid; grid-template-columns:repeat(3,48px); grid-template-rows:repeat(2,48px); gap:5px; }
  .km-flight-dpad button:first-child { grid-column:2; }
  .km-flight-dpad button:nth-child(2) { grid-column:1; }
  .km-flight-touch-actions { display:flex; flex-direction:column; gap:8px; }
  #km-flight-screen .km-flight-touch button { pointer-events:auto; touch-action:none; min-width:48px; min-height:48px; background:#111322d9; border-color:#77708e88; }
  #km-flight-screen .km-flight-touch button.km-flight-pressed { background:#3b324f; border-color:#d1c0ec; }
  .km-flight-contact { top:22%; bottom:auto; right:8%; max-width:38%; padding:12px; }
  .km-flight-key-hint { display:none; }
  .km-flight-touch-hint { display:inline; }
  .km-flight-routes { top:145px; }
  .km-flight-heading > div { flex-direction:column; gap:4px; }
  .km-flight-heading small { display:inline-block; margin:4px 5px 0; font-size:9px; }
  .km-flight-radar { width:70px; }
}
@media (max-height:650px) {
  .km-flight-header { top:15px; }
  .km-flight-console { height:21%; bottom:6%; }
  .km-flight-instrument { gap:6px; }
  .km-flight-readout output { font-size:24px; }
  .km-flight-wave { height:12px; }
  .km-flight-help { bottom:1.5%; font-size:9px; }
  .km-flight-contact { top:auto; bottom:34%; }
  .km-flight-contact span { max-height:40px; overflow:auto; }
  .km-flight-arrival { top:23%; padding:18px 24px; }
  .km-flight-arrival h2 { margin:10px 0; }
  .km-flight-arrival > div { margin:14px 0 10px; }
  .km-flight-bearing { top:22px; }
  .km-flight-routes { top:90px; }
}
@media (prefers-reduced-motion:reduce) { #km-flight-screen * { transition:none!important; } }
/* Instruments own their physical frames. The canopy only draws the window/hull:
   a fixed SVG panel must never compete with responsive HTML instrument bounds. */
#km-flight-screen { --console-height:clamp(142px,22vh,196px); --console-bottom:clamp(28px,5vh,48px); --gutter:clamp(20px,4vw,64px); }
#km-flight-screen,#km-flight-screen *,#km-flight-screen *::before,#km-flight-screen *::after { box-sizing:border-box; }
.km-flight-header { inset:24px var(--gutter) auto; align-items:flex-start; }
.km-flight-brand { min-width:0; padding-left:12px; }
.km-flight-brand b { font-size:clamp(14px,1.4vw,19px); letter-spacing:.14em; }
.km-flight-brand small { margin-top:8px; gap:7px; }
[data-flight-universe] { max-width:clamp(85px,13vw,190px); }
.km-flight-bearing { top:29px; width:clamp(190px,22vw,285px); }
.km-flight-notice { top:112px; max-width:46%; font-size:11px; line-height:1.6; }
.km-flight-console { inset:auto var(--gutter) var(--console-bottom); height:var(--console-height); grid-template-columns:repeat(3,minmax(0,1fr)); gap:clamp(12px,2.2vw,34px); align-items:stretch; }
.km-flight-instrument { position:relative; min-width:0; min-height:0; height:100%; padding:clamp(14px,1.8vw,24px); border:1px solid #77748d55; border-top-color:#bbb2d47a; border-radius:3px 12px 3px 12px; background:linear-gradient(145deg,#151726c9,#0a0e1bd9); box-shadow:inset 0 1px 0 #eeebff0a,0 8px 30px #0002; gap:9px; align-content:center; }
.km-flight-instrument::before { content:''; position:absolute; top:-1px; left:20px; width:28px; height:1px; background:#d6cbea; box-shadow:0 0 6px #d6cbea66; }
.km-flight-instrument b { font-size:10px; letter-spacing:.13em; line-height:1.4; }
.km-flight-instrument small { min-width:0; max-width:100%; font-size:10px; line-height:1.5; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.km-flight-readout > div { display:flex; align-items:baseline; justify-content:space-between; min-width:0; flex-wrap:wrap; gap:2px 8px; }
.km-flight-readout output { min-width:0; font-size:clamp(24px,2.8vw,40px); line-height:1.12; }
.km-flight-accel { font-size:9px; margin:0; }
.km-flight-wave { display:block; width:100%; max-width:100%; height:16px; overflow:hidden; }
.km-flight-readout small { margin:0; }
.km-flight-heading { text-align:left; }
.km-flight-heading > div { min-width:0; display:flex; flex-direction:row; justify-content:flex-start; align-items:center; gap:clamp(10px,1.6vw,24px); }
.km-flight-heading > div > div { min-width:0; }
.km-flight-heading output { font-size:clamp(20px,2.1vw,30px); line-height:1.2; }
.km-flight-heading small { display:block; margin:4px 0 0; font-size:9px; }
.km-flight-radar { width:clamp(52px,6vw,80px); height:auto; max-height:90px; }
.km-flight-charge { grid-template-rows:auto 12px auto auto; gap:12px; }
.km-flight-charge > div { min-width:0; gap:6px; }
.km-flight-charge b { min-width:0; }
.km-flight-charge strong { flex:none; min-width:46px; text-align:center; padding:3px 5px; font-size:12px; }
#km-flight-screen .km-flight-charge progress { display:block; position:static; width:100%; min-width:0; max-width:100%; height:12px; margin:0; padding:0; border:0; border-radius:0; overflow:hidden; appearance:none; background:#292633; }
.km-flight-charge progress::-webkit-progress-bar { padding:0; border:0; background:repeating-linear-gradient(110deg,#383545 0 9px,#111320 9px 12px); }
.km-flight-charge progress::-webkit-progress-value { background:repeating-linear-gradient(110deg,#dfb878 0 9px,#26232c 9px 12px); }
.km-flight-charge-target { display:block; max-width:100%; min-width:0; font:10px system-ui; line-height:1.5; }
.km-flight-contact { right:var(--gutter); bottom:calc(var(--console-height) + var(--console-bottom) + 24px); width:260px; max-width:29%; max-height:calc(100% - var(--console-height) - var(--console-bottom) - 155px); overflow:auto; scrollbar-width:thin; padding:16px; gap:7px; }
.km-flight-contact b { font-size:16px; line-height:1.45; }
.km-flight-contact span { font-size:10px; line-height:1.6; }
.km-flight-routes { top:112px; left:var(--gutter); width:250px; max-width:29%; }
.km-flight-route-panel { max-height:calc(100vh - 440px); min-height:90px; }
.km-flight-help { bottom:10px; left:var(--gutter); right:var(--gutter); line-height:1.5; font-size:9px; }
.km-flight-help kbd { font-size:9px; margin-left:12px; }
.km-flight-arrival { top:24%; max-height:calc(100% - var(--console-height) - var(--console-bottom) - 24% - 18px); overflow:auto; overscroll-behavior:contain; }
@media (max-width:1050px) {
  .km-flight-bearing { top:84px; }
  .km-flight-notice { top:131px; max-width:42%; }
  .km-flight-console { gap:12px; }
  .km-flight-instrument { padding:14px; }
  .km-flight-instrument b { font-size:9px; letter-spacing:.06em; }
  .km-flight-readout > div { display:block; }
  .km-flight-accel { display:block; margin-top:5px; }
  .km-flight-heading > div { gap:8px; }
  .km-flight-radar { width:52px; }
  .km-flight-contact { width:230px; }
}
@media (any-pointer:coarse) {
  .km-flight-touch { inset:auto var(--gutter) calc(var(--console-height) + var(--console-bottom) + 20px); }
  .km-flight-contact { top:145px; bottom:auto; right:var(--gutter); max-height:calc(100% - var(--console-height) - var(--console-bottom) - 295px); max-width:32%; }
  .km-flight-routes { top:145px; max-width:28%; }
  .km-flight-route-panel { max-height:calc(100vh - 540px); }
  .km-flight-heading > div { flex-direction:row; }
  .km-flight-heading small { display:block; margin:4px 0 0; }
  .km-flight-arrival { top:24%; }
}
@media (max-height:680px) {
  #km-flight-screen { --console-height:138px; --console-bottom:28px; }
  .km-flight-header { top:16px; }
  .km-flight-brand small { margin-top:5px; }
  .km-flight-bearing { top:26px; }
  .km-flight-notice { top:80px; }
  .km-flight-console { gap:12px; }
  .km-flight-instrument { padding:12px 15px; gap:6px; }
  .km-flight-readout output { font-size:26px; }
  .km-flight-wave { height:10px; }
  .km-flight-charge { gap:8px; }
  .km-flight-routes { top:86px; }
  .km-flight-contact { top:90px; bottom:auto; max-height:calc(100% - 278px); }
  .km-flight-contact span { max-height:none; }
  .km-flight-help { bottom:7px; }
  .km-flight-arrival { top:20%; padding:16px 20px; max-height:calc(80% - 180px); }
  .km-flight-arrival h2 { font-size:20px; margin:10px 0; }
  .km-flight-arrival > div { margin:12px 0; }
}
@media (max-height:680px) and (max-width:1050px) {
  .km-flight-bearing { width:180px; top:22px; }
  .km-flight-brand small { max-width:210px; }
}
@media (max-height:680px) and (any-pointer:coarse) {
  .km-flight-contact { max-height:calc(100% - 384px); }
  .km-flight-dpad { grid-template-columns:repeat(3,44px); grid-template-rows:repeat(2,44px); gap:4px; }
  #km-flight-screen .km-flight-touch button { min-width:44px; min-height:44px; padding:8px; }
}
.km-flight-instrument { align-content:start; padding-top:24px; }
.km-flight-instrument > b,.km-flight-charge > div { min-height:18px; }
.km-flight-charge strong { position:absolute; top:20px; right:24px; }
.km-flight-charge > div { padding-right:48px; }
@media (max-width:1050px) { .km-flight-charge strong { right:14px; } }
@media (max-height:680px) { .km-flight-instrument { padding-top:16px; } .km-flight-charge strong { top:12px; right:15px; } }
.km-flight-charge > div { align-items:flex-start; }
.km-flight-charge b { min-height:18px; }

/* ===== 2026-11-04 · KMind night language for the cockpit (handoff/设计规则_夜间与平面皮肤.md) =====
   Lines and light only: the canopy is a hairline, the instruments sit low and carry no frame, the windshield stays open.
   Blue = what you can act on, cyan = live (charge, lock), white = done; amber stays with people (their avatars in view). */
#km-flight-screen { --flight-light:var(--k-ink,#F2F5F9); --flight-soft:var(--k-ink2,#C3CCD8); --flight-mute:var(--k-mute,#8E98A8); --flight-dim:var(--k-dim,#7A8494);
  --flight-acc:var(--k-acc,#3B82FF); --flight-acc-rgb:var(--k-acc-rgb,59,130,255); --flight-live:var(--k-ok,#5CC8FF); --flight-live-rgb:92,200,255;
  --flight-glass:rgba(8,10,15,.62); --flight-layer:rgba(150,180,230,.08); --flight-rule:rgba(150,180,230,.16);
  --console-height:clamp(136px,17vh,156px); --console-bottom:clamp(30px,5.2vh,48px); --charge:0;
  color:var(--flight-light); font:13px/1.45 "Inter Tight","Plex SC",-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif; }
#km-flight-screen :is(button,input,select) { font-family:inherit; }
.km-flight-hull { fill:url(#km-flight-hull-fill); }
.km-flight-frame-edge { stroke-width:.7; }
.km-flight-frame-lamp { stroke:#DCE8FF; stroke-width:1.4; filter:drop-shadow(0 0 4px rgba(var(--flight-acc-rgb),.85)); opacity:.85; }
/* controls: pills of light */
#km-flight-screen button { border:0; border-radius:999px; background:rgba(150,180,230,.1); color:var(--flight-soft); font-size:12.5px; font-weight:500; padding:8px 14px; }
#km-flight-screen button:hover { background:rgba(var(--flight-acc-rgb),.2); color:var(--flight-light); border:0; }
#km-flight-screen button:focus-visible { outline:0; box-shadow:0 0 0 2px rgba(var(--flight-acc-rgb),.25),0 0 16px rgba(var(--flight-acc-rgb),.6); }
#km-flight-screen :is([data-flight-land],[data-flight-takeoff],.km-flight-arrival>div button:first-child) { background:var(--flight-acc)!important; color:#fff!important; border:0!important; }
/* identity and bearing */
.km-flight-brand { border:0; padding-left:0; }
.km-flight-brand b { font-size:clamp(15px,1.35vw,18px); font-weight:600; letter-spacing:.01em; display:flex; align-items:baseline; gap:9px; }
.km-flight-brand em { font-weight:400; color:var(--flight-mute); }
.km-flight-brand small { color:var(--flight-mute); letter-spacing:0; font-size:11px; }
.km-flight-brand small i { background:var(--flight-live); box-shadow:0 0 8px rgba(var(--flight-live-rgb),.9); }
#km-flight-screen[data-phase=charging] .km-flight-brand small i,#km-flight-screen.km-flight-jumping .km-flight-brand small i { background:#fff; box-shadow:0 0 10px #fff; }
[data-flight-universe] { border-left-color:var(--flight-rule); }
.km-flight-bearing { color:var(--flight-mute); font-family:var(--k-mono,ui-monospace,monospace); }
.km-flight-bearing::before { background:repeating-linear-gradient(90deg,rgba(150,180,230,.45) 0 1px,transparent 1px 32.5px); }
.km-flight-bearing i { background:var(--flight-live); box-shadow:0 0 8px rgba(var(--flight-live-rgb),.8); width:1.5px; }
/* the aiming mark; while charging, a ring fills clockwise around it */
.km-flight-reticle { color:rgba(195,204,216,.55); }
.km-flight-lock .km-flight-reticle { color:var(--flight-light); }
.km-flight-lock .km-flight-reticle i { border-color:rgba(var(--flight-live-rgb),.6); box-shadow:0 0 14px -2px rgba(var(--flight-live-rgb),.6); }
.km-flight-ring { position:absolute; left:50%; top:50%; width:64px; height:64px; margin:-32px 0 0 -32px; border-radius:50%; opacity:0; transition:opacity .2s;
  background:conic-gradient(from 0deg,var(--flight-live) calc(var(--charge) * 360deg),rgba(150,180,230,.16) 0);
  -webkit-mask:radial-gradient(circle,transparent 28.5px,#000 29.5px 31.5px,transparent 32.5px); mask:radial-gradient(circle,transparent 28.5px,#000 29.5px 31.5px,transparent 32.5px);
  filter:drop-shadow(0 0 6px rgba(var(--flight-live-rgb),.8)); }
#km-flight-screen[data-phase=charging] .km-flight-ring { opacity:1; }
#km-flight-screen.km-flight-jumping .km-flight-ring { opacity:1; background:#fff; filter:drop-shadow(0 0 10px #fff); }
.km-flight-reticle span { color:var(--flight-live); letter-spacing:.06em; font-size:10px; }
.km-flight-notice { color:var(--flight-soft); font-size:12px; }
/* instruments: no frame; a short line of light marks each one, the readouts carry the hierarchy */
.km-flight-console { gap:clamp(18px,3vw,48px); }
.km-flight-instrument { border:0!important; border-radius:0!important; background:none!important; box-shadow:none!important; padding:clamp(12px,1.4vw,18px) 0 0!important; }
.km-flight-instrument::before { top:0; left:0; right:0; width:auto; height:1px; background:linear-gradient(90deg,rgba(150,180,230,.38),rgba(150,180,230,.1) 55%,transparent); box-shadow:none; }
.km-flight-instrument::after { content:''; position:absolute; top:-1px; left:0; width:22px; height:3px; border-radius:2px; background:var(--flight-acc); box-shadow:0 0 10px rgba(var(--flight-acc-rgb),.9); }
.km-flight-instrument b { color:var(--flight-mute); font-size:11px; font-weight:500; letter-spacing:.02em; display:flex; align-items:baseline; gap:8px; }
.km-flight-instrument small { color:var(--flight-mute); font-size:11px; letter-spacing:0; }
.km-flight-instrument output { color:var(--flight-light); font-family:var(--k-mono,ui-monospace,monospace); font-weight:300; letter-spacing:-.03em; }
.km-flight-accel { color:var(--flight-mute); font-family:var(--k-mono,ui-monospace,monospace); }
.km-flight-wave { stroke:rgba(var(--flight-live-rgb),.75); stroke-width:1; }
.km-flight-radar { stroke:rgba(150,180,230,.55); stroke-width:.7; }
.km-flight-radar g circle { fill:var(--flight-live); }
.km-flight-radar > path { stroke:rgba(150,180,230,.3); }
/* the jump drive: a thin luminous track with quarter marks; cyan while it charges, white when it fires */
.km-flight-charge strong { border:0!important; border-radius:999px; background:rgba(150,180,230,.08); color:var(--flight-soft)!important; font:500 12px var(--k-mono,ui-monospace,monospace)!important; padding:3px 9px!important; }
#km-flight-screen[data-phase=charging] .km-flight-charge strong { color:var(--flight-live)!important; background:rgba(var(--flight-live-rgb),.12); }
#km-flight-screen.km-flight-jumping .km-flight-charge strong { color:#fff!important; background:rgba(255,255,255,.16); }
#km-flight-screen .km-flight-charge progress { height:6px!important; border-radius:999px!important; background:rgba(150,180,230,.12)!important; margin-top:3px!important; }
.km-flight-charge progress::-webkit-progress-bar { border-radius:999px; border:0; padding:0;
  background:linear-gradient(90deg,transparent calc(25% - 1px),rgba(5,7,11,.9) 0 25%,transparent 0 calc(50% - 1px),rgba(5,7,11,.9) 0 50%,transparent 0 calc(75% - 1px),rgba(5,7,11,.9) 0 75%,transparent 0),rgba(150,180,230,.14)!important; }
.km-flight-charge progress::-webkit-progress-value { border-radius:999px; background:linear-gradient(90deg,var(--flight-acc),var(--flight-live))!important; box-shadow:0 0 12px rgba(var(--flight-live-rgb),.8); transition:width .08s linear; }
.km-flight-charge progress::-moz-progress-bar { border-radius:999px; background:linear-gradient(90deg,var(--flight-acc),var(--flight-live)); }
#km-flight-screen.km-flight-jumping .km-flight-charge progress::-webkit-progress-value { background:#fff!important; box-shadow:0 0 16px #fff; }
.km-flight-charge-target { color:var(--flight-soft); font-size:11.5px!important; font-family:inherit!important; }
/* the contact readout floats in the window as glass */
.km-flight-contact { border:0; border-radius:16px; background:var(--flight-glass); backdrop-filter:blur(16px) saturate(1.1); -webkit-backdrop-filter:blur(16px) saturate(1.1); box-shadow:0 18px 50px -24px #000; padding:16px 18px; }
.km-flight-contact label,.km-flight-arrival label { color:var(--flight-live); font-size:11px; letter-spacing:.02em; display:flex; gap:8px; align-items:baseline; }
.km-flight-contact b { color:var(--flight-light); font-weight:600; }
.km-flight-contact small { color:var(--flight-soft); font-family:var(--k-mono,ui-monospace,monospace); }
.km-flight-contact span { color:var(--flight-mute); }
.km-flight-contact-resources { border-top:0; padding-top:4px; color:var(--flight-soft); }
.km-flight-nebula-name { color:var(--flight-light); font-weight:500; font-size:13px; text-shadow:0 1px 6px #000,0 0 14px rgba(var(--flight-acc-rgb),.5); }
/* landing */
.km-flight-arrival { border:0; border-radius:20px; background:rgba(8,10,15,.8); backdrop-filter:blur(18px); box-shadow:0 30px 80px -30px #000; }
.km-flight-arrival h2 { font-weight:600; letter-spacing:.01em; }
.km-flight-arrival p,.km-flight-arrival small { color:var(--flight-mute); }
/* routes */
#km-flight-screen [data-flight-routes] { border:0!important; border-radius:999px; background:rgba(8,10,15,.55); color:var(--flight-soft); letter-spacing:0; font-size:12px; padding:7px 13px; }
[data-flight-routes] span { color:var(--flight-live); font-family:var(--k-mono,ui-monospace,monospace); padding-left:8px; }
.km-flight-route-panel { border:0; border-radius:16px; background:var(--flight-glass); backdrop-filter:blur(16px); }
.km-flight-route-panel p,.km-flight-route-panel button small,.km-flight-route-panel>small { color:var(--flight-mute); }
#km-flight-screen .km-flight-route-panel>div button { border-radius:12px; background:rgba(150,180,230,.06); }
/* help: keycaps */
.km-flight-help { color:var(--flight-dim); font-size:11px; letter-spacing:0; }
.km-flight-help kbd { border:0; border-radius:6px; background:rgba(150,180,230,.1); color:var(--flight-soft); font:10px var(--k-mono,ui-monospace,monospace); padding:3px 7px; }
/* jumping and crossing: light, not violet */
.km-flight-jumping::after { box-shadow:inset 0 0 120px 10px rgba(var(--flight-live-rgb),.28); }
.km-flight-crossing::after { background:radial-gradient(ellipse,#0d1320,#05070b 77%); box-shadow:inset 0 0 90px rgba(var(--flight-acc-rgb),.35); }
#km-flight-screen.km-flight-crossing { background:#05070b; }
/* touch */
#km-flight-screen .km-flight-touch button { border:0; border-radius:16px; background:rgba(8,10,15,.62); backdrop-filter:blur(10px); color:var(--flight-soft); }
#km-flight-screen .km-flight-touch button.km-flight-pressed { background:rgba(var(--flight-acc-rgb),.38); color:#fff; box-shadow:0 0 18px -4px rgba(var(--flight-acc-rgb),.9); }
/* the launch entry on the mother planet: a native-looking label */
#km-flight-toggle { font-family:"Inter Tight","Plex SC",-apple-system,"PingFang SC",sans-serif; font-weight:600; font-size:12.5px; color:var(--k-ink,#F2F5F9); }
#km-flight-toggle svg { color:var(--k-ok,#5CC8FF); }
@media (max-height:680px) { #km-flight-screen { --console-height:124px; --console-bottom:26px; } }
@media (prefers-reduced-motion:reduce) { .km-flight-ring { transition:none; } }
.km-flight-instrument b,.km-flight-instrument small,.km-flight-nebula-name,.km-flight-charge-target { font-family:inherit; }

/* Ground traversal uses the existing entry button and the spatial canvas. */
#km-flight-toggle[data-ground-walk] {
  left: 28px !important; right: auto; top: 132px !important; transform: none; z-index: 38;
  background: rgba(236, 229, 209, .91); color: #334352;
  padding: 7px 12px; text-shadow: none; border-radius: 4px;
}
#km-flight-toggle[data-ground-walk] svg { display: none; }
#kmu.km-ground-walking > :not(#hub-view):not(#km-flight-toggle) { visibility: hidden; pointer-events: none; }
#kmu:has(#kmu-bar:not([hidden])) #km-flight-toggle[data-ground-walk] { top: 178px !important; }
#kmu.km-ground-walking #km-flight-toggle[data-ground-walk] { left: auto !important; right: 18px; top: 14px !important; }
#kmu.km-ground-walking #hub-view[data-spatial-skin] { inset: 0 !important; width: auto !important; margin: 0 !important; }
#kmu.km-ground-walking .hub-viewport::before,
#kmu.km-ground-walking .hub-viewport::after,
#kmu.km-ground-walking .hub-heading,
.ks3-walking .ks3-frame,
.ks3-walking .ks3-labels,
.ks3-walking .ks3-controls,
.ks3-walking .ks3-detail { display: none !important; }
.ks3-stage.ks3-walking { background: linear-gradient(#a0b8ca, #d6ded9 55%, #f2e9d6); }
.ks3-walking .ks3-paper { opacity: .28 !important; }
.ks3-walking > canvas:focus-visible { outline: none; box-shadow: none; }
.ks3-ground-pad { display: none; }
@media (pointer: coarse) {
  .ks3-ground-pad:not([hidden]) {
    display: grid; grid-template-columns: repeat(3, 42px); gap: 3px;
    position: absolute; left: 16px; bottom: 18px; z-index: 5; touch-action: none;
  }
  .ks3-ground-pad > button {
    min-height: 42px; color: #334352; background: rgba(236, 229, 209, .91); border-radius: 4px;
  }
  .ks3-ground-pad > button:first-child { grid-column: 2; }
  .ks3-ground-pad > button:nth-child(2) { grid-column: 1; }
}
/* 1.16 · 第四刀（修士 #32326）：run / jump for touch on the right (the keyboard has Shift / Space), a stamina line under the crosshair while scaling a wall, a short note (the hint on entry, back from the water) */
.ks3-ground-actions, .ks3-ground-stamina, .ks3-ground-note { display: none; }
.ks3-ground-note:not([hidden]) {
  display: block; position: absolute; left: 50%; top: 16%; transform: translateX(-50%); z-index: 6; pointer-events: none;
  max-width: min(560px, calc(100% - 32px)); padding: 6px 12px; border-radius: 4px; background: rgba(236, 229, 209, .91); color: #334352;
  font: 13px/1.45 "IBM Plex Sans", "Plex SC", "PingFang SC", sans-serif; text-align: center;
}
.ks3-ground-stamina:not([hidden]) { display: block; position: absolute; left: 50%; top: calc(50% + 22px); transform: translateX(-50%); width: 120px; height: 4px; border-radius: 2px; background: rgba(51, 67, 82, .35); overflow: hidden; z-index: 6; pointer-events: none; }
.ks3-ground-stamina > i { display: block; height: 100%; width: 100%; background: rgba(236, 229, 209, .95); }
@media (pointer: coarse) {
  .ks3-ground-actions:not([hidden]) { display: grid; gap: 10px; position: absolute; right: 18px; bottom: 18px; z-index: 5; touch-action: none; }
  .ks3-ground-actions > button {
    width: 58px; height: 58px; border-radius: 50%; border: 1px solid rgba(51, 67, 82, .18); color: #334352; background: rgba(236, 229, 209, .91);
    font: 600 15px/1 "IBM Plex Sans", "Plex SC", "PingFang SC", sans-serif; user-select: none; -webkit-user-select: none; -webkit-tap-highlight-color: transparent;
  }
  .ks3-ground-actions > button.on, .ks3-ground-actions > button:active { background: #334352; color: #ece5d1; }
}

/* ==== src/addons/resource-city.css ==== */
.km-resource-city { margin:8px 8px 14px; border:1px solid var(--k-line); border-radius:8px; padding:12px; background:var(--k-bg); color:var(--k-ink); }
.km-resource-city header { margin:0 0 9px; font-size:14px; font-weight:650; }
.km-city-streets { display:grid; grid-template-columns:repeat(auto-fit,minmax(94px,1fr)); gap:5px; }
.km-city-streets button { min-width:0; display:grid; justify-items:center; border:1px solid transparent; border-radius:4px; padding:0 3px 4px; }
.km-city-streets button:is(:hover,:focus-visible) { border-color:currentColor; }
.km-city-streets svg { width:92px; max-width:100%; fill:none; stroke:currentColor; stroke-width:1.35; }
.km-city-streets .km-city-ground { opacity:.35; }
.km-city-rotate { display:flex; align-items:center; gap:10px; margin-bottom:7px; font-size:12px; }
.km-city-streets span { max-width:100%; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-size:11px; }
.km-city-enter { flex:none; padding:6px 11px; border:1px solid #a69ac373; border-radius:5px; background:#353044; color:#ede6f7; font:600 12px system-ui; }
.km-city-enter:hover { background:#49405c; }
#dialog.km-city-open { position:fixed!important; inset:0!important; width:100vw!important; max-width:none!important; height:100dvh!important; max-height:none!important; margin:0!important; padding:0!important; border:0!important; border-radius:0!important; overflow:hidden!important; background:#070b16!important; }
#dialog.km-city-open > :not(#km-city-interior) { display:none!important; }
#km-city-interior { position:absolute; inset:0; overflow:hidden; outline:none; background:#070b16; color:#e7e3ef; font:13px system-ui,sans-serif; --city-line:#9994b53d; }
#km-city-interior [hidden] { display:none!important; }
#km-city-interior canvas { position:absolute; inset:0; display:block; width:100%; height:100%; touch-action:none; cursor:grab; }
#km-city-interior canvas:active { cursor:grabbing; }
.km-city-vignette { position:absolute; inset:0; pointer-events:none; background:linear-gradient(#060a15a3,transparent 22% 75%,#060a15c9),linear-gradient(90deg,#070b1644,transparent 45%); }
.km-city-top { position:absolute; inset:30px 3% auto; display:flex; justify-content:space-between; align-items:flex-start; gap:20px; pointer-events:none; }
.km-city-top > div { border-left:1px solid #c4b5df; padding-left:18px; }
.km-city-top small { color:#b5a8cb; font-size:10px; letter-spacing:.17em; }
.km-city-top h2 { font-size:27px; font-weight:400; letter-spacing:.12em; margin:10px 0 6px; }
.km-city-top p { font-size:11px; color:#ada3be; margin:0; }
#km-city-interior button { border:1px solid #9a90af55; border-radius:4px; color:#dfd9eb; background:#111625e8; font:500 12px system-ui; padding:9px 12px; cursor:pointer; pointer-events:auto; }
#km-city-interior button:hover,#km-city-interior button.selected { border-color:#c4b2e1; background:#28243e; }
#km-city-interior :is(button,input):focus-visible { outline:2px solid #d8be8d; outline-offset:3px; }
.km-city-directory { position:absolute; top:160px; left:3%; width:224px; max-height:calc(100% - 285px); display:flex; flex-direction:column; padding:16px; border:1px solid var(--city-line); background:linear-gradient(135deg,#111626ee,#090e1ad9); border-radius:2px 12px 2px 12px; }
.km-city-directory header { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:14px; }
.km-city-directory header b { font-weight:500; letter-spacing:.08em; }
.km-city-directory header span { color:#a79ab8; font-size:10px; }
#km-city-interior input { width:100%; box-sizing:border-box; background:#070b16; border:1px solid #78718d66; border-radius:4px; padding:9px; color:#e3d8f0; font:12px system-ui; }
.km-city-directory nav { margin-top:12px; overflow:auto; scrollbar-width:thin; }
#km-city-interior .km-city-directory nav button { width:100%; display:block; text-align:left; margin-bottom:6px; border-color:transparent; background:#ffffff03; padding:9px; }
.km-city-directory nav b { display:block; font-size:12px; font-weight:500; line-height:1.5; }
.km-city-directory nav small { display:block; font-size:10px; color:#a195b1; margin-top:5px; }
.km-city-directory nav p { color:#a99bb8; font-size:12px; line-height:1.6; }
.km-city-crosshair { position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); font:200 22px system-ui; color:#ccc3dc66; pointer-events:none; }
.km-city-labels { position:absolute; inset:0; pointer-events:none; }
#km-city-interior .km-city-labels button { position:absolute; transform:translate(-50%,-100%); font-size:10px; max-width:180px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; padding:6px 9px; background:#101524d9; border:1px solid #b6a6d156; }
.km-city-inspector { position:absolute; right:3%; bottom:126px; width:280px; max-width:34%; padding:22px; background:linear-gradient(135deg,#17192bea,#0d1020ea); border:1px solid #a695c05c; border-top:2px solid #bda5d5; border-radius:2px 14px 2px 14px; }
.km-city-inspector small { color:#baaccc; font-size:10px; letter-spacing:.1em; }
.km-city-inspector h3 { margin:12px 0; font-size:20px; font-weight:400; overflow-wrap:anywhere; }
.km-city-inspector p { color:#b6aac6; font-size:12px; line-height:1.8; max-height:160px; overflow:auto; }
.km-city-inspector > div { display:flex; flex-wrap:wrap; gap:8px; margin-top:18px; }
.km-city-bottom { position:absolute; inset:auto 3% 24px; display:flex; align-items:center; justify-content:space-between; gap:20px; border-top:1px solid var(--city-line); padding-top:15px; }
.km-city-bottom > div { display:flex; gap:14px; align-items:center; }
.km-city-bottom b { font-size:11px; font-weight:500; color:#c4b7d5; }
.km-city-bottom span { color:#9f93b2; font:10px ui-monospace,monospace; }
.km-city-instructions { color:#9c91ad; font-size:10px; }
.km-city-pad { display:none; }
@media (any-pointer:coarse) {
  #km-city-interior button { min-height:44px; }
  .km-city-directory { top:150px; width:175px; max-height:40%; padding:12px; }
  .km-city-pad { position:absolute; left:4%; bottom:125px; display:grid; grid-template-columns:repeat(3,48px); grid-template-rows:repeat(2,48px); gap:5px; }
  .km-city-pad button:first-child { grid-column:2; }
  .km-city-pad button:nth-child(2) { grid-column:1; }
  #km-city-interior .km-city-pad button { touch-action:none; padding:8px; min-width:48px; }
  #km-city-interior .km-city-pad button.pressed { background:#443553; border-color:#cbb0e6; }
  .km-city-bottom { flex-wrap:wrap; gap:12px; bottom:18px; }
  .km-city-instructions { display:none!important; }
  .km-city-inspector { width:240px; padding:16px; }
}
@media (max-width:700px) {
  .km-city-top { top:18px; }
  .km-city-top h2 { font-size:21px; }
  .km-city-top small { font-size:8px; }
  .km-city-directory { width:145px; top:145px; padding:10px; }
  .km-city-inspector { max-width:40%; right:3%; bottom:145px; padding:12px; }
  .km-city-inspector h3 { font-size:16px; }
}
@media (max-height:650px) {
  .km-city-top { top:18px; }
  .km-city-top h2 { margin:6px 0; font-size:21px; }
  .km-city-directory { top:125px; max-height:calc(100% - 225px); }
  .km-city-inspector { bottom:100px; padding:14px; }
  .km-city-inspector p { max-height:70px; }
}
/* The optional studio is confined to the city, with no native explorer styles. */
#km-city-interior,#km-city-interior * { box-sizing:border-box; }
.km-city-studio { position:absolute; top:140px; bottom:100px; right:3%; width:320px; max-width:45%; padding:20px; overflow:auto; overscroll-behavior:contain; background:linear-gradient(135deg,#171b2af5,#0b1020fa); border:1px solid #aba0c85c; border-top:2px solid #c3b4df; border-radius:2px 12px 2px 12px; scrollbar-width:thin; }
.km-city-studio header { display:flex; justify-content:space-between; gap:12px; align-items:flex-start; }
.km-city-studio h3 { font:400 18px system-ui; margin:9px 0; overflow-wrap:anywhere; }
.km-city-studio small { color:#aba0bc; font-size:10px; line-height:1.7; }
.km-city-studio p { color:#c1b5d0; font-size:11px; line-height:1.7; }
.km-city-form-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:7px; margin:16px 0; }
#km-city-interior .km-city-form-grid button { min-width:0; text-align:left; padding:12px 9px; }
.km-city-form-grid b,.km-city-form-grid small { display:block; }
.km-city-form-grid b { font-size:12px; font-weight:500; margin-bottom:5px; }
.km-city-studio label { display:block; font-size:11px; margin:12px 0; color:#c6bcd4; }
.km-city-studio select { display:block; width:100%; min-width:0; color:#e9e1f3; border:1px solid #9185aa66; border-radius:4px; background:#0d1222; font:12px system-ui; padding:10px; margin-top:7px; }
#km-city-interior .km-city-file input { margin-top:8px; font-size:10px; }
.km-city-model-actions { display:flex; flex-wrap:wrap; gap:7px; margin-top:15px; }
#km-city-interior button:disabled { opacity:.35; cursor:default; }
@media (any-pointer:coarse) { .km-city-studio select { min-height:44px; } }
@media (max-height:650px) { .km-city-studio { top:115px; bottom:88px; padding:14px; } }
.km-city-form-grid svg { display:block; width:100%; height:55px; margin-bottom:7px; fill:#111625; stroke:#b6a7cf; stroke-width:.65; }
.km-city-form-grid .selected svg { stroke:#e2cda5; }
.km-city-studio header { position:sticky; top:-20px; padding:8px 0; z-index:1; background:#131827; }
@media (max-height:650px) { .km-city-studio header { top:-14px; } }
/* District colors always have text labels; native lists and panels keep their styles. */
.km-city-districts { display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-bottom:12px; }
#km-city-interior .km-city-districts button { padding:8px 5px;text-align:left;border-left:2px solid var(--district);font-size:11px;min-height:36px; }
.km-city-directory { max-height:calc(100% - 285px); }
.km-city-venue { position:absolute;z-index:5;inset:145px 3% 100px auto;width:min(850px,72%);display:flex;flex-direction:column;padding:22px;border:1px solid #a5b0cd66;border-top:2px solid #c4afd7;border-radius:2px 14px 2px 14px;background:#0c1322f7;overflow:auto;overscroll-behavior:contain; }
.km-city-venue header { display:flex;justify-content:space-between;gap:14px;align-items:start; }
.km-city-venue h3 { margin:8px 0;font-size:24px;font-weight:400;letter-spacing:.1em; }
.km-city-venue small { color:#b7a4ca;font-size:10px;letter-spacing:.08em; }
.km-city-venue p { color:#aeb9cd;font-size:12px;line-height:1.8;margin:8px 0; }
.km-venue-actions { display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:12px 0;border-bottom:1px solid #7788a433; }
.km-venue-actions label { font-size:11px;color:#adb9cc;max-width:100%; }
.km-venue-actions select { max-width:180px;min-height:36px;color:#e6e6f4;background:#131c2d;border:1px solid #7185a566;margin:4px 8px;padding:6px; }
#km-city-interior .km-venue-actions input { width:210px;max-width:100%;margin-left:5px;font-size:10px; }
.km-venue-layout { display:grid;grid-template-columns:180px minmax(0,1fr);gap:20px;min-height:140px;flex:1;overflow:hidden;margin-top:16px; }
.km-venue-list,.km-venue-view { min-width:0;overflow:auto;scrollbar-width:thin; }
#km-city-interior .km-venue-list button { display:block;width:100%;text-align:left;margin-bottom:6px;overflow-wrap:anywhere; }
.km-venue-view h4 { font-size:16px;font-weight:500;margin:5px 0 12px;overflow-wrap:anywhere; }
.km-venue-view img,.km-venue-view video { display:block;width:100%;max-height:340px;object-fit:contain;background:#040910;margin:12px 0; }
.km-venue-view pre { white-space:pre-wrap;overflow-wrap:anywhere;font:13px/1.9 system-ui;color:#d9deea; }
.km-venue-view table { border-collapse:collapse;font-size:12px; }.km-venue-view td { border:1px solid #6a7c9855;padding:8px; }
#km-city-interior .km-venue-view button { display:block;margin:8px 0;max-width:100%;text-align:left;overflow-wrap:anywhere; }
@media(max-width:1000px) { .km-city-venue { inset:130px 3% 115px;width:94%;padding:16px; }.km-venue-layout { grid-template-columns:150px minmax(0,1fr);gap:12px; }.km-city-directory { width:200px; }.km-city-directory nav { min-height:40px; } }
@media(max-height:650px) { .km-city-venue { top:105px;bottom:85px;padding:14px; }.km-city-venue h3 { font-size:20px; }.km-city-districts { gap:3px; }#km-city-interior .km-city-districts button { min-height:30px;padding:6px; }.km-venue-layout { min-height:100px; }.km-city-venue p { margin:4px 0; } }
@media(any-pointer:coarse) { #km-city-interior .km-city-districts button,#km-city-interior .km-city-venue button { min-height:44px; }.km-city-directory { max-height:calc(100% - 430px); } }
/* Night universe: floating light, open edges, restrained glass rather than framed cards. */
#km-city-interior { --city-line:#95c7ed22; }
.km-city-directory,.km-city-inspector,.km-city-studio,.km-city-venue { border:0;border-radius:0;background:linear-gradient(105deg,#081321f5 15%,#0b1525ed 80%,#0b152500);box-shadow:none;backdrop-filter:blur(18px); }
.km-city-directory::before,.km-city-inspector::before,.km-city-studio::before,.km-city-venue::before { content:'';position:absolute;left:0;right:14%;top:0;height:1px;background:linear-gradient(90deg,#a2d7f3bb,#c6b0ef66,transparent);box-shadow:0 0 12px #99cfff55;pointer-events:none; }
.km-city-top h2 { text-shadow:0 0 25px #7ebdff55; }
#km-city-interior button { border-color:transparent;background:#9ebada08;border-radius:6px;color:#c9d8e8;transition:background .18s,color .18s,box-shadow .18s; }
#km-city-interior button:hover,#km-city-interior button.selected { border-color:transparent;color:#edfaff;background:#8bc7ff13;box-shadow:inset 0 -1px #95cfff88,0 10px 20px -15px #8ccfff; }
#km-city-interior .km-city-districts button { border:0;box-shadow:inset 2px 0 var(--district);background:linear-gradient(90deg,#a6c2e110,transparent);min-width:0; }
#km-city-interior .km-city-labels button { border:0!important;background:linear-gradient(90deg,#081320cc,#08132066,transparent);text-shadow:0 0 8px #8bc9f477;box-shadow:inset 0 -1px #badbfa30;border-radius:0;padding:7px 12px; }
.km-city-venue { background:linear-gradient(105deg,#081321fa 15%,#0b1525f8 82%,#0b1525eb); }
.km-city-venue[data-venue=gallery]::before { background:linear-gradient(90deg,#98e5d9bb,transparent);box-shadow:0 0 15px #82d9c966; }
.km-city-venue[data-venue=cinema]::before { background:linear-gradient(90deg,#e5c58dbb,transparent);box-shadow:0 0 15px #e5c58d55; }
.km-city-studio header { background:#0a1423; }
.km-city-venue header>div,.km-city-top>div,.km-city-inspector { min-width:0; }
.km-city-venue h3,.km-city-venue small,.km-city-venue p,.km-city-directory b { overflow-wrap:anywhere; }
.km-venue-actions { flex:none;gap:10px; }.km-venue-actions label { min-width:0;display:flex;align-items:center;gap:5px;flex-wrap:wrap; }
.km-venue-actions select { margin:0;max-width:min(180px,100%); }.km-venue-actions input { margin-left:0!important; }
.km-venue-layout { min-height:0;grid-template-columns:minmax(120px,180px) minmax(0,1fr);overflow:hidden; }
.km-venue-list,.km-venue-view { min-height:0;overscroll-behavior:contain; }
.km-venue-view img,.km-venue-view video { max-height:min(340px,34dvh); }.km-venue-view table { table-layout:fixed;width:100%; }.km-venue-view td { overflow-wrap:anywhere; }
.km-city-venue>[data-venue-status] { flex:none;max-height:54px;overflow:auto; }
.km-city-venue header,.km-city-venue>[data-venue-note] { flex:none; }.km-city-venue header>button,.km-city-top>button { flex:none; }
.km-venue-open .km-city-labels,.km-venue-open .km-city-pad,.km-venue-open .km-city-inspector,.km-venue-open .km-city-studio { visibility:hidden;pointer-events:none; }
.km-city-directory { min-height:0; }.km-city-directory>header,.km-city-districts,.km-city-directory>input { flex:none; }.km-city-directory nav { min-height:0; }
.km-city-bottom { min-width:0; }.km-city-bottom>div { min-width:0; }.km-city-instructions { flex:1;justify-content:center; }
/* Only the additive night-city explorer opts in to a wrapping action bar. */
.km-city-enabled .km-x-bar { flex-wrap:wrap;height:auto;min-height:44px;gap:6px;padding:8px; }
.km-city-enabled .km-x-bar .km-x-crumb { flex:1 1 100%;min-width:0;overflow-wrap:anywhere; }
.km-city-enabled .km-x-main { min-width:0; }.km-city-enabled .km-x-bar button { max-width:100%;white-space:normal; }
@media(max-width:1100px){.km-city-instructions{display:none!important}.km-city-life-readout{display:none}.km-city-venue{left:250px;right:2%;width:auto}.km-city-directory{left:2%;width:210px}.km-city-studio{right:2%;max-width:48%}}
@media(max-width:850px){.km-city-venue{left:3%;right:3%;width:auto}.km-venue-open .km-city-directory{visibility:hidden;pointer-events:none}.km-city-top small{letter-spacing:.08em}.km-city-venue h3{font-size:22px}.km-venue-layout{grid-template-columns:minmax(110px,140px) minmax(0,1fr)}}
@media(max-height:650px){.km-city-directory{top:112px;bottom:100px;max-height:none;padding:10px}.km-city-districts{grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}.km-city-directory header{margin-bottom:8px}.km-city-directory nav{margin-top:8px}.km-city-venue{top:100px;bottom:90px;padding:14px}.km-city-venue>[data-venue-note]{font-size:11px;line-height:1.5;max-height:34px;overflow:auto}.km-venue-actions{padding:8px 0;gap:6px}.km-venue-layout{margin-top:10px}.km-city-inspector{bottom:100px;max-height:calc(100% - 215px);overflow:auto}.km-city-studio{top:110px;bottom:95px}.km-city-pad{bottom:100px;left:calc(2% + 225px);grid-template-columns:repeat(3,44px);grid-template-rows:repeat(2,44px)}}
@media(max-width:700px){.km-city-directory{width:180px}.km-city-top{gap:10px;inset:15px 3% auto}.km-city-top h2{font-size:20px}.km-city-top small{font-size:7px}.km-city-top>button{max-width:42%;font-size:10px!important}.km-city-venue{top:100px;bottom:90px}.km-venue-layout{grid-template-columns:100px minmax(0,1fr);gap:8px}.km-venue-actions label{font-size:10px}.km-city-venue header small{font-size:8px}.km-city-inspector{max-width:none;width:calc(94% - 200px)}.km-city-studio{max-width:none;width:calc(94% - 200px)}.km-city-bottom{gap:10px}.km-city-bottom>div{gap:7px}.km-city-bottom b{display:none}.km-city-bottom button{padding:8px!important}.km-city-pad{left:calc(3% + 195px)}}
@media(any-pointer:coarse) and (min-height:651px){.km-city-directory{bottom:255px;max-height:none}.km-city-venue{bottom:110px}.km-city-pad{bottom:115px}.km-city-bottom{bottom:18px}}
@media(prefers-reduced-motion:reduce){#km-city-interior button{transition:none}}
@media(max-width:680px){.km-city-enabled .km-x{display:flex;flex-direction:column;overflow:auto;min-width:0}.km-city-enabled .km-x-tree{flex:none;max-height:85px;overflow:auto}.km-city-enabled .km-x-main{flex:none;min-height:280px;overflow:visible}.km-city-enabled .km-x-bar{flex:none}.km-city-enabled .km-x-body{min-height:100px}.km-city-enabled .km-x-detail{flex:none;max-height:180px;overflow:auto}}
@media(any-pointer:coarse) and (max-height:650px){.km-city-directory{bottom:210px;overflow:auto;overscroll-behavior:contain}.km-city-directory nav{flex:none;min-height:60px}.km-city-pad{left:2%;bottom:100px}.km-city-inspector{left:calc(2% + 200px);right:3%;width:auto;max-width:none}}
@media(any-pointer:coarse) and (max-height:650px){#km-city-interior .km-city-pad button{min-width:44px;max-width:44px;width:44px;min-height:44px}}

/* ===== 2026-11-04 · KMind night language (see handoff/设计规则_夜间与平面皮肤.md) =====
   The city interior is night-only. It now speaks the native night: graphite, glass layers without frames, KMind type,
   blue for what you can act on, cyan for what is live, a restrained hue per public venue (dot + entrance light), no amber. */
#km-city-interior { --city-line:rgba(var(--k-layer-rgb,150,180,230),.12); --city-glass:rgba(10,13,19,.74); --city-glass2:rgba(12,15,22,.9);
  --city-acc:var(--k-acc,#3B82FF); --city-acc-rgb:var(--k-acc-rgb,59,130,255); --city-live:var(--k-ok,#5CC8FF);
  background:#05070B; color:var(--k-ink,#F2F5F9); font:13px/1.5 "Inter Tight","Plex SC",-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif; }
#km-city-interior :is(button,input,select,textarea) { font-family:inherit; }
.km-city-vignette { background:radial-gradient(120% 90% at 50% 45%,transparent 55%,rgba(3,4,6,.72)),linear-gradient(rgba(3,4,6,.55),transparent 18% 80%,rgba(3,4,6,.7)); }
.km-city-top { inset:26px 3% auto; }
.km-city-top > div { border:0; padding-left:0; }
.km-city-top small { color:var(--k-mute,#8E98A8); }
.km-city-top h2 { font-size:24px; font-weight:600; letter-spacing:.02em; margin:4px 0 4px; text-shadow:0 0 28px rgba(var(--city-acc-rgb),.35); }
.km-city-top p { color:var(--k-mute,#8E98A8); font-size:12px; }
/* every control: a pill of light; the selected one glows */
#km-city-interior button { border:0; border-radius:999px; background:rgba(var(--k-layer-rgb,150,180,230),.09); color:var(--k-ink2,#C3CCD8);
  font-size:12.5px; font-weight:500; padding:8px 14px; box-shadow:none; }
#km-city-interior button:hover { background:rgba(var(--city-acc-rgb),.18); color:var(--k-ink,#F2F5F9); box-shadow:none; }
#km-city-interior button.selected { background:rgba(var(--city-acc-rgb),.22); color:var(--k-ink,#F2F5F9); box-shadow:0 0 20px -8px rgba(var(--city-acc-rgb),.95); }
#km-city-interior :is(button,input,select):focus-visible { outline:0; box-shadow:var(--k-focus,0 0 0 2px rgba(59,130,255,.25),0 0 16px rgba(59,130,255,.55)); }
#km-city-interior input { border:0; border-radius:10px; background:rgba(var(--k-layer-rgb,150,180,230),.075); color:var(--k-ink,#F2F5F9); padding:9px 12px; font-size:12.5px; }
#km-city-interior input::placeholder { color:var(--k-dim,#7A8494); }
/* panels: glass, rounded, no frame; the top light carries the venue's hue */
.km-city-directory,.km-city-inspector,.km-city-studio,.km-city-venue { border:0; border-radius:18px; background:var(--city-glass); backdrop-filter:blur(20px) saturate(1.15);
  -webkit-backdrop-filter:blur(20px) saturate(1.15); box-shadow:0 24px 70px -28px rgba(0,0,0,.8); }
.km-city-directory::before,.km-city-inspector::before,.km-city-studio::before,.km-city-venue::before { left:0; right:0; top:0; height:120px; border-radius:18px 18px 0 0; box-shadow:none;
  background:radial-gradient(70% 100% at 12% 0%,rgba(var(--city-acc-rgb),.12),transparent 70%); }
.km-city-venue { --venue:var(--city-acc); background:var(--city-glass2); }
.km-city-venue::before { background:radial-gradient(60% 100% at 10% 0%,color-mix(in srgb,var(--venue) 22%,transparent),transparent 72%); }
.km-city-venue[data-venue=library] { --venue:#7AA2FF; } .km-city-venue[data-venue=gallery] { --venue:#5CC8FF; } .km-city-venue[data-venue=cinema] { --venue:#A58BFF; }
.km-city-venue[data-venue=plaza] { --venue:#D9E4F5; } .km-city-venue[data-venue=hub] { --venue:#8C9BFF; } .km-city-venue[data-venue=launch] { --venue:#BCC9E2; }
.km-city-venue[data-venue]::before { box-shadow:none; }
.km-city-directory { padding:18px 16px; }
.km-city-directory header b { font-weight:600; letter-spacing:0; }
.km-city-directory header span { color:var(--k-mute,#8E98A8); font:11px var(--k-mono,monospace); }
#km-city-interior .km-city-districts button { box-shadow:none; background:rgba(var(--k-layer-rgb,150,180,230),.06); border-radius:10px; display:flex; align-items:center; gap:8px; padding:8px 10px; font-size:12px; }
#km-city-interior .km-city-districts button::before { content:''; flex:none; width:7px; height:7px; border-radius:50%; background:var(--district); box-shadow:0 0 10px var(--district); }
#km-city-interior .km-city-districts button:hover { background:rgba(var(--k-layer-rgb,150,180,230),.12); }
#km-city-interior .km-city-directory nav button { border-radius:12px; padding:9px 12px; background:transparent; }
#km-city-interior .km-city-directory nav button:hover { background:rgba(var(--k-layer-rgb,150,180,230),.07); }
#km-city-interior .km-city-directory nav button.selected { background:rgba(var(--city-acc-rgb),.14); box-shadow:inset 2px 0 0 var(--city-acc),inset 22px 0 26px -22px rgba(var(--city-acc-rgb),.8); }
.km-city-directory nav b { font-weight:500; color:var(--k-ink,#F2F5F9); }
.km-city-directory nav small,.km-city-directory nav p { color:var(--k-mute,#8E98A8); }
/* labels in the scene: small glass pills; a landmark carries its venue dot */
#km-city-interior .km-city-labels button { border-radius:999px!important; padding:4px 10px; font-size:11px; color:var(--k-ink2,#C3CCD8); text-shadow:none;
  background:rgba(6,8,12,.62)!important; backdrop-filter:blur(6px); box-shadow:inset 0 0 0 .5px rgba(var(--k-layer-rgb,150,180,230),.18)!important; }
#km-city-interior .km-city-labels button[data-city-landmark] { display:inline-flex; align-items:center; gap:6px; color:var(--k-ink,#F2F5F9); }
#km-city-interior .km-city-labels button[data-city-landmark]::before { content:''; width:6px; height:6px; border-radius:50%; background:var(--district,#9FB4D8); box-shadow:0 0 8px var(--district,#9FB4D8); }
#km-city-interior .km-city-labels button.selected { color:#fff; background:rgba(var(--city-acc-rgb),.45)!important; box-shadow:0 0 18px -4px rgba(var(--city-acc-rgb),.9)!important; }
.km-city-crosshair { color:rgba(var(--k-layer-rgb,150,180,230),.4); font-weight:200; }
.km-city-inspector { padding:20px 20px 18px; }
.km-city-inspector small { color:var(--k-mute,#8E98A8); letter-spacing:0; font-size:11px; }
.km-city-inspector h3 { font-size:20px; font-weight:600; margin:6px 0 8px; }
.km-city-inspector p { color:var(--k-ink2,#C3CCD8); }
.km-city-inspector p:empty { display:none; }
.km-city-inspector > div { gap:6px; margin-top:14px; }
#km-city-interior .km-city-inspector [data-city-visit] { background:var(--city-acc); color:#fff; }
.km-city-bottom { border:0; padding-top:0; }
.km-city-bottom b { color:var(--k-ink2,#C3CCD8); font-size:12px; }
.km-city-bottom span { color:var(--k-mute,#8E98A8); font:11px var(--k-mono,monospace); }
.km-city-instructions { color:var(--k-mute,#8E98A8); font-size:11px; display:flex; align-items:center; gap:6px; }
.km-city-instructions kbd { font:10px var(--k-mono,monospace); color:var(--k-ink2,#C3CCD8); background:rgba(var(--k-layer-rgb,150,180,230),.1); border-radius:6px; padding:3px 7px; margin-left:10px; }
.km-city-life-readout { color:var(--k-dim,#7A8494)!important; font-size:11px!important; border:0!important; background:none!important; letter-spacing:0!important; }
#km-city-interior .km-city-pad button { border-radius:16px; background:rgba(10,13,19,.66); backdrop-filter:blur(10px); font-size:16px; }
#km-city-interior .km-city-pad button.pressed { background:rgba(var(--city-acc-rgb),.35); box-shadow:0 0 18px -4px rgba(var(--city-acc-rgb),.9); }
/* studio */
.km-city-studio { padding:18px; }
.km-city-studio header { background:transparent; backdrop-filter:none; }
.km-city-studio h3 { font-weight:600;font-size:18px;line-height:1.35;font-family:inherit; }
.km-city-studio small,.km-city-studio label { color:var(--k-mute,#8E98A8); letter-spacing:0; }
#km-city-interior .km-city-form-grid button { border-radius:14px; background:rgba(var(--k-layer-rgb,150,180,230),.05); }
#km-city-interior .km-city-form-grid button:hover { background:rgba(var(--k-layer-rgb,150,180,230),.1); }
#km-city-interior .km-city-form-grid button[aria-pressed=true] { background:rgba(var(--city-acc-rgb),.16); box-shadow:0 0 0 1px rgba(var(--city-acc-rgb),.35),0 0 24px -10px rgba(var(--city-acc-rgb),.95); }
.km-city-form-grid svg { fill:rgba(5,7,11,.7); stroke:#9FB4D8; }
.km-city-form-grid [aria-pressed=true] svg { stroke:#DCE8FF; }
.km-city-form-grid b { color:var(--k-ink,#F2F5F9); }
.km-city-studio select { border:0; border-radius:10px; background:rgba(var(--k-layer-rgb,150,180,230),.075); color:var(--k-ink,#F2F5F9); }
#km-city-interior .km-city-file.kx-file { border-radius:999px; padding:8px 14px; background:rgba(var(--k-layer-rgb,150,180,230),.1); color:var(--k-ink2,#C3CCD8); margin:12px 0 6px; width:max-content; max-width:100%; }
#km-city-interior .km-city-file.kx-file:hover { background:rgba(var(--city-acc-rgb),.18); color:var(--k-ink,#F2F5F9); }
/* venues: a right-hand sheet, never two thirds of the screen */
.km-city-venue { width:min(720px,58%); padding:22px 24px; }
.km-city-venue small { color:color-mix(in srgb,var(--venue) 70%,#C3CCD8); letter-spacing:0; font-size:11px; }
.km-city-venue h3 { font-size:24px; font-weight:600; letter-spacing:.02em; margin:4px 0 2px; }
.km-city-venue p { color:var(--k-ink2,#C3CCD8); }
.km-city-venue>[data-venue-note]:empty,.km-city-venue>[data-venue-status]:empty { display:none; }
.km-venue-actions { border:0; padding:14px 0 4px; }
.km-venue-actions label { color:var(--k-mute,#8E98A8); font-size:12px; }
.km-venue-actions select { border:0; border-radius:10px; background:rgba(var(--k-layer-rgb,150,180,230),.075); color:var(--k-ink,#F2F5F9); min-height:34px; padding:6px 10px; }
#km-city-interior .km-venue-actions .kx-file { border-radius:999px; padding:8px 14px; background:rgba(var(--k-layer-rgb,150,180,230),.1); color:var(--k-ink2,#C3CCD8); }
#km-city-interior .km-venue-actions .kx-file:hover { background:rgba(var(--city-acc-rgb),.18); color:var(--k-ink,#F2F5F9); }
.km-venue-layout { gap:18px; margin-top:14px; }
#km-city-interior .km-venue-list button { border-radius:12px; background:rgba(var(--k-layer-rgb,150,180,230),.05); padding:10px 12px; }
#km-city-interior .km-venue-list button:hover { background:rgba(var(--k-layer-rgb,150,180,230),.1); }
#km-city-interior .km-venue-list button.selected,#km-city-interior .km-venue-list button[aria-current=true] { background:color-mix(in srgb,var(--venue) 16%,transparent); box-shadow:inset 2px 0 0 var(--venue); }
.km-venue-view { border-radius:14px; background:rgba(var(--k-layer-rgb,150,180,230),.035); padding:14px 16px; }
.km-venue-view > p:only-child { color:var(--k-dim,#7A8494); }
.km-venue-view h4 { font-weight:600; }
.km-venue-view img,.km-venue-view video { border-radius:12px; background:#030406; }
.km-venue-view pre { font-size:13px;line-height:1.85;font-family:inherit; color:var(--k-ink2,#C3CCD8); }
.km-venue-view td { border:0; border-bottom:1px solid rgba(var(--k-layer-rgb,150,180,230),.1); }
@media(max-width:1000px) { .km-city-venue { width:auto; } }
@media(any-pointer:coarse) { #km-city-interior button { min-height:44px; } }
.km-city-venue[data-venue]::before { box-shadow:none; background:radial-gradient(60% 100% at 10% 0%,color-mix(in srgb,var(--venue) 20%,transparent),transparent 72%); }
.km-city-venue { bottom:auto; max-height:calc(100% - 245px); }
.km-venue-layout { flex:0 1 auto; }
.km-venue-view:has(> p:only-child) { background:none; padding-top:10px; }
@media(max-height:650px) { .km-city-venue { max-height:calc(100% - 190px); } }
.km-city-crosshair,.km-city-studio select { font-family:inherit; }
#km-city-interior :is([data-venue-close],[data-city-design-close]) { width:34px; height:34px; min-height:0; padding:0; display:grid; place-items:center; font-size:15px; }
@media(any-pointer:coarse) { #km-city-interior :is([data-venue-close],[data-city-design-close]) { width:44px; height:44px; } }
/* short screens keep the directory list reachable: compact district pills and padding (as before the restyle) */
@media(max-height:650px) { .km-city-directory { padding:12px; } #km-city-interior .km-city-districts button { padding:5px 8px; min-height:28px; font-size:11px; border-radius:8px; } #km-city-interior .km-city-directory nav button { padding:7px 10px; } }
@media(max-height:650px) and (any-pointer:coarse) { #km-city-interior .km-city-districts button { min-height:44px; } }
@media(max-width:700px) { #km-city-interior .km-city-districts button { gap:0; padding:6px 5px 6px 8px; font-size:11px; border-radius:6px; box-shadow:inset 2px 0 0 var(--district); } #km-city-interior .km-city-districts button::before { display:none; } }
/* Hikos（修士走查 #19874 ②）：一栋楼 = 一个目录，检查器里列楼层（文件） */
.km-city-inspector .km-city-floors { display:flex; flex-direction:column; gap:4px; max-height:220px; overflow:auto; margin-top:10px; padding-right:4px; }
.km-city-inspector .km-city-floors button { display:flex; flex-direction:column; align-items:flex-start; gap:2px; width:100%; padding:7px 9px; border:1px solid #a695c03a; border-radius:3px; background:#ffffff08; color:inherit; text-align:left; cursor:pointer; }
.km-city-inspector .km-city-floors button:hover { background:#ffffff14; border-color:#bda5d5; }
.km-city-inspector .km-city-floors button b { font-weight:500; font-size:12.5px; overflow-wrap:anywhere; }
.km-city-inspector .km-city-floors button small { font-size:10px; letter-spacing:0; color:#9a8fb0; }
.km-city-inspector .km-city-floors p { margin:4px 0 0; font-size:11px; color:#9a8fb0; }
/* 任务 1f6bf980 · 城页头右侧两个钮（编辑地图 · 返回）并排；编辑地图时（section[data-city-edit]，src/addons/editor.js 的 city 目标接管）城自己的页头 / 底栏 /
   属性卡 / 外观工作室 / 触屏方向键收起，导览与名牌还在；被布局移出地图的楼在导览里淡显；拖着一栋楼时光标是抓手 */
.km-city-top > .km-city-top-actions { border-left:0; padding-left:0; display:flex; gap:8px; align-items:flex-start; }
#km-city-interior[data-city-edit] :is(.km-city-top,.km-city-bottom,.km-city-inspector,.km-city-studio,.km-city-pad,.km-city-crosshair,.km-city-life-readout) { display:none!important; }
#km-city-interior[data-city-edit] .km-city-directory { top:68px; max-height:calc(100% - 140px); }
#km-city-interior .km-city-directory nav button.km-city-off { opacity:.55; }
#km-city-interior .km-city-directory nav button.km-city-off b { text-decoration:line-through; text-decoration-color:#a195b1; }
#km-city-interior canvas.km-city-holding { cursor:grabbing; }

/* ==== src/addons/plaza.css ==== */
#km-plaza-dialog { padding:0; width:min(1040px,94vw); height:min(850px,92dvh); max-width:94vw; max-height:92dvh; border:1px solid #9381b060; border-radius:14px 3px 14px 3px; background:#0c101c; color:#e9e2f0; box-shadow:0 25px 100px #0009; }
#km-plaza-dialog::backdrop { background:#040611a8; backdrop-filter:blur(5px); }
#km-plaza-dialog * { box-sizing:border-box; }
.km-plaza-shell { display:flex; flex-direction:column; height:100%; min-height:0; }
.km-plaza-top { display:flex; justify-content:space-between; padding:22px 28px; border-bottom:1px solid #a494b72e; }
.km-plaza-top b { display:block; margin-top:5px; font-size:21px; font-weight:500; letter-spacing:.1em; }
.km-plaza-top small,.km-plaza-content small { font-size:10px; color:#b9a9cf; letter-spacing:.12em; }
#km-plaza-dialog button { border:1px solid #a494b75c; background:#151b2b; border-radius:5px; padding:9px 14px; color:#e4daee; font:12px system-ui; cursor:pointer; }
#km-plaza-dialog button:hover { background:#30273d; border-color:#c1a7dd; }
.km-plaza-tabs { display:flex; gap:8px; padding:14px 28px; flex:none; flex-wrap:wrap; }
#km-plaza-dialog .km-plaza-tabs button[aria-selected=true] { background:#3b2e4c; border-color:#c3abd6; }
.km-plaza-content { flex:1; min-height:0; overflow:auto; padding:0 28px 25px; scrollbar-width:thin; }
.km-plaza-content h2 { font-size:26px; font-weight:450; margin:12px 0; }
.km-plaza-content h3 { font-size:16px; font-weight:500; margin:15px 0; }
.km-plaza-content p { color:#b9aec9; font-size:12px; line-height:1.8; white-space:pre-wrap; overflow-wrap:anywhere; }
.km-plaza-content label { display:grid; gap:8px; font-size:12px; color:#bfb0d2; margin:15px 0; }
#km-plaza-dialog input:not([type=checkbox]),#km-plaza-dialog textarea,#km-plaza-dialog select { width:100%; min-width:0; background:#090e1a; border:1px solid #9e8fb357; color:#ede6f6; padding:10px; border-radius:4px; font:12px system-ui; }
#km-plaza-dialog textarea { min-height:90px; resize:vertical; }
.km-plaza-hero { height:225px; position:relative; overflow:hidden; border:1px solid #a894bd55; border-radius:8px; background:radial-gradient(ellipse at 70% 20%,#38304c,#0b1424 75%); }
.km-plaza-hero svg,.km-plaza-hero img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; color:#c0b4dc; opacity:.65; }
.km-plaza-hero > div { position:absolute; inset:0; padding:75px 26px 24px; background:linear-gradient(transparent,#080e1ded); }
.km-plaza-hero span { font:11px ui-monospace,monospace; color:#dfc79e; }
.km-plaza-hero h2 { font-size:30px; margin:12px 0 4px; }
.km-plaza-welcome,.km-plaza-manage { display:grid; grid-template-columns:1.1fr 1fr; gap:28px; margin:25px 0; }
.km-plaza-welcome article { border-left:1px solid #9c82ba70; padding-left:18px; }
.km-plaza-episodes article,.km-plaza-station { display:flex; gap:16px; align-items:center; border-top:1px solid #8a799a33; padding:16px 0; }
.km-plaza-episodes article>span { color:#9687ad; font:12px monospace; }
.km-plaza-episodes article>div,.km-plaza-station>div { flex:1; min-width:0; }
.km-plaza-episodes b { display:block; font-size:13px; font-weight:500; overflow-wrap:anywhere; }
.km-plaza-episodes small { display:block; margin-top:8px; }
.km-plaza-empty { padding:24px 0; }
.km-plaza-number { font:14px monospace!important; color:#dfc79e!important; }
.km-plaza-check { display:flex!important; align-items:center; }
.km-plaza-check input { width:18px; height:18px; }
.km-plaza-tuner { padding:20px 0; }
.km-plaza-dial { overflow:hidden; white-space:nowrap; color:#ccbadb; padding:25px 0; font:24px monospace; border-bottom:1px solid #a493b758; margin-bottom:22px; }
.km-plaza-tuner form { display:flex; gap:10px; }
.km-plaza-tuner button { flex:none; }
.km-plaza-signal { font-size:35px; color:#d2bdde; }
.km-plaza-connect { max-width:620px; margin:12px auto; }
.km-plaza-connect form>div { display:flex; gap:10px; margin:18px 0; }
.km-plaza-player { flex:none; max-height:36%; overflow:auto; padding:12px 28px; border-top:1px solid #b7a0cd66; background:#17172a; }
.km-plaza-player>div { display:flex; justify-content:space-between; align-items:center; gap:12px; margin-bottom:8px; }
.km-plaza-player b { font-size:12px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.km-plaza-player audio { width:100%; height:38px; }
.km-plaza-player video { display:block; width:100%; max-height:180px; background:#000; }
.km-plaza-status { flex:none; padding:10px 28px; min-height:36px; font-size:11px; color:#d6c49f; border-top:1px solid #a494b72e; }
#km-plaza-surface { position:absolute; z-index:10; transform:translate(-50%,-50%); display:flex; gap:5px; align-items:center; padding:8px; background:none; border:0; color:#eee5f7; font:600 12px system-ui; text-shadow:0 1px 4px #000,0 0 6px #000; }
.km-channel-banner { position:relative; height:154px; flex:none; margin:-8px -4px 14px; border-radius:8px; overflow:hidden; color:#f1e9f9; background:radial-gradient(ellipse at 70% 10%,#453251,#111b2e); }
.km-channel-banner>svg,.km-channel-banner>img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; color:#c3b0d9; opacity:.65; }
.km-channel-banner>div { position:absolute; inset:0; padding:18px 13px; display:flex; flex-direction:column; justify-content:center; background:linear-gradient(transparent,#0a0e1dd9); }
.km-channel-banner small { font-size:9px; letter-spacing:.08em; }
.km-channel-banner b { font-size:19px; margin:7px 0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.km-channel-banner span { font:9px monospace; color:#dac49b; }
.km-channel-banner footer { position:absolute; bottom:5px; left:8px; right:8px; display:flex; gap:8px; }
.km-channel-banner footer button { font-size:10px; color:#e4d8ec; background:#11182cb3; border-radius:4px; padding:4px 6px; }
.km-city-life-readout { position:absolute; top:38px; left:50%; transform:translateX(-50%); color:#b9a9cc; font-size:10px; border-bottom:1px solid #b3a0ca44; padding:9px 15px; pointer-events:none; }
@media(max-width:750px){.km-plaza-top{padding:16px}.km-plaza-tabs{padding:10px 16px;gap:5px}.km-plaza-content{padding:0 16px 18px}.km-plaza-welcome,.km-plaza-manage{grid-template-columns:1fr;gap:18px}.km-plaza-hero{height:190px}.km-plaza-status{padding:10px 16px}.km-city-life-readout{top:120px;left:50%;font-size:9px}}
@media(any-pointer:coarse){#km-plaza-dialog button{min-height:44px}#km-plaza-surface{min-height:44px}}
/* Banners remain within the native sidebar, including narrow panels and long channel names. */
.km-channel-banner { margin:0 0 14px;width:100%;min-width:0;height:178px;border-radius:0;background:#08101d;isolation:isolate; }
.km-channel-banner>img { opacity:.88; }.km-channel-banner>div { padding:20px 14px 48px;background:linear-gradient(0deg,#07101df5,transparent 90%); }
.km-channel-banner::after { content:'';position:absolute;left:8px;right:8px;bottom:0;height:1px;background:linear-gradient(90deg,transparent,#8ecaffaa,#ba9cdd77,transparent);box-shadow:0 0 16px #7bbcff88;pointer-events:none; }
.km-channel-banner small,.km-channel-banner span { overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }.km-channel-banner b { line-height:1.35;min-width:0; }
.km-channel-banner footer { flex-wrap:wrap;bottom:9px;gap:5px; }.km-channel-banner footer button { min-height:30px;max-width:100%;white-space:normal;background:#091829b8; }
.km-plaza-hero h2 { overflow-wrap:anywhere;font-size:clamp(20px,3vw,30px); }.km-plaza-hero>div { padding-top:35px;display:flex;flex-direction:column;justify-content:end; }.km-plaza-hero h2 { max-height:100px;overflow:auto; }
.km-plaza-manage,.km-plaza-welcome { grid-template-columns:minmax(0,1.1fr) minmax(0,1fr); }.km-plaza-station b { overflow-wrap:anywhere; }
.km-plaza-status { overflow-wrap:anywhere;max-height:72px;overflow:auto; }.km-plaza-top>div { min-width:0; }.km-plaza-top b { overflow-wrap:anywhere; }.km-plaza-top button { flex:none;align-self:start; }
@media(max-width:750px){.km-plaza-manage,.km-plaza-welcome{grid-template-columns:minmax(0,1fr)}.km-plaza-tabs{gap:5px}.km-plaza-episodes article{flex-wrap:wrap}.km-plaza-connect form>div{flex-wrap:wrap}}
@media(any-pointer:coarse){.km-channel-banner{height:190px}.km-channel-banner footer button{min-height:44px}.km-channel-banner>div{padding-bottom:60px}}
@media(max-height:550px){.km-plaza-top{padding:12px 18px}.km-plaza-top b{font-size:17px}.km-plaza-tabs{padding:8px 18px}.km-plaza-content{padding:0 18px 12px}.km-plaza-status{min-height:25px;padding:6px 18px}}
/* V42 · the default banner follows the skin: its sky, its accent, its ink (night and the flat-map skins keep their own rules in language.css).
   data-hero says what fills it: custom (set for the channel) · provider · skin (the pack's picture) · world (a still of the skin's city) · sample · art.
   Hikos: scoped to [data-skinned] (a pack with a world or a banner, or an imported pack — src/addons/plaza.js) so day / 经典 / night / the flat maps look as before. */
html:not([data-skin=night]) .km-channel-banner[data-skinned]{border-radius:14px;margin:4px 0 12px;height:168px;color:var(--k-ink);background:var(--k-ubg,var(--k-bg2,#10141c))}
html:not([data-skin=night]) .km-channel-banner[data-skinned]>svg{color:var(--k-acc);opacity:.5}
html:not([data-skin=night]) .km-channel-banner[data-skinned]>img{opacity:1}
html:not([data-skin=night]) .km-channel-banner[data-skinned]>div{padding:18px 14px 50px;background:linear-gradient(0deg,color-mix(in srgb,var(--k-bg) 95%,transparent),color-mix(in srgb,var(--k-bg) 45%,transparent) 62%,transparent)}
html:not([data-skin=night]) .km-channel-banner[data-skinned] small{font-size:11px;letter-spacing:0;color:var(--k-mute)}
html:not([data-skin=night]) .km-channel-banner[data-skinned] b{font-size:19px;font-weight:650;color:var(--k-ink)}
html:not([data-skin=night]) .km-channel-banner[data-skinned] span{font:500 11px var(--k-mono,monospace);color:var(--k-acc)}
html:not([data-skin=night]) .km-channel-banner[data-skinned]::after{left:14px;right:14px;height:1px;background:linear-gradient(90deg,transparent,rgba(var(--k-acc-rgb),.75),transparent);box-shadow:0 0 14px rgba(var(--k-acc-rgb),.4)}
html:not([data-skin=night]) .km-channel-banner[data-skinned] footer{left:12px;right:12px;bottom:10px;gap:6px}
html:not([data-skin=night]) .km-channel-banner[data-skinned] footer button{border:0;border-radius:999px;padding:5px 11px;min-height:28px;background:color-mix(in srgb,var(--k-bg) 74%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--k-ink);font-size:11.5px;font-weight:500}
html:not([data-skin=night]) .km-channel-banner[data-skinned] footer button:hover{background:rgba(var(--k-acc-rgb),.22)}
/* 任务 15f6cb6a（道哥 #26164 ①）· 亮色底的皮肤（html[data-theme=day]：白昼 / 经典 / 经纬 / 三款 3D 包 / 导入的亮色包）横幅不再是一块夜景：
   底、字、按钮、底线都走皮肤 token，与上面 V42 的 [data-skinned] 同一副面孔。选择器故意不带 html（0,2,0）：压过上面的默认夜景（0,1,x），
   让给 [data-skinned]（0,3,1）与 language.css 里三款平面皮肤自己的标牌（0,2,1、更晚加载）；夜间底的皮肤（data-theme=night）不进来。 */
[data-theme=day] .km-channel-banner{color:var(--k-ink);background:var(--k-ubg,var(--k-bg2,#F7F9FE))}
[data-theme=day] .km-channel-banner>svg{color:var(--k-acc);opacity:.5}
[data-theme=day] .km-channel-banner>img{opacity:1}
[data-theme=day] .km-channel-banner>div{background:linear-gradient(0deg,color-mix(in srgb,var(--k-bg) 95%,transparent),color-mix(in srgb,var(--k-bg) 45%,transparent) 62%,transparent)}
[data-theme=day] .km-channel-banner small{color:var(--k-mute)}
[data-theme=day] .km-channel-banner b{color:var(--k-ink)}
[data-theme=day] .km-channel-banner span{color:var(--k-acc)}
[data-theme=day] .km-channel-banner::after{background:linear-gradient(90deg,transparent,rgba(var(--k-acc-rgb),.75),transparent);box-shadow:0 0 14px rgba(var(--k-acc-rgb),.4)}
[data-theme=day] .km-channel-banner footer button{color:var(--k-ink);background:color-mix(in srgb,var(--k-bg) 74%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
[data-theme=day] .km-channel-banner footer button:hover{background:rgba(var(--k-acc-rgb),.22)}
/* 同一单 ②：迎宾广场 / 电台对话框（#km-plaza-dialog）在亮色底的皮肤里是浅色表单，不再是紫夜色；夜间（language.css 的玻璃）与三款平面皮肤（白纸）各有自己的规则，
   这里的选择器都比它们低一级或更早，不会压过去。颜色只用 tokens.css 的 --k-*。 */
[data-theme=day] #km-plaza-dialog{border-color:var(--k-line);background:var(--k-bg);color:var(--k-ink);box-shadow:0 24px 80px -20px rgba(var(--k-sh),.35)}
[data-theme=day] #km-plaza-dialog::backdrop{background:rgba(24,32,40,.32)}   /* ::backdrop 在旧内核里拿不到 html 上的变量，这里写死一层中性暗纱 */
[data-theme=day] .km-plaza-top,[data-theme=day] .km-plaza-status{border-color:var(--k-line2)}
[data-theme=day] :is(.km-plaza-top,.km-plaza-content) small{color:var(--k-mute)}
[data-theme=day] #km-plaza-dialog button{border-color:var(--k-line);background:var(--k-bg2);color:var(--k-ink2)}
[data-theme=day] #km-plaza-dialog button:hover{border-color:var(--k-acc);background:var(--k-hover);color:var(--k-ink)}
[data-theme=day] #km-plaza-dialog .km-plaza-tabs button[aria-selected=true]{border-color:var(--k-acc);background:var(--k-sel);color:var(--k-ink)}
[data-theme=day] #km-plaza-dialog :is(button[type=submit],form[data-p-search] button,[data-p-play]){border-color:var(--k-acc);background:var(--k-acc);color:var(--k-on-acc,#fff)}
[data-theme=day] .km-plaza-content p{color:var(--k-ink2)}
[data-theme=day] .km-plaza-content label{color:var(--k-ink2)}
[data-theme=day] #km-plaza-dialog :is(input:not([type=checkbox]),textarea,select){border-color:var(--k-fline);background:var(--k-bg2);color:var(--k-ink)}
[data-theme=day] #km-plaza-dialog :is(input,textarea,select):focus{outline:0;box-shadow:var(--k-focus)}
[data-theme=day] .km-plaza-hero{border-color:var(--k-line);background:var(--k-ubg,var(--k-bg2))}
[data-theme=day] .km-plaza-hero svg,[data-theme=day] .km-plaza-hero img{color:var(--k-acc);opacity:.5}
[data-theme=day] .km-plaza-hero>div{background:linear-gradient(transparent,color-mix(in srgb,var(--k-bg) 93%,transparent))}
[data-theme=day] .km-plaza-hero span,[data-theme=day] .km-plaza-number,[data-theme=day] .km-plaza-signal{color:var(--k-acc)!important}
[data-theme=day] .km-plaza-welcome article{border-color:var(--k-line)}
[data-theme=day] .km-plaza-episodes article,[data-theme=day] .km-plaza-station,[data-theme=day] .km-plaza-dial{border-color:var(--k-line2)}
[data-theme=day] .km-plaza-episodes article>span,[data-theme=day] .km-plaza-dial,[data-theme=day] .km-plaza-status{color:var(--k-mute)}
[data-theme=day] .km-plaza-player{border-color:var(--k-line2);background:var(--k-bg2)}
.km-channel-banner[data-hero=world]>img{transform-origin:50% 60%;animation:km-banner-drift 38s ease-in-out infinite alternate}
@keyframes km-banner-drift{from{transform:scale(1.02) translate(0,0)}to{transform:scale(1.09) translate(-2%,-1%)}}
@media(prefers-reduced-motion:reduce){.km-channel-banner[data-hero=world]>img{animation:none}}
/* 任务 697f2637（修士 #20239 ②）· 横幅样式：大图（默认）/ 紧凑 / 纯色条；有无与样式在宇宙下拉菜单「横幅…」与横幅右键里设（能管这个宇宙的人） */
html[data-skin] .km-channel-banner[data-style=compact]{height:92px}.km-channel-banner[data-style=compact]>div{padding:10px 14px 34px;justify-content:end}.km-channel-banner[data-style=compact] b{font-size:15px;margin:3px 0}.km-channel-banner[data-style=compact] footer{bottom:6px}
html[data-skin] .km-channel-banner[data-style=plain]{height:64px;background:linear-gradient(90deg,rgba(var(--k-acc-rgb,20,80,232),.28),rgba(var(--k-acc-rgb,20,80,232),.08))}.km-channel-banner[data-style=plain]>div{padding:8px 14px;justify-content:center;background:none}.km-channel-banner[data-style=plain] b{font-size:14px;margin:2px 0}.km-channel-banner[data-style=plain] small,.km-channel-banner[data-style=plain] span{display:none}.km-channel-banner[data-style=plain] footer{bottom:auto;top:50%;transform:translateY(-50%);left:auto;right:10px}
@media(any-pointer:coarse){.km-channel-banner[data-style=compact]{height:110px}.km-channel-banner[data-style=plain]{height:72px}}
.km-banner-styles{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0 10px}.km-banner-style{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--k-hair,rgba(255,255,255,.12));border-radius:999px;cursor:pointer;font-size:13px}.km-banner-style:has(input:checked){border-color:var(--k-acc,#1450E8);background:rgba(var(--k-acc-rgb,20,80,232),.14)}.km-banner-style:has(input:disabled){opacity:.5;cursor:default}.km-banner-style input{margin:0}

/* 任务 80d1b74f（修士 大厅 #24335）· 宇宙横幅照 Discord 排版：一个宇宙一张，挂在频道栏（aside.channels）最前面、占满栏宽、顶到最上面；
   宇宙名（白字）+ 下拉箭头 + 邀请图标那一行（.serverhead）绝对定位叠在横幅上，星球列表从横幅下沿开始。顶上一层黑色退晕衬底给字垫底，
   不随皮肤变（皮肤只管横幅缺省图）。选择器带 [data-scope=universe] 压过各皮肤给旧「频道横幅」写的外边距 / 圆角 / 高度 / 底线。 */
aside.channels.km-ub{--km-ubh:138px}
aside.channels.km-ub[data-ub-style=compact]{--km-ubh:96px}
aside.channels.km-ub[data-ub-style=plain]{--km-ubh:52px}
html aside.channels>.km-channel-banner[data-scope=universe]{position:relative;flex:none;width:auto;min-width:0;height:var(--km-ubh);margin:0;padding:0;border:0;border-radius:0;border-top-left-radius:inherit;overflow:hidden;isolation:isolate;background:#0b0f18;color:#fff}
html aside.channels>.km-channel-banner[data-scope=universe]>img,html aside.channels>.km-channel-banner[data-scope=universe]>svg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:1}
html aside.channels>.km-channel-banner[data-scope=universe]>svg{opacity:.75}
html aside.channels>.km-channel-banner[data-scope=universe]::after{content:'';position:absolute;left:0;right:0;top:0;bottom:auto;height:min(100%,92px);background:linear-gradient(180deg,rgba(0,0,0,.66),rgba(0,0,0,.3) 52%,rgba(0,0,0,0));box-shadow:none;border:0;pointer-events:none}
html aside.channels>.km-channel-banner[data-scope=universe][data-style=plain]{background:linear-gradient(90deg,rgba(var(--k-acc-rgb,20,80,232),.55),rgba(var(--k-acc-rgb,20,80,232),.18)),#0b0f18}
html body aside.channels.km-ub>.serverhead.serverhead{position:absolute;top:0;left:0;right:0;z-index:2;border-bottom:0!important;background:none!important;box-shadow:none!important;color:#fff!important}
html body aside.channels.km-ub>.serverhead.serverhead>button,html body aside.channels.km-ub>.serverhead.serverhead>button:hover,html body aside.channels.km-ub>.serverhead.serverhead>.km-head-invite{color:#fff!important;background:none!important;text-shadow:0 1px 3px rgba(0,0,0,.6)}
html body aside.channels.km-ub>.serverhead.serverhead>.km-head-invite{border:0!important;box-shadow:none!important;outline-offset:2px}
html body aside.channels.km-ub>.serverhead.serverhead>.km-head-invite:hover{background:rgba(255,255,255,.16)!important}
html body aside.channels.km-ub>.serverhead.serverhead svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.55))}
html body aside.channels.km-ub>.serverhead.serverhead .km-myrole{color:#fff!important;background:rgba(255,255,255,.2)!important;text-shadow:none}
html aside.channels.km-ub>.channel-scroll{padding-top:8px}

/* ==== src/addons/arcade.css ==== */
/* 宇宙增量 · 街机（塔防宿主外壳，src/addons/arcade.js；游戏是引擎模式 src/spatial/runtime/modes/tower-defense.js，第五刀阶段 4）。入口按钮在母星地图右下角，与左下角的缩放工具条对称；
   原位模式（任务 94bbcebe）：容器直接挂在 #hub-view 内，全透明叠合在 3D 空间皮肤地图之上，去掉独立浮层棋盘格窗口。
   颜色走皮肤变量：空间皮肤在 #hub-view 上给了 --ks3-accent / --ks3-paper / --ks3-ink / --ks3-hair，没有时退回 KMind 的 --k-*。夜间不画边框（设计规则 N1）。 */
.hub-play{position:absolute;right:28px;bottom:13px;z-index:3;height:32px;padding:0 16px;border:1px solid var(--ks3-accent,var(--k-acc));border-radius:4px;background:var(--ks3-accent,var(--k-acc));color:var(--ks3-paper,var(--k-on-acc,#fff));font:600 13px/1 inherit;letter-spacing:.3px;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.18);touch-action:manipulation}
/* V41 · the spatial city runs under the dock (#hub-view[data-spatial-skin]{inset:44px 0 0}); the zoom buttons (.ks3-controls) sit at bottom:104px,
   and the play button mirrors them on the right so the dock never covers it on a narrow map (a92b2b95) */
#hub-view[data-spatial-skin] .hub-play{bottom:104px}
.hub-play:hover{filter:brightness(1.08)}
.hub-play:focus-visible{outline:2px solid var(--ks3-accent,var(--k-acc));outline-offset:2px}
.hub-play[hidden]{display:none!important}
html[data-theme=night] .hub-play{border-color:transparent;color:var(--ks3-ground,var(--k-bg))}
/* the spatial scene's hover hint sits where the button is: move it up while the button is shown */
#hub-view.km-arcade-ready .ks3-detail{bottom:54px}
#hub-view[data-spatial-skin].km-arcade-ready .ks3-detail{bottom:146px}
@media(max-width:720px){.hub-play{right:14px;bottom:12px;height:36px;padding:0 14px}#hub-view[data-spatial-skin] .hub-play{bottom:104px}}
@media(pointer:coarse){.hub-play{height:36px}}
/* V44 星港（道哥 #32734）：按钮站在星港页头动作行里（.kmsp-actions，进入 / 外观 / 物理沙盒 之后），长得和邻居一样（galaxy.css .kmsp-btn 的玻璃样式，
   这里把上面的绝对定位与实心底色让回去——arcade.css 在 galaxy.css 之后加载，特异性要压过 .hub-play）；亮着（.on）= 这局开着，和「物理沙盒」一个规矩 */
.hub-play.hub-play-port{position:static;right:auto;bottom:auto;z-index:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:999px;border:1px solid var(--ks3-hair,#CBD4DF);background:color-mix(in srgb,var(--ks3-paper,#fff) 86%,transparent);color:var(--ks3-ink,#2B3340);font:inherit;font-size:12px;font-weight:600;letter-spacing:0;box-shadow:none;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.hub-play.hub-play-port:hover{filter:none;border-color:var(--ks3-accent,#3370FF)}
.hub-play.hub-play-port.on{background:var(--ks3-ink,#2B3340);color:var(--ks3-paper,#fff);border-color:var(--ks3-ink,#2B3340)}
.hub-play.hub-play-port svg{width:13px;height:13px}
html[data-theme=night] .hub-play.hub-play-port{color:var(--ks3-ink,#2B3340)}
html[data-theme=night] .hub-play.hub-play-port.on{color:var(--ks3-paper,#fff)}
@media(max-width:720px){.hub-play.hub-play-port{height:32px;padding:0 12px}}

/* 原位挂载（#hub-view > .km-arcade.km-arcade-insitu；V44 起挂在星港 #km-starport 内，道哥 #32734）：铺满宿主视口，全透明无模态框体，底下的 3D 城市地图完整透出。
   注意（大厅 #25648 ⑤）：gothic-cathedral-3d 等皮肤包在 <style id="km-skin-css"> 中生成了高特异性的
   `:skin body.km-u.km-map-active #kmu :is(.kmw,...) { background: #242e40 !important }`，特异性达 (1,5,2)；
   此处用 `#kmu #hub-view>#kmw-universe-arcade` 3 个 ID 特异性 (3,5,2) + 行内 !important 双保险强制全透明，任何皮肤下绝不遮挡底层 3D 地图。 */
html[data-theme] body #kmu :is(#hub-view,#km-starport)>#kmw-universe-arcade.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed),
:is(#hub-view,#km-starport)>.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed){position:absolute!important;inset:0!important;left:0!important;top:0!important;width:100%!important;height:100%!important;background:transparent!important;background-color:transparent!important;background-image:none!important;border:0!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;pointer-events:none;z-index:4!important}
html[data-theme] body #kmu :is(#hub-view,#km-starport)>#kmw-universe-arcade.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed)>.kmw-head,
:is(#hub-view,#km-starport)>.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed)>.kmw-head{position:absolute;top:10px;right:24px;z-index:6;width:auto;height:34px;box-sizing:border-box;padding:0 10px;border-radius:16px;border:1px solid var(--ks3-hair,var(--k-line));background:color-mix(in srgb,var(--ks3-paper,var(--k-bg)) 86%,transparent)!important;backdrop-filter:blur(8px);pointer-events:auto;gap:6px}
html[data-theme=night] :is(#hub-view,#km-starport)>.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed)>.kmw-head{border-color:transparent}
html[data-theme] body #kmu :is(#hub-view,#km-starport)>#kmw-universe-arcade.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed)>.kmw-body,
:is(#hub-view,#km-starport)>.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed)>.kmw-body{position:absolute;inset:0;background:transparent!important;background-color:transparent!important;pointer-events:none}
html[data-theme] body #kmu :is(#hub-view,#km-starport)>#kmw-universe-arcade.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed) .km-arcade-stage,
:is(#hub-view,#km-starport)>.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed) .km-arcade-stage{position:absolute;inset:0;background:transparent!important;background-color:transparent!important;pointer-events:none}
:is(#hub-view,#km-starport)>.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed)>.kmw-rz{display:none!important}
:is(#hub-view,#km-starport)>.km-arcade.km-arcade-insitu.kmw-collapsed{left:auto!important;right:24px!important;top:10px!important;width:auto!important;min-width:200px;height:36px!important;z-index:6!important}
:is(#hub-view,#km-starport)[data-arcade-playing] .ks3-controls{z-index:6}
/* 游戏开着时地名旗标只淡不隐——这是老 #hub-view 宿主、以及星港上游戏**收起**（.kmw-collapsed，地图要回来看）时的样子；星港上这局展开着的时候，旗标连同页头 / 星球条由
   星港的沉浸态整个收走（道哥 #33336 · 任务 c637379d：#km-starport[data-kmsp-immersive]，galaxy.css；开关 KM.galaxy.port.immersive，arcade.js syncImmersion 驱动） */
:is(#hub-view,#km-starport)[data-arcade-playing] .ks3-labels{pointer-events:none}
:is(#hub-view,#km-starport)[data-arcade-playing] .ks3-labels .ks3-label{opacity:.55;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
/* in the starport the window's own head (title / collapse / close) stands top-centre: the top-right is the starport's action row, the top-left its name */
#km-starport>.km-arcade.km-arcade-insitu[data-arcade-insitu=true]:not(.kmw-collapsed):not(.kmw-maxed)>.kmw-head,#km-starport>.km-arcade.km-arcade-insitu.kmw-collapsed{right:auto!important;left:50%!important;transform:translateX(-50%);top:12px!important}

/* the stage: transparent over the scene; the map underneath takes the pointer (camera, picking), the HUD and the note take theirs */
.km-arcade .kmw-body{overflow:hidden;display:flex;flex-direction:column;background:transparent!important}
.km-arcade-stage{position:relative;flex:1;min-height:0;background:transparent!important;pointer-events:none}
.km-arcade-note{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:grid;gap:10px;justify-items:center;max-width:80%;text-align:center;font-size:13px;color:var(--k-mute);pointer-events:none}
.km-arcade-note[hidden]{display:none}
.km-arcade-note p{margin:0}
.km-arcade-note button{pointer-events:auto;padding:7px 14px;border:1px solid var(--k-line);border-radius:4px;background:var(--k-bg);color:var(--k-ink);font:600 12px/1 inherit;cursor:pointer}
.km-arcade-note button[hidden]{display:none}
.km-arcade[data-arcade-state=playing] .kmw-title{color:var(--k-acc)}
.km-arcade[data-arcade-state=paused] .kmw-title{color:var(--k-mute)}

/* 战场画在三维场景里（src/addons/arcade-field.js）。这里只有几块跟着世界位置走的铭牌——起点 / 终点 / 军师对塔位说的话，在 HUD 的下面、地图的上面；
   位置每帧由场景的相机矩阵算出（和三维画面同一帧）。 */
.km-arcade-stage{isolation:isolate}
.km-arcade-tags{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.km-arcade-stage:not(.km-arcade-live) .km-arcade-tags{visibility:hidden}
.km-arcade-tag{position:absolute;left:0;top:0;display:grid;grid-template-columns:auto auto;align-items:center;gap:3px 6px;padding:3px 9px 3px 7px;border:1px solid var(--ks3-hair,var(--k-line));border-radius:10px;background:color-mix(in srgb,var(--ks3-paper,var(--k-bg)) 90%,transparent);color:var(--ks3-ink,var(--k-ink));font:600 11px/1.25 inherit;white-space:nowrap;box-shadow:0 1px 3px rgba(0,0,0,.16);will-change:transform;user-select:none;-webkit-user-select:none}
.km-arcade-tag[hidden]{display:none}
/* 起点 / 终点靠一个色点区分（颜色是游戏这一局的配色，arcade-field.js 写在容器的 --km-td-* 上）；夜间不画边框（设计规则 N1），不用暖金（N2） */
.km-arcade-tag::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--km-td-accent,currentColor)}
.km-arcade-tag[data-kind=spawn]::before{background:var(--km-td-danger,#d9534f)}
.km-arcade-tag[data-kind=base]::before{background:var(--km-td-ok,#3fa66b)}
.km-arcade-tag[data-kind=tip]{grid-template-columns:auto;font-weight:500}
.km-arcade-tag[data-kind=tip]::before{display:none}
.km-arcade-tag i{grid-column:1/-1;display:block;width:100%;min-width:54px;height:4px;border-radius:2px;background:color-mix(in srgb,var(--ks3-ink,var(--k-ink)) 22%,transparent);overflow:hidden}
.km-arcade-tag i b{display:block;width:100%;height:100%;background:var(--km-td-ok,#3fa66b);transition:width .2s}
html[data-theme=night] .km-arcade-tag{border-color:transparent}
/* 战场在场时建筑名牌整体退后一档：路线和塔才是主角（引擎会给单个名牌写行内 opacity，所以淡在容器上） */
:is(#hub-view,#km-starport)[data-arcade-world] .ks3-labels{opacity:.62}

/* 第五刀阶段 4 · 引擎内塔防的 HUD（src/spatial/runtime/modes/tower-defense.js 建在 stage 里）：左上一块，游戏窗头（.kmw-head，顶部居中）之下——开局后星港沉浸
   （道哥 #33336：页头 / 旗标 / 星球条退场）把左上角让了出来；不居中、不贴底：星港落地后大厅聊天窗停在右侧（galaxy-nav.js），底部是停靠栏、缩放钮与物理沙盒的工具条；
   颜色走星港这座城的变量（--ks3-*），夜间不画边框（设计规则 N1）。塔位在地图上点（stage 本身不接指针，模式在星港容器上捕获抬手） */
.km-td{position:absolute;left:12px;top:56px;z-index:5;display:grid;gap:6px;width:max-content;max-width:min(64%,640px);padding:8px 10px;border:1px solid var(--ks3-hair,var(--k-line));border-radius:14px;background:color-mix(in srgb,var(--ks3-paper,var(--k-bg)) 90%,transparent);color:var(--ks3-ink,var(--k-ink));font:12px/1.3 inherit;box-shadow:0 2px 10px rgba(0,0,0,.14);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);pointer-events:auto;touch-action:manipulation}
.km-td-top{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;padding:0 2px}
.km-td-top b{font-size:13px}
.km-td-row{display:flex;flex-wrap:wrap;gap:6px}
.km-td button{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 11px;border:1px solid var(--ks3-hair,var(--k-line));border-radius:999px;background:color-mix(in srgb,var(--ks3-paper,var(--k-bg)) 70%,transparent);color:inherit;font:inherit;font-weight:600;cursor:pointer}
.km-td button:hover{border-color:var(--ks3-accent,var(--k-acc))}
.km-td button:disabled{opacity:.45;cursor:default}
.km-td button[hidden]{display:none}
.km-td button.on,.km-td button[data-td=wave]{background:var(--ks3-accent,var(--k-acc));border-color:var(--ks3-accent,var(--k-acc));color:var(--ks3-paper,var(--k-on-acc,#fff))}
.km-td button[data-td-tower] small{font-weight:500;opacity:.75}
.km-td button[data-td=sell]{border-color:var(--km-td-danger,#d9534f);color:var(--km-td-danger,#d9534f)}
.km-td-hint{min-height:1.3em;padding:0 2px;color:var(--k-mute)}
.km-td-say{padding:6px 8px;border-radius:8px;background:color-mix(in srgb,var(--ks3-accent,var(--k-acc)) 10%,transparent);word-break:break-all;max-height:7.5em;overflow:auto}
.km-td-say[hidden]{display:none}
.km-td-opt{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:4px}
.km-td-opt button{height:24px;padding:0 8px;font-size:11px}
html[data-theme=night] .km-td,html[data-theme=night] .km-td button{border-color:transparent}
@media(max-width:720px){.km-td{left:8px;right:8px;top:52px;width:auto;max-width:none;padding:6px 8px}.km-td button{height:32px;padding:0 9px}}

/* ==== src/addons/skinmap.css ==== */
/* 宇宙增量 · 星球皮肤与「编辑地图」（src/addons/skinmap.js，任务 3bf2a142）。
   「编辑地图」挂在 #kmu（不在 #hub-view 里：轨道皮肤没有地图也要有它），与「塔防」（arcade.css .hub-play）同一套尺寸与颜色；
   两个都在时「塔防」左移一个按钮（#hub-view.km-skinmap-edit，--hub-edit-w 由 JS 量出来）。夜间不画边框（设计规则 N1）。 */
#kmu .hub-edit{position:absolute;right:28px;bottom:104px;z-index:5;height:32px;padding:0 16px;border:1px solid var(--ks3-accent,var(--k-acc));border-radius:4px;background:var(--ks3-paper,var(--k-bg));color:var(--ks3-accent,var(--k-acc));font:600 13px/1 inherit;letter-spacing:.04em;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.08)}
#kmu .hub-edit.hub-edit-flat{bottom:113px}   /* a flat map: #hub-view{inset:92px 0 100px} + .hub-play{bottom:13px} */
#kmu .hub-edit:hover{filter:brightness(1.04);background:var(--ks3-accent,var(--k-acc));color:var(--ks3-paper,var(--k-on-acc,#fff))}
#kmu .hub-edit:focus-visible{outline:2px solid var(--ks3-accent,var(--k-acc));outline-offset:2px}
#kmu .hub-edit[hidden]{display:none!important}
html[data-theme=night] #kmu .hub-edit{border-color:transparent}
#hub-view.km-skinmap-edit .hub-play{right:calc(28px + var(--hub-edit-w,88px) + 10px)}
/* V44 · 任务 4bd8bb1b · 「编辑星港」：按钮站进星港页头的动作行（#km-starport .kmsp-actions，与「进入」「外观」并排，galaxy.css 的 .kmsp-btn 同一副药丸样式），
   颜色跟星港主题的 --ks3-* 变量走；不再绝对定位在地图右下角（那里是运行时的悬停说明 .ks3-detail） */
#kmu #km-starport .kmsp-actions .hub-edit{position:static;display:inline-flex;align-items:center;height:32px;padding:0 12px;border:1px solid var(--ks3-hair,#CBD4DF);border-radius:999px;background:color-mix(in srgb,var(--ks3-paper,#fff) 86%,transparent);color:var(--ks3-ink,#2B3340);font:inherit;font-size:12px;font-weight:600;letter-spacing:0;box-shadow:none;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
#kmu #km-starport .kmsp-actions .hub-edit:hover{filter:none;border-color:var(--ks3-accent,#3370FF);background:color-mix(in srgb,var(--ks3-paper,#fff) 86%,transparent);color:var(--ks3-accent,#3370FF)}
html[data-theme=night] #kmu #km-starport .kmsp-actions .hub-edit{border-color:var(--ks3-hair,#CBD4DF)}
/* a planet's skin arriving: the map fades in over its old look (one frame of opacity, no layout) */
#hub-view.km-skinmap-swap{animation:km-skinmap-swap .36s ease-out}
@keyframes km-skinmap-swap{from{opacity:.55}to{opacity:1}}
/* the stage (/hikos/?stage=skinmap&channel=…): only the planet's map — the universe chrome, windows and buttons stay out of the picture */
html[data-stage=skinmap] #kmu-top,html[data-stage=skinmap] #kmu-dock,html[data-stage=skinmap] #kmu-bar,html[data-stage=skinmap] #kmu-ow,html[data-stage=skinmap] #kmu-hint,html[data-stage=skinmap] .kmu-win,html[data-stage=skinmap] .kmu-barpop,html[data-stage=skinmap] .hub-play,html[data-stage=skinmap] .hub-edit,html[data-stage=skinmap] .ks3-detail,html[data-stage=skinmap] #km-tutorial,html[data-stage=skinmap] .km-tour{display:none!important}
html[data-stage=skinmap] #hub-view[data-spatial-skin]{inset:0}
html[data-stage=skinmap] #hub-view{inset:0}
@media(max-width:720px){#kmu .hub-edit{right:14px;height:36px;padding:0 14px}#kmu .hub-edit.hub-edit-flat{bottom:112px}#hub-view.km-skinmap-edit .hub-play{right:calc(14px + var(--hub-edit-w,88px) + 8px)}}
@media(pointer:coarse){#kmu .hub-edit{height:36px}}

/* ==== src/addons/editor.css ==== */
/* 宇宙增量 · 编辑地图：Hikos 页内编辑（src/addons/editor.js，任务 c44d0ad8）。
   版式按设计 5bb91d55/01 第 4 节：画布就是整张三维地图，上面一条工具栏（星球名 · 状态 · 撤销 / 重做 / 版本 / 发布 / 退出），右侧一张属性卡（选中的建筑），
   右下一张「已移出地图」清单，底部一行提示。编辑时宇宙界面的顶栏 / 停靠栏 / 窗口 / 塔防 / 编辑地图钮都收起（html[data-mapedit]），只留地图与这几件。
   颜色全部走皮肤变量（--ks3-* 由城市主题给；没有时退回 --k-*），夜间不画边框（设计规则 N1）。 */
:is(#kmu,#km-city-interior) .km-mapedit{position:absolute;inset:0;z-index:7;pointer-events:none;font-family:"IBM Plex Sans","Plex SC","PingFang SC",sans-serif;color:var(--ks3-ink,var(--k-ink))}
:is(#kmu,#km-city-interior) .km-mapedit[hidden]{display:none!important}
:is(#kmu,#km-city-interior) .km-mapedit>*{pointer-events:auto}
:is(#kmu,#km-city-interior) .km-mapedit-bar{position:absolute;top:12px;left:16px;right:16px;display:flex;align-items:center;justify-content:space-between;gap:12px;height:44px;padding:0 10px 0 16px;background:color-mix(in srgb,var(--ks3-paper,var(--k-bg)) 88%,transparent);border:1px solid var(--ks3-hair,rgba(0,0,0,.08));border-radius:6px;box-shadow:0 2px 10px rgba(0,0,0,.08);backdrop-filter:blur(6px)}
:is(#kmu,#km-city-interior) .km-mapedit-title{display:flex;align-items:baseline;gap:10px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
:is(#kmu,#km-city-interior) .km-mapedit-title b{font-size:15px;font-weight:700;color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-title span{font-size:12px;color:var(--ks3-muted,var(--k-muted))}
:is(#kmu,#km-city-interior) .km-mapedit-title span.km-mapedit-dirty{color:var(--ks3-accent,var(--k-acc));font-weight:600}
:is(#kmu,#km-city-interior) .km-mapedit-actions{display:flex;gap:6px;flex:none}
:is(#kmu,#km-city-interior) .km-mapedit button{height:30px;padding:0 12px;border:1px solid var(--ks3-hair,rgba(0,0,0,.12));border-radius:4px;background:var(--ks3-paper,var(--k-bg));color:var(--ks3-ink,var(--k-ink));font:600 12.5px/1 inherit;letter-spacing:.02em;cursor:pointer;touch-action:manipulation}
:is(#kmu,#km-city-interior) .km-mapedit button:hover:not(:disabled){border-color:var(--ks3-accent,var(--k-acc));color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit button:disabled{opacity:.45;cursor:default}
:is(#kmu,#km-city-interior) .km-mapedit button:focus-visible{outline:2px solid var(--ks3-accent,var(--k-acc));outline-offset:2px}
:is(#kmu,#km-city-interior) .km-mapedit button.km-mapedit-primary{background:var(--ks3-accent,var(--k-acc));border-color:var(--ks3-accent,var(--k-acc));color:var(--ks3-paper,var(--k-on-acc,#fff))}
:is(#kmu,#km-city-interior) .km-mapedit button.km-mapedit-primary:hover:not(:disabled){filter:brightness(1.06);color:var(--ks3-paper,var(--k-on-acc,#fff))}
:is(#kmu,#km-city-interior) .km-mapedit-inspector,:is(#kmu,#km-city-interior) .km-mapedit-gone{position:absolute;right:16px;width:240px;padding:12px 14px;background:color-mix(in srgb,var(--ks3-paper,var(--k-bg)) 92%,transparent);border:1px solid var(--ks3-hair,rgba(0,0,0,.08));border-radius:6px;box-shadow:0 2px 10px rgba(0,0,0,.08)}
:is(#kmu,#km-city-interior) .km-mapedit-inspector{top:68px}
:is(#kmu,#km-city-interior) .km-mapedit-gone{bottom:56px;max-height:40%;overflow:auto;scrollbar-width:thin}
:is(#kmu,#km-city-interior) .km-mapedit-inspector[hidden],:is(#kmu,#km-city-interior) .km-mapedit-gone[hidden],:is(#kmu,#km-city-interior) .km-mapedit-sheet[hidden]{display:none!important}
:is(#kmu,#km-city-interior) .km-mapedit h3{margin:0 0 2px;font-size:14px;font-weight:700;color:var(--ks3-accent,var(--k-acc));display:flex;justify-content:space-between;align-items:baseline}
:is(#kmu,#km-city-interior) .km-mapedit h3 span{font-size:12px;color:var(--ks3-muted,var(--k-muted));font-weight:600}
:is(#kmu,#km-city-interior) .km-mapedit-sub{margin:0 0 8px;font-size:11.5px;color:var(--ks3-muted,var(--k-muted))}
:is(#kmu,#km-city-interior) .km-mapedit dl{display:grid;grid-template-columns:auto 1fr;gap:4px 10px;margin:8px 0;font-size:12.5px}
:is(#kmu,#km-city-interior) .km-mapedit dt{color:var(--ks3-muted,var(--k-muted))}
:is(#kmu,#km-city-interior) .km-mapedit dd{margin:0}
:is(#kmu,#km-city-interior) .km-mapedit-row{display:flex;gap:6px;margin-top:8px}
:is(#kmu,#km-city-interior) .km-mapedit-row button{flex:1;padding:0 8px}
:is(#kmu,#km-city-interior) .km-mapedit-row.km-mapedit-end{justify-content:flex-end}
:is(#kmu,#km-city-interior) .km-mapedit-row.km-mapedit-end button{flex:none}
:is(#kmu,#km-city-interior) .km-mapedit-gone button{display:flex;justify-content:space-between;width:100%;height:auto;margin-top:6px;padding:7px 10px;text-align:left;font-weight:500}
:is(#kmu,#km-city-interior) .km-mapedit-gone button i{font-style:normal;color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-hint{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);margin:0;padding:6px 12px;max-width:calc(100% - 320px);background:color-mix(in srgb,var(--ks3-paper,var(--k-bg)) 86%,transparent);border-radius:4px;font-size:11.5px;color:var(--ks3-muted,var(--k-muted));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
:is(#kmu,#km-city-interior) .km-mapedit-sheet{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.28)}
:is(#kmu,#km-city-interior) .km-mapedit-card{width:min(440px,calc(100% - 32px));max-height:calc(100% - 80px);overflow:auto;padding:18px 20px;background:var(--ks3-paper,var(--k-bg));border:1px solid var(--ks3-hair,rgba(0,0,0,.08));border-radius:8px;box-shadow:0 12px 40px rgba(0,0,0,.22);font-size:13px;line-height:1.5}
:is(#kmu,#km-city-interior) .km-mapedit-card p{margin:6px 0}
:is(#kmu,#km-city-interior) .km-mapedit-card label{display:block;margin:10px 0 0;font-size:12px;color:var(--ks3-muted,var(--k-muted))}
:is(#kmu,#km-city-interior) .km-mapedit-card input{display:block;width:100%;margin-top:4px;padding:8px 10px;border:1px solid var(--ks3-hair,rgba(0,0,0,.14));border-radius:4px;background:var(--ks3-ground,var(--k-ubg));color:var(--ks3-ink,var(--k-ink));font:inherit;font-size:13px;outline-color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-errors{margin:8px 0;padding-left:18px;color:#c0392b;font-size:12px}
/* runtime 1.9 · props (任务 1ffaf665 · L1): the palette of kits / models, the active 放置 button, the red removal */
:is(#kmu,#km-city-interior) .km-mapedit button.km-mapedit-active{background:var(--ks3-accent,var(--k-acc));border-color:var(--ks3-accent,var(--k-acc));color:var(--ks3-paper,var(--k-on-acc,#fff))}
:is(#kmu,#km-city-interior) .km-mapedit button.km-mapedit-danger{color:#c0392b;border-color:color-mix(in srgb,#c0392b 40%,transparent)}
:is(#kmu,#km-city-interior) .km-mapedit-palette{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;margin:10px 0 4px;max-height:46vh;overflow:auto;scrollbar-width:thin}
/* 任务 04b2af6e (道哥 #29307): a card is a picture of the kit, its name and its kind. `height:auto; min-height:0` is repeated with the card's own
   selector because the touch rule below (pointer:coarse → every .km-mapedit button 36px) has the same specificity and comes later: on an iPad the
   name was squeezed to 0 height inside the fixed 36px flex column and only 「套件」 was left (IMG_0381). The name may never collapse (flex-shrink:0). */
:is(#kmu,#km-city-interior) .km-mapedit-palette button[data-kit]{display:flex;flex-direction:column;align-items:stretch;gap:4px;height:auto;min-height:0;padding:8px;text-align:left;position:relative;line-height:1.25}
:is(#kmu,#km-city-interior) .km-mapedit-palette button b{flex:none;font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
:is(#kmu,#km-city-interior) .km-mapedit-palette button i{flex:none;font-style:normal;font-size:11px;color:var(--ks3-muted,var(--k-muted))}
:is(#kmu,#km-city-interior) .km-mapedit-palette button.km-mapedit-picked,:is(#kmu,#km-city-interior) .km-mapedit-palette button[aria-selected=true]{border-color:var(--ks3-accent,var(--k-acc));box-shadow:0 0 0 1px var(--ks3-accent,var(--k-acc)) inset;color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-thumb{display:flex;align-items:center;justify-content:center;aspect-ratio:1/1;width:100%;min-height:72px;border-radius:4px;background:color-mix(in srgb,var(--ks3-ink,var(--k-ink)) 6%,var(--ks3-ground,var(--k-ubg,transparent)));overflow:hidden;position:relative}
:is(#kmu,#km-city-interior) .km-mapedit-thumb img,:is(#kmu,#km-city-interior) .km-mapedit-thumb svg{display:block;width:100%;height:100%;object-fit:contain;pointer-events:none;user-select:none;-webkit-user-drag:none}
:is(#kmu,#km-city-interior) .km-mapedit-thumb svg,:is(#kmu,#km-city-interior) .km-mapedit-preview-stage svg{fill:color-mix(in srgb,var(--ks3-accent,var(--k-acc)) 14%,transparent);stroke:var(--ks3-accent,var(--k-acc));stroke-width:1.4;stroke-linejoin:round}
:is(#kmu,#km-city-interior) .km-mapedit-thumb svg.km-mapedit-wire,:is(#kmu,#km-city-interior) .km-mapedit-preview-stage svg.km-mapedit-wire{fill:none;stroke-width:.9}
:is(#kmu,#km-city-interior) .km-mapedit-thumb small{position:absolute;left:0;right:0;bottom:4px;text-align:center;font-size:10.5px;color:var(--ks3-muted,var(--k-muted))}
:is(#kmu,#km-city-interior) .km-mapedit-nopic{font-style:normal;font-size:11px;color:#c0392b;text-align:center;padding:0 6px}
:is(#kmu,#km-city-interior) button[data-state=failed] .km-mapedit-thumb{background:color-mix(in srgb,#c0392b 10%,transparent);flex-direction:column;gap:6px}
:is(#kmu,#km-city-interior) .km-mapedit .km-mapedit-retry{display:inline-flex;align-items:center;justify-content:center;height:24px;padding:0 10px;border:1px solid #c0392b;border-radius:6px;font-size:11.5px;line-height:1;color:#c0392b;background:transparent;cursor:pointer;user-select:none}:is(#kmu,#km-city-interior) .km-mapedit .km-mapedit-retry:hover,:is(#kmu,#km-city-interior) .km-mapedit .km-mapedit-retry:focus-visible{background:#c0392b14;outline:none}
:is(#kmu,#km-city-interior) .km-mapedit-spin{display:block;width:22px;height:22px;border-radius:50%;border:2px solid color-mix(in srgb,var(--ks3-accent,var(--k-acc)) 30%,transparent);border-top-color:var(--ks3-accent,var(--k-acc));animation:km-mapedit-spin .9s linear infinite}
@keyframes km-mapedit-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){:is(#kmu,#km-city-interior) .km-mapedit-spin{animation-duration:2.4s}}
/* the picker: the list and, once a card is picked, the large live view beside it (under it on a narrow screen) */
:is(#kmu,#km-city-interior) .km-mapedit-card:has(.km-mapedit-pick){width:min(760px,calc(100% - 32px))}
:is(#kmu,#km-city-interior) .km-mapedit-card:has(.km-mapedit-pick-text){width:min(440px,calc(100% - 32px))}
:is(#kmu,#km-city-interior) .km-mapedit-pick{display:flex;gap:14px;align-items:flex-start}
:is(#kmu,#km-city-interior) .km-mapedit-pick .km-mapedit-palette{flex:1 1 auto;min-width:0;max-height:min(52vh,460px)}
:is(#kmu,#km-city-interior) .km-mapedit-preview{flex:0 0 236px;margin-top:10px;padding:10px;border:1px solid var(--ks3-hair,rgba(0,0,0,.08));border-radius:6px;background:color-mix(in srgb,var(--ks3-ink,var(--k-ink)) 3%,transparent)}
:is(#kmu,#km-city-interior) .km-mapedit-preview[hidden]{display:none!important}
:is(#kmu,#km-city-interior) .km-mapedit-preview p{margin:6px 0 0}
:is(#kmu,#km-city-interior) .km-mapedit-preview p b{font-size:14px}
:is(#kmu,#km-city-interior) .km-mapedit-preview-stage{display:flex;align-items:center;justify-content:center;width:100%;aspect-ratio:1/1;border-radius:4px;background:color-mix(in srgb,var(--ks3-ink,var(--k-ink)) 6%,var(--ks3-ground,var(--k-ubg,transparent)));overflow:hidden}
:is(#kmu,#km-city-interior) .km-mapedit-preview-stage canvas,:is(#kmu,#km-city-interior) .km-mapedit-preview-stage img,:is(#kmu,#km-city-interior) .km-mapedit-preview-stage svg{display:block;width:100%;height:100%;object-fit:contain;touch-action:none}
:is(#kmu,#km-city-interior) .km-mapedit-preview-stage[data-state=failed]{flex-direction:column;gap:8px;background:color-mix(in srgb,#c0392b 10%,transparent)}
:is(#kmu,#km-city-interior) .km-mapedit-pick-text .km-mapedit-preview .km-mapedit-preview-stage{display:none}
:is(#kmu,#km-city-interior) .km-mapedit-row.km-mapedit-end .km-mapedit-sub{flex:1;align-self:center;margin:0}
:is(#kmu,#km-city-interior) .km-mapedit-versions{list-style:none;margin:8px 0;padding:0;max-height:46vh;overflow:auto;scrollbar-width:thin}
:is(#kmu,#km-city-interior) .km-mapedit-versions li{display:grid;grid-template-columns:auto 1fr auto;gap:2px 10px;align-items:center;padding:8px 0;border-top:1px solid var(--ks3-hair,rgba(0,0,0,.08))}
:is(#kmu,#km-city-interior) .km-mapedit-versions li.on b{color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-versions li span{font-size:11.5px;color:var(--ks3-muted,var(--k-muted))}
:is(#kmu,#km-city-interior) .km-mapedit-versions li small{grid-column:1/3;font-size:11.5px}
:is(#kmu,#km-city-interior) .km-mapedit-versions li em{font-style:normal;font-size:11.5px;color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-versions li button{height:26px;padding:0 10px;font-size:12px}
/* editing: the map is the whole page; the universe chrome steps out of the picture (as the skinmap stage does), the heading too */
html[data-mapedit] #kmu-top,html[data-mapedit] #kmu-dock,html[data-mapedit] #kmu-bar,html[data-mapedit] #kmu-ow,html[data-mapedit] #kmu-hint,html[data-mapedit] .kmu-win,html[data-mapedit] .kmu-barpop,html[data-mapedit] .hub-play,html[data-mapedit] .hub-edit,html[data-mapedit] #km-tutorial{display:none!important}
html[data-mapedit] #hub-view[data-spatial-skin]{inset:0}
html[data-mapedit] #hub-view[data-spatial-skin] .hub-heading{display:none}
html[data-mapedit] #hub-view[data-spatial-skin] .ks3-detail{bottom:52px;right:auto;left:140px;max-width:calc(100% - 420px)}
html[data-mapedit] #hub-view[data-spatial-skin] .ks3-controls{bottom:48px;left:16px}
/* V44 · 任务 4bd8bb1b · 编辑星港：宿主是星港 #km-starport（src/galaxy/galaxy-starport.js，顶栏下 inset:44px 0 0）。编辑时顶栏收起，星港铺满；星港自己的页头（名字 / 进入 / 外观 /
   编辑星港）让位给编辑器工具栏；运行时的缩放钮与悬停说明从停靠栏上方（bottom:104px）落到编辑器提示条旁，与 #hub-view 同一排法；星港贴饰与入港渐变不动 */
html[data-mapedit] #km-starport{inset:0}
html[data-mapedit] #km-starport .kmsp-head{display:none}
html[data-mapedit] #km-starport .ks3-detail{bottom:52px;right:auto;left:140px;max-width:calc(100% - 420px)}
html[data-mapedit] #km-starport .ks3-controls{bottom:48px;left:16px}
html[data-mapedit] #km-starport .ks3-directory{top:68px;bottom:56px}
html[data-theme=night] :is(#kmu,#km-city-interior) .km-mapedit-bar,html[data-theme=night] :is(#kmu,#km-city-interior) .km-mapedit-inspector,html[data-theme=night] :is(#kmu,#km-city-interior) .km-mapedit-gone,html[data-theme=night] :is(#kmu,#km-city-interior) .km-mapedit button,html[data-theme=night] :is(#kmu,#km-city-interior) .km-mapedit-card{border-color:transparent}
@media(max-width:720px){:is(#kmu,#km-city-interior) .km-mapedit-bar{left:8px;right:8px;top:8px;height:40px;padding:0 6px 0 10px}:is(#kmu,#km-city-interior) .km-mapedit-title b{font-size:13px}:is(#kmu,#km-city-interior) .km-mapedit-title span{display:none}:is(#kmu,#km-city-interior) .km-mapedit button{padding:0 9px;font-size:12px}
  :is(#kmu,#km-city-interior) .km-mapedit-inspector{top:56px;right:8px;width:200px}:is(#kmu,#km-city-interior) .km-mapedit-gone{right:8px;width:200px;bottom:48px}:is(#kmu,#km-city-interior) .km-mapedit-hint{max-width:calc(100% - 16px);bottom:8px}
  /* 任务 04b2af6e · a phone: the picked kit's view sits above the list (picture left, name / kind / button right), the list two or three cards wide */
  :is(#kmu,#km-city-interior) .km-mapedit-card:has(.km-mapedit-pick){width:calc(100% - 16px);max-height:calc(100% - 24px);padding:14px}:is(#kmu,#km-city-interior) .km-mapedit-pick{flex-direction:column;align-items:stretch;gap:8px}
  :is(#kmu,#km-city-interior) .km-mapedit-preview{flex:none;width:100%;order:-1;margin-top:6px;display:grid;grid-template-columns:116px 1fr;gap:2px 10px;align-items:center}:is(#kmu,#km-city-interior) .km-mapedit-preview .km-mapedit-preview-stage{grid-row:1/5;width:116px}:is(#kmu,#km-city-interior) .km-mapedit-preview p{margin:0}
  :is(#kmu,#km-city-interior) .km-mapedit-pick .km-mapedit-palette{grid-template-columns:repeat(auto-fill,minmax(92px,1fr));max-height:42vh}:is(#kmu,#km-city-interior) .km-mapedit-thumb{min-height:56px}}
/* touch: bigger buttons — except the palette's cards, which size to their picture and name (任务 04b2af6e; see the card rule above) */
@media(pointer:coarse){:is(#kmu,#km-city-interior) .km-mapedit button{height:36px}:is(#kmu,#km-city-interior) .km-mapedit-palette button[data-kit]{height:auto;min-height:44px}:is(#kmu,#km-city-interior) .km-mapedit .km-mapedit-retry{height:30px;padding:0 14px}}
/* 任务 1f6bf980 · 同一份编辑器装在母星资源城里（#km-city-interior，showModal 的 <dialog> 顶层）：面板用城的深色底（城不跟皮肤变量走），
   自带提示条（页面级 #toast 到不了顶层）与右键菜单（KM.ctx 同理）；编辑时城自己的页头 / 底栏 / 属性卡 / 外观工作室收起，只留导览与地图 */
#km-city-interior .km-mapedit{z-index:9;color:#e7e3ef;--ks3-paper:#101524;--ks3-ink:#e7e3ef;--ks3-muted:#a79ab8;--ks3-accent:#d8be8d;--ks3-hair:#9a90af55;--ks3-field:#070b16}
#km-city-interior .km-mapedit-bar,#km-city-interior .km-mapedit-inspector,#km-city-interior .km-mapedit-gone,#km-city-interior .km-mapedit-card,#km-city-interior .km-mapedit-hint{background:#101524ee;border-color:#9a90af55;box-shadow:0 6px 24px rgba(0,0,0,.35)}
#km-city-interior .km-mapedit button{border:1px solid #9a90af55;background:#111625e8;color:#dfd9eb;min-height:0}
#km-city-interior .km-mapedit button:hover{border-color:#c4b2e1;background:#28243e}
#km-city-interior .km-mapedit button.km-mapedit-primary{background:#d8be8d;color:#1a1408;border-color:#d8be8d}
#km-city-interior .km-mapedit button.km-mapedit-danger{color:#ff9b9b}
#km-city-interior .km-mapedit-thumb,#km-city-interior .km-mapedit-preview-stage{background:#070b16}
#km-city-interior .km-mapedit-preview{background:#0b1020;border-color:#9a90af55}
#km-city-interior .km-mapedit-toast{position:absolute;left:50%;bottom:64px;transform:translateX(-50%);max-width:min(560px,calc(100% - 32px));margin:0;padding:9px 14px;border-radius:6px;background:#101524f2;border:1px solid #9a90af55;color:#e7e3ef;font-size:12.5px;line-height:1.5;box-shadow:0 6px 24px rgba(0,0,0,.35)}
#km-city-interior .km-mapedit-menu{position:absolute;min-width:180px;padding:6px;border-radius:6px;background:#101524f6;border:1px solid #9a90af55;box-shadow:0 8px 28px rgba(0,0,0,.45);display:flex;flex-direction:column;gap:2px}
#km-city-interior .km-mapedit-menu h4{margin:4px 8px 6px;font-size:11px;font-weight:600;letter-spacing:.06em;color:#a79ab8;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#km-city-interior .km-mapedit-menu hr{border:0;border-top:1px solid #9a90af33;margin:4px 2px}
#km-city-interior .km-mapedit-menu button{text-align:left;border-color:transparent;background:transparent;padding:7px 10px;font-size:12.5px}
#km-city-interior .km-mapedit-menu button:hover{background:#28243e;border-color:transparent}
#km-city-interior .km-mapedit-menu button[disabled]{opacity:.45;cursor:default}
#km-city-interior .km-mapedit-menu button.km-mapedit-danger{color:#ff9b9b}
/* 第五刀阶段 2 (任务 e8df7ecb · 道哥 #32972) · world mode: the terrain brush sheet (op radios + ranges), the instance inspector's tint swatch / colour input */
:is(#kmu,#km-city-interior) .km-mapedit-brushes{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 4px}
:is(#kmu,#km-city-interior) .km-mapedit-brush{display:inline-flex;align-items:center;gap:6px;margin:0;padding:6px 10px;border:1px solid var(--ks3-hair,rgba(0,0,0,.14));border-radius:999px;font-size:12px;color:var(--ks3-ink,var(--k-ink));cursor:pointer}
:is(#kmu,#km-city-interior) .km-mapedit-brush input{display:inline;width:auto;margin:0;padding:0}
:is(#kmu,#km-city-interior) .km-mapedit-brush:has(input:checked){border-color:var(--ks3-accent,var(--k-acc));box-shadow:0 0 0 1px var(--ks3-accent,var(--k-acc)) inset;color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-ranges{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:4px 14px}
:is(#kmu,#km-city-interior) .km-mapedit-ranges label output{float:right;font-variant-numeric:tabular-nums;color:var(--ks3-ink,var(--k-ink))}
:is(#kmu,#km-city-interior) .km-mapedit-ranges input[type=range]{padding:0;border:0;background:transparent;accent-color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-inspector .km-mapedit-tint{display:inline-flex;align-items:center;gap:6px;margin:0;font-size:12px}
:is(#kmu,#km-city-interior) .km-mapedit-inspector .km-mapedit-tint input[type=color]{display:inline;width:28px;height:22px;margin:0;padding:0;border:1px solid var(--ks3-hair,rgba(0,0,0,.14));border-radius:4px;background:transparent}
:is(#kmu,#km-city-interior) .km-mapedit-swatch{display:inline-block;width:10px;height:10px;border-radius:2px;vertical-align:-1px;border:1px solid rgba(0,0,0,.2)}
/* krow world 一期 (道哥 #33871) · caps: the 世界设置 sheet, greyed brushes, the locked state */
:is(#kmu,#km-city-interior) .km-mapedit-caps{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px 14px;margin:8px 0}
:is(#kmu,#km-city-interior) .km-mapedit-caps fieldset{margin:0;padding:6px 10px 8px;border:1px solid var(--ks3-hair,rgba(0,0,0,.14));border-radius:8px;min-width:0}
:is(#kmu,#km-city-interior) .km-mapedit-caps legend{padding:0 4px;font-size:11.5px;color:var(--ks3-muted,var(--k-muted))}
:is(#kmu,#km-city-interior) .km-mapedit-cap{display:inline-flex;align-items:center;gap:6px;margin:2px 10px 2px 0;font-size:12px;color:var(--ks3-ink,var(--k-ink));cursor:pointer}
:is(#kmu,#km-city-interior) .km-mapedit-cap input{display:inline;width:auto;margin:0;padding:0;accent-color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-cap-ops{margin:2px 0 4px 14px}
:is(#kmu,#km-city-interior) .km-mapedit-cap-num,:is(#kmu,#km-city-interior) .km-mapedit-cap-sel{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:4px 0;font-size:12px}
:is(#kmu,#km-city-interior) .km-mapedit-cap-num input{width:84px;margin:0;text-align:right;font-variant-numeric:tabular-nums}
:is(#kmu,#km-city-interior) .km-mapedit-cap-sel select{max-width:60%;margin:0}
:is(#kmu,#km-city-interior) .km-mapedit-brush.km-mapedit-off{opacity:.45;cursor:not-allowed;text-decoration:line-through}
:is(#kmu,#km-city-interior) .km-mapedit-title span.km-mapedit-locked{color:var(--ks3-warn,#c77d00)}
:is(#kmu,#km-city-interior) .km-mapedit.km-mapedit-is-locked .km-mapedit-title::before{content:'🔒';margin-right:4px}
:is(#kmu,#km-city-interior) .km-mapedit-sheet h4{margin:8px 0 2px;font-size:12.5px}
:is(#kmu,#km-city-interior) .km-mapedit-sheet h4 b{display:inline-block;min-width:18px;padding:0 5px;border-radius:999px;background:var(--ks3-accent,var(--k-acc));color:var(--ks3-paper,var(--k-on-acc,#fff));font-size:11px;text-align:center}
:is(#kmu,#km-city-interior) .km-mapedit-proposals li.on{border-color:var(--ks3-accent,var(--k-acc))}
:is(#kmu,#km-city-interior) .km-mapedit-proposal-acts{display:inline-flex;gap:6px;margin-left:auto}

/* ==== src/skins/skin-tokens.css ==== */
/* KMind 宇宙交互 · V41 · tokens for surfaces that used to keep fixed colours whatever the skin (found by the studio's kmskin_audit:
   the page rendered with night and with a probe skin, surfaces whose colour did not move). They now read the skin's own variables
   (src/skins/pack.js compiles ui → --k-*). Scoped to imported and shipped packs only: 夜间 and 白昼 keep every pixel they had.
   Data colours (groups, orbits, people's amber) are the page's to set and are not touched here.
   Hikos（线上页，PR #1697）：原样带入，24 条规则用到的类线上都有；只对导入 / 随页的皮肤包生效，夜间、白昼、三款平面皮肤一个像素不变。
   加载在 arcade.css 之后、language.css 之前（index.html）。 */
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .message-text{color:var(--k-ink)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) :is(.mention,.km-mention){background:rgba(var(--k-acc-rgb),.18);color:var(--k-ink)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .composer{border-color:var(--k-line)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"])[data-theme=night] #kmu .kmw-chat .composer{background:rgba(var(--k-acc-rgb),.06)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .reaction{background:var(--k-tint)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .km-cb-who em{background:rgba(var(--k-mute-rgb),.14);color:var(--k-mute)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) :is(.roster-context,.newdm,.newdm button){color:var(--k-mute)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) :is(.km-x-scopeline,.km-x .km-hub-edit label){color:var(--k-ink2)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) :is(.lc-count,.dm-badge){background:var(--k-danger);color:#fff}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .km-view-switch span{color:var(--k-ink2)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) :is(.km-x-go,.km-x-modes button.on){background:var(--k-acc);color:var(--k-on-acc)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .km-x-ic{background:rgba(var(--k-acc-rgb),.14);color:var(--k-acc)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .km-x-chips .ok{background:rgba(var(--k-ok-rgb),.1);color:var(--k-ok)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]) .km-mempty button.primary{color:var(--k-on-acc)}
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]):not([data-skin="collaboration-hub"]):not([data-skin="campus-directory"]):not([data-skin="council-chamber"]) #km-plaza-dialog .km-plaza-tabs button[aria-selected=true]{background:rgba(var(--k-acc-rgb),.2);border-color:rgba(var(--k-acc-rgb),.55);color:var(--k-ink)}
/* V41 · the region atlas (探索 in a 3D city world) is navigation: with a pack's interface it wears the interface's colours, whatever the world;
   the miniatures inside are drawn in the world's own colours (KMSpatial.miniature). The city's labels stay the world's (spatial.ui). */
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]):not([data-skin="collaboration-hub"]):not([data-skin="campus-directory"]):not([data-skin="council-chamber"]) .ks3-explorer{--ks3-ground:var(--k-bg);--ks3-paper:var(--k-bg2);--ks3-ink:var(--k-ink);--ks3-muted:var(--k-mute);--ks3-hair:var(--k-line);--ks3-accent:var(--k-acc)}
/* V41 · the band round a 3D city (its heading, the counts, the frame) reads the interface's colours too, so a pack never needs rules for it */
html[data-skin]:not([data-skin="night"]):not([data-skin="day"]):not([data-skin="collaboration-hub"]):not([data-skin="campus-directory"]):not([data-skin="council-chamber"])[data-spatial-theme] body.km-u.km-map-active #kmu{--hub-ground:var(--k-bg);--hub-ink:var(--k-ink);--hub-ink2:var(--k-ink2);--hub-mute:var(--k-mute);--hub-hair:var(--k-line);--hub-hair2:var(--k-line2);--hub-tint:var(--k-tint);--hub-card:var(--k-bg2);--hub-accent:var(--k-acc);--hub-path:var(--k-mute)}

/* ==== src/addons/language.css ==== */
/* KMind V35 宇宙增量 · 设计语言 (loaded after every other increment stylesheet)
   Night (夜间) and the three flat skins only; every other skin keeps the increment's earlier look.
   The rules are written down in handoff/设计规则_夜间与平面皮肤.md. In short:
   · night: the scene is the ground; panels are glass (a layer of light, no frame); blue = what you can act on, cyan = live/progress,
     amber stays reserved for people; type is KMind's own (Inter Tight / Plex SC, numbers in the mono); focus and selection glow.
   · flat: paper ground, one ink and one accent per skin, hairlines instead of shadows, no depth, no blur.
   · one language at a time: English captions (.kx-en) only show with the 英文副标题 effect on, like the native ones. */

/* ---------- shared: English captions, visually hidden inputs ---------- */
.kx-en{font-family:var(--k-mono);font-style:normal;font-weight:500;font-size:10px;letter-spacing:.14em;text-transform:uppercase;opacity:.7}
body.fx-off-en .kx-en{display:none!important}
.kx-file{position:relative;display:inline-flex!important;align-items:center;gap:8px;cursor:pointer}
.kx-file input[type=file]{position:absolute!important;inset:0;width:100%!important;height:100%;opacity:0;cursor:pointer;font-size:0}
.kx-file:focus-within{box-shadow:var(--k-focus)}

/* ======================================================================================================================
   NIGHT
   ====================================================================================================================== */
html[data-skin=night]{--kx-glass:rgba(12,15,22,.78);--kx-glass-solid:rgba(13,17,25,.94);--kx-layer:rgba(var(--k-layer-rgb),.055);
  --kx-layer2:rgba(var(--k-layer-rgb),.09);--kx-layer3:rgba(var(--k-layer-rgb),.14);--kx-rule:rgba(var(--k-layer-rgb),.12);
  --kx-glow:0 0 22px -6px rgba(var(--k-acc-rgb),.8);--kx-shadow:0 30px 90px -24px rgba(0,0,0,.7),0 0 0 .5px rgba(var(--k-layer-rgb),.06);
  --kx-blur:blur(20px) saturate(1.15);--kx-live-rgb:92,200,255}

/* the explorer's two increment entries sit with its own controls: a pill like 添加资产, not a second visual system */
html[data-skin=night] .km-city-enter,html[data-skin=night] .km-x-bar .km-city-enter{border:0!important;border-radius:999px!important;padding:7px 14px!important;
  background:rgba(var(--k-layer-rgb),.1)!important;color:var(--k-ink)!important;font-weight:500!important;font-size:12.5px!important;line-height:1.2!important;font-family:inherit!important;box-shadow:none!important;transition:background .16s,box-shadow .16s}
html[data-skin=night] .km-city-enter:hover{background:rgba(var(--k-acc-rgb),.2)!important;box-shadow:var(--kx-glow)!important}
html[data-skin=night] .km-x-add.km-city-toggle{background:rgba(var(--k-layer-rgb),.1)!important;color:var(--k-ink)!important;box-shadow:none!important}
html[data-skin=night] .km-x-add.km-city-toggle:hover{background:rgba(var(--k-acc-rgb),.2)!important;box-shadow:var(--kx-glow)!important}
html[data-skin=night] .km-x-add.km-city-toggle[aria-pressed=true]{background:rgba(var(--k-acc-rgb),.24)!important;box-shadow:0 0 18px -6px rgba(var(--k-acc-rgb),.9)!important}
html[data-skin=night] .km-resource-city{border:0;border-radius:14px;background:rgba(var(--k-layer-rgb),.04);padding:14px}
html[data-skin=night] .km-city-streets button{border-radius:12px}
html[data-skin=night] .km-city-streets button:is(:hover,:focus-visible){border-color:transparent;background:rgba(var(--k-acc-rgb),.12);box-shadow:var(--kx-glow)}

/* ---------- plaza dialog ---------- */
html[data-skin=night] #km-plaza-dialog{border:0;border-radius:22px;background:var(--kx-glass-solid);color:var(--k-ink);box-shadow:var(--kx-shadow);
  font-family:inherit;width:min(980px,94vw);height:min(800px,92dvh)}
html[data-skin=night] #km-plaza-dialog::backdrop{background:rgba(3,4,6,.62);backdrop-filter:blur(6px)}
html[data-skin=night] #km-plaza-dialog::before{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(90% 60% at 12% 0%,rgba(var(--k-acc-rgb),.1),transparent 60%),radial-gradient(60% 50% at 100% 100%,rgba(var(--kx-live-rgb),.05),transparent 70%)}
html[data-skin=night] #km-plaza-dialog :is(button,input,select,textarea){font-family:inherit}
html[data-skin=night] #km-plaza-dialog button{border:0;border-radius:999px;padding:8px 15px;background:rgba(var(--k-layer-rgb),.1);color:var(--k-ink2);
  font-size:12.5px;font-weight:500;transition:background .16s,color .16s,box-shadow .16s}
html[data-skin=night] #km-plaza-dialog button:hover{background:rgba(var(--k-acc-rgb),.18);color:var(--k-ink);border-color:transparent}
html[data-skin=night] #km-plaza-dialog button:focus-visible{outline:0;box-shadow:var(--k-focus)}
html[data-skin=night] #km-plaza-dialog :is(button[type=submit],form[data-p-search] button,[data-p-play]){background:var(--k-acc);color:#fff}
html[data-skin=night] #km-plaza-dialog :is(button[type=submit],form[data-p-search] button,[data-p-play]):hover{background:var(--k-acc2,#2F6FE6);box-shadow:var(--kx-glow)}
html[data-skin=night] .km-plaza-top{border:0;padding:22px 26px 6px;align-items:center;position:relative}
html[data-skin=night] .km-plaza-top b{margin:0;font-size:20px;font-weight:600;letter-spacing:0}
html[data-skin=night] .km-plaza-top small{display:block;margin-bottom:6px}
html[data-skin=night] .km-plaza-top [data-p-close]{padding:7px 13px}
html[data-skin=night] .km-plaza-tabs{padding:10px 26px 14px;gap:4px;position:relative}
html[data-skin=night] #km-plaza-dialog .km-plaza-tabs button{background:transparent;color:var(--k-mute);padding:7px 14px}
html[data-skin=night] #km-plaza-dialog .km-plaza-tabs button:hover{background:rgba(var(--k-layer-rgb),.08);color:var(--k-ink)}
html[data-skin=night] #km-plaza-dialog .km-plaza-tabs button[aria-selected=true]{background:rgba(var(--k-acc-rgb),.2);color:var(--k-ink);box-shadow:0 0 18px -8px rgba(var(--k-acc-rgb),.9)}
html[data-skin=night] .km-plaza-content{padding:4px 26px 24px;position:relative}
html[data-skin=night] .km-plaza-content h2{font-size:24px;font-weight:600;letter-spacing:0}
html[data-skin=night] .km-plaza-content h3{font-size:14px;font-weight:600;color:var(--k-ink2);margin:22px 0 10px}
html[data-skin=night] .km-plaza-content p{color:var(--k-mute);font-size:12.5px;line-height:1.7}
html[data-skin=night] :is(.km-plaza-top,.km-plaza-content) small{color:var(--k-mute);letter-spacing:0;font-size:11px}
html[data-skin=night] .km-plaza-content label{color:var(--k-mute);font-size:12px;gap:7px}
html[data-skin=night] #km-plaza-dialog :is(input:not([type=checkbox]):not([type=file]),textarea,select){border:0;border-radius:10px;background:rgba(var(--k-layer-rgb),.075);
  color:var(--k-ink);padding:10px 12px;font-size:13px}
html[data-skin=night] #km-plaza-dialog :is(input,textarea,select):focus{outline:0;box-shadow:var(--k-focus)}
html[data-skin=night] #km-plaza-dialog select option{background:#10141C}
html[data-skin=night] #km-plaza-dialog input[type=checkbox]{accent-color:var(--k-acc)}
html[data-skin=night] #km-plaza-dialog .kx-file{border-radius:999px;padding:9px 15px;background:rgba(var(--k-layer-rgb),.1);color:var(--k-ink2);font-size:12.5px;width:max-content;max-width:100%}
html[data-skin=night] #km-plaza-dialog .kx-file:hover{background:rgba(var(--k-acc-rgb),.18);color:var(--k-ink)}
html[data-skin=night] .km-plaza-hero{border:0;border-radius:16px;height:230px;background:radial-gradient(70% 90% at 78% 10%,rgba(var(--k-acc-rgb),.22),transparent 60%),#0A0D14}
html[data-skin=night] .km-plaza-hero svg{color:rgba(var(--k-layer-rgb),.55);opacity:.7}
html[data-skin=night] .km-plaza-hero img{opacity:.9}
html[data-skin=night] .km-plaza-hero>div{padding:80px 26px 22px;background:linear-gradient(180deg,transparent,rgba(6,8,12,.92))}
html[data-skin=night] .km-plaza-hero span{font:500 11px var(--k-mono);color:var(--k-ok)}
html[data-skin=night] .km-plaza-hero h2{font-size:30px;font-weight:600}
html[data-skin=night] .km-plaza-hero p{color:var(--k-ink2)}
html[data-skin=night] .km-plaza-welcome article{border:0;padding:16px 18px;border-radius:14px;background:rgba(var(--k-layer-rgb),.045)}
html[data-skin=night] .km-plaza-welcome article b{font-weight:600}
html[data-skin=night] :is(.km-plaza-episodes article,.km-plaza-station){border:0;border-radius:12px;padding:12px 14px;margin:2px 0;transition:background .16s}
html[data-skin=night] :is(.km-plaza-episodes article,.km-plaza-station):hover{background:rgba(var(--k-layer-rgb),.06)}
html[data-skin=night] .km-plaza-episodes article>span{color:var(--k-dim);font-family:var(--k-mono)}
html[data-skin=night] .km-plaza-number{font:500 14px var(--k-mono)!important;color:var(--k-ok)!important;letter-spacing:.04em}
html[data-skin=night] .km-plaza-dial{font-size:0!important;font-family:var(--k-mono)!important;height:46px;padding:0!important;margin:6px 0 18px!important;border:0!important;position:relative;
  background:repeating-linear-gradient(90deg,rgba(var(--k-layer-rgb),.45) 0 1px,transparent 1px 14px) 0 14px/100% 18px no-repeat,
             repeating-linear-gradient(90deg,rgba(var(--k-layer-rgb),.7) 0 1px,transparent 1px 70px) 0 6px/100% 34px no-repeat;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 12% 88%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12% 88%,transparent)}
html[data-skin=night] .km-plaza-dial::after{content:'';position:absolute;left:38%;top:0;bottom:0;width:2px;border-radius:2px;background:var(--k-ok);box-shadow:0 0 14px rgba(var(--kx-live-rgb),.9)}
html[data-skin=night] .km-plaza-tuner form{gap:8px}
html[data-skin=night] .km-plaza-signal{color:var(--k-ok)}
html[data-skin=night] .km-plaza-player{border:0;margin:0 26px 10px;border-radius:16px;background:rgba(var(--k-layer-rgb),.06);padding:12px 14px}
html[data-skin=night] .km-plaza-status{border:0!important;padding:10px 26px 16px!important;color:var(--k-mute)!important;font-size:11.5px!important;position:relative}
html[data-skin=night] .km-plaza-connect{max-width:640px}

/* ---------- the local MP3 player (a native KMW window) ---------- */
html[data-skin=night] .km-radio-controls{padding:14px 16px;gap:12px}
html[data-skin=night] .km-radio-controls label{font-weight:500;color:var(--k-mute);font-size:12px}
html[data-skin=night] .km-radio-controls .kx-file,html[data-skin=night] .km-radio-stations{border:0;border-radius:999px;padding:8px 14px;background:rgba(var(--k-layer-rgb),.1);
  color:var(--k-ink2);font-size:12.5px;font-weight:500;width:max-content;max-width:100%;margin:0}
html[data-skin=night] :is(.km-radio-controls .kx-file,.km-radio-stations):hover{background:rgba(var(--k-acc-rgb),.18);color:var(--k-ink)}
html[data-skin=night] .km-radio-controls audio{border-radius:999px;color-scheme:dark;height:40px}
html[data-skin=night] .km-radio-controls ol{list-style:none;padding:0;display:grid;gap:2px;counter-reset:km-track}
html[data-skin=night] .km-radio-controls li{counter-increment:km-track;display:flex;align-items:center;gap:10px;border-radius:10px;padding:0 10px}
html[data-skin=night] .km-radio-controls li::before{content:counter(km-track,decimal-leading-zero);font:11px var(--k-mono);color:var(--k-dim)}
html[data-skin=night] .km-radio-controls li:hover{background:rgba(var(--k-layer-rgb),.06)}
html[data-skin=night] .km-radio-controls li button{background:none;border:0;color:var(--k-ink2);padding:8px 0;flex:1;font-size:12.5px}
html[data-skin=night] .km-radio-controls [aria-current=true]{color:var(--k-ink);font-weight:600}
html[data-skin=night] .km-radio-controls li:has([aria-current=true]){box-shadow:inset 2px 0 0 var(--k-acc);background:rgba(var(--k-acc-rgb),.1)}
html[data-skin=night] .km-radio-controls p{color:var(--k-mute)}

/* ---------- panel banner (Panel View sidebar) ---------- */
html[data-skin=night] .km-channel-banner{border-radius:14px;margin:4px 0 12px;height:168px;background:#07090E}
html[data-skin=night] .km-channel-banner::after{left:14px;right:14px;height:1px;background:linear-gradient(90deg,transparent,rgba(var(--k-acc-rgb),.75),rgba(var(--kx-live-rgb),.45),transparent);box-shadow:0 0 14px rgba(var(--k-acc-rgb),.55)}
html[data-skin=night] .km-channel-banner>div{padding:18px 14px 50px;background:linear-gradient(0deg,rgba(6,8,12,.94),rgba(6,8,12,.35) 70%,transparent)}
html[data-skin=night] .km-channel-banner small{font-size:11px;letter-spacing:0;color:var(--k-mute)}
html[data-skin=night] .km-channel-banner b{font-size:19px;font-weight:600;color:var(--k-ink)}
html[data-skin=night] .km-channel-banner span{font:500 11px var(--k-mono);color:var(--k-ok)}
html[data-skin=night] .km-channel-banner footer{left:12px;right:12px;bottom:10px;gap:6px}
html[data-skin=night] .km-channel-banner footer button{border:0;border-radius:999px;padding:5px 11px;min-height:28px;background:rgba(10,13,19,.7);backdrop-filter:blur(10px);
  color:var(--k-ink2);font-size:11.5px;font-weight:500}
html[data-skin=night] .km-channel-banner footer button:hover{background:rgba(var(--k-acc-rgb),.28);color:var(--k-ink)}

/* ======================================================================================================================
   FLAT SKINS · 协作枢纽 / 园区导览 / 协作议事厅 — paper, ink, one accent, hairlines; never depth
   ====================================================================================================================== */
html[data-skin=collaboration-hub]{--kx-acc:#285477;--kx-acc-rgb:40,84,119;--kx-path:#6E9596;--kx-paper:#F5F7FA;--kx-ink:#17293A;--kx-ink2:#41566A;--kx-mute:#6B7C8C;--kx-hair:#D5DDE5;--kx-hair2:#E7ECF1;--kx-tint:#EDF2F6}
html[data-skin=campus-directory]{--kx-acc:#315D4E;--kx-acc-rgb:49,93,78;--kx-path:#81997E;--kx-paper:#F4F6F1;--kx-ink:#1C2B24;--kx-ink2:#43574D;--kx-mute:#6D7D73;--kx-hair:#D6DED3;--kx-hair2:#E7ECE4;--kx-tint:#EBF0E8}
html[data-skin=council-chamber]{--kx-acc:#53483F;--kx-acc-rgb:83,72,63;--kx-path:#9B7B5D;--kx-paper:#F7F4EF;--kx-ink:#2A231D;--kx-ink2:#54493F;--kx-mute:#7D7064;--kx-hair:#E0D6CA;--kx-hair2:#EEE7DE;--kx-tint:#F1EBE3}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]){--kx-flat:1}

/* explorer entries */
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-city-enter{border:1px solid var(--kx-hair)!important;border-radius:6px!important;
  background:#fff!important;color:var(--kx-ink)!important;font-weight:600!important;font-size:12px!important;line-height:1.2!important;font-family:inherit!important;padding:7px 12px!important;box-shadow:none!important}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-city-enter:hover{border-color:var(--kx-acc)!important;background:var(--kx-tint)!important}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-resource-city{border-color:var(--kx-hair);border-radius:6px}

/* plaza dialog: a formal sheet */
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog{border:1px solid var(--kx-hair);border-radius:10px;background:#fff;color:var(--kx-ink);
  box-shadow:0 18px 48px -18px rgba(20,30,40,.28);font-family:inherit;width:min(960px,94vw);height:min(780px,92dvh)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog::backdrop{background:rgba(24,32,40,.32);backdrop-filter:none}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog :is(button,input,select,textarea){font-family:inherit}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog button{border:1px solid var(--kx-hair);border-radius:6px;background:#fff;color:var(--kx-ink2);font-size:12.5px;font-weight:500;padding:8px 14px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog button:hover{border-color:var(--kx-acc);background:var(--kx-tint);color:var(--kx-ink)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog button:focus-visible{outline:2px solid var(--kx-acc);outline-offset:2px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog :is(button[type=submit],form[data-p-search] button,[data-p-play]){background:var(--kx-acc);border-color:var(--kx-acc);color:#fff}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-top{border-bottom:1px solid var(--kx-hair2);padding:20px 26px 16px;align-items:center}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-top b{margin:0;font-size:19px;font-weight:650;letter-spacing:0}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) :is(.km-plaza-top,.km-plaza-content) small{color:var(--kx-mute);letter-spacing:0;font-size:11px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-tabs{padding:0 26px;gap:22px;border-bottom:1px solid var(--kx-hair2)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog .km-plaza-tabs button{border:0;border-radius:0;background:none;padding:13px 0 11px;color:var(--kx-mute);box-shadow:inset 0 -2px 0 transparent}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog .km-plaza-tabs button[aria-selected=true]{color:var(--kx-ink);font-weight:650;box-shadow:inset 0 -2px 0 var(--kx-acc)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-content{padding:18px 26px 24px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-content h2{font-size:22px;font-weight:650;color:var(--kx-ink)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-content h3{font-size:13px;font-weight:650;color:var(--kx-ink);margin:22px 0 10px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-content p{color:var(--kx-mute);font-size:12.5px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-content label{color:var(--kx-ink2);font-size:12px;font-weight:500}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog :is(input:not([type=checkbox]):not([type=file]),textarea,select){border:1px solid var(--kx-hair);border-radius:6px;background:#fff;color:var(--kx-ink);padding:9px 11px;font-size:13px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog :is(input,textarea,select):focus{outline:2px solid var(--kx-acc);outline-offset:-1px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog input[type=checkbox]{accent-color:var(--kx-acc)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog .kx-file{border:1px solid var(--kx-hair);border-radius:6px;padding:8px 13px;background:#fff;color:var(--kx-ink2);font-size:12.5px;width:max-content;max-width:100%}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) #km-plaza-dialog .kx-file:hover{border-color:var(--kx-acc);background:var(--kx-tint)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-hero{border:1px solid var(--kx-hair);border-radius:8px;background:var(--kx-tint);color:var(--kx-ink)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-hero svg{color:var(--kx-path);opacity:.55}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-hero>div{background:linear-gradient(180deg,transparent 20%,rgba(255,255,255,.92))}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-hero span{font:600 11px var(--k-mono);color:var(--kx-acc)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-hero h2{color:var(--kx-ink)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-welcome article{border-left:2px solid var(--kx-acc);padding-left:16px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) :is(.km-plaza-episodes article,.km-plaza-station){border-top:1px solid var(--kx-hair2)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-episodes article>span{color:var(--kx-mute)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-number{font:600 14px var(--k-mono)!important;color:var(--kx-acc)!important}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-dial{font-size:0!important;font-family:var(--k-mono)!important;height:40px;padding:0!important;margin:6px 0 18px!important;border-bottom:1px solid var(--kx-hair)!important;position:relative;
  background:repeating-linear-gradient(90deg,var(--kx-hair) 0 1px,transparent 1px 14px) 0 20px/100% 12px no-repeat,repeating-linear-gradient(90deg,var(--kx-mute) 0 1px,transparent 1px 70px) 0 10px/100% 22px no-repeat}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-dial::after{content:'';position:absolute;left:38%;top:2px;bottom:0;width:2px;background:var(--kx-acc)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-signal{color:var(--kx-acc)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-player{border:1px solid var(--kx-hair);border-radius:8px;margin:0 26px 10px;background:var(--kx-paper)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-status{border-top:1px solid var(--kx-hair2)!important;color:var(--kx-mute)!important;font-size:11.5px!important;padding:10px 26px 14px!important}

/* MP3 player */
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-radio-controls{padding:14px 16px;gap:12px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-radio-controls label{font-weight:600;color:var(--kx-ink2)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) :is(.km-radio-controls .kx-file,.km-radio-stations){border:1px solid var(--kx-hair);border-radius:6px;padding:8px 13px;background:#fff;color:var(--kx-ink2);font-size:12.5px;width:max-content;max-width:100%;margin:0}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) :is(.km-radio-controls .kx-file,.km-radio-stations):hover{border-color:var(--kx-acc);background:var(--kx-tint)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-radio-controls ol{list-style:none;padding:0;margin:0;border-top:1px solid var(--kx-hair2);counter-reset:km-track}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-radio-controls li{counter-increment:km-track;display:flex;gap:10px;align-items:center;border-bottom:1px solid var(--kx-hair2);padding:0 4px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-radio-controls li::before{content:counter(km-track,decimal-leading-zero);font:11px var(--k-mono);color:var(--kx-mute)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-radio-controls li button{flex:1;padding:8px 0}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-radio-controls li:has([aria-current=true]){box-shadow:inset 3px 0 0 var(--kx-acc)}

/* panel banner in a flat skin's (经纬) panel: a light signboard, not a dark night block */
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner{height:150px;margin:4px 0 12px;border-radius:6px;background:var(--kx-paper);color:var(--kx-ink);border:1px solid var(--kx-hair)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner::after{left:0;right:0;height:3px;background:var(--kx-acc);box-shadow:none}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner>svg{color:var(--kx-path);opacity:.45}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner>div{padding:16px 14px 46px;background:linear-gradient(0deg,rgba(255,255,255,.96),rgba(255,255,255,.55) 70%,transparent)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner small{font-size:11px;letter-spacing:0;color:var(--kx-mute)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner b{font-size:18px;font-weight:650;color:var(--kx-ink)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner span{font:600 11px var(--k-mono);color:var(--kx-acc)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner footer{bottom:10px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner footer button{border:1px solid var(--kx-hair);border-radius:5px;background:#fff;color:var(--kx-ink2);font-size:11.5px;font-weight:500;padding:4px 10px;min-height:28px}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-channel-banner footer button:hover{border-color:var(--kx-acc);color:var(--kx-ink)}
@media(any-pointer:coarse){html[data-skin] .km-channel-banner footer button{min-height:44px}}
html[data-skin=night] .km-plaza-manage section>:is(button,.kx-file),:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-plaza-manage section>:is(button,.kx-file){margin:0 6px 8px 0}
html[data-skin=night] .km-radio-stations,:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-radio-stations{margin:12px 16px 0!important}
html[data-skin=night] #km-plaza-dialog :is(.km-plaza-episodes article>span,.km-plaza-station span,.km-plaza-number){font-family:var(--k-mono)!important}
/* the plaza entry on the mother planet reads like the native continent labels */
html[data-skin=night] #km-plaza-surface{font-family:"Inter Tight","Plex SC",-apple-system,"PingFang SC",sans-serif;font-weight:600;font-size:12.5px;color:var(--k-ink)}
html[data-skin=night] #km-plaza-surface svg{color:var(--k-ok)}
/* 打开播客电台 in the knowledge explorer: the same pill as 进入城市 */
html[data-skin=night] .km-x-bar [data-plaza-folder]{border:0;border-radius:999px;padding:7px 14px;background:rgba(var(--k-layer-rgb),.1);color:var(--k-ink);font-size:12.5px;font-weight:500;font-family:inherit;cursor:pointer}
html[data-skin=night] .km-x-bar [data-plaza-folder]:hover{background:rgba(var(--k-acc-rgb),.2);box-shadow:var(--kx-glow)}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-x-bar [data-plaza-folder]{border:1px solid var(--kx-hair);border-radius:6px;padding:6px 12px;background:#fff;color:var(--kx-ink);font-size:12px;font-weight:600;font-family:inherit;cursor:pointer}
:is(html[data-skin=collaboration-hub],html[data-skin=campus-directory],html[data-skin=council-chamber]) .km-x-bar [data-plaza-folder]:hover{border-color:var(--kx-acc);background:var(--kx-tint)}
