/* ============================================================================
 * pc.css — YSKJ 远程桌面 · PC 客户端专属布局与组件
 * ----------------------------------------------------------------------------
 * 复用 ui/shared/yskj-tokens.css 的 token 与通用组件类（.ys-card/.ys-btn/
 * .ys-switch/.ys-qchip/.ys-avatar/.ys-toolbar 等），本文件只追加 PC 端布局与
 * 特有组件，不重写共享类。
 * 动态布局红线：容器尺寸一律 clamp()/fr/flex/100dvh，禁止写死 px 容器。
 * 原子尺寸例外：图标 36/20px、描边 1px、圆角 token、开关尺寸等。
 * 图标一律内联 SVG（<use href="#i-xxx"/>），禁止 emoji。
 * ========================================================================== */

/* ---------- 总体骨架 ---------- */
.pc-app { display: flex; height: 100dvh; overflow: hidden; }

/* ---------- 左侧固定侧栏 ---------- */
.pc-side {
  width: clamp(208px, 17vw, 252px); flex: none; background: var(--ys-surface);
  border-right: 1px solid var(--ys-border); padding: clamp(14px,1.2vw,20px) clamp(10px,1vw,14px);
  display: flex; flex-direction: column; gap: clamp(4px,.5vw,8px); transition: transform .22s ease;
}
.pc-brand { display: flex; align-items: center; gap: 10px; padding: 4px 8px clamp(12px,1.4vw,18px); }
.pc-logo {
  width: 36px; height: 36px; border-radius: 10px; flex: none;
  background: linear-gradient(135deg, var(--ys-primary), var(--ys-accent));
  display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 800; font-size: 17px;
}
.pc-brand b { font-size: 15px; letter-spacing: .3px; }
.pc-brand small { display: block; color: var(--ys-text-2); font-size: 11px; font-weight: 400; }
/* 品牌集成（2026-10-07 陈总红线：LOGO/产品名/版本永远内建）：侧栏真实 LOGO */
.pc-logo-img { width: 36px; height: 36px; border-radius: 10px; flex: none; object-fit: cover; }
.pc-about-btn {
  display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-radius: var(--ys-radius-sm);
  border: 1px solid var(--ys-border); background: var(--ys-surface); color: var(--ys-text-2);
  cursor: pointer; font-size: 13px; font-weight: 500; transition: .15s; user-select: none;
}
.pc-about-btn:hover { color: var(--ys-primary); border-color: var(--ys-primary); }
.pc-about-btn .ys-ic { width: 17px; height: 17px; }
.pc-site-link { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; padding: 6px 12px 2px; font-size: 11.5px; line-height: 1.5; }
.pc-site-link a { color: var(--ys-text-2); text-decoration: none; white-space: nowrap; }
.pc-site-link a:hover { color: var(--ys-primary); }
.pc-site-link #pcVerMini { white-space: nowrap; }
.pc-site-dot { color: var(--ys-text-2); opacity: .5; }

/* 语言切换器（i18n） */
.pc-lang { display: flex; align-items: center; justify-content: center; gap: 4px; padding: 8px 12px 2px; }
.pc-lang__btn {
  flex: 0 0 auto; min-width: 34px; padding: 4px 8px; font-size: 12px; font-weight: 600; line-height: 1;
  color: var(--ys-text-2); background: var(--ys-surface-2); border: 1px solid var(--ys-border);
  border-radius: 999px; cursor: pointer; transition: .15s; user-select: none;
}
.pc-lang__btn:hover { color: var(--ys-primary); border-color: var(--ys-primary); }
.pc-lang__btn.is-active {
  color: #fff; background: var(--ys-primary, #2f7bff); border-color: var(--ys-primary, #2f7bff);
}

