/* ==========================================================================
   硅基办公 · Windows 10 桌面外壳
   设计稿：design/desktop-ui-v1.html（design/desktop-1|2|3.png）
   —— 桌面即入口、图标即应用、窗口能最小化到任务栏 / 右上角 × 关闭
   ========================================================================== */

:root {
  --dk-ink: #fff;
  --dk-ink-90: rgba(var(--wb-ink-rgb), .92);
  --dk-ink-75: rgba(var(--wb-ink-rgb), .75);
  --dk-ink-60: rgba(var(--wb-ink-rgb), .6);
  --dk-ink-45: rgba(var(--wb-ink-rgb), .45);
  --dk-hair: rgba(var(--wb-ink-rgb), .12);
  --dk-blur: blur(22px) saturate(150%);
  --dk-ease: cubic-bezier(.22, .61, .36, 1);
  --dk-win-bg: rgba(18, 28, 28, .94);
  --dk-bar-h: 48px;
  --dk-row: 92px;      /* 行距：越小红点排得越密（一列最多 8 个） */
  --dk-tile: 46px;
  --dk-col: 78px;      /* 列距：越小两列越挨近 */
}

/* ---------- 桌面根 ---------- */
.dk {
  position: fixed;
  inset: 0;
  z-index: 100;
  overflow: hidden;
  background: #0b1414;
  color: var(--dk-ink);
  font-family: "Plus Jakarta Sans", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;
  -webkit-font-smoothing: antialiased;
}
.dk *, .dk *::before, .dk *::after { box-sizing: border-box; }
/* :where() 让下面两条 reset 的权重为 0，工作台原有的 .wb-* 组件样式不会被压掉 */
:where(.dk) svg { display: block; flex: none; }
:where(.dk button) { font: inherit; color: inherit; cursor: pointer; }