/* 授权状态头像区 */
.pc-auth {
  margin: 2px 6px clamp(10px,1vw,16px); padding: 12px; border-radius: var(--ys-radius);
  background: var(--ys-surface-2); border: 1px solid var(--ys-border);
  display: flex; align-items: center; gap: 10px;
}
.pc-auth__txt { min-width: 0; }
.pc-auth__txt b { font-size: 12px; color: var(--ys-text-2); font-weight: 500; display: block; }
.pc-auth__txt span { font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.pc-nav-label { font-size: 11px; color: var(--ys-text-2); padding: clamp(8px,1vw,14px) 10px 4px; letter-spacing: .5px; }
.pc-nav {
  display: flex; align-items: center; gap: 11px; padding: 11px 12px;
  border-radius: var(--ys-radius-sm); color: var(--ys-text-2);
  cursor: pointer; font-weight: 500; transition: .15s; user-select: none;
}
.pc-nav:hover { background: var(--ys-surface-2); color: var(--ys-text); }
.pc-nav.is-active { background: var(--ys-primary); color: #fff; box-shadow: var(--ys-shadow-sm); }
.pc-nav .ys-ic { width: 19px; height: 19px; color: var(--ys-text-2); flex: none; }
.pc-nav.is-active .ys-ic { color: #fff; }
.pc-side__foot { margin-top: auto; display: flex; flex-direction: column; gap: 8px; }
.pc-theme {
  display: flex; align-items: center; gap: 8px; padding: 10px 12px;
  border: 1px solid var(--ys-border); border-radius: var(--ys-radius-sm);
  cursor: pointer; color: var(--ys-text-2); font-size: 13px; transition: .15s;
}
.pc-theme:hover { background: var(--ys-surface-2); color: var(--ys-text); }

/* ---------- 主区 ---------- */
.pc-main { flex: 1; min-width: 0; display: flex; flex-direction: column; overflow: hidden; }
.pc-topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: clamp(12px,1.2vw,16px) clamp(16px,2vw,28px); gap: 16px; border-bottom: 1px solid var(--ys-border); background: var(--ys-surface);
}
.pc-topbar h1 { font-size: 15px; font-weight: 700; }
.pc-sub { color: var(--ys-text-2); font-size: 11.5px; margin-top: 1px; }
.pc-topbar__right { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.pc-menu-btn {
  width: 38px; height: 38px; border-radius: 10px; display: none; align-items: center; justify-content: center;
  color: var(--ys-text-2); border: 1px solid var(--ys-border); background: var(--ys-surface);
}
.pc-content { flex: 1; overflow: auto; padding: clamp(16px,1.6vw,24px) clamp(16px,2vw,28px); }

/* 屏幕切换 */
.pc-screen { display: none; }
.pc-screen.is-active { display: block; animation: ysFade .25s ease; }

/* ---------- 主页：快捷胶囊 ---------- */
.pc-caps { display: flex; gap: clamp(8px,1vw,12px); flex-wrap: wrap; margin-bottom: clamp(14px,1.4vw,20px); }
.pc-cap {
  display: inline-flex; align-items: center; gap: 8px; padding: 10px 16px; border-radius: var(--ys-radius-pill);
  background: var(--ys-surface); border: 1px solid var(--ys-border); color: var(--ys-text-2);
  cursor: pointer; font-weight: 600; font-size: 13.5px; transition: .15s; user-select: none;
}
.pc-cap:hover { border-color: var(--ys-border-strong); color: var(--ys-text); }
.pc-cap .ys-ic { width: 18px; height: 18px; }
.pc-cap.is-active { background: var(--ys-primary); color: #fff; border-color: var(--ys-primary); box-shadow: var(--ys-shadow-sm); }

/* 通用卡片 */
.pc-card {
  background: var(--ys-surface); border: 1px solid var(--ys-border); border-radius: var(--ys-radius);
  padding: clamp(14px,1.4vw,20px); margin-bottom: clamp(12px,1.2vw,18px);
}
.pc-card__title { font-size: 15px; font-weight: 700; margin-bottom: 4px; display: flex; align-items: center; gap: 8px; }
.pc-card__hint { color: var(--ys-text-2); font-size: 12.5px; margin-bottom: 14px; }

/* 安全提示 chip（黄色） */
.pc-chip {
  display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: var(--ys-radius-pill);
  font-size: 12px; font-weight: 600; background: rgba(255,176,32,.14); color: var(--ys-warn-600);
  border: 1px solid rgba(255,176,32,.35);
}
.pc-chip .ys-ic { width: 15px; height: 15px; }

/* 允许控制本设备 行 */
.pc-allow { display: flex; align-items: center; justify-content: space-between; gap: 12px; }

/* 本机面板卡片：左右分栏 */
.pc-panelcard { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(14px,1.6vw,24px); }
@media (max-width: 720px) { .pc-panelcard { grid-template-columns: 1fr; } }
.pc-pane { background: var(--ys-surface-2); border: 1px solid var(--ys-border); border-radius: var(--ys-radius); padding: clamp(14px,1.4vw,18px); }
.pc-pane__label { font-size: 12px; color: var(--ys-text-2); font-weight: 600; margin-bottom: 8px; display: flex; align-items: center; justify-content: space-between; }
.pc-code-big { font-size: clamp(22px, 2.4vw + 8px, 34px); font-weight: 800; letter-spacing: 1px; font-variant-numeric: tabular-nums; color: var(--ys-text); }
.pc-code-sub { font-size: 12px; color: var(--ys-text-2); margin-top: 4px; }
.pc-ico-row { display: flex; gap: 8px; margin-top: 14px; }
.pc-ico-btn {
  width: 38px; height: 38px; border-radius: 10px; display: flex; align-items: center; justify-content: center;
  background: var(--ys-surface); border: 1px solid var(--ys-border); color: var(--ys-text-2); transition: .15s;
}
.pc-ico-btn:hover { color: var(--ys-primary); border-color: var(--ys-primary); }
.pc-ico-btn .ys-ic { width: 19px; height: 19px; }
.pc-key-mask { font-size: clamp(15px, 1.2vw + 8px, 19px); font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: .5px; }

/* 远程控制设备区 */
.pc-ctrl__status { display: inline-flex; align-items: center; gap: 8px; color: var(--ys-online-600); font-weight: 600; font-size: 13.5px; margin-bottom: 14px; }
.pc-ctrl__status .ys-ic { width: 18px; height: 18px; }
.pc-input-row { display: flex; gap: 10px; align-items: stretch; flex-wrap: wrap; }
.pc-input-row .ys-search { flex: 1; min-width: 200px; }
.pc-input-row input { font-size: 15px; }
.pc-star-btn, .pc-hist-btn {
  width: 44px; flex: none; border-radius: var(--ys-radius-sm); border: 1px solid var(--ys-border);
  background: var(--ys-surface); color: var(--ys-text-2); display: flex; align-items: center; justify-content: center; transition: .15s;
}
.pc-star-btn.is-on { color: var(--ys-warn); border-color: var(--ys-warn); }
.pc-star-btn.is-on .ys-ic { fill: var(--ys-warn); }
.pc-star-btn .ys-ic, .pc-hist-btn .ys-ic { width: 20px; height: 20px; }
.pc-connect-btn { min-width: 132px; flex: none; }
.pc-recent { display: flex; gap: 10px; margin-top: 14px; flex-wrap: wrap; }
.pc-recent__card {
  display: inline-flex; align-items: center; gap: 8px; padding: 8px 12px; border-radius: var(--ys-radius-sm);
  background: var(--ys-surface-2); border: 1px solid var(--ys-border); cursor: pointer; font-size: 13px; transition: .15s;
}
.pc-recent__card:hover { border-color: var(--ys-primary); color: var(--ys-primary); }

/* 模式单选行 */
.pc-modes { display: flex; gap: 10px; flex-wrap: wrap; }
.pc-mode {
  display: inline-flex; align-items: center; gap: 8px; padding: 10px 16px; border-radius: var(--ys-radius-sm);
  border: 1px solid var(--ys-border); background: var(--ys-surface); cursor: pointer; font-size: 13.5px; font-weight: 600; color: var(--ys-text-2); transition: .15s;
}
.pc-mode:hover { border-color: var(--ys-border-strong); color: var(--ys-text); }
.pc-mode__radio { width: 18px; height: 18px; border-radius: 50%; border: 2px solid var(--ys-border-strong); flex: none; display: flex; align-items: center; justify-content: center; transition: .15s; }
.pc-mode.is-active { border-color: var(--ys-primary); color: var(--ys-text); }
.pc-mode.is-active .pc-mode__radio { border-color: var(--ys-primary); }
.pc-mode.is-active .pc-mode__radio::after { content: ""; width: 9px; height: 9px; border-radius: 50%; background: var(--ys-primary); }

/* ---------- 设备列表 ---------- */
.pc-devbar { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-bottom: clamp(12px,1.2vw,18px); }
.pc-devbar .ys-search { flex: 1; min-width: 220px; }
.pc-tags { display: flex; gap: 8px; flex-wrap: wrap; }
.pc-tag {
  padding: 7px 14px; border-radius: var(--ys-radius-pill); border: 1px solid var(--ys-border); background: var(--ys-surface);
  color: var(--ys-text-2); font-size: 12.5px; cursor: pointer; font-weight: 600; transition: .15s; display: inline-flex; align-items: center; gap: 6px;
}
.pc-tag:hover { border-color: var(--ys-border-strong); color: var(--ys-text); }
.pc-tag.is-active { background: var(--ys-primary); color: #fff; border-color: var(--ys-primary); }

.pc-devgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(clamp(220px,22vw,290px),1fr)); gap: clamp(12px,1.4vw,18px); }
.pc-dev {
  background: var(--ys-surface); border: 1px solid var(--ys-border); border-radius: var(--ys-radius); overflow: hidden;
  box-shadow: var(--ys-shadow-sm); transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease; cursor: default;
}
.pc-dev:hover { transform: translateY(-3px); box-shadow: var(--ys-shadow); border-color: var(--ys-border-strong); }
.pc-dev.is-offline { opacity: .62; }
.pc-dev__top { display: flex; align-items: center; gap: 10px; padding: 12px 14px; position: relative; }
.pc-dev__os { width: 34px; height: 34px; border-radius: 9px; flex: none; display: flex; align-items: center; justify-content: center; background: var(--ys-surface-2); color: var(--ys-text); }
.pc-dev__os .ys-ic { width: 20px; height: 20px; }
.pc-dev__name { font-weight: 600; font-size: 14px; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; outline: none; }
.pc-dev__name[contenteditable="true"] { background: var(--ys-surface-2); border-radius: 6px; padding: 1px 4px; }
.pc-dev__star { color: var(--ys-text-2); cursor: pointer; flex: none; }
.pc-dev__star.is-on { color: var(--ys-warn); }
.pc-dev__star.is-on .ys-ic { fill: var(--ys-warn); }
.pc-dev__star .ys-ic { width: 18px; height: 18px; }
.pc-dev__more { color: var(--ys-text-2); cursor: pointer; flex: none; padding: 4px; border-radius: 6px; }
.pc-dev__more:hover { background: var(--ys-surface-2); color: var(--ys-text); }
.pc-dev__more .ys-ic { width: 18px; height: 18px; }
.pc-dev__meta { display: flex; align-items: center; gap: 10px; padding: 0 14px 10px; flex-wrap: wrap; font-size: 12.5px; color: var(--ys-text-2); }
.pc-dev__badge { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border-radius: 7px; background: var(--ys-surface-2); border: 1px solid var(--ys-border); font-weight: 600; font-size: 11.5px; }
.pc-dev__badge--hw { color: var(--ys-primary); border-color: rgba(43,92,255,.3); }
.pc-dev__badge--sw { color: var(--ys-text-2); }
.pc-dev__conn { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; }
.pc-dev__conn .ys-dot { width: 8px; height: 8px; }
.pc-dev__body { padding: 0 14px 14px; }
.pc-dev__connbtn { width: 100%; }
/* 设备卡片补充信息：机器名 / 类型(PC·手机·网页) / GPU 全签名 */
.pc-dev__info { display: flex; align-items: center; gap: 8px; padding: 0 14px 10px; flex-wrap: wrap; font-size: 12.5px; color: var(--ys-text-2); }
.pc-dev__info-item { display: inline-flex; align-items: center; gap: 5px; background: var(--ys-surface-2); border: 1px solid var(--ys-border); border-radius: 8px; padding: 3px 8px; max-width: 100%; }
.pc-dev__info-item .ys-ic { width: 14px; height: 14px; opacity: .8; flex: none; }
.pc-dev__info-item span.txt { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 220px; }
.pc-dev__info-item b { color: var(--ys-text-1); font-weight: 600; }
/* 本机连接验证码卡片内布局 */
.pc-verify { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 12px; flex-wrap: wrap; }
.pc-dev__offtext { font-size: 12px; color: var(--ys-text-2); padding: 0 14px 14px; }

/* 验证码模式分段控件（固定/动态） */
.pc-verify-mode { display: flex; align-items: center; gap: 10px; margin-top: 12px; }
.pc-verify-mode__label { font-size: 12.5px; color: var(--ys-text-2); font-weight: 600; }
.pc-seg { display: inline-flex; background: var(--ys-surface-2); border: 1px solid var(--ys-border); border-radius: 999px; padding: 3px; gap: 2px; }
.pc-seg__btn { border: 0; background: transparent; color: var(--ys-text-2); font-size: 12.5px; font-weight: 600; padding: 5px 14px; border-radius: 999px; cursor: pointer; transition: .15s; }
.pc-seg__btn:hover { color: var(--ys-text); }
.pc-seg__btn.is-active { background: var(--ys-accent); color: #fff; box-shadow: 0 2px 8px rgba(31,111,235,.35); }
.pc-ico-btn:disabled { opacity: .4; cursor: not-allowed; }

/* 更多菜单 */
.pc-menu-pop {
  position: absolute; top: 38px; right: 8px; z-index: 20; min-width: 150px;
  background: var(--ys-surface); border: 1px solid var(--ys-border); border-radius: var(--ys-radius-sm);
  box-shadow: var(--ys-shadow-lg); padding: 6px; display: none;
}
.pc-menu-pop.is-open { display: block; animation: ysFade .15s ease; }
.pc-menu-pop button {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 10px; border-radius: 8px;
  color: var(--ys-text); font-size: 13px; text-align: left; transition: .12s;
}
.pc-menu-pop button:hover { background: var(--ys-surface-2); }
.pc-menu-pop button .ys-ic { width: 16px; height: 16px; color: var(--ys-text-2); }
.pc-menu-pop button.is-danger { color: var(--ys-offline-600); }
.pc-menu-pop button.is-danger .ys-ic { color: var(--ys-offline-600); }

/* ---------- 屏幕墙 ---------- */
.pc-wallbar { display: flex; align-items: center; gap: 12px; margin-bottom: clamp(10px,1vw,16px); flex-wrap: wrap; }
.pc-wallgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(clamp(220px,22vw,300px),1fr)); gap: clamp(12px,1.4vw,18px); }
.pc-wallcell {
  background: var(--ys-surface); border: 1px solid var(--ys-border); border-radius: var(--ys-radius); overflow: hidden;
  box-shadow: var(--ys-shadow-sm); position: relative;
}
.pc-wallcell.is-offline { opacity: .68; }
/* 屏幕墙单元格删除按钮（右上角悬浮 ×） */
.pc-wallcell__del {
  position: absolute; top: 8px; right: 8px; z-index: 3;
  width: 24px; height: 24px; border-radius: 50%; border: 0; cursor: pointer;
  background: rgba(13,20,36,.55); color: #fff; font-size: 16px; line-height: 1;
  display: flex; align-items: center; justify-content: center;
  opacity: 0; transition: opacity .15s, background .15s;
}
.pc-wallcell:hover .pc-wallcell__del { opacity: 1; }
.pc-wallcell__del:hover { background: var(--ys-offline-600); }
/* 清除离线设备按钮禁用态 */
#pcWallClearOffline:disabled { opacity: .45; cursor: not-allowed; }
.pc-wallcell__thumb {
  aspect-ratio: 16 / 9; position: relative; display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, #1b2440, #2a3a66); color: var(--ys-glass-text);
}
.pc-wallcell__thumb .ys-ic { width: 40px; height: 40px; opacity: .8; }
.pc-wallcell__dot { position: absolute; top: 10px; left: 10px; }
.pc-wallcell__foot { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 10px 12px; }
.pc-wallcell__name { font-weight: 600; font-size: 13.5px; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pc-wall__empty {
  grid-column: 1 / -1; color: var(--ys-text-2); font-size: clamp(13px,.7vw+11px,15px);
  padding: clamp(28px,4vw,56px); text-align: center; border: 1px dashed var(--ys-border);
  border-radius: var(--ys-radius); line-height: 1.7;
}
.pc-wall__empty svg { width: 64px; height: 64px; opacity: .5; margin-bottom: 14px; }

/* ---------- 设置 ---------- */
.pc-set-tabs { display: flex; gap: 4px; overflow-x: auto; border-bottom: 1px solid var(--ys-border); margin-bottom: clamp(14px,1.4vw,20px); }
.pc-set-tab {
  padding: 10px 14px; white-space: nowrap; font-size: 13.5px; font-weight: 600; color: var(--ys-text-2);
  cursor: pointer; border-bottom: 2px solid transparent; transition: .15s; margin-bottom: -1px;
}
.pc-set-tab:hover { color: var(--ys-text); }
.pc-set-tab.is-active { color: var(--ys-primary); border-bottom-color: var(--ys-primary); }
.pc-set-pane { display: none; max-width: 720px; }
.pc-set-pane.is-active { display: block; animation: ysFade .2s ease; }
.pc-set-pane h3 { font-size: 15px; margin: clamp(16px,1.6vw,22px) 0 10px; }
.pc-set-pane h3:first-child { margin-top: 0; }

.pc-row-item {
  display: flex; align-items: center; gap: 14px; padding: 14px clamp(12px,1.2vw,16px);
  border: 1px solid var(--ys-border); border-radius: var(--ys-radius); background: var(--ys-surface);
  margin-bottom: 10px; transition: .15s;
}
.pc-row-item:hover { border-color: var(--ys-border-strong); }
.pc-row-item.is-disabled { opacity: .6; }
.pc-row-item__txt { flex: 1; min-width: 0; }
.pc-row-item__title { font-weight: 600; font-size: 14px; }
.pc-row-item__desc { font-size: 12px; color: var(--ys-text-2); margin-top: 3px; }
.pc-row-item__ctrl { flex: none; display: flex; align-items: center; gap: 10px; }

/* 规划中角标 */
.pc-plan {
  font-size: 10.5px; font-weight: 700; padding: 2px 7px; border-radius: 6px; letter-spacing: .5px;
  background: var(--ys-surface-2); color: var(--ys-text-2); border: 1px solid var(--ys-border);
}

/* 单选组 */
.pc-radios { display: flex; gap: 10px; flex-wrap: wrap; }
.pc-radio {
  display: inline-flex; align-items: center; gap: 8px; padding: 9px 14px; border-radius: var(--ys-radius-sm);
  border: 1px solid var(--ys-border); background: var(--ys-surface); cursor: pointer; font-size: 13px; font-weight: 600; color: var(--ys-text-2); transition: .15s;
}
.pc-radio:hover { border-color: var(--ys-border-strong); color: var(--ys-text); }
.pc-radio__dot { width: 18px; height: 18px; border-radius: 50%; border: 2px solid var(--ys-border-strong); flex: none; display: flex; align-items: center; justify-content: center; transition: .15s; }
.pc-radio.is-active { border-color: var(--ys-primary); color: var(--ys-text); }
.pc-radio.is-active .pc-radio__dot { border-color: var(--ys-primary); }
.pc-radio.is-active .pc-radio__dot::after { content: ""; width: 9px; height: 9px; border-radius: 50%; background: var(--ys-primary); }
.pc-radio.is-disabled { opacity: .6; cursor: default; }

/* 下拉 */
.pc-select {
  padding: 9px 12px; border-radius: var(--ys-radius-sm); border: 1px solid var(--ys-border); background: var(--ys-surface);
  color: var(--ys-text); font-size: 13.5px; font-weight: 600; cursor: pointer; min-width: 140px;
}
.pc-select:disabled { opacity: .6; cursor: default; }
.pc-text-input {
  padding: 9px 12px; border-radius: var(--ys-radius-sm); border: 1px solid var(--ys-border); background: var(--ys-surface);
  color: var(--ys-text); font-size: 13.5px; min-width: 200px; outline: none;
}
.pc-text-input:focus { border-color: var(--ys-primary); }

/* 快捷键列表 */
.pc-keys { display: flex; flex-direction: column; gap: 8px; }
.pc-key-item { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 14px; border: 1px solid var(--ys-border); border-radius: var(--ys-radius); background: var(--ys-surface); }
.pc-key-item__name { font-size: 13.5px; font-weight: 600; }
.pc-key-combo { display: inline-flex; align-items: center; gap: 5px; flex: none; }
.pc-kbd {
  display: inline-block; padding: 3px 8px; border-radius: 6px; background: var(--ys-surface-2); border: 1px solid var(--ys-border);
  font-size: 11.5px; font-weight: 700; font-family: var(--ys-font); color: var(--ys-text); min-width: 20px; text-align: center;
}
/* 快捷键设置说明 / 子标题 */
.pc-set-desc { font-size: 12.5px; color: var(--ys-text-2); line-height: 1.6; margin: 4px 0 14px; }
.pc-set-sub { font-size: 13px; font-weight: 700; color: var(--ys-text); margin: 18px 0 10px; }
/* 可配置快捷键行内的"录制"按钮 + 录制态 */
.pc-key-rec {
  border: 1px solid var(--ys-border); background: var(--ys-surface-2); color: var(--ys-text);
  font-size: 12px; font-weight: 600; padding: 5px 12px; border-radius: 8px; cursor: pointer; transition: .15s; flex: none;
}
.pc-key-rec:hover { border-color: var(--ys-primary); color: var(--ys-primary); }
.pc-key-rec.is-recording { background: var(--ys-primary); color: #fff; border-color: var(--ys-primary); animation: ysPulse 1s infinite; }
.pc-key-combo.is-waiting .pc-kbd { border-color: var(--ys-primary); color: var(--ys-primary); }
@keyframes ysPulse { 0%,100% { opacity: 1; } 50% { opacity: .55; } }

/* ---------- 会话工具栏 shell（规划中） ---------- */
.pc-session { display: none; flex: 1; position: relative; background: #0b0f1a; overflow: hidden; }
.pc-main.is-session .pc-topbar, .pc-main.is-session .pc-content { display: none; }
.pc-main.is-session .pc-session { display: block; }
.pc-viewport {
  position: absolute; inset: 0;
  background: repeating-linear-gradient(45deg, #10182b, #10182b 14px, #0d1424 14px, #0d1424 28px);
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px;
}
.pc-viewport .pc-hint { color: #54607e; font-size: 15px; }
.pc-toolbar-wrap { position: absolute; top: 16px; left: 50%; transform: translateX(-50%); z-index: 5; }
.pc-qbar { position: absolute; top: 18px; right: 18px; z-index: 5; }
.pc-toolbar__dd {
  margin-left: 4px; display: inline-flex; align-items: center; gap: 4px; height: 40px; padding: 0 10px;
  border-radius: var(--ys-radius-pill); background: var(--ys-glass); color: var(--ys-glass-text); border: 1px solid rgba(255,255,255,.14);
  font-size: 12.5px; cursor: pointer; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
}
.pc-panel {
  position: absolute; top: 0; right: 0; height: 100%; width: clamp(260px, 24vw, 340px); z-index: 4;
  transition: transform .22s ease; border-left: 1px solid var(--ys-border);
}
.pc-session.is-collapsed .pc-panel { transform: translateX(100%); }

/* ---------- M2 远程会话视图（真实画面） ---------- */
#screen-session.is-active { display: flex; flex-direction: column; }
.pc-sess-head { display: flex; align-items: center; gap: 12px; padding: 2px 2px 12px; }
#screen-session .pc-viewport {
  position: relative; inset: auto; flex: 1; width: 100%; min-height: 0;
  border-radius: var(--ys-radius); overflow: hidden;
}
#pcSessCanvas {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain;
  background: #0b0f1a; display: block; cursor: crosshair;
}
#pcSessVideo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; }

/* ---------- M3 远程控制视图（看 + 控，ToDesk 风格悬浮胶囊工具栏） ---------- */
#screen-control.is-active { display: flex; flex-direction: column; }
/* 会话态（session/control）：隐藏常规导航内容区，让会话 section 独占 .pc-main。
   ⚠️ 修复记录（2026-10-07 陈总抓到的"白屏没画面"）：进入 #/control 时
   .pc-content(flex:1) 仍占满主区，#screen-control 高度塌缩 → canvas 被压成
   ~22px 细缝，画面看似纯白。编解码链路本身是通的，纯布局 bug。 */
.pc-app.is-session .pc-content { display: none; }
/* ⚠️ 回滚记录（2026-10-07 陈总拍板，红线）：旧版把 .pc-topbar / .pc-side 一并
   display:none 属于过度设计——陈总本意是「把远控画面塞进右侧面板」，左侧导航
   与顶栏（铃铛/连接状态）必须常驻可见；全屏由用户点工具栏按钮自行触发，
   不默认吞掉整个窗口。 */
#screen-control.is-active { flex: 1; min-height: 0; padding: 0 clamp(12px,1.4vw,20px) clamp(12px,1.4vw,20px); }
#screen-session.is-active { flex: 1; min-height: 0; padding: 0 clamp(12px,1.4vw,20px) clamp(12px,1.4vw,20px); }
#screen-control .pc-viewport {
  position: relative; inset: auto; flex: 1; width: 100%; min-height: 0;
  border-radius: var(--ys-radius); overflow: hidden;
}
#pcCtrlCanvas {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain;
  background: #0b0f1a; display: block; cursor: crosshair; touch-action: none;
}
#pcCtrlVideo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; }

/* ToDesk 风格悬浮胶囊工具栏 */
.ys-capsule {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 10px; border-radius: var(--ys-radius-pill);
  background: var(--ys-glass); color: var(--ys-glass-text);
  border: 1px solid rgba(255,255,255,.14);
  box-shadow: var(--ys-shadow-lg);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  font-size: 12.5px; white-space: nowrap;
}
.ys-capsule__item { display: inline-flex; align-items: center; gap: 6px; }
.ys-capsule__txt { opacity: .9; }
.ys-capsule__sep { width: 1px; height: 18px; background: rgba(255,255,255,.16); }
.ys-capsule__btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 999px; border: none; cursor: pointer;
  background: rgba(255,255,255,.08); color: var(--ys-glass-text);
  transition: background .15s ease, transform .15s ease;
}
.ys-capsule__btn:hover { background: rgba(255,255,255,.18); transform: translateY(-1px); }
.ys-capsule__btn.is-danger { background: rgba(255,77,79,.22); color: #ff9b9d; }
.ys-capsule__btn.is-danger:hover { background: rgba(255,77,79,.38); }
.ys-capsule__btn .ys-ic { width: 17px; height: 17px; }

.pc-ctrl-tip {
  position: absolute; bottom: 16px; left: 50%; transform: translateX(-50%); z-index: 5;
  font-size: 12px; color: var(--ys-glass-text); opacity: .82;
  padding: 6px 14px; border-radius: var(--ys-radius-pill);
  background: var(--ys-glass); border: 1px solid rgba(255,255,255,.12);
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  pointer-events: none;
}


/* ---------- Modal（二维码） ---------- */
.pc-modal-mask {
  position: fixed; inset: 0; background: rgba(10,14,26,.5); backdrop-filter: blur(4px); z-index: 100;
  display: none; align-items: center; justify-content: center; padding: 16px;
}
.pc-modal-mask.is-open { display: flex; animation: ysFade .2s ease; }
.pc-modal {
  background: var(--ys-surface); border-radius: var(--ys-radius-lg); border: 1px solid var(--ys-border);
  box-shadow: var(--ys-shadow-lg); padding: clamp(18px,2vw,28px); max-width: 92vw; width: 360px; text-align: center;
}
.pc-modal h3 { font-size: 16px; margin-bottom: 4px; }
.pc-modal p { font-size: 12.5px; color: var(--ys-text-2); margin-bottom: 16px; }
.pc-qr-canvas { display: block; margin: 0 auto; border-radius: var(--ys-radius-sm); }
.pc-modal__close { margin-top: 16px; width: 100%; }

/* ---------- Toast ---------- */
.pc-toast-wrap { position: fixed; top: 18px; left: 50%; transform: translateX(-50%); z-index: 200; display: flex; flex-direction: column; gap: 8px; align-items: center; }
.pc-toast {
  background: var(--ys-glass); color: var(--ys-glass-text); padding: 11px 18px; border-radius: var(--ys-radius-pill);
  font-size: 13.5px; font-weight: 600; box-shadow: var(--ys-shadow-lg); border: 1px solid rgba(255,255,255,.14);
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); animation: ysFade .2s ease; max-width: 92vw;
}
.pc-toast.is-err { background: rgba(232,79,79,.92); }
.pc-toast.is-ok { background: rgba(27,168,104,.92); }

/* ---------- 历史下拉 ---------- */
.pc-hist-pop {
  position: relative;
}
.pc-hist-list {
  position: absolute; top: calc(100% + 6px); right: 0; z-index: 30; min-width: 220px;
  background: var(--ys-surface); border: 1px solid var(--ys-border); border-radius: var(--ys-radius-sm);
  box-shadow: var(--ys-shadow-lg); padding: 6px; display: none;
}
.pc-hist-list.is-open { display: block; animation: ysFade .15s ease; }
.pc-hist-list button {
  display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; padding: 9px 10px;
  border-radius: 8px; color: var(--ys-text); font-size: 13px; text-align: left; transition: .12s;
}
.pc-hist-list button:hover { background: var(--ys-surface-2); }
.pc-hist-list button .ys-ic { width: 15px; height: 15px; color: var(--ys-text-2); }

/* ---------- 响应式：窄屏抽屉 ---------- */
@media (max-width: 880px) {
  .pc-side { position: fixed; z-index: 30; height: 100dvh; transform: translateX(-100%); box-shadow: var(--ys-shadow-lg); }
  .pc-app.is-nav-open .pc-side { transform: translateX(0); }
  .pc-menu-btn { display: flex; }
}
@media (max-width: 560px) {
  .pc-wallgrid { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
}

/* ---------- 首页重构（2026-10-08 第二轮：设备码+验证码一排 / 远程框突出 / 工具区置底） ---------- */
.pc-home-device__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.pc-allow-toggle { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--ys-text-2); cursor: default; }
.pc-home-row { display: grid; grid-template-columns: 1fr auto 1fr; gap: clamp(12px, 2vw, 24px); align-items: stretch; }
.pc-home-col { min-width: 0; }
.pc-home-col__label { font-size: 12px; font-weight: 600; color: var(--ys-text-2); margin-bottom: 6px; }
.pc-home-divider { width: 1px; align-self: stretch; background: var(--ys-border); }
.pc-home-hint { margin-top: 12px; display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ys-text-2); line-height: 1.5; }
.pc-home-hint .ys-ic { color: var(--ys-accent); flex: none; }
.pc-home-tools { margin-top: 4px; }
.pc-tools { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 6px; }
.pc-tool {
  display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 16px 10px;
  border-radius: var(--ys-radius); border: 1px solid var(--ys-border); background: var(--ys-surface);
  cursor: pointer; transition: .15s; text-align: center; font: inherit; color: var(--ys-text);
}
.pc-tool:hover { border-color: var(--ys-primary); background: var(--ys-surface-2); transform: translateY(-2px); box-shadow: 0 8px 22px rgba(0,0,0,.08); }
.pc-tool__ic { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--ys-primary), var(--ys-accent)); color: #fff; }
.pc-tool__ic .ys-ic { width: 20px; height: 20px; }
.pc-tool__ic.ysk-gif { width: auto; padding: 0 12px; font-weight: 800; font-size: 14px; letter-spacing: .4px; }
.pc-tool__tx { font-size: 13.5px; font-weight: 700; }
.pc-tool__sub { font-size: 11px; color: var(--ys-text-2); }
.pc-guest-banner {
  display: flex; align-items: center; gap: 8px; margin-bottom: 12px; padding: 10px 14px;
  border-radius: var(--ys-radius); border: 1px solid rgba(255,176,32,.42);
  background: rgba(255,176,32,.10); color: var(--ys-warn-600); font-size: 12.5px; line-height: 1.5;
}
.pc-guest-banner .ys-ic { width: 16px; height: 16px; flex: none; }
@media (max-width: 600px) {
  .pc-home-row { grid-template-columns: 1fr; }
  .pc-home-divider { width: auto; height: 1px; }
  .pc-tools { grid-template-columns: 1fr; }
}