.dk__bg { position: absolute; inset: 0; background:
  radial-gradient(680px 420px at 18% 12%, rgba(120, 205, 190, .34), transparent 62%),
  radial-gradient(760px 520px at 76% 30%, rgba(255, 232, 190, .30), transparent 66%),
  radial-gradient(900px 620px at 52% 92%, rgba(96, 150, 120, .42), transparent 68%),
  linear-gradient(160deg, #22333a 0%, #2d3f39 32%, #4a5a3c 58%, #31402f 100%);
  transition: background 520ms var(--dk-ease); }
.dk[data-wall="mist"] .dk__bg { background:
  radial-gradient(720px 460px at 24% 18%, rgba(190, 214, 224, .34), transparent 64%),
  radial-gradient(820px 560px at 78% 26%, rgba(226, 214, 196, .26), transparent 66%),
  radial-gradient(920px 640px at 50% 96%, rgba(120, 142, 150, .38), transparent 68%),
  linear-gradient(160deg, #2c3a44 0%, #3b4a4e 34%, #56604f 60%, #303a38 100%); }
.dk[data-wall="night"] .dk__bg { background:
  radial-gradient(700px 440px at 22% 16%, rgba(96, 132, 176, .34), transparent 62%),
  radial-gradient(780px 520px at 74% 32%, rgba(158, 138, 200, .26), transparent 66%),
  radial-gradient(900px 620px at 52% 94%, rgba(52, 74, 110, .44), transparent 68%),
  linear-gradient(160deg, #131c2a 0%, #1b2636 34%, #22303c 62%, #141c26 100%); }
.dk__bg::before { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 58%; background:
  linear-gradient(180deg, rgba(14, 26, 24, 0) 0%, rgba(16, 30, 26, .55) 42%, rgba(10, 20, 18, .85) 100%); }
.dk__bg::after { content: ""; position: absolute; inset: 0; background:
  radial-gradient(120% 80% at 50% 50%, transparent 40%, rgba(0, 0, 0, .42) 100%); }
.dk__grain { position: absolute; inset: 0; opacity: .28; pointer-events: none;
  background-image: radial-gradient(rgba(var(--wb-ink-rgb), .1) 1px, transparent 1px); background-size: 3px 3px; }

/* 只给读屏用的文字：桌面外壳整页没有 h1，大纲是散的，补一个不占位的标题 */
.dk-vh {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ---------- 桌面图标（所有页面的入口） ---------- */
.dk-icons {
  position: absolute;
  left: 16px;
  top: 18px;
  right: 16px;
  bottom: calc(var(--dk-bar-h) + 22px);   /* 图标区下沿（提示条已改为「帮助与文档」App，不再留位） */
  z-index: 1;
}
.dk[data-icons="lg"] { --dk-row: 106px; --dk-tile: 52px; --dk-col: 94px; }
.dk[data-icons="sm"] { --dk-row: 80px; --dk-tile: 38px; --dk-col: 72px; }
.dk[data-icons="sm"] .dk-icon__inner { gap: 4px; padding: 4px 6px 5px; }
.dk[data-icons="sm"] .dk-icon__label { font-size: 12.5px; }

.dk-icon {
  position: absolute;
  left: 0;
  top: 0;
  width: var(--dk-col);
  height: var(--dk-row);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--dk-ink);
  touch-action: none;          /* 拖动图标时不要触发页面滚动 */
  user-select: none;           /* 拖动时不要选中文字 */
  -webkit-user-select: none;
}
.dk-icon img,
.dk-icon svg { -webkit-user-drag: none; user-drag: none; }
.dk-icon.is-drag { z-index: 9; cursor: grabbing; }
.dk-icon.is-drag .dk-icon__inner {
  background: rgba(var(--wb-ink-rgb), .16);
  box-shadow: 0 16px 32px rgba(2, 10, 10, .5), inset 0 0 0 1px rgba(var(--wb-ink-rgb), .3);
  transform: scale(1.06);
}

/* 选中 / 悬停的框贴着内容走：短名字就是小小一块，不会撑成一整列那么宽 */
.dk-icon__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  padding: 5px 6px 6px;
  border-radius: 13px;
  background: transparent;
  box-shadow: none;
  transition: background-color .16s var(--dk-ease), box-shadow .16s var(--dk-ease), transform .16s var(--dk-ease);
}
.dk-icon:hover .dk-icon__inner {
  /* 悬停的反馈现在主要靠「图标甩出去 + 玻璃留下」，外面这个框就退一点，别和玻璃叠成两层框 */
  background: rgba(var(--wb-ink-rgb), .07);
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .1);
}
.dk-icon.is-sel .dk-icon__inner {
  background: rgba(142, 198, 255, .20);
  box-shadow: inset 0 0 0 1px rgba(196, 228, 255, .45), 0 8px 20px rgba(58, 116, 178, .22);
  transform: translateY(-1px);
}
.dk-icon.is-sel .dk-icon__label { color: var(--wb-ink); text-shadow: 0 1px 4px rgba(0, 0, 0, .72); }

.dk-icon__tile {
  position: relative;
  width: var(--dk-tile);
  height: var(--dk-tile);
  border-radius: 13px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(155deg, #e7f4ef, #b9cdc7);
  box-shadow: 0 10px 20px rgba(0, 0, 0, .32), 0 2px 5px rgba(0, 0, 0, .24),
              inset 0 1px 0 rgba(var(--wb-ink-rgb), .5), inset 0 -9px 16px rgba(0, 0, 0, .16);
  color: var(--wb-ink);
  transition: width .2s var(--dk-ease), height .2s var(--dk-ease);
}
/* 磁贴光泽：左上角一片高光、右下角压一点暗，图标才有「体量」而不是一块平色 */
.dk-icon__tile::before {
  content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background:
    radial-gradient(72% 58% at 26% 12%, rgba(var(--wb-ink-rgb), .5), rgba(var(--wb-ink-rgb), 0) 72%),
    linear-gradient(160deg, rgba(var(--wb-ink-rgb), .22), rgba(var(--wb-ink-rgb), 0) 46%, rgba(0, 0, 0, .14));
}
.dk-icon__tile svg {
  position: relative; z-index: 1;
  width: 27px; height: 27px;
  filter: drop-shadow(0 1.6px 2.2px rgba(6, 22, 20, .35));
}
.dk[data-icons="sm"] .dk-icon__tile svg { width: 22px; height: 22px; }
.dk[data-icons="lg"] .dk-icon__tile svg { width: 31px; height: 31px; }
.dk-icon__tile--mint { background: linear-gradient(155deg, #63e6c6 0%, #1fbd99 52%, #0b8a71 100%); }
.dk-icon__tile--sun { background: linear-gradient(155deg, #ffd580 0%, #f4a537 52%, #d97a15 100%); }
.dk-icon__tile--sky { background: linear-gradient(155deg, #7ecbff 0%, #3b8dea 52%, #1c5dbd 100%); }
.dk-icon__tile--violet { background: linear-gradient(155deg, #c9b2ff 0%, #8a66ea 52%, #5c3cc4 100%); }
.dk-icon__tile--slate { background: linear-gradient(155deg, #cfdae6 0%, #8399ae 52%, #4f6478 100%); }
.dk-icon__tile--green { background: linear-gradient(155deg, #4fe0b0 0%, #10a883 52%, #067a62 100%); }
.dk-icon__tile--cyan { background: linear-gradient(155deg, #6fe0ea 0%, #2295b3 52%, #0d6a83 100%); }
.dk-icon__tile--indigo { background: linear-gradient(155deg, #9aa2ff 0%, #4b52cf 52%, #2f359e 100%); }
.dk-icon__tile--navy { background: linear-gradient(155deg, #93a2c8 0%, #465a8e 52%, #26365e 100%); }
.dk-icon__tile--berry { background: linear-gradient(155deg, #ffa9d5 0%, #dc4d97 52%, #9c2266 100%); }
.dk-icon__tile--flame { background: linear-gradient(155deg, #ffbb7d 0%, #f2701c 52%, #b83d05 100%); }
/* 自带图片的应用图标（例如消息）：铺满整块，圆角靠 img 自己裁，和其余图标的圆角语言一致。
   注意：这里**不能**用 overflow:hidden —— 未读角标是压在图标右上角、向外探出的，会被裁掉。 */
.dk-icon__tile--img { padding: 0; background: none; box-shadow: 0 9px 20px rgba(0, 0, 0, .32), 0 2px 5px rgba(0, 0, 0, .22); }
.dk-icon__tile--img::before { display: none; }
.dk-icon__tile--img img { width: 100%; height: 100%; display: block; object-fit: cover; border-radius: inherit; }
.dk-icon__label {
  max-width: 96px;
  font-size: 11.5px;
  line-height: 1.35;
  text-align: center;
  text-shadow: 0 1px 3px rgba(0, 0, 0, .6);
}
.dk-icon__badge {
  position: absolute;
  z-index: 2;
  top: -5px;
  right: -5px;
  min-width: 17px;
  height: 17px;
  padding: 0 5px;
  border-radius: 999px;
  background: #e5533d;
  color: var(--wb-ink);
  font-size: 12px;
  line-height: 17px;
  text-align: center;
  box-shadow: 0 0 0 2px rgba(12, 22, 22, .62), 0 2px 6px rgba(0, 0, 0, .35);
}

/* ---------- 桌面图标的悬停动画 ----------
   照着 Uiverse（vinodjangid07）那个 Btn / BG / svgContainer 的写法接进来的：
   · 底下留着一片「玻璃」（灰底 + 毛玻璃模糊 + 1px 灰边），鼠标碰上来时它原地亮起来、位置不动；
   · 被甩出去的是图标本体（带颜色的那一块）：它以「底边」为轴转 35°，从玻璃上斜着让开。
   两块都在 .dk-icon__shell 里，不占额外的位（还是原来一列一行的格子），
   层级是「玻璃 0 < 图标（含角标）1 < 名字 2」：角标跟着图标一起斜过去，
   图标甩出来的一角从名字后面过，不会压在名字上。 */
.dk-icon__shell {
  position: relative;
  display: block;
  border-radius: 13px;
}
.dk-icon__glass {
  position: absolute;
  inset: 0;                        /* 和图标本体一样大：图标甩走之后，原位置留下这片玻璃 */
  z-index: 0;
  border-radius: 13px;
  background: rgba(156, 156, 156, .466);
  border: 1px solid rgba(156, 156, 156, .466);
  opacity: 0;
  pointer-events: none;            /* 这片玻璃只是看着玩，点、拖都得穿过去 */
  transition: opacity .28s var(--dk-ease);
}
.dk-icon__shell > .dk-icon__tile {
  position: relative;
  z-index: 1;
  transform-origin: bottom center;
  transition: width .2s var(--dk-ease), height .2s var(--dk-ease),
              transform .36s cubic-bezier(.22, .9, .3, 1.18), filter .3s var(--dk-ease);
}
.dk-icon__label { position: relative; z-index: 2; }
.dk-icon:hover .dk-icon__glass,
.dk-icon:focus-visible .dk-icon__glass {
  opacity: 1;
  backdrop-filter: blur(4px);          /* 原版 .svgContainer 悬停那一句 */
  -webkit-backdrop-filter: blur(4px);
}
.dk-icon:hover .dk-icon__shell > .dk-icon__tile,
.dk-icon:focus-visible .dk-icon__shell > .dk-icon__tile {
  transform: translateY(-3px) rotate(35deg);   /* 往上让一点：斜出去的那一角正好从名字上面擦过 */
  filter: brightness(1.06) saturate(1.04);
}
.dk-icon:hover .dk-icon__label,
.dk-icon:focus-visible .dk-icon__label {
  color: var(--wb-ink);
  text-shadow: 0 1px 6px rgba(0, 0, 0, .8);
}
/* 拖动的时候不甩图标：正抓着它走，再斜一下看着乱（玻璃也一起收掉） */
.dk-icon.is-drag .dk-icon__glass { opacity: 0; }
.dk-icon.is-drag .dk-icon__shell > .dk-icon__tile { transform: none; }
/* 关掉系统动画的用户（或低配机器）就只斜一点点 */
@media (prefers-reduced-motion: reduce) {
  .dk-icon:hover .dk-icon__shell > .dk-icon__tile { transform: translateY(-2px) rotate(16deg); }
}

/* ---------- 窗口 ---------- */
/* 窗口层铺满整个工作区：它本身必须「不接鼠标」，否则会把桌面图标的点击全吃掉 */
.dk-wins { position: absolute; left: 0; right: 0; top: 0; bottom: var(--dk-bar-h); z-index: 5; pointer-events: none; }

.dk-win {
  position: absolute;
  display: flex;
  flex-direction: column;
  pointer-events: auto;
  min-width: 380px;
  min-height: 260px;
  overflow: hidden;
  border-radius: 9px;
  background: var(--dk-win-bg);
  backdrop-filter: var(--dk-blur);
  -webkit-backdrop-filter: var(--dk-blur);
  box-shadow: 0 34px 70px rgba(2, 10, 10, .6), inset 0 0 0 1px rgba(var(--wb-ink-rgb), .14);
  animation: dkWinIn .16s var(--dk-ease);
}
@keyframes dkWinIn { from { opacity: 0; transform: translateY(8px) scale(.995); } to { opacity: 1; transform: none; } }
.dk-win.is-min { display: none; }
.dk-win.is-drag, .dk-win.is-resize { animation: none; }
.dk-win.is-resize { user-select: none; }

.dk-win__bar {
  height: 34px;
  flex: none;
  display: flex;
  align-items: center;
  gap: 8px;
  padding-left: 12px;
  background: rgba(var(--wb-ink-rgb), .06);
  border-bottom: 1px solid rgba(var(--wb-ink-rgb), .1);
  cursor: default;
  touch-action: none;
}
.dk-win__ico { width: 16px; height: 16px; border-radius: 5px; display: flex; align-items: center; justify-content: center; background: linear-gradient(150deg, #a9efdd, #5fbfa8); color: #0d211c; flex: none; }
.dk-win__ico svg { width: 11px; height: 11px; }
.dk-win__title { flex: 1; min-width: 0; font-size: 12px; color: var(--dk-ink-90); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dk-win__btns { display: flex; flex: none; }
.dk-win__btn { width: 46px; height: 34px; display: flex; align-items: center; justify-content: center; border: 0; background: transparent; color: var(--dk-ink-75); transition: background-color .14s var(--dk-ease), color .14s var(--dk-ease); }
.dk-win__btn svg { width: 11px; height: 11px; }
.dk-win__btn:hover { background: rgba(var(--wb-ink-rgb), .16); color: var(--wb-ink); }
/* Win10 的关闭键平时和其它两个一样是灰的，只有指上去才变红 —— 别一上来就一片红 */
.dk-win__btn--close { background: transparent; color: var(--dk-ink-75); }
.dk-win__btn--close:hover { background: #e81123; color: var(--wb-ink); }

.dk-win__body { flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
.dk-win__grip { position: absolute; right: 0; bottom: 0; width: 18px; height: 18px; cursor: nwse-resize; z-index: 6; }
.dk-win__grip::after { content: ""; position: absolute; right: 4px; bottom: 4px; width: 6px; height: 6px; border-right: 2px solid rgba(var(--wb-ink-rgb), .34); border-bottom: 2px solid rgba(var(--wb-ink-rgb), .34); }

/* 窗口内沿用工作台原有的页面渲染结果 */
.dk-win__body > .wb-content { flex: 1; min-height: 0; margin-top: 0; padding: 14px 16px 16px; overflow: auto; }
.dk-win__body > .wb-content--full { padding: 12px 14px 14px; overflow: hidden; }
/* 微聊是「一整块」的应用：内容直接铺满窗口四边，不留窗口底色 */
.dk-win[data-app="chat"] .dk-win__body > .wb-content--full { padding: 0; }
/* 规则与流程：这一页的整页内容没有自己的内层滚动区，
   所以让窗口内容自己滚 —— 否则下半截会被 overflow:hidden 切掉，滚都滚不动 */
.dk-win[data-app="rules"] .dk-win__body > .wb-content--full { overflow-y: auto; }
.dk-win__body > .wb-content::-webkit-scrollbar { width: 8px; }
.dk-win__body > .wb-content--full::-webkit-scrollbar { width: 8px; }
.dk-win__body > .wb-content--full::-webkit-scrollbar-thumb { background: rgba(var(--wb-ink-rgb), .2); border-radius: 999px; }
.dk-win__body > .wb-content::-webkit-scrollbar-thumb { background: rgba(var(--wb-ink-rgb), .2); border-radius: 999px; }

/* 系统设置应用（窗口内的独立页面） */
.dk-setpage { flex: 1; min-height: 0; display: grid; grid-template-columns: 206px minmax(0, 1fr); gap: 12px; padding: 12px; }
.dk-setpage__nav { display: flex; flex-direction: column; gap: 3px; }
.dk-setpage__nav b { padding: 6px 10px 4px; font-size: 12.5px; font-weight: 500; color: var(--dk-ink-45); }
.dk-setpage__nav button { display: flex; align-items: center; gap: 9px; padding: 9px 11px; border: 0; border-radius: 10px; background: transparent; color: var(--dk-ink-90); font-size: 12px; text-align: left; transition: background-color .16s var(--dk-ease); }
.dk-setpage__nav button:hover { background: rgba(var(--wb-ink-rgb), .1); }
.dk-setpage__nav button.is-on { background: rgba(var(--wb-ink-rgb), .16); }
.dk-setpage__nav svg { width: 15px; height: 15px; color: var(--dk-ink-60); }
.dk-setpage__main { display: flex; flex-direction: column; gap: 12px; min-width: 0; overflow: auto; padding-right: 2px; }
.dk-setpage__main::-webkit-scrollbar { width: 8px; }
.dk-setpage__main::-webkit-scrollbar-thumb { background: rgba(var(--wb-ink-rgb), .2); border-radius: 999px; }

.dk-head { display: flex; align-items: flex-start; gap: 10px; }
.dk-head h2 { margin: 0; font-size: 15px; font-weight: 600; }
.dk-head p { margin: 3px 0 0; font-size: 11px; color: var(--dk-ink-45); }
.dk-head__tools { margin-left: auto; display: flex; gap: 8px; }

.dk-card { padding: 14px 16px; border-radius: 16px; background: rgba(var(--wb-ink-rgb), .08); box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .08); display: flex; flex-direction: column; gap: 8px; }
.dk-card h3 { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 13px; font-weight: 500; }
.dk-card h3 svg { width: 15px; height: 15px; color: var(--dk-ink-60); }
/* 危险区（系统设置 → 账号与安全 里的「注销账号」）：只染这一张卡的边，不加红底，
   免得整页看着像出事了 —— 按钮本身已经是红的。 */
.dk-card--danger { box-shadow: inset 0 0 0 1px rgba(255, 65, 65, .3); }
.dk-card--danger h3 svg { color: #ff9a90; }
.dk-pill { display: inline-flex; align-items: center; gap: 5px; padding: 2px 9px; border-radius: 999px; background: rgba(127, 216, 195, .2); color: #b6f0e2; font-size: 12px; }
.dk-grid3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 9px; }
.dk-tile { display: flex; flex-direction: column; gap: 5px; padding: 11px 12px; border-radius: 13px; background: rgba(var(--wb-ink-rgb), .07); }
.dk-tile i { font-size: 12px; font-style: normal; color: var(--dk-ink-45); }
.dk-tile b { font-size: 15px; font-weight: 600; }
.dk-row { display: flex; align-items: center; gap: 8px; padding: 9px 11px; border-radius: 10px; background: rgba(var(--wb-ink-rgb), .06); font-size: 11.5px; }
.dk-row + .dk-row { margin-top: 0; }
.dk-row > span:first-child { color: var(--dk-ink-90); }
.dk-row__v { margin-left: auto; color: var(--dk-ink-60); }
.dk-row__v.is-on { color: #b6f0e2; }
.dk-rowimg { display: flex; align-items: center; gap: 8px; }
.dk-acts { display: flex; flex-wrap: wrap; gap: 8px; }
.dk-note { margin: 6px 0 0; font-size: 11px; line-height: 1.7; color: var(--dk-ink-45); }
.dk-btn { height: 30px; padding: 0 13px; border: 0; border-radius: 9px; background: rgba(var(--wb-ink-rgb), .14); color: var(--wb-ink); font-size: 12px; display: inline-flex; align-items: center; gap: 6px; transition: background-color .16s var(--dk-ease); }
.dk-btn svg, .dk-start__power button svg { width: 16px; height: 16px; }
.dk-btn:hover { background: rgba(var(--wb-ink-rgb), .22); }
.dk-btn--p { background: rgba(var(--wb-ink-rgb), .94); color: #14251f; font-weight: 600; }
.dk-btn--p:hover { background: #fff; }
.dk-btn--danger { color: #ffbdb2; }
.dk-btn--danger:hover { background: rgba(255, 127, 109, .2); }
.dk-seg { display: inline-flex; gap: 4px; margin-left: auto; padding: 3px; border-radius: 10px; background: rgba(var(--wb-ink-rgb), .08); }
.dk-seg button { height: 24px; padding: 0 11px; border: 0; border-radius: 8px; background: transparent; color: var(--dk-ink-75); font-size: 11px; }
.dk-seg button.is-on { background: rgba(var(--wb-ink-rgb), .9); color: #16241f; font-weight: 600; }

/* ---------- 开始菜单 ---------- */
.dk-start {
  position: absolute;
  left: 8px;
  bottom: calc(var(--dk-bar-h) + 6px);
  width: 566px;
  height: 596px;
  z-index: 40;
  display: grid;
  grid-template-columns: 236px minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr) 48px;
  overflow: hidden;
  border-radius: 10px;
  background: rgba(16, 26, 26, .94);
  backdrop-filter: var(--dk-blur);
  -webkit-backdrop-filter: var(--dk-blur);
  box-shadow: 0 30px 70px rgba(0, 0, 0, .6), inset 0 0 0 1px rgba(var(--wb-ink-rgb), .14);
  animation: dkStartIn .18s var(--dk-ease);
}
@keyframes dkStartIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
.dk-start__apps { display: flex; flex-direction: column; gap: 2px; min-height: 0; padding: 14px 8px; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; }
.dk-start__apps::-webkit-scrollbar { width: 8px; }
.dk-start__apps::-webkit-scrollbar-thumb { background: rgba(var(--wb-ink-rgb), .18); border-radius: 999px; }
.dk-start__apps::-webkit-scrollbar-track { background: transparent; }
.dk-start__apps button { flex: 0 0 auto; }
.dk-start__apps b { padding: 2px 10px 6px; font-size: 12.5px; font-weight: 500; color: var(--dk-ink-45); }
.dk-start__apps button { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border: 0; border-radius: 9px; background: transparent; color: var(--dk-ink-90); font-size: 12px; text-align: left; }
.dk-start__apps button:hover { background: rgba(var(--wb-ink-rgb), .12); }
.dk-start__apps svg { width: 15px; height: 15px; color: #a9efdd; }
.dk-start__tiles { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-auto-rows: 92px; gap: 10px; align-content: start; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 16px; border-left: 1px solid rgba(var(--wb-ink-rgb), .1); }
.dk-start__tiles::-webkit-scrollbar { width: 8px; }
.dk-start__tiles::-webkit-scrollbar-thumb { background: rgba(var(--wb-ink-rgb), .18); border-radius: 999px; }
.dk-tl { position: relative; display: flex; flex-direction: column; justify-content: flex-end; gap: 6px; padding: 10px; border: 0; border-radius: 6px;
  color: var(--wb-ink); font-size: 11.5px; font-weight: 600; text-align: left;
  box-shadow: inset 0 1px 0 rgba(var(--wb-ink-rgb), .45), inset 0 -10px 18px rgba(0, 0, 0, .16), 0 6px 14px rgba(0, 0, 0, .22); }
.dk-tl::before { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: radial-gradient(80% 60% at 24% 10%, rgba(var(--wb-ink-rgb), .42), rgba(var(--wb-ink-rgb), 0) 72%); }
.dk-tl svg { position: relative; z-index: 1; width: 24px; height: 24px; filter: drop-shadow(0 1.6px 2.2px rgba(6, 22, 20, .35)); }
.dk-tl > * { position: relative; z-index: 1; }
.dk-tl__name { font-weight: 600; }
.dk-tl__img { width: 30px; height: 30px; border-radius: 8px; display: block; }
/* 整块图片的磁贴：图片铺满、名字压在底部 */
.dk-tl--hasimg { padding: 0; overflow: hidden; }
.dk-tl--hasimg::before { display: none; }
.dk-tl--hasimg .dk-tl__img { position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%; border-radius: inherit; object-fit: cover; }
.dk-tl--hasimg::after { content: ""; position: absolute; inset: 0; z-index: 1; border-radius: inherit; pointer-events: none;
  background: linear-gradient(180deg, rgba(0, 0, 0, 0) 46%, rgba(0, 0, 0, .58)); }
.dk-tl--hasimg .dk-tl__name { position: relative; z-index: 2; padding: 0 10px 9px; }
.dk-tl--mint { background: linear-gradient(155deg, #63e6c6, #0b8a71); }
.dk-tl--sun { background: linear-gradient(155deg, #ffd580, #d97a15); }
.dk-tl--sky { background: linear-gradient(155deg, #7ecbff, #1c5dbd); }
.dk-tl--violet { background: linear-gradient(155deg, #c9b2ff, #5c3cc4); }
.dk-tl--indigo { background: linear-gradient(155deg, #9aa2ff, #2f359e); }
.dk-tl--slate { background: linear-gradient(155deg, #cfdae6, #4f6478); }
.dk-tl--berry { background: linear-gradient(155deg, #ffa9d5, #c72a80); }
.dk-tl--flame { background: linear-gradient(155deg, #ffbb7d, #b83d05); }
/* 系统自带工具（开始菜单右侧）：计算器 / 时钟日历 */
.dk-tl--tool { background: linear-gradient(155deg, #8fe3cd, #12806b); }
.dk-tl--alarm { background: linear-gradient(155deg, #9fb8ff, #2b46b8); }
.dk-tl--wide { grid-column: span 2; }
.dk-start__foot { grid-column: 1 / -1; height: 48px; display: flex; align-items: center; gap: 10px; padding: 0 16px; background: rgba(0, 0, 0, .28); border-top: 1px solid rgba(var(--wb-ink-rgb), .1); }
.dk-start__av { width: 26px; height: 26px; border-radius: 50%; background: linear-gradient(150deg, #d8e8ff, #9db6d8); }
.dk-start__foot b { font-size: 12px; font-weight: 500; }
.dk-start__foot i { font-size: 11px; font-style: normal; color: var(--dk-ink-45); }
.dk-start__power { margin-left: auto; display: flex; align-items: center; gap: 12px; }
.dk-start__power button { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; border: 0; border-radius: 9px; background: transparent; color: var(--dk-ink-75); }
.dk-start__power button:hover { background: rgba(var(--wb-ink-rgb), .14); color: var(--wb-ink); }
/* 开始菜单右下角那颗「退出登录」——Win10 电源键待的那个位置。
   平时和旁边那颗「帮助与文档」一样安静，鼠标停上去才泛红。
   整个工作台就这么一个「舱门」（桌面右下角原来那颗红钮已经撤掉），
   点下去先弹确认卡，确认了才真的退。 */
.dk-start__power .dk-start__quit:hover { background: rgba(255, 65, 65, .24); color: #ffb8b8; }
.dk-start__power .dk-start__quit:active { transform: translateY(1px); }

/* ---------- 任务栏 ---------- */
/* ---------- 计算器（开始菜单磁贴打开，日常算账用） ---------- */
.dk-calc {
  position: absolute;
  right: 12px;
  bottom: calc(var(--dk-bar-h) + 8px);
  z-index: 42;
  width: 268px;
  padding: 12px;
  border-radius: 10px;
  background: rgba(16, 26, 26, .96);
  backdrop-filter: var(--dk-blur);
  -webkit-backdrop-filter: var(--dk-blur);
  box-shadow: 0 26px 60px rgba(0, 0, 0, .55), inset 0 0 0 1px rgba(var(--wb-ink-rgb), .14);
  animation: dkStartIn .16s var(--dk-ease);
}
.dk-calc__head { display: flex; align-items: center; margin-bottom: 8px; font-size: 11.5px; color: var(--dk-ink-60); }
.dk-calc__close { margin-left: auto; width: 22px; height: 22px; border: 0; border-radius: 6px; background: transparent; color: var(--dk-ink-60); font: inherit; font-size: 15px; line-height: 1; cursor: pointer; }
.dk-calc__close:hover { background: rgba(var(--wb-ink-rgb), .14); color: var(--wb-ink); }
.dk-calc__screen { margin-bottom: 10px; padding: 10px 12px; border-radius: 4px; background: rgba(var(--wb-ink-rgb), .06); box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .07); text-align: right; }
.dk-calc__expr { min-height: 14px; font-size: 11px; color: var(--dk-ink-45); }
.dk-calc__out { font-size: 26px; font-weight: 600; color: var(--wb-ink); font-variant-numeric: tabular-nums; overflow: hidden; text-overflow: ellipsis; }
.dk-calc__keys { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
.dk-calc__key { height: 38px; border: 0; border-radius: 4px; background: rgba(var(--wb-ink-rgb), .08); color: var(--wb-ink); font: inherit; font-size: 14px; cursor: pointer; transition: background-color .14s var(--dk-ease); }
.dk-calc__key:hover { background: rgba(var(--wb-ink-rgb), .16); }
.dk-calc__key--fn { background: rgba(var(--wb-ink-rgb), .05); color: var(--dk-ink-75); }
.dk-calc__key--op { color: #a9efdd; }
.dk-calc__key--op.is-on { background: rgba(127, 216, 195, .22); color: #d8fff4; }
.dk-calc__key--eq { background: #7fd8c3; color: #0d211c; font-weight: 600; }
.dk-calc__key--eq:hover { background: #8fe3cd; }
.dk-calc__hist { margin-top: 10px; max-height: 108px; overflow: auto; }
.dk-calc__row { display: flex; align-items: center; gap: 8px; width: 100%; padding: 6px 8px; border: 0; border-radius: 4px; background: transparent; color: var(--dk-ink-60); font: inherit; font-size: 11.5px; text-align: left; cursor: pointer; }
.dk-calc__row:hover { background: rgba(var(--wb-ink-rgb), .08); }
.dk-calc__row b { margin-left: auto; color: var(--wb-ink); font-weight: 600; }
.dk-calc__hint { margin: 0; font-size: 11px; line-height: 1.6; color: var(--dk-ink-45); }

/* ---------- 日历 / 时钟（点右下角的时间弹出） ---------- */
.dk-cal {
  position: absolute;
  right: 8px;
  bottom: calc(var(--dk-bar-h) + 8px);
  z-index: 42;
  width: 300px;
  padding: 14px;
  border-radius: 12px;
  background: rgba(16, 26, 26, .96);
  backdrop-filter: var(--dk-blur);
  -webkit-backdrop-filter: var(--dk-blur);
  box-shadow: 0 26px 60px rgba(0, 0, 0, .55), inset 0 0 0 1px rgba(var(--wb-ink-rgb), .14);
  animation: dkStartIn .16s var(--dk-ease);
}
.dk-cal__head { display: flex; align-items: center; gap: 12px; }
.dk-cal__face { width: 62px; height: 62px; flex: none; }
.dk-cal__ring { fill: rgba(var(--wb-ink-rgb), .04); stroke: rgba(var(--wb-ink-rgb), .22); stroke-width: 2.4; }
.dk-cal__tick { stroke: rgba(var(--wb-ink-rgb), .34); stroke-width: 2; stroke-linecap: round; }
.dk-cal__hand { stroke: #fff; stroke-linecap: round; }
.dk-cal__hand--h { stroke-width: 4.2; }
.dk-cal__hand--m { stroke-width: 3; stroke: #d8fff4; }
.dk-cal__hand--s { stroke-width: 1.3; stroke: #7fd8c3; }
.dk-cal__pin { fill: #7fd8c3; }
.dk-cal__now { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dk-cal__now b { font-size: 22px; font-weight: 600; letter-spacing: .5px; color: var(--wb-ink); font-variant-numeric: tabular-nums; }
.dk-cal__now span { font-size: 11.5px; color: var(--dk-ink-75); }
.dk-cal__now i { font-style: normal; font-size: 12.5px; color: var(--dk-ink-45); }
.dk-cal__close {
  margin-left: auto; align-self: flex-start; width: 22px; height: 22px; border: 0; border-radius: 6px;
  background: transparent; color: var(--dk-ink-60); font: inherit; font-size: 15px; line-height: 1; cursor: pointer;
}
.dk-cal__close:hover { background: rgba(var(--wb-ink-rgb), .14); color: var(--wb-ink); }
.dk-cal__nav { display: flex; align-items: center; gap: 6px; margin: 12px 0 8px; }
.dk-cal__nav b { font-size: 12px; font-weight: 600; color: var(--wb-ink); }
.dk-cal__arrow {
  width: 24px; height: 24px; border: 0; border-radius: 8px; background: rgba(var(--wb-ink-rgb), .08);
  color: var(--dk-ink-75); font: inherit; font-size: 15px; line-height: 1; cursor: pointer;
  transition: background-color .14s var(--dk-ease);
}
.dk-cal__arrow:hover { background: rgba(var(--wb-ink-rgb), .18); color: var(--wb-ink); }
.dk-cal__today {
  margin-left: auto; height: 24px; padding: 0 10px; border: 0; border-radius: 999px;
  background: rgba(127, 216, 195, .18); color: #b6f0e2; font: inherit; font-size: 11px; cursor: pointer;
  transition: background-color .14s var(--dk-ease);
}
.dk-cal__today:hover { background: rgba(127, 216, 195, .32); }
.dk-cal__week, .dk-cal__grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 2px; }
.dk-cal__week { margin-bottom: 2px; }
.dk-cal__week span { text-align: center; font-size: 12.5px; color: var(--dk-ink-45); }
.dk-cal__day {
  height: 30px; border: 0; border-radius: 9px; background: transparent; color: var(--dk-ink-90);
  font: inherit; font-size: 11.5px; cursor: pointer; font-variant-numeric: tabular-nums;
  transition: background-color .14s var(--dk-ease), color .14s var(--dk-ease);
}
.dk-cal__day:hover { background: rgba(var(--wb-ink-rgb), .14); color: var(--wb-ink); }
.dk-cal__day.is-other { color: var(--dk-ink-45); opacity: .65; }
.dk-cal__day.is-today { background: rgba(127, 216, 195, .2); color: #d8fff4; font-weight: 600; box-shadow: inset 0 0 0 1px rgba(127, 216, 195, .5); }
.dk-cal__day.is-sel { background: #7fd8c3; color: #0d211c; font-weight: 600; }

.dk-bar {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: var(--dk-bar-h);
  z-index: 45;
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 0 6px;
  background: rgba(12, 20, 20, .82);
  backdrop-filter: var(--dk-blur);
  -webkit-backdrop-filter: var(--dk-blur);
  box-shadow: inset 0 1px 0 rgba(var(--wb-ink-rgb), .1);
}
.dk-bar__left { display: flex; align-items: center; gap: 2px; min-width: 0; }
/* 正在运行的 App：单独一层容器（搜索框要插在「开始」和它们中间） */
.dk-bar__wins { display: flex; align-items: center; gap: 2px; min-width: 0; }
.dk-tb { position: relative; height: 40px; padding: 0 11px; border: 0; border-radius: 7px; background: transparent; color: var(--dk-ink-90); display: inline-flex; align-items: center; gap: 8px; transition: background-color .16s var(--dk-ease); }
.dk-tb:hover { background: rgba(var(--wb-ink-rgb), .14); }
.dk-tb svg { width: 17px; height: 17px; }
.dk-tb__label { font-size: 11.5px; white-space: nowrap; }
.dk-tb--gear { color: var(--wb-ink); }
/* 开始键：和搜索圆钮 / 助理小球 / 通知铃**同尺寸**（36×36），一排看过去一样大 */
.dk-tb--start { width: 36px; height: 36px; border-radius: 9px; justify-content: center; padding: 0; }
.dk-tb--start svg { width: 18px; height: 18px; }
.dk-tb--run { padding: 0 12px; max-width: 190px; }
.dk-tb--run .dk-tb__label { overflow: hidden; text-overflow: ellipsis; }
.dk-tb.is-active { background: rgba(var(--wb-ink-rgb), .18); }
.dk-tb.is-active::after, .dk-tb.is-run::after { content: ""; position: absolute; left: 12px; right: 12px; bottom: -1px; height: 2px; border-radius: 2px; background: #8fe3cd; }
.dk-tb.is-run::after { left: 34px; right: 12px; background: rgba(var(--wb-ink-rgb), .45); }
.dk-tb.is-min { opacity: .72; }
.dk-tb__dot { position: absolute; right: 2px; top: 2px; min-width: 19px; height: 19px; padding: 0 5px; border-radius: 999px; background: #c82a1c; color: var(--wb-ink); font-size: 11.5px; font-weight: 600; line-height: 19px; text-align: center; }
.dk-bar__sep { width: 1px; height: 22px; margin: 0 6px; background: rgba(var(--wb-ink-rgb), .18); }
.dk-bar__spacer { flex: 1; }
.dk-showdesk { width: 8px; height: 40px; margin-left: 2px; border: 0; border-left: 1px solid rgba(var(--wb-ink-rgb), .22); background: transparent; }
.dk-showdesk:hover { background: rgba(var(--wb-ink-rgb), .12); }

/* ---------- 任务栏搜索：一颗圆钮，点一下向左展开成输入框 ----------
   （Uiverse「vnuny」那颗搜索框的路子：藏一个 checkbox 当开关，:checked 把宽度收回、
   输入框宽高归零、图标补内边距 —— 宽度 190 / 圆角 160 / 0.3s ease / 那几条内边距的
   数字按任务栏高度等比缩过；纯黑底换成系统这一层的玻璃色，
   星环驾驶舱下再压一层青色描边。展开时向右长，所以左边缘是钉住的 —— 结果面板
   贴它的左上角就不会跟着晃。）

   位置在**竖线右边**（左边那组「系统设置 + 开始按钮」自己是一整块特殊按钮，被竖线隔开），
   见 index.html 的 #dkSearch。

   收起态是 36×36 的一格，和托盘里那颗助理小球、那口铃、左边那颗开始键**同尺寸**
   —— 任务栏上四颗一排看过去一样大；但格里画的那圈只有 **30**（`.dk-search__box::after`），
   满格 36 的圆扣住一枚 16 的放大镜太笨。图标在圆里是正中：收起时把原版那两条
   用来对齐输入框文字的内边距（padding-top / padding-right）归零，归零之前实测
   图标中心比圆心偏左 4px、偏下 2px。 */
.dk-search { position: relative; width: fit-content; flex: none; box-sizing: border-box; }
.dk-search__cb {
  box-sizing: border-box; position: absolute; right: 4px; top: 4px; z-index: 9;
  width: 28px; height: 28px; margin: 0; padding: 0;
  appearance: none; -webkit-appearance: none; cursor: pointer; border: 0; outline: none;
  transition: right .3s ease;
}
.dk-search__cb:focus { border: none; outline: none; }
.dk-search__cb:checked { right: 4px; }
.dk-search__box {
  box-sizing: border-box; position: relative;
  width: 190px; height: 36px;
  display: flex; flex-direction: row-reverse; align-items: center; justify-content: center;
  border-radius: 160px;
  background: rgba(16, 30, 32, .62);
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .16), 0 2px 8px rgba(0, 0, 0, .22);
  transition: all .3s ease;
}
/* 光标压在放大镜上时，真正接住鼠标的是盖在圆心那层 checkbox（28×28，和 box 是**兄弟**）——
   所以「hover 到整体」这件事两条路都要写，否则停正中间反倒没反应 */
.dk-search__box:hover,
.dk-search__cb:hover ~ .dk-search__box { background: rgba(26, 46, 48, .74); }
.dk-search__cb:focus-visible ~ .dk-search__box { box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .55), 0 0 0 3px rgba(var(--wb-ink-rgb), .16); }
.dk-search__input {
  box-sizing: border-box; height: 100%; width: 136px;
  padding-bottom: 4px; padding-left: 10px;
  background-color: transparent; border: none; outline: none;
  font: inherit; font-size: 12.5px; color: var(--wb-ink); transition: all .3s ease;
}
.dk-search__input::placeholder { color: rgba(var(--wb-ink-rgb), .5); }
.dk-search__ico { box-sizing: border-box; position: relative; z-index: 1; width: fit-content; padding-top: 5px; transition: all .3s ease; }
.dk-search__ico svg { box-sizing: border-box; width: 16px; height: 16px; color: var(--wb-ink); }
/* 收起态那一圈不是 36 的满格圆，而是**正中一颗 30 的小圆**（格里留一圈空气）——
   36 的满格圆扣住一枚 16 的放大镜看着太笨，收小一圈就利索了。
   格子仍是 36（点起来还是那么好点，和旁边三颗的排面也齐）。
   下面这条带 `.dk` 前缀：星环驾驶舱那套 `.dk[data-shell="hud"] .dk-search__box`
   权重比裸的 `:checked ~` 高，不带前缀压不过它 —— 收起态会留着一块 36 的深蓝底。 */
.dk-search__box::after {
  content: ""; position: absolute; left: 50%; top: 50%; z-index: 0;
  width: 30px; height: 30px; margin: -15px 0 0 -15px; border-radius: 50%;
  background: rgba(16, 30, 32, .62);
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .16);
  opacity: 0; pointer-events: none;
  transition: opacity .24s ease, background .2s ease, box-shadow .2s ease,
              width .24s ease, height .24s ease, margin .24s ease, border-radius .24s ease;
}
.dk .dk-search__cb:checked ~ .dk-search__box { width: 36px; background: transparent; box-shadow: none; }
.dk-search__cb:checked ~ .dk-search__box::after { opacity: 1; }
.dk-search__cb:checked ~ .dk-search__box .dk-search__input { width: 0; height: 0; padding: 0; }
.dk-search__cb:checked ~ .dk-search__box .dk-search__ico { padding-top: 0; padding-right: 0; }
/* 悬停时不要「原地亮起一颗圆」：那颗 30 的小圆平滑长成**和开始键同款的圆角方框**
   （36×36 / 圆角 9 / 白 .14）—— 一排按钮悬停的形状就统一了，系统看着才干净。
   两个选择器是一件事的两条路：鼠标落在放大镜上时压住的是那颗 checkbox（它和 box 是兄弟），
   只写 `~ .dk-search__box:hover` 的话，光标停在放大镜正中间反而什么都不发生 */
.dk-search__cb:checked:hover ~ .dk-search__box::after,
.dk-search__cb:checked ~ .dk-search__box:hover::after {
  width: 36px; height: 36px; margin: -18px 0 0 -18px; border-radius: 9px;
  background: rgba(var(--wb-ink-rgb), .14); box-shadow: none;
}
/* 键盘走到它身上时，光圈跟着那颗小圆走，不是那格 36 的空格子 */
.dk-search__cb:checked:focus-visible ~ .dk-search__box { box-shadow: none; }
.dk-search__cb:checked:focus-visible ~ .dk-search__box::after {
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .55), 0 0 0 3px rgba(var(--wb-ink-rgb), .16);
}

/* 星环驾驶舱：同一颗搜索框，底子换成本项目的深蓝 + 青色描边 */
.dk[data-shell="hud"] .dk-search__box {
  background: rgba(8, 26, 38, .74);
  box-shadow: inset 0 0 0 1px var(--hud-line), 0 0 16px rgba(80, 200, 255, .12);
}
.dk[data-shell="hud"] .dk-search__box:hover,
.dk[data-shell="hud"] .dk-search__cb:hover ~ .dk-search__box { background: rgba(13, 40, 56, .84); }
.dk[data-shell="hud"] .dk-search__cb:checked ~ .dk-search__box:hover { background: rgba(110, 240, 255, .18); }
.dk[data-shell="hud"] .dk-search__cb:focus-visible ~ .dk-search__box { box-shadow: inset 0 0 0 1px var(--hud-cyan), 0 0 18px rgba(110, 240, 255, .34); }
/* 星环驾驶舱下的收起态：还是那颗 30 的小圆，只是换成深蓝底 + 青色描边 */
.dk[data-shell="hud"] .dk-search__box::after {
  background: rgba(8, 26, 38, .74);
  box-shadow: inset 0 0 0 1px var(--hud-line), 0 0 16px rgba(80, 200, 255, .12);
}
.dk[data-shell="hud"] .dk-search__cb:checked ~ .dk-search__box,
.dk[data-shell="hud"] .dk-search__cb:checked ~ .dk-search__box:hover { background: transparent; box-shadow: none; }
/* （收起态的悬停方框两套壳**共用上面那条白的**：开始键 / 铃 / 放大镜悬停时一个颜色、一个形状，
   星环驾驶舱下不再单独染青 —— 一排按钮整整齐齐才叫干净） */
.dk[data-shell="hud"] .dk-search__cb:checked:focus-visible ~ .dk-search__box::after {
  box-shadow: inset 0 0 0 1px var(--hud-cyan), 0 0 18px rgba(110, 240, 255, .34);
}

/* 任务栏右侧托盘：沿用顶栏那几个全局动作（新建 / 搜索 / 通知 / 头像） */
/* position: relative —— 托盘里的新建 / 搜索弹层与账号菜单按托盘定位，不是按整块屏幕 */
.dk-tray { position: relative; display: flex; align-items: center; gap: 8px; padding: 0 6px; }
/* 搜索已经搬到任务栏左边（#dkSearch），托盘里这一颗只在手机出现（见 phone.css） */
.dk-tray .dk-tray__search { display: none; }
/* 36 —— 和左边那颗开始键、那颗搜索圆钮对齐（托盘里这几颗：助理小球 / 通知铃 / 手机上的放大镜） */
.dk-tray .wb-iconbtn { position: relative; width: 36px; height: 36px; border-radius: 9px; background: transparent; backdrop-filter: none; -webkit-backdrop-filter: none; }
.dk-tray .wb-iconbtn:hover { background: rgba(var(--wb-ink-rgb), .16); }
.dk-tray .wb-iconbtn .wb-icon { width: 16px; height: 16px; }
.dk-tray .wb-iconbtn__badge { top: -3px; right: -3px; min-width: 19px; height: 19px; font-size: 11.5px; line-height: 19px; }
/* ---------- 通知那口铃：和开始键 / 放大镜同一副排面，多出来的只有那下摇铃 ----------
   （Uiverse「vinodjangid07」那颗铃铛的路子：悬停摇铃 + 按下缩一下，摇铃的角度与节奏原样保留。
     原来那口铃自己是一颗深色圆钮 —— 悬停时亮起来的是一颗「圆」，和开始键的圆角方框不是一套，
     现在改成和旁边几颗完全一样：静息透明、悬停亮一个 36×36 / 圆角 9 的方框） */
@keyframes dkBellRing {
  0%, 100% { transform-origin: top; }
  15% { transform: rotateZ(10deg); }
  30% { transform: rotateZ(-10deg); }
  45% { transform: rotateZ(5deg); }
  60% { transform: rotateZ(-5deg); }
  75% { transform: rotateZ(2deg); }
}
.dk-tray .wb-iconbtn.dk-bell {
  border-radius: 9px; background: transparent; box-shadow: none;
  transition: background-color .16s var(--dk-ease, ease), box-shadow .16s var(--dk-ease, ease), transform .3s var(--dk-ease, ease);
}
/* 铃舌吊在顶上，所以甩的支点在 top —— 不写清楚它会绕自己的中心转，看着像个风车 */
.dk-bell .wb-icon {
  width: 17px; height: 17px; color: var(--wb-ink);
  transform-origin: top center;
}
.dk-tray .wb-iconbtn.dk-bell:hover {
  transform: none;                     /* 摇铃已经把「有反应」说清楚了，不再跟着抬 1px */
  background: rgba(var(--wb-ink-rgb), .16);   /* 和开始键（.14）几乎是同一档，只是托盘这一排稍微提亮点 */
  box-shadow: none;
}
.dk-bell:hover .wb-icon,
.dk-bell:focus-visible .wb-icon { animation: dkBellRing .9s both; }
.dk-tray .wb-iconbtn.dk-bell:active { transform: scale(.8); }
.dk-tray .wb-iconbtn.dk-bell[aria-expanded="true"] {
  background: rgba(110, 240, 255, .16);
  box-shadow: inset 0 0 0 1px rgba(110, 240, 255, .4);
  color: var(--wb-ink);
}
/* 圆钮只有 36px，原来那只 19px 的红点会把铃身吃掉一半 —— 单独收小一档，挪到圆的肩上去 */
.dk-tray .wb-iconbtn.dk-bell .wb-iconbtn__badge {
  top: -3px; right: -3px; min-width: 17px; height: 17px; font-size: 10.5px; line-height: 17px;
}
.dk-tray .wb-avatar { width: 28px; height: 28px; }
/* 搜索结果面板（#wbPop）已经搬出托盘：它是桌面这一层的浮层，贴在左边那颗搜索框上方，
   位置由 shellSearchPlace() 现算（见 desktop.js），所以这里只抬一下层级 —— 要压过任务栏 */
.dk > .wb-pop { z-index: 46; }
.dk-tray .wb-usermenu { top: auto; bottom: 52px; right: 0; }
.dk-acctpark { display: none; }   /* 账号节点的隐藏车位：开始菜单一开就把它搬进用户卡片 */
.dk-start__user { display: flex; align-items: center; }
.dk-start__foot .wb-avatar { width: 28px; height: 28px; }
.dk-start__foot .wb-avatar:hover { transform: none; box-shadow: 0 0 0 2px rgba(169, 239, 221, .55); }
.dk-start__foot .wb-usermenu { top: auto; bottom: 52px; left: 10px; right: auto; z-index: 60; }
.dk-tray__clock {
  min-width: 64px; padding: 5px 8px; border: 0; border-radius: 9px; background: transparent;
  color: var(--dk-ink-90); font: inherit; font-size: 11px; line-height: 1.25; text-align: right;
  cursor: pointer; transition: background-color .16s var(--dk-ease);
}
.dk-tray__clock:hover { background: rgba(var(--wb-ink-rgb), .16); }
.dk-tray__clock[aria-expanded="true"] { background: rgba(var(--wb-ink-rgb), .2); }
.dk-tray__av { width: 26px; height: 26px; border-radius: 50%; background: linear-gradient(150deg, #dbe9ff, #9db6d8); border: 1px solid rgba(var(--wb-ink-rgb), .4); }

/* 提示条落在桌面外壳里（WB.toast 的宿主是 .dk） */
.dk > .wb-toast { bottom: 74px; }

/* ---------- 通知中心：托盘最右边那颗铃铛点开，从右侧滑出 ---------- */
.dk-nc {
  position: absolute;
  right: 8px;
  top: 10px;
  bottom: calc(var(--dk-bar-h) + 10px);
  z-index: 44;
  width: 330px;
  display: flex;
  flex-direction: column;
  border-radius: 12px;
  overflow: hidden;
  background: rgba(16, 26, 26, .96);
  backdrop-filter: var(--dk-blur);
  -webkit-backdrop-filter: var(--dk-blur);
  box-shadow: 0 30px 70px rgba(0, 0, 0, .58), inset 0 0 0 1px rgba(var(--wb-ink-rgb), .14);
  animation: dkNcIn .3s var(--dk-ease);
}
@keyframes dkNcIn { from { opacity: .25; transform: translateX(102%); } to { opacity: 1; transform: none; } }
.dk-nc__head { display: flex; align-items: center; gap: 8px; padding: 10px 10px 9px 13px; border-bottom: 1px solid rgba(var(--wb-ink-rgb), .1); }
.dk-nc__head b { font-size: 12.5px; font-weight: 600; }
.dk-nc__count { padding: 1px 7px; border-radius: 999px; background: rgba(127, 216, 195, .18); color: #b6f0e2; font-size: 12.5px; }
.dk-nc__clear { margin-left: auto; padding: 3px 8px; border: 0; border-radius: 7px; background: transparent; color: var(--dk-ink-60); font: inherit; font-size: 11px; cursor: pointer; transition: background-color .14s var(--dk-ease); }
.dk-nc__clear:hover { background: rgba(var(--wb-ink-rgb), .12); color: var(--wb-ink); }
.dk-nc__clear:disabled { opacity: .4; cursor: default; background: transparent; }
.dk-nc__close { width: 22px; height: 22px; border: 0; border-radius: 7px; background: transparent; color: var(--dk-ink-60); font: inherit; font-size: 14px; line-height: 1; cursor: pointer; }
.dk-nc__close:hover { background: rgba(var(--wb-ink-rgb), .14); color: var(--wb-ink); }
.dk-nc__list { flex: 1; min-height: 0; overflow: auto; padding: 8px; display: flex; flex-direction: column; gap: 6px; }
.dk-nc__card {
  position: relative; display: flex; align-items: center; gap: 9px; width: 100%; padding: 7px 10px 7px 12px;
  border: 0; border-radius: 9px; background: rgba(var(--wb-ink-rgb), .06); color: var(--wb-ink);
  font: inherit; text-align: left; cursor: pointer; box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .06);
  transition: background-color .16s var(--dk-ease), transform .16s var(--dk-ease);
}
.dk-nc__card:hover { background: rgba(var(--wb-ink-rgb), .12); transform: translateY(-1px); }
.dk-nc__card::before { content: ""; position: absolute; left: 0; top: 8px; bottom: 8px; width: 2px; border-radius: 2px; background: #7fd8c3; }
.dk-nc__card--wait::before { background: #ffc773; }
.dk-nc__card--bad::before { background: #ff7f6d; }
.dk-nc__card--sys::before { background: #8fb8ff; }
.dk-nc__ico { flex: none; display: flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 8px; background: rgba(var(--wb-ink-rgb), .08); }
.dk-nc__ico svg, .dk-nc__ico img { width: 16px; height: 16px; border-radius: 5px; color: #a9efdd; }
.dk-nc__wrap { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.dk-nc__row { display: flex; align-items: baseline; gap: 8px; }
.dk-nc__row b { flex: 1 1 auto; min-width: 0; font-size: 11.5px; font-weight: 600; line-height: 1.35; }
.dk-nc__row i { margin-left: auto; flex: none; font-style: normal; font-size: 12px; line-height: 1.35; color: var(--dk-ink-45); white-space: nowrap; }
.dk-nc__body { display: flex; align-items: baseline; gap: 6px; min-width: 0; }
.dk-nc__app { flex: none; font-size: 12px; font-weight: 600; line-height: 1.45; color: var(--dk-ink-45); }
.dk-nc__text { flex: 1 1 auto; min-width: 0; font-size: 12.5px; line-height: 1.45; color: var(--dk-ink-75); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.dk-nc__empty { margin: auto; display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 30px 18px; text-align: center; color: var(--dk-ink-45); }
.dk-nc__empty b { font-size: 12.5px; font-weight: 600; color: var(--dk-ink-75); }
.dk-nc__empty span { font-size: 11px; line-height: 1.6; }

/* ---------- 右上角横幅：App 有新消息时短暂出现，点一下预览 ---------- */
/* 平时贴着顶边走（更靠上）；一旦有窗口最大化，自动下移到 47px，
   让开标题栏右上角的三个按钮（最小化 / 还原 / 关闭），不会压住「×」 */
.dk-banners { position: absolute; top: 13px; right: 10px; z-index: 58; display: flex; flex-direction: column; gap: 8px; width: 328px; pointer-events: none; }
.dk[data-maxwin="1"] .dk-banners { top: 47px; }
.dk-banner {
  position: relative; pointer-events: auto; display: flex; align-items: center; gap: 10px;
  padding: 9px 12px 10px; border-radius: 11px; overflow: hidden;
  background: rgba(20, 31, 31, .95);
  backdrop-filter: var(--dk-blur);
  -webkit-backdrop-filter: var(--dk-blur);
  box-shadow: 0 22px 48px rgba(0, 0, 0, .5), inset 0 0 0 1px rgba(var(--wb-ink-rgb), .14);
  color: var(--wb-ink); cursor: pointer;
  animation: dkBannerIn .26s var(--dk-ease);
  transition: transform .24s var(--dk-ease), opacity .24s var(--dk-ease);
}
@keyframes dkBannerIn { from { opacity: 0; transform: translateX(30px) scale(.98); } to { opacity: 1; transform: none; } }
.dk-banner:hover { background: rgba(27, 41, 41, .97); }
.dk-banner.is-out { opacity: 0; transform: translateX(32px) scale(.97); }
.dk-banner__ico { flex: none; display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 8px; background: rgba(var(--wb-ink-rgb), .08); }
.dk-banner__ico svg, .dk-banner__ico img { width: 18px; height: 18px; border-radius: 5px; color: #a9efdd; }
.dk-banner__wrap { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.dk-banner__row { display: flex; align-items: baseline; gap: 8px; padding-right: 14px; }
.dk-banner__row b { flex: 1 1 auto; min-width: 0; font-size: 12px; font-weight: 600; line-height: 1.36; }
.dk-banner__row i { margin-left: auto; flex: none; font-style: normal; font-size: 12px; color: var(--dk-ink-45); white-space: nowrap; }
.dk-banner__text { font-size: 12.5px; line-height: 1.45; color: var(--dk-ink-75); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.dk-banner__close { position: absolute; top: 6px; right: 6px; width: 18px; height: 18px; border: 0; border-radius: 5px; background: transparent; color: var(--dk-ink-45); font: inherit; font-size: 13px; line-height: 1; cursor: pointer; opacity: 0; transition: opacity .16s var(--dk-ease); }
.dk-banner:hover .dk-banner__close { opacity: 1; }
.dk-banner__close:hover { background: rgba(var(--wb-ink-rgb), .16); color: var(--wb-ink); }
.dk-banner__bar { position: absolute; left: 0; bottom: 0; height: 2px; width: 100%; transform-origin: left; background: linear-gradient(90deg, #7fd8c3, #3f9c88); animation: dkBarOut 6.8s linear forwards; }
@keyframes dkBarOut { from { transform: scaleX(1); } to { transform: scaleX(0); } }

/* ==========================================================================
  「我的企业」窗口：Win10 应用版式
   左侧分组导航（选中项带左侧强调色条）+ 右侧内容区（Fluent 平面卡片、
   设置行、磁贴、列表行）。强调色沿用品牌薄荷绿，相当于 Windows 的自定义强调色。
   ========================================================================== */
.dk-win[data-app="board"] .dk-win__body > .wb-content {
  display: grid;
  grid-template-columns: 210px minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr);
  grid-template-areas: "nav body";
  gap: 12px 18px;
  padding: 14px 18px 16px;
  overflow: hidden;
}
.dk-win[data-app="board"] .wb-viewhead { align-items: center; padding: 0 0 12px; border-bottom: 1px solid rgba(var(--wb-ink-rgb), .09); }
.dk-win[data-app="board"] .wb-viewhead__title { font-size: 19px; font-weight: 600; letter-spacing: 0; gap: 8px; }
.dk-win[data-app="board"] .wb-viewhead__sub { margin-top: 4px; font-size: 11.5px; color: var(--dk-ink-45); }
.dk-win[data-app="board"] .wb-viewhead__tools { gap: 8px; }

/* 左侧导航 */
.dk-win[data-app="board"] .wb-boardtabs {
  grid-area: nav;
  display: flex;
  flex-direction: column;
  gap: 2px;
  margin: 0;
  padding: 0;
  height: auto;
  background: none;
  box-shadow: none;
}
.dk-win[data-app="board"] .wb-boardtabs button {
  position: relative;
  height: 34px;
  padding: 0 10px 0 14px;
  border-radius: 4px;
  background: transparent;
  box-shadow: none;
  color: var(--dk-ink-90);
  font-size: 12.5px;
  font-weight: 400;
  justify-content: flex-start;
  gap: 9px;
}
.dk-win[data-app="board"] .wb-boardtabs button svg { width: 15px; height: 15px; color: var(--dk-ink-60); }
.dk-win[data-app="board"] .wb-boardtabs button:hover { background: rgba(var(--wb-ink-rgb), .07); }
.dk-win[data-app="board"] .wb-boardtabs button.is-active { background: rgba(var(--wb-ink-rgb), .1); color: var(--wb-ink); font-weight: 600; }
.dk-win[data-app="board"] .wb-boardtabs button.is-active svg { color: #a9efdd; }
.dk-win[data-app="board"] .wb-boardtabs button.is-active::before {
  content: "";
  position: absolute;
  left: 0; top: 8px; bottom: 8px;
  width: 3px;
  border-radius: 2px;
  background: #7fd8c3;
}

/* 右侧内容 */
.dk-win[data-app="board"] .wb-boardbody { grid-area: body; overflow: auto; padding-right: 4px; }
.dk-win[data-app="board"] .wb-boardbody::-webkit-scrollbar { width: 8px; }
.dk-win[data-app="board"] .wb-boardbody::-webkit-scrollbar-thumb { background: rgba(var(--wb-ink-rgb), .18); border-radius: 999px; }
.dk-win[data-app="board"] .wb-cop { gap: 12px; }

/* Fluent 平面卡片：小圆角、1px 描边、去掉毛玻璃 */
.dk-win[data-app="board"] .wb-glasscard,
.dk-win[data-app="board"] .wb-panelblock {
  border-radius: 6px;
  background: rgba(var(--wb-ink-rgb), .055);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .08);
}
.dk-win[data-app="board"] .wb-cop .wb-panelblock { padding: 14px 16px; }
.dk-win[data-app="board"] .wb-panelblock__head { margin-bottom: 10px; }
.dk-win[data-app="board"] .wb-panelblock__head h3 { font-size: 13.5px; font-weight: 600; gap: 8px; }
.dk-win[data-app="board"] .wb-panelblock__head h3 svg { width: 15px; height: 15px; color: var(--dk-ink-60); }

.dk-win[data-app="board"] .wb-cop__brand { gap: 12px; }
.dk-win[data-app="board"] .wb-cop__logo { width: 40px; height: 40px; border-radius: 6px; background: rgba(127, 216, 195, .16); color: #a9efdd; }
.dk-win[data-app="board"] .wb-cop__logo svg { width: 20px; height: 20px; }
.dk-win[data-app="board"] .wb-cop__brand h3 { font-size: 15.5px; }
.dk-win[data-app="board"] .wb-cop__intro { font-size: 12px; line-height: 1.7; color: var(--dk-ink-75); }

/* 档案 / 资料 = Win10 设置行：左标签、右取值、1px 分隔线 */
.dk-win[data-app="board"] .wb-kv,
.dk-win[data-app="board"] .wb-kv--3 { display: block; margin: 4px 0 2px; }
.dk-win[data-app="board"] .wb-kv .wb-field {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 38px;
  padding: 5px 8px;          /* 与卡片边框之间留出呼吸感，别贴着框 */
  gap: 12px;
  box-shadow: inset 0 -1px 0 rgba(var(--wb-ink-rgb), .07);
}
.dk-win[data-app="board"] .wb-kv .wb-field:last-child { box-shadow: none; }
.dk-win[data-app="board"] .wb-kv .wb-field__k { font-size: 11.5px; color: var(--dk-ink-45); }
.dk-win[data-app="board"] .wb-kv .wb-field__v { font-size: 12.5px; color: var(--wb-ink); text-align: right; }

/* 我的资料 · 个人资料：左边一列资料卡 + 右边分组卡片（没有外层标题行） */
.dk-win[data-app="board"] .wb-profilegrid { grid-template-columns: 268px minmax(0, 1fr); gap: 12px; }
.dk-win[data-app="board"] .wb-profile__main { overflow: visible; gap: 12px; padding-right: 0; }
.dk-win[data-app="board"] .wb-profile__card { padding: 16px 14px 14px; text-align: center; }
.dk-win[data-app="board"] .wb-avatar-lg { width: 64px; height: 64px; font-size: 25px; border-radius: 6px; }
.dk-win[data-app="board"] .wb-profile__card h3 { font-size: 15.5px; }
.dk-win[data-app="board"] .wb-profile__card p { font-size: 11.5px; }
.dk-win[data-app="board"] .wb-profile__tag { border-radius: 3px; background: rgba(127, 216, 195, .18); }
.dk-win[data-app="board"] .wb-profile__meta { border-top-color: rgba(var(--wb-ink-rgb), .08); }
/* 三段经历：Win10 列表行 + 悬停才出现的编辑/删除 */
.dk-win[data-app="board"] .wb-profilehint { border-radius: 4px; background: rgba(127, 216, 195, .1); font-size: 11.5px; }
.dk-win[data-app="board"] .wb-bio {
  padding: 10px 8px;
  border-radius: 4px;
  background: transparent;
  gap: 3px;
  box-shadow: inset 0 -1px 0 rgba(var(--wb-ink-rgb), .07);
}
.dk-win[data-app="board"] .wb-bio:last-child { box-shadow: none; }
.dk-win[data-app="board"] .wb-bio--empty { background: transparent; box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .1); padding: 12px; }
.dk-win[data-app="board"] .wb-bio--new { background: rgba(var(--wb-ink-rgb), .05); box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .14); padding: 12px; border-radius: 4px; }
.dk-win[data-app="board"] .wb-bio__act { border-radius: 4px; }
.dk-win[data-app="board"] .wb-meter,
.dk-win[data-app="board"] .wb-wallet { padding: 12px 14px; }
.dk-win[data-app="board"] .wb-meter__bar { height: 4px; }
.dk-win[data-app="board"] .wb-wallet__row { border-top-color: rgba(var(--wb-ink-rgb), .08); }
.dk-win[data-app="board"] .wb-devices li { padding: 8px 0; box-shadow: inset 0 -1px 0 rgba(var(--wb-ink-rgb), .07); }
.dk-win[data-app="board"] .wb-devices li:last-child { box-shadow: none; }
.dk-win[data-app="board"] .wb-switch > span { border-radius: 999px; }

/* 指标 = Win10 磁贴 */
.dk-win[data-app="board"] .wb-copmetrics { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.dk-win[data-app="board"] .wb-metric-tile {
  border-radius: 4px;
  padding: 10px 12px;
  background: rgba(var(--wb-ink-rgb), .06);
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .07);
}
.dk-win[data-app="board"] .wb-metric-tile i { font-size: 12.5px; color: var(--dk-ink-45); }
.dk-win[data-app="board"] .wb-metric-tile b { font-size: 21px; font-weight: 600; }
.dk-win[data-app="board"] .wb-metric-tile b em { font-size: 11px; }
.dk-win[data-app="board"] .wb-metric-tile span { font-size: 12.5px; color: var(--dk-ink-45); }

/* 产品与服务 = Win10 列表行 */
.dk-win[data-app="board"] .wb-svggrid { display: block; }
.dk-win[data-app="board"] .wb-svgcard {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 2px 12px;
  width: 100%;
  padding: 11px 12px;
  border-radius: 4px;
  background: transparent;
  box-shadow: inset 0 -1px 0 rgba(var(--wb-ink-rgb), .07);
  transform: none;
}
.dk-win[data-app="board"] .wb-svgcard:last-child { box-shadow: none; }
.dk-win[data-app="board"] .wb-svgcard:hover { background: rgba(var(--wb-ink-rgb), .07); transform: none; }
.dk-win[data-app="board"] .wb-svgcard__top { grid-column: 1; }
.dk-win[data-app="board"] .wb-svgcard__top b { font-size: 13px; }
.dk-win[data-app="board"] .wb-svgcard__price { grid-column: 2; grid-row: 1; justify-self: end; font-size: 13.5px; color: #a9efdd; }
.dk-win[data-app="board"] .wb-svgcard__price i { font-size: 12.5px; color: var(--dk-ink-45); }
.dk-win[data-app="board"] .wb-svgcard__desc {
  grid-column: 1 / -1;
  font-size: 11.5px;
  line-height: 1.6;
  color: var(--dk-ink-60);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dk-win[data-app="board"] .wb-svgcard__foot { grid-column: 1 / -1; padding-top: 6px; border-top: 0; font-size: 12.5px; }

/* 入口条 / 敬请期待 = Win10 磁贴与空状态 */
.dk-win[data-app="board"] .wb-soonstrip button {
  border-radius: 4px;
  background: rgba(var(--wb-ink-rgb), .06);
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .07);
}
.dk-win[data-app="board"] .wb-soon {
  min-height: 320px;
  border-radius: 6px;
  background: rgba(var(--wb-ink-rgb), .045);
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .08);
}
.dk-win[data-app="board"] .wb-soon__ico { width: 48px; height: 48px; border-radius: 6px; background: rgba(127, 216, 195, .16); color: #a9efdd; }
.dk-win[data-app="board"] .wb-soon__ico svg { width: 22px; height: 22px; }
.dk-win[data-app="board"] .wb-soon b { font-size: 16px; letter-spacing: 0; }
.dk-win[data-app="board"] .wb-soon__line { display: none; }
.dk-win[data-app="board"] .wb-soon--list { justify-content: flex-start; gap: 8px; min-height: 0; padding: 22px 20px 20px; text-align: left; }
.dk-win[data-app="board"] .wb-soon--list > * { max-width: 820px; }
.dk-win[data-app="board"] .wb-soon--list > .wb-soon__ico { width: 48px; }
.dk-win[data-app="board"] .wb-soon--list .wb-soon__desc,
.dk-win[data-app="board"] .wb-soon--list .wb-soon__now { max-width: none; font-size: 11.5px; line-height: 1.75; }
.dk-win[data-app="board"] .wb-soon--list .wb-soon__acts { margin-top: 2px; }
/* 「更多功能」：排期中的功能清单 = Fluent 列表行 */
.dk-win[data-app="board"] .wb-morelist { margin-top: 6px; gap: 4px; }
.dk-win[data-app="board"] .wb-morelist li { padding: 10px 12px; border-radius: 4px; background: rgba(var(--wb-ink-rgb), .045); box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .06); }
.dk-win[data-app="board"] .wb-morelist li:hover { background: rgba(var(--wb-ink-rgb), .1); }
.dk-win[data-app="board"] .wb-morelist__ico { width: 34px; height: 34px; border-radius: 4px; background: rgba(127, 216, 195, .14); color: #a9efdd; }
.dk-win[data-app="board"] .wb-morelist__text b { font-size: 12.5px; }
.dk-win[data-app="board"] .wb-morelist__text i { font-size: 12.5px; color: var(--dk-ink-45); }
/* 企业资料 · 服务案例的空位卡 = Fluent 虚线占位块 */
.dk-win[data-app="board"] .wb-caseghost { gap: 8px; margin-top: 8px; }
.dk-win[data-app="board"] .wb-caseghost__card { border-radius: 4px; border-color: rgba(var(--wb-ink-rgb), .14); background: rgba(var(--wb-ink-rgb), .02); }
.dk-win[data-app="board"] .wb-caseghost__tag { border-radius: 3px; font-size: 12px; }

/* 按钮 = Fluent 按钮 */
.dk-win[data-app="board"] .wb-btn {
  height: 30px;
  padding: 0 12px;
  border-radius: 4px;
  background: rgba(var(--wb-ink-rgb), .08);
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .1);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  font-size: 12px;
}
.dk-win[data-app="board"] .wb-btn:hover { background: rgba(var(--wb-ink-rgb), .14); }
.dk-win[data-app="board"] .wb-btn--sm { height: 28px; padding: 0 10px; font-size: 11.5px; }
.dk-win[data-app="board"] .wb-btn--primary { background: #7fd8c3; color: #0d211c; font-weight: 600; box-shadow: none; }
.dk-win[data-app="board"] .wb-btn--primary:hover { background: #8fe3cd; }
.dk-win[data-app="board"] .wb-btn--ghost { background: transparent; box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .12); }
.dk-win[data-app="board"] .wb-tag { border-radius: 3px; background: rgba(var(--wb-ink-rgb), .1); font-size: 12.5px; }
.dk-win[data-app="board"] .wb-tag--ok { background: rgba(127, 216, 195, .18); color: #b6f0e2; }

/* 产品与服务 Tab：主从两栏（列表 + 详情），右侧信息块堆到详情下面 */
.dk-win[data-app="board"] .wb-copback { display: flex; align-items: center; gap: 10px; margin: 0 0 10px; }
.dk-win[data-app="board"] .wb-copback span { font-size: 11px; color: var(--dk-ink-45); }
.dk-win[data-app="board"] .wb-rules { grid-template-columns: 212px minmax(0, 1fr); gap: 12px; align-items: start; }
.dk-win[data-app="board"] .wb-rules__side { padding: 10px; }
.dk-win[data-app="board"] .wb-ruleset { border-radius: 4px; padding: 8px 9px; }
.dk-win[data-app="board"] .wb-ruleset.is-active { background: rgba(var(--wb-ink-rgb), .12); box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .1); }
.dk-win[data-app="board"] .wb-ruleset__ico { border-radius: 4px; }
.dk-win[data-app="board"] .wb-rules__main { gap: 12px; }
.dk-win[data-app="board"] .wb-rules__main .wb-panelblock { padding: 14px 16px; }
.dk-win[data-app="board"] .wb-rules__info { grid-column: 2; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.dk-win[data-app="board"] .wb-rules__info .wb-panelblock { padding: 12px 14px; }
.dk-win[data-app="board"] .wb-audrow { padding: 8px 0; box-shadow: inset 0 -1px 0 rgba(var(--wb-ink-rgb), .07); }
.dk-win[data-app="board"] .wb-audrow:last-of-type { box-shadow: none; }

@media (max-width: 1180px) {
  .dk-win[data-app="board"] .dk-win__body > .wb-content { grid-template-columns: 186px minmax(0, 1fr); padding: 12px 14px 14px; gap: 10px 14px; }
  .dk-win[data-app="board"] .wb-copmetrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dk-win[data-app="board"] .wb-rules { grid-template-columns: minmax(0, 1fr); }
  .dk-win[data-app="board"] .wb-rules__info { grid-column: 1; grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 900px) {
  .dk-win[data-app="board"] .dk-win__body > .wb-content {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto minmax(0, 1fr);
    grid-template-areas: "nav" "body";
  }
  .dk-win[data-app="board"] .wb-boardtabs { flex-direction: row; overflow-x: auto; gap: 4px; padding-bottom: 2px; }
  .dk-win[data-app="board"] .wb-boardtabs button { flex: none; }
  .dk-win[data-app="board"] .wb-boardtabs button.is-active::before { display: none; }
}

/* ---------- 自适应 ---------- */
@media (max-width: 1180px) {
  .dk-start { width: min(520px, calc(100vw - 16px)); height: min(560px, calc(100vh - 70px)); grid-template-columns: 208px minmax(0, 1fr); }
  .dk-start__tiles { grid-template-columns: repeat(2, 88px); grid-auto-rows: 88px; }
  .dk { --dk-col: 78px; --dk-row: 88px; }
}
@media (max-width: 900px) {
  .dk { --dk-row: 84px; --dk-tile: 42px; --dk-col: 76px; }
  .dk-icons { left: 10px; top: 10px; right: 10px; bottom: calc(var(--dk-bar-h) + 80px); }
  .dk-icon__label { font-size: 12.5px; }
  .dk-win { min-width: 0; border-radius: 8px; }
  /* 窄屏：窗口里的三栏页面（消息、规则…）允许横向滚动，别把右边的栏裁掉 */
  .dk-win__body > .wb-content--full { overflow: auto; }
  .dk-setpage { grid-template-columns: 1fr; grid-template-rows: auto minmax(0, 1fr); }
  .dk-setpage__nav { flex-direction: row; overflow-x: auto; padding-bottom: 2px; }
  .dk-setpage__nav b { display: none; }
  .dk-setpage__nav button { white-space: nowrap; }
  .dk-grid3 { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 620px) {
  .dk-start { left: 4px; right: 4px; width: auto; grid-template-columns: minmax(0, 1fr); }
  .dk-start__tiles { border-left: 0; border-top: 1px solid rgba(var(--wb-ink-rgb), .1); }
  .dk-tb--run .dk-tb__label { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .dk *, .dk *::before, .dk *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
}


/* ---------- 帮助与文档：条目与按键 ---------- */
.dk-guide__list { margin: 0; padding-left: 18px; display: flex; flex-direction: column; gap: 7px; }
.dk-guide__list li { font-size: 12px; line-height: 1.75; color: var(--dk-ink-75); }
.dk-guide__list li b { color: var(--wb-ink); font-weight: 600; }
.dk-guide__list li kbd {
  display: inline-block;
  min-width: 18px;
  padding: 1px 6px;
  border-radius: 4px;
  background: rgba(var(--wb-ink-rgb), .12);
  box-shadow: inset 0 -1px 0 rgba(var(--wb-ink-rgb), .18);
  color: var(--wb-ink);
  font-family: inherit;
  font-size: 11px;
  text-align: center;
}
.dk-guide__list li code {
  padding: 1px 5px;
  border-radius: 3px;
  background: rgba(127, 216, 195, .16);
  color: #b6f0e2;
  font-family: ui-monospace, Menlo, Consolas, monospace;
  font-size: 11px;
}

   账号与安全 · 屏保与锁屏
   两个开关是「设置行」，密码是「输入行」，下面那几条只是操作提示 ——
   提示不进 dk-row（不装成字段），避免看起来像一堆可以改的选项。
   ========================================================================== */
.dk-pwdrow {
  display: flex; flex-direction: column; gap: 7px;
  padding: 10px 11px; border-radius: 11px;
  background: rgba(127, 216, 195, .1);
  box-shadow: inset 0 0 0 1px rgba(127, 216, 195, .22);
}
.dk-pwdrow > label { font-size: 11.5px; color: var(--dk-ink-90); }
.dk-pwdin { display: flex; align-items: center; gap: 8px; }
.dk-pwd {
  flex: 1; min-width: 0; height: 30px; padding: 0 11px;
  border: 0; border-radius: 9px; outline: 0;
  background: rgba(var(--wb-ink-rgb), .12); color: var(--wb-ink);
  font-size: 12px; letter-spacing: .16em;
  transition: background-color .16s var(--dk-ease), box-shadow .16s var(--dk-ease);
}
.dk-pwd[type="text"] { letter-spacing: .04em; }
.dk-pwd::placeholder { color: var(--dk-ink-45); letter-spacing: 0; }
.dk-pwd:focus { background: rgba(var(--wb-ink-rgb), .18); box-shadow: inset 0 0 0 1px rgba(127, 216, 195, .5); }
.dk-pwdeye {
  flex: none; width: 30px; height: 30px; border: 0; border-radius: 9px; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  background: rgba(var(--wb-ink-rgb), .12); color: var(--dk-ink-90);
  transition: background-color .16s var(--dk-ease);
}
.dk-pwdeye:hover { background: rgba(var(--wb-ink-rgb), .2); }
.dk-pwdeye svg { width: 15px; height: 15px; }
.dk-pwdeye.is-on { background: rgba(127, 216, 195, .26); color: #d7fff4; }
.dk-pwdnote { margin: 0; font-size: 12.5px; line-height: 1.65; color: var(--dk-ink-45); }
.dk-pwdnote--warn { color: #ffd79a; }
.dk-nowflow {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 8px 11px; border-radius: 10px;
  background: rgba(var(--wb-ink-rgb), .05);
  font-size: 11px; line-height: 1.6; color: var(--dk-ink-60);
}
.dk-nowflow svg { flex: none; width: 14px; height: 14px; margin-top: 1px; color: #f2b968; }
.dk-nowflow b { font-weight: 500; color: var(--dk-ink-90); }
.dk-hints { display: flex; flex-direction: column; gap: 5px; padding: 2px 2px 0; }
.dk-hints > b { font-size: 12.5px; font-weight: 500; letter-spacing: .06em; color: var(--dk-ink-45); }
.dk-hints ul { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 4px; }
.dk-hints li {
  position: relative; padding-left: 12px;
  font-size: 12.5px; line-height: 1.6; color: var(--dk-ink-45);
}
.dk-hints li::before {
  content: ""; position: absolute; left: 2px; top: 7px;
  width: 4px; height: 4px; border-radius: 50%; background: rgba(var(--wb-ink-rgb), .26);
}

/* ==========================================================================
   左侧图标坞 · 基础件（导航坞本身只在样式②「星环驾驶舱」下出现）
   —— 坞里的 App 清单和桌面图标用的是同一份（desktop.js 的 railApps()）。
   再加一套样式：在 desktop.js 的 SHELLS 里加一条，这里加一段 [data-shell="xx"] 即可。
   ========================================================================== */
.dk-rail { display: none; }
.dk-rail__top { display: flex; align-items: center; gap: 10px; padding: 2px 6px 12px; }
.dk-rail__logo {
  width: 32px; height: 32px; flex: none; border-radius: 10px; display: grid; place-items: center;
  background: linear-gradient(155deg, #63e6c6, #1fbd99 55%, #0b8a71); color: #06302a;
}
.dk-rail__logo svg { width: 18px; height: 18px; }
.dk-rail__brand { display: flex; flex-direction: column; line-height: 1.25; min-width: 0; }
.dk-rail__brand b { font-size: 13px; color: var(--dk-ink); }
.dk-rail__brand i { font-style: normal; font-size: 12.5px; color: var(--dk-ink-45); }
.dk-rail__nav { flex: 1; min-height: 0; overflow-y: auto; list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.dk-rail__nav::-webkit-scrollbar { width: 6px; }
.dk-rail__nav::-webkit-scrollbar-thumb { background: rgba(var(--wb-ink-rgb), .16); border-radius: 999px; }
.dk-rail__item {
  position: relative; width: 100%; height: 38px; padding: 0 10px; border: 0; border-radius: 8px;
  display: flex; align-items: center; gap: 10px;
  background: transparent; color: var(--dk-ink-75); text-align: left;
  transition: background-color .16s var(--dk-ease), color .16s var(--dk-ease);
}
.dk-rail__item svg { width: 17px; height: 17px; }
.dk-rail__item span { font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dk-rail__item:hover { background: rgba(var(--wb-ink-rgb), .1); color: var(--dk-ink); }
.dk-rail__item.is-on { background: rgba(143, 227, 205, .16); color: var(--wb-ink); }
.dk-rail__item.is-on::before {
  content: ""; position: absolute; left: 0; top: 9px; bottom: 9px; width: 3px;
  border-radius: 0 3px 3px 0; background: #8fe3cd;
}
.dk-rail__foot {
  border-top: 1px solid rgba(var(--wb-ink-rgb), .1); padding: 10px 6px 2px;
  display: flex; flex-direction: column; gap: 2px;
}
.dk-rail__foot span { font-size: 11.5px; color: var(--dk-ink-75); }
.dk-rail__foot i { font-style: normal; font-size: 12.5px; color: var(--dk-ink-45); }

/* ---------- 系统设置里的样式卡片 ---------- */
.dk-shells { display: grid; grid-template-columns: repeat(auto-fit, minmax(238px, 1fr)); gap: 12px; margin-top: 4px; }
.dk-shelcard {
  display: flex; flex-direction: column; gap: 8px; text-align: left;
  padding: 14px 15px 13px; border: 1px solid rgba(var(--wb-ink-rgb), .14); border-radius: 12px;
  background: rgba(var(--wb-ink-rgb), .05); color: inherit;
  transition: border-color .16s var(--dk-ease), background-color .16s var(--dk-ease), transform .16s var(--dk-ease);
}
.dk-shelcard:hover { background: rgba(var(--wb-ink-rgb), .09); border-color: rgba(var(--wb-ink-rgb), .26); }
.dk-shelcard.is-on { border-color: rgba(143, 227, 205, .62); background: rgba(143, 227, 205, .1); }
.dk-shelcard__top { display: flex; align-items: center; gap: 8px; }
.dk-shelcard__top svg { width: 17px; height: 17px; color: #8fe3cd; }
.dk-shelcard__top b { font-size: 13.5px; color: var(--dk-ink); }
.dk-shelcard__top em {
  font-style: normal; font-size: 12.5px; padding: 1px 6px; border-radius: 999px;
  background: rgba(var(--wb-ink-rgb), .12); color: var(--dk-ink-75);
}
.dk-shelcard__cur { margin-left: auto; font-size: 12.5px; color: #8fe3cd; }
.dk-shelcard__desc { font-size: 12px; line-height: 1.6; color: var(--dk-ink-75); }
.dk-shelcard__list { display: flex; flex-direction: column; gap: 3px; }
.dk-shelcard__list i {
  position: relative; font-style: normal; font-size: 11.5px; line-height: 1.55;
  color: var(--dk-ink-60); padding-left: 12px;
}
.dk-shelcard__list i::before {
  content: ""; position: absolute; left: 2px; top: 7px; width: 4px; height: 4px;
  border-radius: 50%; background: rgba(var(--wb-ink-rgb), .3);
}
.dk-shelcard__go { margin-top: auto; padding-top: 2px; font-size: 11.5px; color: #8fe3cd; }
.dk-shelcard.is-on .dk-shelcard__go { color: var(--dk-ink-45); }

/* ==========================================================================
   工作台样式 · 样式 ②「星环驾驶舱」
   —— 外壳换成三层：左侧发光图标坞（选 App）+ 顶部系统状态条（真数据读数）+ 底部指令栏。
      窗口保留（能拖 / 能最小化），只是换成霓虹描边 + 入场动画。
      背景由这套样式自带（深空 + 透视格栅 + 转动的轨道环 + 扫描线），壁纸设置在这一层让位。
      业务 App 依然一个字节都不用改。
   ========================================================================== */
:root { --hud-dock: 62px; --hud-top: 34px; --hud-cyan: #6ef0ff; --hud-line: rgba(110, 240, 255, .26); }

.dk-hud { display: none; }
.dk[data-shell="hud"] { --dk-bar-h: 46px; background: #04080f; }
/* 这套样式自带背景：壁纸的星空层和「星空」那几条覆盖规则都让位（stars.css 在 desktop.css 之后加载） */
.dk[data-shell="hud"] .dk-stars { display: none !important; }
/* 屏幕四周一圈「舱壁」细框 */
.dk[data-shell="hud"]::before {
  content: ""; position: absolute; inset: 5px; z-index: 39; pointer-events: none;
  border: 1px solid rgba(110, 240, 255, .16); border-radius: 16px;
  box-shadow: inset 0 0 44px rgba(60, 180, 255, .09);
}

/* ---------- 背景：深空底 + 透视格栅 + 轨道环 + 扫描线 ---------- */
.dk[data-shell="hud"] .dk__bg {
  background:
    radial-gradient(1200px 700px at 50% -12%, rgba(52, 150, 200, .3), transparent 62%),
    radial-gradient(900px 620px at 84% 110%, rgba(120, 84, 220, .28), transparent 64%),
    linear-gradient(180deg, #04080f, #061524 56%, #03080e) !important;
}
.dk[data-shell="hud"] .dk__bg::before {          /* 透视格栅：朝观者缓缓推进 */
  content: ""; position: absolute; left: -10%; right: -10%; bottom: -6%; height: 54%;
  background:
    linear-gradient(180deg, rgba(130, 246, 255, .5) 0 1.5px, transparent 1.5px),          /* 地平线 */
    repeating-linear-gradient(90deg, rgba(110, 240, 255, .42) 0 1px, transparent 1px 64px),
    repeating-linear-gradient(0deg, rgba(110, 240, 255, .32) 0 1px, transparent 1px 42px) !important;
  /* 透视别给太近：盒子的上沿一旦越过「镜头」整块就不渲染了（这里 900px 留足余量） */
  transform: perspective(900px) rotateX(58deg);
  transform-origin: 50% 100%;
  -webkit-mask-image: linear-gradient(180deg, #000 0 3px, transparent 3px 14%, #000 64%);
  mask-image: linear-gradient(180deg, #000 0 3px, transparent 3px 14%, #000 64%);
  animation: hudGrid 9s linear infinite;
}
@keyframes hudGrid { from { background-position: 0 0, 0 0; } to { background-position: 0 0, 0 42px; } }
.dk[data-shell="hud"] .dk__bg::after {           /* 两圈反向转的轨道环 */
  content: ""; position: absolute; left: 50%; top: 40%; width: 1180px; height: 1180px;
  margin: -590px 0 0 -590px; border-radius: 50%; opacity: 1;
  background:
    conic-gradient(from 0deg, transparent 0 58%, rgba(110, 240, 255, .6) 74%, transparent 86%),
    conic-gradient(from 190deg, transparent 0 66%, rgba(178, 140, 255, .55) 82%, transparent 94%);
  -webkit-mask-image: radial-gradient(circle, transparent 45.5%, #000 46.5%, #000 48%, transparent 49.2%, transparent 57.5%, #000 58.4%, #000 59.8%, transparent 61%);
  mask-image: radial-gradient(circle, transparent 45.5%, #000 46.5%, #000 48%, transparent 49.2%, transparent 57.5%, #000 58.4%, #000 59.8%, transparent 61%);
  animation: hudSpin 38s linear infinite;
}
@keyframes hudSpin { to { transform: rotate(360deg); } }
.dk[data-shell="hud"] .dk__grain {               /* 细横纹（像屏幕扫描线）+ 一道缓慢下扫的光带 */
  opacity: .55 !important;
  background-image: repeating-linear-gradient(0deg, rgba(150, 240, 255, .055) 0 1px, transparent 1px 3px);
}
.dk[data-shell="hud"] .dk__grain::before {       /* 四角压暗，屏幕不至于糊成一片 */
  content: ""; position: absolute; inset: 0;
  background: radial-gradient(125% 95% at 50% 44%, transparent 48%, rgba(2, 6, 12, .55));
}
.dk[data-shell="hud"] .dk__grain::after {
  content: ""; position: absolute; left: 0; right: 0; top: -30%; height: 30%;
  background: linear-gradient(180deg, transparent, rgba(110, 240, 255, .08), transparent);
  animation: hudSweep 8.5s linear infinite;
}
@keyframes hudSweep { to { transform: translateY(440%); } }

/* ---------- 左侧导航坞 ---------- */
.dk[data-shell="hud"] .dk-icons { display: none !important; }   /* 图标网格让位给坞 */
.dk[data-shell="hud"] .dk-rail {
  position: absolute; left: 0; top: 0; bottom: 0; width: var(--hud-dock);
  z-index: 40; display: flex; flex-direction: column; align-items: center;
  padding: 10px 0 10px; gap: 6px;
  background: linear-gradient(180deg, rgba(6, 20, 30, .92), rgba(4, 12, 20, .76));
  border-right: 1px solid var(--hud-line);
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
}
.dk[data-shell="hud"] .dk-rail__top { flex: none; padding: 0 0 4px; }
.dk[data-shell="hud"] .dk-rail__logo {
  width: 34px; height: 34px; border-radius: 12px;
  background: linear-gradient(150deg, #b6f7ff, #43b7f0); color: #04141c;
  box-shadow: 0 0 20px rgba(110, 240, 255, .45);
}
.dk[data-shell="hud"] .dk-rail__logo svg { width: 19px; height: 19px; }
.dk[data-shell="hud"] .dk-rail__brand { display: none; }        /* 品牌名搬到顶部状态条上了 */
/* 导航条必须撑满整条坞：它一旦被挤成 44px（只够一个图标），角标和悬停描边就会被
   自己的 overflow 边界裁掉，而且会被判成「横向溢出」在坞底部多出一条灰色滚动条 */
.dk[data-shell="hud"] .dk-rail__nav {
  width: 100%; flex: 1; gap: 6px; align-items: center; padding: 6px 0;
  overflow-x: hidden; overflow-y: auto;
}
.dk[data-shell="hud"] .dk-rail__nav::-webkit-scrollbar { width: 0; height: 0; }
/* 每个图标是一枚 40×40 的方形「能量块」：::before 是方形的彩虹底，::after 是压在上面的深玻璃内芯。
   三条规矩（2026-09-25 定）：**彩虹只属于「鼠标停上去」**；静息就是一块深玻璃 + 一道很淡的细边；
   哪个 App 在跑，用**图标亮起来 + 一枚小绿点**说，不再拿彩虹框去标「当前」。
   彩虹靠 @property 转动色相角（而不是转动盒子），边框才是硬边、不走形；
   老浏览器不支持 @property 时彩色描边照常显示，只是不转 —— 视觉不塌。 */
@property --hud-ang { syntax: "<angle>"; initial-value: 0deg; inherits: false; }
.dk[data-shell="hud"] .dk-rail__item {
  position: relative; isolation: isolate; width: 40px; height: 40px; padding: 0; flex: none;
  display: grid; place-items: center; border-radius: 12px;
  border: 0; color: rgba(208, 240, 252, .82); background: transparent;
  transition: color .16s var(--dk-ease), box-shadow .16s var(--dk-ease), transform .16s var(--dk-ease);
}
.dk[data-shell="hud"] .dk-rail__item::before {
  /* width/height 必须显式写 auto：样式①的选中态 ::before 是「左侧 3px 竖条」，
     这里要求「铺满整块」，不给 auto 的话那条 3px 会被继承下来，彩虹就只剩一条竖线 */
  content: ""; position: absolute; inset: 0; width: auto; height: auto; z-index: -2; border-radius: 12px;
  background: conic-gradient(from var(--hud-ang), #ff6b6b, #4ecdc4, #45b7d1, #96ceb4, #feca57, #ff9ff3, #ff6b6b);
  /* 静息**完全不画**彩虹（透明度 0）—— 一屏十几个方块一起挂彩虹才叫花；只有鼠标停上去那一个才亮 */
  filter: saturate(1.05); opacity: 0;
  animation: hudRainbow 14s linear infinite;
  transition: opacity .18s var(--dk-ease);
}
.dk[data-shell="hud"] .dk-rail__item::after {
  content: ""; position: absolute; inset: 1.5px; z-index: -1; border-radius: 10.5px;
  background: linear-gradient(160deg, rgba(10, 28, 40, .96), rgba(4, 12, 20, .94));
  /* 静息的那道「边」：一条很淡的青白细线，不是彩虹 */
  box-shadow: inset 0 0 0 1px rgba(190, 250, 255, .1);
}
.dk[data-shell="hud"] .dk-rail__item svg { width: 18px; height: 18px; }
/* 悬停只微微放大，不再朝右边的分界线平移 —— 否则描边和光晕会贴到线上 */
.dk[data-shell="hud"] .dk-rail__item:hover {
  color: var(--wb-ink); box-shadow: 0 0 12px rgba(110, 240, 255, .3); transform: scale(1.06);
}
.dk[data-shell="hud"] .dk-rail__item:hover::before { opacity: 1; filter: saturate(1.5) brightness(1.12); animation-duration: 3.4s; }
.dk[data-shell="hud"] .dk-rail__item:hover::after {
  background: linear-gradient(160deg, rgba(16, 40, 56, .97), rgba(6, 18, 28, .95));
  box-shadow: none;                      /* 悬停时里外两道边并排会显脏，把静息那道细线撤掉，只留彩虹 */
}
/* 运行中 / 当前：图标亮起来 + 一枚小绿点（绿点由 desktop.js 的 paintRail 落进 DOM） */
.dk[data-shell="hud"] .dk-rail__item.is-run { color: #eafcff; }
.dk[data-shell="hud"] .dk-rail__item.is-on { color: var(--wb-ink); }
.dk[data-shell="hud"] .dk-rail__item.is-on svg { filter: drop-shadow(0 0 6px rgba(150, 242, 255, .8)); }
.dk-rail__dot {
  position: absolute; left: 50%; bottom: 3.5px; width: 6px; height: 6px; margin-left: -3px;
  border-radius: 50%; background: #3ddc84; box-shadow: 0 0 6px rgba(61, 220, 132, .85);
  pointer-events: none;
}
@keyframes hudRainbow { to { --hud-ang: 360deg; } }
/* 坞只有 62px 宽，名字塞不进去；改成坞外面浮出一条小标签（由 desktop.js 定位，不会被导航条的滚动边界裁掉） */
.dk[data-shell="hud"] .dk-rail__item span { display: none; }
.dk-rail__tip {
  display: none; position: absolute; left: calc(100% + 12px); transform: translateY(-50%);
  padding: 5px 11px; border-radius: 8px; font-size: 12px; white-space: nowrap;
  background: rgba(6, 22, 32, .97); border: 1px solid var(--hud-line); color: #eafcff;
  box-shadow: 0 10px 26px rgba(0, 8, 16, .55); pointer-events: none; z-index: 6;
}
.dk[data-shell="hud"] .dk-rail__tip:not([hidden]) { display: block; }
/* 底部的角色与用户名：坞里也要居中，别再挤成两行 */
.dk[data-shell="hud"] .dk-rail__foot {
  width: 100%; margin-top: 4px; padding: 8px 4px 0; align-items: center; text-align: center; gap: 1px;
}
.dk[data-shell="hud"] .dk-rail__foot span,
.dk[data-shell="hud"] .dk-rail__foot i { font-size: 11.5px; line-height: 1.35; white-space: nowrap; }
.dk-rail__badge {
  position: absolute; top: -3px; right: -3px; min-width: 19px; height: 19px; padding: 0 4px;
  display: grid; place-items: center; border-radius: 999px; background: #c82a1c; color: var(--wb-ink);
  font-size: 11.5px; font-weight: 600; font-style: normal; line-height: 1;
  box-shadow: 0 0 0 2px rgba(5, 14, 22, .92);
}

/* ---------- 顶部系统状态条 ---------- */
.dk[data-shell="hud"] .dk-hud {
  position: absolute; left: var(--hud-dock); right: 0; top: 0; height: var(--hud-top);
  z-index: 43; display: flex; align-items: center; gap: 18px; padding: 0 18px;
  font-size: 11.5px; color: rgba(200, 234, 248, .76);
  background: linear-gradient(180deg, rgba(5, 18, 28, .94), rgba(5, 18, 28, .55));
  border-bottom: 1px solid var(--hud-line);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
}
.dk[data-shell="hud"] .dk-hud::after {           /* 沿下沿流动的一条数据流 */
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(110, 240, 255, .9), transparent);
  background-size: 38% 100%; background-repeat: no-repeat;
  animation: hudStream 4.6s linear infinite;
}
@keyframes hudStream { from { background-position: -40% 0; } to { background-position: 140% 0; } }
.dk-hud__brand { display: flex; align-items: center; gap: 7px; color: var(--dk-ink); }
.dk-hud__brand svg { width: 16px; height: 16px; color: var(--hud-cyan); }
.dk-hud__brand b { font-size: 12.5px; font-weight: 600; letter-spacing: .4px; }
.dk-hud__brand i { font-style: normal; font-size: 11.5px; color: rgba(160, 200, 220, .62); }
.dk-hud__live { display: flex; align-items: center; gap: 6px; }
.dk-hud__pulse {
  width: 7px; height: 7px; border-radius: 50%; background: #58f7b0; box-shadow: 0 0 10px #58f7b0;
  animation: hudPulse 1.9s ease-in-out infinite;
}
@keyframes hudPulse { 50% { opacity: .3; transform: scale(.78); } }
.dk-hud__kv b { margin-left: 5px; font-weight: 600; color: #d9f6ff; }
.dk-hud__clock {
  margin-left: auto; font-size: 12.5px; font-weight: 600; letter-spacing: 1px; color: #cdf3ff;
  font-variant-numeric: tabular-nums;
}

/* ---------- 底部指令栏 ---------- */
.dk[data-shell="hud"] .dk-bar {
  left: var(--hud-dock); right: 0; bottom: 0; height: var(--dk-bar-h);
  background: linear-gradient(0deg, rgba(5, 16, 26, .95), rgba(5, 16, 26, .62));
  border-top: 1px solid var(--hud-line);
  box-shadow: 0 -10px 32px rgba(0, 8, 16, .5);
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
}
.dk[data-shell="hud"] .dk-tb { border-radius: 9px; }
.dk[data-shell="hud"] .dk-tb--run.is-active {
  background: rgba(110, 240, 255, .16); box-shadow: inset 0 0 0 1px rgba(110, 240, 255, .34);
}
.dk[data-shell="hud"] .dk-tb--run.is-active::after {
  content: ""; position: absolute; left: 10px; right: 10px; bottom: 2px; height: 2px;
  border-radius: 2px; background: var(--hud-cyan); box-shadow: 0 0 8px rgba(110, 240, 255, .8);
}

/* ---------- 窗口：霓虹描边 + 四角卡扣 + 入场动画 ---------- */
.dk[data-shell="hud"] .dk-wins { left: var(--hud-dock); top: var(--hud-top); right: 0; bottom: var(--dk-bar-h); }
.dk[data-shell="hud"] .dk-win {
  border-radius: 14px; border: 1px solid var(--hud-line);
  background: linear-gradient(180deg, rgba(9, 26, 38, .92), rgba(6, 16, 26, .9));
  box-shadow: 0 26px 62px rgba(0, 8, 16, .64), inset 0 1px 0 rgba(190, 245, 255, .1);
  backdrop-filter: blur(18px) saturate(135%); -webkit-backdrop-filter: blur(18px) saturate(135%);
  animation: hudWinIn .3s var(--dk-ease) both;
}
@keyframes hudWinIn {
  from { opacity: 0; transform: translateY(10px) scale(.986); }
  to { opacity: 1; transform: none; }
}
.dk[data-shell="hud"] .dk-win::before,
.dk[data-shell="hud"] .dk-win::after {
  content: ""; position: absolute; width: 15px; height: 15px; pointer-events: none;
  border: 2px solid rgba(110, 240, 255, .5);
}
.dk[data-shell="hud"] .dk-win::before { left: 3px; top: 3px; border-right: 0; border-bottom: 0; border-radius: 10px 0 0 0; }
.dk[data-shell="hud"] .dk-win::after { right: 3px; bottom: 3px; border-left: 0; border-top: 0; border-radius: 0 0 10px 0; z-index: 7; }
.dk[data-shell="hud"] .dk-win.is-active {
  border-color: rgba(110, 240, 255, .58);
  box-shadow: 0 28px 74px rgba(0, 10, 20, .7), 0 0 0 1px rgba(110, 240, 255, .26), 0 0 38px rgba(80, 200, 255, .22);
}
.dk[data-shell="hud"] .dk-win.is-active::before,
.dk[data-shell="hud"] .dk-win.is-active::after { border-color: rgba(150, 248, 255, .9); }
.dk[data-shell="hud"] .dk-win__bar {
  height: 40px; background: linear-gradient(180deg, rgba(16, 42, 58, .9), rgba(10, 26, 38, .45));
  border-bottom: 1px solid rgba(110, 240, 255, .18);
}
.dk[data-shell="hud"] .dk-win__ico {
  width: 18px; height: 18px; border-radius: 6px;
  background: linear-gradient(150deg, #b6f7ff, #43b7f0); color: #04141c;
  box-shadow: 0 0 12px rgba(110, 240, 255, .5);
}
.dk[data-shell="hud"] .dk-win__title { font-size: 12.5px; letter-spacing: .3px; }
.dk[data-shell="hud"] .dk-win__btn { width: 40px; height: 30px; margin: 0 2px; border-radius: 8px; }
.dk[data-shell="hud"] .dk-win__btn:hover { background: rgba(110, 240, 255, .18); color: #eafcff; }
.dk[data-shell="hud"] .dk-win__btn--close:hover { background: #ff4d6a; color: var(--wb-ink); }
.dk[data-shell="hud"] .dk-win__grip::after { border-color: rgba(110, 240, 255, .5); }

/* ---------- 通知横幅 / 通知中心：给顶部状态条让位 ---------- */
.dk[data-shell="hud"] .dk-banners { top: calc(var(--hud-top) + 12px); }
.dk[data-shell="hud"] .dk-nc { top: calc(var(--hud-top) + 10px); }

/* ---------- 换样式时那道扫光（纯装饰，不挡点） ---------- */
.dk__boot { position: absolute; inset: 0; z-index: 90; pointer-events: none; overflow: hidden; }
.dk__boot::before {
  content: ""; position: absolute; left: 0; right: 0; top: -30%; height: 30%;
  background: linear-gradient(180deg, transparent, rgba(120, 240, 255, .16), rgba(190, 250, 255, .3), transparent);
  animation: hudBootSweep .85s var(--dk-ease) both;
}
.dk__boot b {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  font-size: 13px; letter-spacing: 6px; color: rgba(190, 248, 255, .9);
  text-shadow: 0 0 22px rgba(110, 240, 255, .8); animation: hudBootFade .85s var(--dk-ease) both;
}
@keyframes hudBootSweep { from { transform: translateY(0); } to { transform: translateY(430%); } }
@keyframes hudBootFade { 0% { opacity: 0; } 35% { opacity: 1; } to { opacity: 0; } }

/* ---------- 退出登录：确认层 + 登录页 ----------
   舱门（那颗钮）只有一个，在开始菜单最下面一行最右边 —— 见 .dk-start__quit。
   桌面右下角原来那颗红圆钮已经撤掉：它和任务栏挤在一块儿，位置不好看。
   手机上走「系统设置 → 账号与安全 → 退出登录」，落到的是同一层。 */

/* 这一层罩住整个桌面（连任务栏一起），所以里面的东西要能把点击收回来 */
#dkSignout { position: absolute; inset: 0; z-index: 70; pointer-events: none; }
#dkSignout > * { pointer-events: auto; }

/* 第一层：问一句（居中一张小卡） */
.dk-so__mask { position: absolute; inset: 0; background: rgba(5, 12, 14, .55); backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px); animation: dkSoFade .18s var(--dk-ease); }
.dk-so__card {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: min(374px, calc(100% - 40px)); padding: 24px 22px 18px;
  border-radius: 16px; text-align: center; color: var(--dk-ink);
  background: rgba(16, 26, 26, .97);
  backdrop-filter: var(--dk-blur); -webkit-backdrop-filter: var(--dk-blur);
  box-shadow: 0 30px 70px rgba(0, 0, 0, .6), inset 0 0 0 1px rgba(var(--wb-ink-rgb), .14);
  animation: dkSoUp .22s var(--dk-ease);
}
.dk-so__ico { display: flex; align-items: center; justify-content: center; width: 46px; height: 46px; margin: 0 auto 12px; border-radius: 50%; background: rgba(255, 65, 65, .16); color: #ff9a90; }
.dk-so__ico svg { width: 22px; height: 22px; }
.dk-so__title { display: block; font-size: 15px; font-weight: 600; }
.dk-so__card p { margin: 8px 0 0; font-size: 12px; line-height: 1.75; color: var(--dk-ink-60); text-align: left; }
.dk-so__acts { display: flex; gap: 10px; margin-top: 18px; }
.dk-so__btn { flex: 1; height: 36px; border: 0; border-radius: 9px; background: rgba(var(--wb-ink-rgb), .1); color: var(--wb-ink); font: inherit; font-size: 12.5px; cursor: pointer; transition: background-color .14s var(--dk-ease); }
.dk-so__btn:hover { background: rgba(var(--wb-ink-rgb), .18); }
.dk-so__btn--danger { background: rgb(255, 65, 65); font-weight: 600; }
.dk-so__btn--danger:hover { background: rgb(255, 94, 94); }
.dk-so__btn:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* 第二层：退出去以后停在的登录页（原型阶段不校验密码，点「登录」就回到自己的桌面）。
   这里**没有**「选一个身份进入」那三张卡了：登录的是账号本人，平台侧的人走独立的管理后台。 */
.dk-so__gate {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: 24px;
  background: rgba(4, 10, 12, .78);
  backdrop-filter: blur(7px) saturate(130%); -webkit-backdrop-filter: blur(7px) saturate(130%);
  animation: dkSoFade .24s var(--dk-ease);
}
.dk-so__box {
  width: min(392px, 100%); max-height: 100%; overflow: auto;
  padding: 30px 28px 22px; border-radius: 20px; text-align: center; color: var(--dk-ink);
  background: rgba(14, 24, 24, .96);
  box-shadow: 0 40px 90px rgba(0, 0, 0, .6), inset 0 0 0 1px rgba(var(--wb-ink-rgb), .13);
  animation: dkSoPop .26s var(--dk-ease);
}
.dk-so__brand { display: inline-flex; align-items: center; gap: 9px; margin-bottom: 18px; }
.dk-so__brand svg { width: 22px; height: 22px; color: #a9efdd; }
.dk-so__brand b { font-size: 14px; font-weight: 600; letter-spacing: .5px; }
.dk-so__brand i { font-style: normal; font-size: 11.5px; color: var(--dk-ink-45); }
.dk-so__box h2 { margin: 0; font-size: 21px; font-weight: 600; letter-spacing: .5px; }
.dk-so__lead { margin: 10px auto 0; max-width: 320px; font-size: 12px; line-height: 1.8; color: var(--dk-ink-60); }

/* 登录表单：账号 / 密码 / 登录，三样东西竖着排，宽度跟卡片走 */
.dk-so__form { display: flex; flex-direction: column; gap: 12px; margin: 20px 0 4px; text-align: left; }
.dk-so__field { display: block; }
.dk-so__field > span { display: block; margin-bottom: 6px; font-size: 11.5px; color: var(--dk-ink-45); }
.dk-so__field input {
  width: 100%; height: 40px; padding: 0 12px; border: 0; border-radius: 12px;
  background: rgba(var(--wb-ink-rgb), .08); color: var(--dk-ink); font: inherit; font-size: 13px;
  box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .14);
  transition: box-shadow .16s var(--dk-ease), background-color .16s var(--dk-ease);
}
.dk-so__field input::placeholder { color: var(--dk-ink-45); }
.dk-so__field input:hover { background: rgba(var(--wb-ink-rgb), .11); }
.dk-so__field input:focus { outline: none; background: rgba(var(--wb-ink-rgb), .13); box-shadow: inset 0 0 0 1px rgba(127, 216, 195, .55); }
.dk-so__btn--p { flex: none; width: 100%; height: 42px; margin-top: 4px; background: linear-gradient(180deg, #b8f2e2, #7fd8c3); color: #06231d; font-weight: 600; }
.dk-so__btn--p:hover { background: linear-gradient(180deg, #c9f7ea, #8fe3cf); }
.dk-so__btn:disabled { opacity: .55; cursor: default; }
.dk-so__foot { display: flex; align-items: center; justify-content: center; gap: 6px; margin: 16px 0 0; font-size: 11px; color: var(--dk-ink-45); }
.dk-so__foot svg { width: 13px; height: 13px; }
/* 登录失败那一行：服务端说什么就显示什么（比如「邮箱或口令不对」） */
.dk-so__err { margin: 10px 0 0; padding: 8px 10px; border-radius: 8px; background: rgba(255, 65, 65, .12); color: #ff9a90; font-size: 12px; line-height: 1.6; text-align: left; }
.dk-so__err[hidden] { display: none; }

/* 第三层：「再输一次口令」那层小表单（改口令 / 换恢复码 / 改邮箱 / 注销账号，v0.1.118）。
   跟上面两张脸共用宿主 #dkSignout 和 .dk-so__card 那张卡，这里只补它多出来的几样。 */
/* 表单版这张卡整块左对齐：标签、说明、清单都从左边起 —— 居中读起来像标语，不像要填的东西 */
.dk-so__card--form { width: min(400px, calc(100% - 40px)); text-align: left; }
/* 这一层底下是「取消 + 确定」两颗并排：把登录页那条「主按钮整宽」的规矩收回来，
   否则确定那颗撑满一行，取消会被挤成竖排的两个字 */
.dk-so__card--form .dk-so__btn--p { flex: 1; width: auto; margin-top: 0; }
.dk-so__card--form .dk-so__btn--danger { flex: 1; }
/* 恢复码那一屏底下只有一颗「我已经存好了」：让它整宽，跟上面那条码对齐 */
.dk-so__card--form .dk-so__codebox ~ .dk-so__btn--p { flex: none; width: 100%; }
.dk-so__card--form .dk-so__field + .dk-so__field { margin-top: 12px; }
.dk-so__card--form .dk-so__lead { margin: 8px 0 14px; text-align: left; max-width: none; }
/* 卡底那几行说明（要删掉什么的清单）：左对齐、按行走，不能用 foot 那个 flex 版 */
.dk-so__note { margin: 14px 0 0; padding: 10px 12px; border-radius: 10px; background: rgba(var(--wb-ink-rgb), .06); font-size: 11.5px; line-height: 1.85; color: var(--dk-ink-60); text-align: left; }
.dk-so__note b { color: var(--dk-ink); }
/* 恢复码那一格：等宽字 + 虚线，看着就是「抄下来」的东西 */
.dk-so__codebox { display: flex; align-items: center; gap: 10px; margin: 4px 0 14px; padding: 12px; border-radius: 12px; background: rgba(var(--wb-ink-rgb), .07); box-shadow: inset 0 0 0 1px rgba(var(--wb-ink-rgb), .12); }
.dk-so__code { flex: 1; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 17px; letter-spacing: 1.6px; color: #a9efdd; word-break: break-all; }
.dk-so__btn--copy { flex: none; display: inline-flex; align-items: center; gap: 5px; width: auto; padding: 0 12px; }
.dk-so__btn--copy svg { width: 13px; height: 13px; }
@keyframes dkSoFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes dkSoUp { from { opacity: 0; transform: translate(-50%, -46%); } to { opacity: 1; transform: translate(-50%, -50%); } }
@keyframes dkSoPop { from { opacity: 0; transform: translateY(14px) scale(.985); } to { opacity: 1; transform: none; } }

/* 星环驾驶舱：这两层的底子换成同一套深蓝 + 青色描边 */
.dk[data-shell="hud"] .dk-so__card,
.dk[data-shell="hud"] .dk-so__box {
  background: linear-gradient(180deg, rgba(9, 28, 40, .97), rgba(6, 16, 26, .95));
  box-shadow: 0 40px 90px rgba(0, 8, 16, .7), inset 0 0 0 1px var(--hud-line), 0 0 34px rgba(80, 200, 255, .16);
}
.dk[data-shell="hud"] .dk-so__brand svg { color: var(--hud-cyan); }
.dk[data-shell="hud"] .dk-so__field input:focus { box-shadow: inset 0 0 0 1px rgba(110, 240, 255, .55); }
.dk[data-shell="hud"] .dk-so__btn--p { background: linear-gradient(180deg, #b6f7ff, #43b7f0); color: #04141c; }
.dk[data-shell="hud"] .dk-so__btn--p:hover { background: linear-gradient(180deg, #cdfbff, #5ec6f8); }
.dk[data-shell="hud"] .dk-so__gate { background: rgba(2, 7, 12, .84); }

/* 窄屏：登录卡片收窄、内边距小一点，按钮更好点 */
@media (max-width: 760px) {
  .dk-so__box { padding: 24px 18px 18px; border-radius: 16px; }
  .dk-so__field input { height: 44px; }
  .dk-so__btn--p { height: 46px; }
}

/* 关掉动画偏好：所有装饰动画一律停 */
@media (prefers-reduced-motion: reduce) {
  .dk[data-shell="hud"] .dk__bg::before,
  .dk[data-shell="hud"] .dk__bg::after,
  .dk[data-shell="hud"] .dk__grain::after,
  .dk[data-shell="hud"] .dk-hud::after,
  .dk-hud__pulse,
  .dk[data-shell="hud"] .dk-win,
  .dk__boot::before,
  .dk__boot b { animation: none !important; }
  .dk__boot b { opacity: 0; }
  .dk-so__mask, .dk-so__card, .dk-so__gate, .dk-so__box { animation: none !important; }
}
