:root {

  color-scheme: light;

  --shell-accent: #4a7ec9;

  --shell-accent-rgb: 74, 126, 201;

  --shell-accent-2: #6b9ad6;

  --shell-accent-2-rgb: 107, 154, 214;

  --shell-sidebar-width: 200px;

  --shell-sidebar-collapsed-width: 72px;

  --shell-topbar-height: 64px;

  --shell-bottom-nav-height: 68px;

  --shell-radius-xs: 7px;

  --shell-radius-sm: 10px;

  --shell-radius-md: 14px;

  --shell-bg: var(--theme-page-bg);

  --shell-surface: var(--theme-panel-bg);

  --shell-surface-soft: var(--theme-panel-soft);

  --shell-chrome-surface: var(--theme-chrome-bg);

  --shell-chrome-surface-soft: var(--theme-chrome-bg);

  --shell-border: var(--theme-border);

  --shell-border-strong: var(--theme-border-strong);

  --shell-text: var(--theme-text);

  --shell-text-muted: var(--theme-text-muted);

  --shell-text-soft: var(--theme-text-soft);

  --shell-danger: #b42318;

  --shell-on-accent: var(--theme-button-text);

  --shell-overlay: color-mix(in srgb, var(--shell-text) 50%, transparent);

  --shell-overlay-strong: color-mix(in srgb, var(--shell-text) 52%, transparent);

  --shell-shadow-card: var(--theme-shadow-card);

  --shell-shadow-strong: var(--theme-shadow-strong);

  --shell-focus: rgba(var(--shell-accent-rgb), 0.24);

  font-family: "Microsoft YaHei UI", "PingFang SC", "HarmonyOS Sans SC", sans-serif;

  font-synthesis: none;

  text-rendering: optimizeLegibility;

}



* {

  box-sizing: border-box;

}



html,

body {

  width: 100%;

  min-width: 0;

  min-height: 100%;

  margin: 0;

}



body {

  overflow: hidden;

  background: var(--shell-bg);

  color: var(--shell-text);

}



html.shell-preview-mode,

body.shell-preview-mode {

  min-height: 0;

  overflow: hidden;

  background: transparent;

}



button,

input,

select,

textarea {

  font: inherit;

  letter-spacing: 0;

}



button {

  cursor: pointer;

}



button:focus-visible,

a:focus-visible,

iframe:focus-visible {

  outline: 3px solid var(--shell-focus);

  outline-offset: 2px;

}



[hidden] {

  display: none !important;

}



.shell-skip-link {

  position: fixed;

  z-index: 1000;

  top: 8px;

  left: 8px;

  transform: translateY(-140%);

  padding: 10px 14px;

  border-radius: 6px;

  background: var(--shell-text);

  color: var(--shell-on-accent);

  text-decoration: none;

  transition: transform 160ms ease;

}



.shell-skip-link:focus {

  transform: translateY(0);

}



.app-shell {

  position: relative;

  isolation: isolate;

  width: 100%;

  height: 100vh;

  height: 100dvh;

  display: grid;

  grid-template-columns: var(--shell-sidebar-width) minmax(0, 1fr);

  overflow: hidden;

  background: var(--shell-bg);

}



.app-shell.shell-preview-mode.shell-device-mobile {

  border-radius: 30px;

  clip-path: inset(0 round 30px);

}



.app-shell.shell-preview-mode.shell-device-desktop {

  border-radius: 0;

  clip-path: inset(0);

}



.shell-sidebar {

  position: relative;

  z-index: 20;

  min-width: 0;

  display: grid;

  grid-template-rows: auto minmax(0, 1fr) auto;

  border-right: 1px solid var(--shell-border-strong);

  background: var(--shell-chrome-surface);

}



.shell-brand {

  min-width: 0;

  border: 0;

  background: transparent;

  color: inherit;

  text-align: left;

}



.shell-brand--sidebar {

  width: 100% !important;

  min-height: var(--shell-topbar-height);

  display: flex !important;

  align-items: center !important;

  justify-content: center !important;

  text-align: center !important;

  gap: 10px;

  padding: 10px 16px !important;

  border-bottom: 1px solid var(--shell-border);

}



.shell-brand--sidebar:hover,

.shell-user-entry:hover {

  background: var(--shell-surface-soft);

}



.shell-brand-logo,

.shell-user-avatar {

  display: grid;

  place-items: center;

  overflow: hidden;

  flex: 0 0 auto;

  background: var(--shell-accent);

  color: var(--shell-on-accent);

  font-weight: 800;

}



.shell-brand-logo {

  width: 36px;

  height: 36px;

  border-radius: var(--shell-radius-xs);

  font-size: 14px;

}



.shell-brand-logo img,

.shell-user-avatar img {

  width: 100%;

  height: 100%;

  display: block;

  object-fit: cover;

}



.shell-user-avatar svg {

  width: 18px;

  height: 22px;

  display: block;

  fill: none;

  stroke: currentColor;

  stroke-width: 1.8;

  stroke-linecap: round;

  stroke-linejoin: round;

}



.shell-brand-copy,

.shell-user-copy {

  min-width: 0;

  display: grid;

  gap: 2px;

}



.shell-brand-copy strong,

.shell-user-copy strong {

  overflow: hidden;

  color: var(--shell-text);

  font-size: 14px;

  line-height: 1.4;

  text-overflow: ellipsis;

  white-space: nowrap;

}



.shell-brand-copy span,

.shell-user-copy span {

  color: var(--shell-text-muted);

  font-size: 11px;

  line-height: 1.4;

}



.shell-sidebar-nav {

  min-height: 0;

  display: flex;

  flex-direction: column;

  gap: 4px;

  padding: 16px 10px;

  overflow-x: hidden;

  overflow-y: auto;

}



.shell-nav-button,

.shell-more-link {

  border: 1px solid transparent;

  background: transparent;

  color: var(--shell-text-muted);

  text-align: left;

  transition: background 160ms ease, border-color 160ms ease, color 160ms ease;

}



.shell-nav-button {

  width: 100%;

  min-height: 44px;

  display: flex;

  align-items: center;

  gap: 12px;

  padding: 8px 12px;

  border-radius: var(--shell-radius-xs);

  font-size: 14px;

  font-weight: 600;

}



.shell-nav-button:hover,

.shell-more-link:hover {

  transform: scale(1.1);

}



.shell-nav-button.is-active,

.shell-more-link.is-active {

  border-color: rgba(var(--shell-accent-rgb), 0.2);

  background: rgba(var(--shell-accent-rgb), 0.1);

  color: #409eff;

}



.shell-nav-icon,

.shell-bottom-icon,

.shell-more-link-icon {

  width: 20px;

  height: 20px;

  display: grid;

  place-items: center;

  flex: 0 0 auto;

}



.shell-nav-icon svg,

.shell-bottom-icon svg,

.shell-more-link-icon svg,

.shell-icon-button svg {

  width: 100%;

  height: 100%;

  display: block;

  fill: none;

  stroke: currentColor;

  stroke-width: 1.8;

  stroke-linecap: round;

  stroke-linejoin: round;

}



.shell-sidebar-footer {

  min-width: 0;

  display: grid;

  grid-template-columns: minmax(0, 1fr) 40px;

  align-items: center;

  gap: 4px;

  padding: 10px;

  border-top: 1px solid var(--shell-border);

}



.shell-user-entry {

  min-width: 0;

  min-height: 48px;

  display: flex;

  align-items: center;

  gap: 10px;

  padding: 6px;

  border: 0;

  border-radius: var(--shell-radius-xs);

  background: transparent;

  text-align: left;

}



.shell-user-avatar {

  width: 32px;

  height: 32px;

  border-radius: 50%;

  background: var(--shell-accent);

  color: var(--shell-on-accent);

  font-size: 12px;

}



.shell-icon-button {

  width: 40px;

  height: 40px;

  display: grid;

  place-items: center;

  padding: 10px;

  border: 1px solid var(--shell-border);

  border-radius: var(--shell-radius-xs);

  background: var(--shell-surface);

  color: var(--shell-text-muted);

}



.shell-icon-button:hover {

  transform: scale(1.1);

}



.shell-workspace {

  position: relative;

  z-index: 1;

  min-width: 0;

  min-height: 0;

  display: grid;

  grid-template-rows: var(--shell-topbar-height) minmax(0, 1fr);

}



.shell-mobile-statusbar {

  display: none;

}



.shell-topbar {

  position: relative;

  z-index: 15;

  min-width: 0;

  display: grid;

  grid-template-columns: minmax(0, 1fr) auto;

  align-items: center;

  gap: 16px;

  padding: 0 24px;

  border-bottom: 1px solid var(--shell-border-strong);

  background: var(--shell-chrome-surface-soft);

}



.shell-brand--topbar,

.shell-top-nav {

  display: none;

}



.shell-page-heading {

  min-width: 0;

  display: flex;

  align-items: baseline;

  gap: 10px;

}



.shell-page-heading h1 {

  overflow: hidden;

  margin: 0;

  color: var(--shell-text);

  font-size: 18px;

  font-weight: 700;

  line-height: 1.4;

  letter-spacing: 0;

  text-overflow: ellipsis;

  white-space: nowrap;

}



.shell-page-context {

  color: var(--shell-text-soft);

  font-size: 12px;

  white-space: nowrap;

}



.shell-topbar-actions {

  min-width: 0;

  display: inline-flex;

  align-items: center;

  justify-content: flex-end;

  gap: 8px;

}



/* 与主题/动效按钮一致的悬停放大过渡 */
#openAddrModal {
  transition: transform 0.2s ease, border-color 0.2s ease, background 0.2s ease !important;
}

.shell-topbar-user {

  /* 高度与旁边三个图标按钮一致（34px），宽度按“头像 + 用户名”自适应 */
  width: auto;

  height: 34px;

  min-width: 0;

  min-height: 34px;

  display: inline-flex;

  align-items: center;

  justify-content: center;

  gap: 8px;

  padding: 0 10px;

  border: 1px solid var(--shell-border);

  border-radius: var(--shell-radius-xs);

  background: var(--shell-surface-soft);

  color: var(--shell-text);

  font-size: 13px;

  font-weight: 600;

  white-space: nowrap;

  transition: border-color 0.2s ease, background 0.2s ease, transform 0.2s ease;

}

.shell-topbar-user .shell-user-avatar {

  width: 24px;

  height: 24px;

}

/* 用户名后面的下拉箭头，提示可以点开菜单 */
.shell-topbar-user-caret {

  display: inline-flex;

  align-items: center;

  justify-content: center;

  margin-left: 2px;

  color: var(--shell-text-muted);

  flex: 0 0 auto;

}

.shell-topbar-user:hover {

  border-color: var(--shell-border-strong);

  background: var(--shell-surface-soft);

  transform: scale(1.1);

}



.shell-nav-ctx-menu {
  position: fixed;
  z-index: 92;
  width: 168px;
  display: grid;
  gap: 2px;
  padding: 6px;
  border: 1px solid var(--shell-border);
  border-radius: 8px;
  background: var(--shell-surface);
  box-shadow: var(--shell-shadow-card);
}

.shell-nav-ctx-menu[hidden] {
  display: none;
}

.shell-nav-ctx-menu-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 8px 10px;
  border: none;
  border-radius: 6px;
  background: transparent;
  color: var(--shell-text);
  font-size: 13px;
  line-height: 1.4;
  text-align: left;
  cursor: pointer;
}

.shell-nav-ctx-menu-button:hover,
.shell-nav-ctx-menu-button:focus-visible {
  background: var(--shell-surface-soft);
}

.shell-nav-ctx-menu-icon {
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  color: var(--shell-text-muted);
}

.shell-nav-ctx-menu-icon svg {
  width: 100%;
  height: 100%;
  display: block;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.shell-account-menu {

  position: fixed;

  z-index: 90;

  width: 112px;

  display: grid;

  gap: 4px;

  padding: 6px 0;

  border: 1px solid var(--shell-border);

  border-radius: 8px;

  background: var(--shell-surface);

  box-shadow: var(--shell-shadow-card);

  opacity: 0;

  visibility: hidden;

  pointer-events: none;

  transform: translateY(-10px) scale(0.92);

  transform-origin: top right;

  will-change: transform, opacity;

  transition:

    opacity 0.28s ease,

    transform 0.42s cubic-bezier(0.16, 1, 0.3, 1),

    visibility 0s linear 0.42s;

}



.shell-account-menu[hidden],

.shell-confirm-modal[hidden] {

  display: none;

}



.shell-account-menu.is-placement-up {

  transform: translateY(10px) scale(0.92);

  transform-origin: bottom right;

}



.shell-account-menu.is-open {

  opacity: 1;

  visibility: visible;

  pointer-events: auto;

  transform: translateY(0) scale(1);

  transition-delay: 0s, 0s, 0s;

}



.shell-account-menu.is-closing {

  opacity: 0;

  visibility: visible;

  pointer-events: none;

  transform: translateY(-10px) scale(0.92);

}



.shell-account-menu.is-placement-up.is-closing {

  transform: translateY(10px) scale(0.92);

}



.shell-account-menu-button {

  width: calc(100% + 2px);

  min-height: 40px;

  display: flex;

  align-items: center;

  justify-content: center;

  gap: 4px;

  margin-inline: -1px;

  padding: 8px 0;

  border: 0;

  border-radius: 6px;

  background: transparent;

  color: var(--shell-text);

  font-size: 13px;

  font-weight: 600;

  text-align: center;

  white-space: nowrap;

  opacity: 0;

  transform: translate3d(0, -10px, 0) scale(0.92);

  transition:

    background 0.24s ease,

    color 0.24s ease,

    transform 0.34s cubic-bezier(0.16, 1, 0.3, 1),

    opacity 0.28s ease;

}



.shell-account-menu.is-open .shell-account-menu-button {

  opacity: 1;

  transform: translate3d(0, 0, 0) scale(1);

}



.shell-account-menu.is-closing .shell-account-menu-button {

  opacity: 0;

  transform: translate3d(0, -10px, 0) scale(0.92);

}



.shell-account-menu.is-open .shell-account-menu-button:nth-child(1) {

  transition-delay: 40ms;

}



.shell-account-menu.is-open .shell-account-menu-button:nth-child(2) {

  transition-delay: 70ms;

}



.shell-account-menu.is-closing .shell-account-menu-button:nth-child(1) {

  transition-delay: 72ms;

}



.shell-account-menu.is-closing .shell-account-menu-button:nth-child(2) {

  transition-delay: 36ms;

}



.shell-account-menu-button:hover,

.shell-account-menu-button:focus-visible {

  background: var(--shell-surface-soft);

}



.shell-account-menu-button.is-danger {

  background: var(--shell-danger);

  color: var(--shell-on-accent);

}



.shell-account-menu-button.is-danger:hover,

.shell-account-menu-button.is-danger:focus-visible {

  background: var(--shell-danger);

}



.shell-account-menu-icon,

.shell-confirm-danger-icon {

  display: grid;

  place-items: center;

  flex: 0 0 auto;

}



.shell-account-menu-icon {

  width: 18px;

  height: 22px;

}



.shell-account-menu-icon svg,

.shell-confirm-danger-icon svg {

  width: 100%;

  height: 100%;

  display: block;

  fill: none;

  stroke: currentColor;

  stroke-width: 1.8;

  stroke-linecap: round;

  stroke-linejoin: round;

}



.shell-confirm-modal {

  position: fixed;

  z-index: 100001;

  inset: 0;

  display: grid;

  place-items: center;

  padding: 20px;

}



.shell-confirm-backdrop {

  position: absolute;

  inset: 0;

  background: var(--shell-overlay-strong);

  backdrop-filter: blur(2px);

}



.shell-confirm-dialog {

  position: relative;

  width: min(100%, 420px);

  display: grid;

  justify-items: center;

  gap: 12px;

  padding: 28px;

  border: 1px solid var(--shell-border);

  border-radius: 8px;

  background: var(--shell-surface);

  box-shadow: var(--shell-shadow-strong);

  text-align: center;

}



.shell-confirm-danger-icon {

  width: 44px;

  height: 44px;

  padding: 10px;

  border-radius: 50%;

  background: color-mix(in srgb, var(--shell-danger) 10%, var(--shell-surface) 90%);

  color: var(--shell-danger);

}



.shell-confirm-dialog h2 {

  margin: 0;

  color: var(--shell-text);

  font-size: 18px;

  line-height: 1.4;

  letter-spacing: 0;

}



.shell-confirm-dialog p {

  margin: 0;

  color: var(--shell-text-muted);

  font-size: 13px;

  line-height: 1.7;

}



.shell-confirm-dialog .shell-confirm-error {

  color: var(--shell-danger);

}



.shell-confirm-field {

  width: 100%;

  display: grid;

  gap: 6px;

  color: var(--shell-text);

  font-size: 12px;

  font-weight: 700;

  text-align: left;

}



.shell-confirm-field input {

  width: 100%;

  min-height: 42px;

  padding: 8px 10px;

  border: 1px solid var(--shell-border);

  border-radius: 6px;

  outline: none;

  background: var(--shell-surface);

  color: var(--shell-text);

  font: inherit;

}



.shell-confirm-field input::placeholder {

  color: var(--shell-text-soft);

}



.shell-confirm-field input:focus {

  border-color: var(--shell-danger);

  box-shadow: 0 0 0 3px color-mix(in srgb, var(--shell-danger) 12%, transparent);

}



.shell-confirm-actions {

  width: 100%;

  display: grid;

  grid-template-columns: repeat(2, minmax(0, 1fr));

  gap: 10px;

  margin-top: 6px;

}



.shell-confirm-button {

  min-height: 42px;

  padding: 8px 14px;

  border: 1px solid var(--shell-border);

  border-radius: 6px;

  background: var(--shell-surface);

  color: var(--shell-text);

  font-size: 13px;

  font-weight: 700;

}



.shell-confirm-button.is-danger {

  border-color: var(--shell-danger);

  background: var(--shell-danger);

  color: var(--shell-on-accent);

}



.shell-confirm-button:disabled {

  cursor: wait;

  opacity: 0.62;

}



.shell-main {

  min-width: 0;

  min-height: 0;

  position: relative;

  overflow: hidden;

  background: var(--shell-bg);

}



.shell-frame-stage,

.shell-page-frame {

  width: 100%;

  height: 100%;

}



.shell-frame-stage {

  position: relative;

  overflow: hidden;

  background: var(--shell-bg);

}



.shell-page-frame {

  display: block;

  border: 0;

  background: transparent;

}



.shell-runtime-state {

  position: absolute;

  z-index: 3;

  inset: 0;

  display: grid;

  place-content: center;

  justify-items: center;

  gap: 10px;

  padding: 24px;

  background: var(--shell-bg);

  color: var(--shell-text-muted);

  text-align: center;

}



.shell-runtime-state strong {

  color: var(--shell-text);

  font-size: 15px;

}



.shell-runtime-state span {

  max-width: 420px;

  font-size: 13px;

  line-height: 1.6;

}



.shell-runtime-state--error strong {

  color: var(--shell-danger);

}



.shell-loading-indicator {

  width: 28px;

  height: 28px;

  border: 3px solid rgba(var(--shell-accent-rgb), 0.18);

  border-top-color: var(--shell-accent);

  border-radius: 50%;

  animation: shell-spin 700ms linear infinite;

}



.shell-editor-progress {

  width: 220px;

  height: 6px;

  margin-top: 14px;

  background: rgba(var(--shell-accent-rgb), 0.12);

  border-radius: 3px;

  overflow: hidden;

}

.shell-editor-progress-bar {

  height: 100%;

  width: 40%;

  background: var(--shell-accent);

  border-radius: 3px;

  animation: shell-editor-progress-move 1.4s ease-in-out infinite;

}

@keyframes shell-editor-progress-move {

  0% { transform: translateX(-100%); }

  100% { transform: translateX(350%); }

}



.shell-retry-button {

  min-width: 96px;

  min-height: 40px;

  margin-top: 4px;

  border: 1px solid var(--shell-accent);

  border-radius: var(--shell-radius-xs);

  background: var(--shell-accent);

  color: var(--shell-on-accent);

  font-size: 13px;

  font-weight: 700;

}



.shell-bottom-nav,

.shell-more-backdrop,

.shell-more-sheet {

  display: none;

}



.app-shell.is-sidebar-collapsed {

  grid-template-columns: var(--shell-sidebar-collapsed-width) minmax(0, 1fr);

}



.app-shell.is-sidebar-collapsed .shell-brand--sidebar,

.app-shell.is-sidebar-collapsed .shell-nav-button,

.app-shell.is-sidebar-collapsed .shell-user-entry {

  justify-content: center;

}



.app-shell.is-sidebar-collapsed .shell-brand-copy,

.app-shell.is-sidebar-collapsed .shell-nav-label,

.app-shell.is-sidebar-collapsed .shell-user-copy {

  display: none;

}



.app-shell.is-sidebar-collapsed .shell-sidebar-footer {

  grid-template-columns: 1fr;

}



.app-shell.is-sidebar-collapsed .shell-sidebar-collapse {

  transform: rotate(180deg);

}



.app-shell.shell-layout-light {

  grid-template-columns: minmax(0, 1fr);

}



.app-shell.shell-layout-light .shell-sidebar {

  display: none;

}



.app-shell.shell-layout-light .shell-topbar {

  grid-template-columns: var(--shell-sidebar-width) minmax(0, 1fr) auto;

}



.app-shell.shell-layout-light .shell-page-heading {

  display: none;

}



.app-shell.shell-layout-light .shell-brand--topbar {

  min-width: 0;

  display: flex;

  justify-content: center;

  align-items: center;

  width: 100%;

  gap: 10px;

}



.app-shell.shell-layout-light .shell-top-nav {

  min-width: 0;

  display: flex;

  align-items: center;

  justify-content: center;

  gap: 4px;

  overflow-x: auto;

  overflow-y: hidden;

  scrollbar-width: none;

}

.app-shell.shell-layout-light .shell-top-nav::-webkit-scrollbar {

  display: none;

}



.shell-top-nav .shell-nav-button {

  width: auto;

  min-width: 0;

  flex: 0 0 auto;

  white-space: nowrap;

  padding: 8px 10px;

  transform: none;

}



/* 顶部导航标签不要悬停放大效果 */

.shell-top-nav .shell-nav-button:hover,

.shell-top-nav .shell-nav-button:focus-visible {

  transform: none;

  background: transparent;

  border-color: transparent;

}

.shell-top-nav .shell-nav-button.is-active:hover {

  border-color: rgba(var(--shell-accent-rgb), 0.2);

  background: rgba(var(--shell-accent-rgb), 0.1);

}



.app-shell.shell-focus-mode {

  grid-template-columns: minmax(0, 1fr);

}



.app-shell.shell-focus-mode .shell-sidebar,

.app-shell.shell-focus-mode .shell-topbar,

.app-shell.shell-focus-mode .shell-bottom-nav {

  display: none !important;

}



.app-shell.shell-focus-mode .shell-workspace {

  grid-template-rows: minmax(0, 1fr);

}



/* ===== 顶栏收起 / 展开（居中把手 + 顶部悬浮 tab） ===== */

/* 只在"展开方向"做平滑过渡：收起瞬间到位，避免连续布局/iframe resize 抖动 */

/* 收起/展开均瞬间切换，避免 iframe 连续 resize 导致右侧面板抖动 */



.shell-topbar-collapse {

  position: absolute;

  left: 50%;

  bottom: -12px;

  transform: translateX(-50%);

  z-index: 20;

  width: auto;

  height: auto;

  padding: 2px 6px;

  border: none;

  background: transparent;

  color: var(--shell-text-soft, #888);

  opacity: .5;

  cursor: pointer;

  display: grid;

  place-items: center;

  transition: opacity .15s ease;

}

.shell-topbar-collapse:hover { opacity: 1; color: var(--shell-accent, #4f7cff); }

.shell-topbar-collapse-icon svg { width: 24px; height: 22px; display: block; }



.app-shell .shell-workspace {

  transition: grid-template-rows 0.35s cubic-bezier(0.4, 0, 0.2, 1);

}

.app-shell .shell-topbar {

  transition: height 0.35s cubic-bezier(0.4, 0, 0.2, 1),

              padding 0.35s cubic-bezier(0.4, 0, 0.2, 1),

              border-color 0.35s ease,

              opacity 0.25s ease;

  overflow: hidden;

}

.app-shell.is-topbar-collapsed .shell-workspace {

  grid-template-rows: 0px minmax(0, 1fr);

}

.app-shell.is-topbar-collapsed .shell-topbar {

  height: 0;

  min-height: 0;

  padding-top: 0;

  padding-bottom: 0;

  border-bottom-color: transparent;

  pointer-events: none;

  opacity: 0;

}



/* 窗帘绳收起时的动画 */

.shell-curtain-cord {

  transition: height 0.35s cubic-bezier(0.4, 0, 0.2, 1);

}



.shell-topbar-expand-tab {

  position: fixed;

  top: 0;

  left: 50%;

  transform: translateX(-50%);

  z-index: 9999;

  width: 60px;

  height: 22px;

  padding: 2px 0 0;

  display: flex;

  align-items: flex-start;

  justify-content: center;

  border: 1px solid var(--shell-border-strong, rgba(0,0,0,.15));

  border-top: none;

  border-radius: 0 0 10px 10px;

  background: var(--shell-chrome-surface-soft, #fff);

  color: var(--shell-text-soft, #666);

  cursor: pointer;

  box-shadow: 0 2px 6px rgba(0,0,0,.1);

}

.shell-topbar-expand-tab[hidden] { display: none; }

.shell-topbar-expand-tab svg { width: 20px; height: 16px; }



/* ===== 拉窗帘绳子 ===== */

.shell-curtain-cord {

  position: fixed;

  top: 0;

  left: 50%;

  z-index: 9998;

  width: 20px;

  height: 60px;

  display: flex;

  flex-direction: column;

  align-items: center;

  cursor: grab;

  user-select: none;

  -webkit-user-select: none;

  will-change: transform;

  transform: translateX(-50%);

}

.shell-curtain-cord:active { cursor: grabbing; }

.shell-curtain-cord-line {

  width: 2px;

  flex: 1;

  background: linear-gradient(to bottom, var(--shell-accent, #4f7cff), var(--shell-text-soft, #aaa));

  opacity: 0.5;

  transition: opacity 0.2s;

}

.shell-curtain-cord:hover .shell-curtain-cord-line { opacity: 0.9; }

.shell-curtain-cord-knob {

  width: 18px;

  height: 18px;

  border-radius: 50%;

  background: var(--shell-accent, #4f7cff);

  color: #fff;

  display: flex;

  align-items: center;

  justify-content: center;

  margin-top: -2px;

  box-shadow: 0 1px 4px rgba(0,0,0,0.2);

  transition: transform 0.15s;

}

.shell-curtain-cord:hover .shell-curtain-cord-knob { transform: scale(1.15); }

.shell-curtain-cord.is-dragging { cursor: grabbing; }

.shell-curtain-cord.is-dragging .shell-curtain-cord-knob { transform: scale(1.25); }



/* 顶栏收起时绳子收回（窗帘拉上去了，只留图标）——cord 是 body 直接子元素，用通用兄弟选择器 */

.app-shell.is-topbar-collapsed ~ .shell-curtain-cord {

  height: 20px;

}

.app-shell.is-topbar-collapsed ~ .shell-curtain-cord-line {

  display: none;

}



/* 隐藏原来的小按钮和展开tab，用绳子替代 */

.shell-topbar-collapse { display: none !important; }

.shell-topbar-expand-tab { display: none !important; }



@media (max-width: 760px) {

  .app-shell.shell-device-mobile .shell-topbar-collapse,

  .app-shell:not(.shell-device-desktop) .shell-topbar-collapse { display: none; }

}



@keyframes shell-spin {

  to { transform: rotate(360deg); }

}



@media (max-width: 760px) {

  .app-shell:not(.shell-device-desktop),

  .app-shell.shell-device-mobile {

    grid-template-columns: minmax(0, 1fr);

  }



  .app-shell:not(.shell-device-desktop) .shell-sidebar,

  .app-shell.shell-device-mobile .shell-sidebar {

    display: none;

  }



  .app-shell:not(.shell-device-desktop) .shell-workspace,

  .app-shell.shell-device-mobile .shell-workspace {

    grid-template-rows: 28px 52px minmax(0, 1fr) calc(var(--shell-bottom-nav-height) + env(safe-area-inset-bottom));

  }



  .app-shell:not(.shell-device-desktop) .shell-mobile-statusbar,

  .app-shell.shell-device-mobile .shell-mobile-statusbar {

    position: relative;

    z-index: 25;

    min-width: 0;

    display: grid;

    grid-template-columns: minmax(0, 1fr) 88px minmax(0, 1fr);

    align-items: end;

    gap: 8px;

    padding: 7px 23px 4px;

    background: var(--shell-surface);

    color: var(--shell-text);

    font-size: 11px;

    font-weight: 800;

    line-height: 1;

  }



  .shell-mobile-statusbar-time {

    justify-self: start;

    letter-spacing: -0.01em;

  }



  .shell-mobile-statusbar-camera-gap {

    min-width: 0;

  }



  .shell-mobile-statusbar-icons {

    justify-self: end;

    display: inline-flex;

    align-items: center;

    gap: 5px;

    height: 12px;

  }



  .shell-mobile-statusbar-signal {

    width: 16px;

    height: 11px;

    display: inline-grid;

    grid-template-columns: repeat(4, 1fr);

    align-items: end;

    gap: 1px;

  }



  .shell-mobile-statusbar-signal span {

    display: block;

    border-radius: 2px 2px 1px 1px;

    background: currentColor;

  }



  .shell-mobile-statusbar-signal span:nth-child(1) { height: 4px; }

  .shell-mobile-statusbar-signal span:nth-child(2) { height: 6px; }

  .shell-mobile-statusbar-signal span:nth-child(3) { height: 8px; }

  .shell-mobile-statusbar-signal span:nth-child(4) { height: 10px; }



  .shell-mobile-statusbar-wifi {

    position: relative;

    width: 14px;

    height: 10px;

    overflow: hidden;

  }



  .shell-mobile-statusbar-wifi::before,

  .shell-mobile-statusbar-wifi::after {

    content: "";

    position: absolute;

    right: 1px;

    left: 1px;

    border: 2px solid currentColor;

    border-right-color: transparent;

    border-bottom-color: transparent;

    border-left-color: transparent;

    border-radius: 999px 999px 0 0;

  }



  .shell-mobile-statusbar-wifi::before {

    top: 0;

    height: 10px;

  }



  .shell-mobile-statusbar-wifi::after {

    top: 4px;

    right: 4px;

    left: 4px;

    height: 6px;

  }



  .shell-mobile-statusbar-battery {

    position: relative;

    width: 20px;

    height: 10px;

    display: inline-flex;

    align-items: center;

    padding: 1px;

    border: 1.5px solid currentColor;

    border-radius: 3px;

  }



  .shell-mobile-statusbar-battery::after {

    content: "";

    position: absolute;

    top: 2.5px;

    right: -3px;

    width: 2px;

    height: 5px;

    border-radius: 0 2px 2px 0;

    background: currentColor;

  }



  .shell-mobile-statusbar-battery span {

    width: 72%;

    height: 100%;

    border-radius: 1.5px;

    background: currentColor;

  }



  .app-shell:not(.shell-device-desktop) .shell-topbar,

  .app-shell.shell-device-mobile .shell-topbar {

    grid-template-columns: minmax(0, 1fr) auto;

    gap: 10px;

    padding: 0 14px;

  }



  .app-shell:not(.shell-device-desktop) .shell-page-heading,

  .app-shell:not(.shell-device-desktop) .shell-top-nav,

  .app-shell.shell-device-mobile .shell-page-heading,

  .app-shell.shell-device-mobile .shell-top-nav {

    display: none;

  }



  .app-shell:not(.shell-device-desktop) .shell-brand--topbar,

  .app-shell.shell-device-mobile .shell-brand--topbar {

    min-width: 0;

    display: flex;

    align-items: center;

    gap: 9px;

  }



  .app-shell:not(.shell-device-desktop) .shell-brand-logo,

  .app-shell.shell-device-mobile .shell-brand-logo {

    width: 32px;

    height: 32px;

  }



  .app-shell:not(.shell-device-desktop) .shell-brand-copy strong,

  .app-shell.shell-device-mobile .shell-brand-copy strong {

    max-width: min(54vw, 260px);

    font-size: 14px;

  }



  .app-shell:not(.shell-device-desktop) .shell-topbar-user,

  .app-shell.shell-device-mobile .shell-topbar-user {

    min-width: 44px;

    width: 44px;

    height: 44px;

    min-height: 44px;

    justify-content: center;

    padding: 6px;

    border: 0;

    background: transparent;

  }



  .app-shell:not(.shell-device-desktop) .shell-account-menu,

  .app-shell.shell-device-mobile .shell-account-menu {

    min-width: 112px;

  }



  .app-shell:not(.shell-device-desktop) .shell-topbar-user > span:last-child,

  .app-shell.shell-device-mobile .shell-topbar-user > span:last-child {

    display: none;

  }



  .app-shell:not(.shell-device-desktop) .shell-bottom-nav,

  .app-shell.shell-device-mobile .shell-bottom-nav {

    position: relative;

    z-index: 20;

    min-width: 0;

    display: grid;

    grid-auto-flow: column;

    grid-auto-columns: minmax(0, 1fr);

    align-items: start;

    padding: 6px max(4px, env(safe-area-inset-left)) env(safe-area-inset-bottom) max(4px, env(safe-area-inset-right));

    border-top: 1px solid var(--shell-border-strong);

    background: var(--shell-chrome-surface-soft);

  }



  .shell-bottom-button {

    min-width: 0;

    min-height: 52px;

    display: grid;

    justify-items: center;

    align-content: center;

    gap: 3px;

    padding: 4px 2px;

    border: 0;

    border-radius: var(--shell-radius-xs);

    background: transparent;

    color: var(--shell-text-muted);

    font-size: 10px;

    font-weight: 600;

  }



  .shell-bottom-button.is-active {

    background: rgba(var(--shell-accent-rgb), 0.08);

    color: var(--shell-text-strong, #1f2937);

  }



  .shell-bottom-icon {

    width: 22px;

    height: 22px;

  }



  .shell-bottom-label {

    width: 100%;

    overflow: hidden;

    text-align: center;

    text-overflow: ellipsis;

    white-space: nowrap;

  }



  .app-shell:not(.shell-device-desktop) .shell-more-backdrop,

  .app-shell:not(.shell-device-desktop) .shell-more-sheet,

  .app-shell.shell-device-mobile .shell-more-backdrop,

  .app-shell.shell-device-mobile .shell-more-sheet {

    position: fixed;

    display: block;

  }



  .shell-more-backdrop {

    z-index: 80;

    inset: 0;

    background: var(--shell-overlay);

  }



  .shell-more-sheet {

    z-index: 81;

    right: 0;

    bottom: 0;

    left: 0;

    max-height: min(72dvh, 620px);

    padding: 0 16px calc(18px + env(safe-area-inset-bottom));

    border-radius: var(--shell-radius-md) var(--shell-radius-md) 0 0;

    background: var(--shell-surface);

    overflow-y: auto;

  }



  .shell-more-sheet-header {

    position: sticky;

    top: 0;

    display: flex;

    align-items: center;

    justify-content: space-between;

    gap: 12px;

    padding: 16px 0 12px;

    border-bottom: 1px solid var(--shell-border-strong);

    background: var(--shell-chrome-surface-soft);

  }



  .shell-more-sheet-header h2 {

    margin: 0;

    font-size: 17px;

  }



  .shell-more-nav {

    display: grid;

    gap: 8px;

    padding-top: 12px;

  }



  .shell-more-link {

    min-height: 52px;

    display: flex;

    align-items: center;

    gap: 12px;

    padding: 10px 12px;

    border-color: var(--shell-border);

    border-radius: var(--shell-radius-xs);

    background: var(--shell-surface);

    font-size: 14px;

    font-weight: 600;

  }



  .shell-more-link-icon {

    width: 22px;

    height: 22px;

    color: var(--shell-text-strong, #1f2937);

  }



  .app-shell.shell-focus-mode .shell-workspace {

    grid-template-rows: minmax(0, 1fr);

  }



  .app-shell.shell-focus-mode .shell-mobile-statusbar {

    display: none;

  }

}



.app-shell.shell-device-desktop {

  grid-template-columns: var(--shell-sidebar-width) minmax(0, 1fr);

}



.app-shell.shell-device-desktop.shell-layout-light,

.app-shell.shell-device-desktop.shell-focus-mode {

  grid-template-columns: minmax(0, 1fr);

}



.app-shell.shell-device-desktop .shell-bottom-nav {

  display: none;

}



@media (prefers-reduced-motion: reduce) {

  *,

  *::before,

  *::after {

    scroll-behavior: auto !important;

    animation-duration: 0.01ms !important;

    animation-iteration-count: 1 !important;

    transition-duration: 0.01ms !important;

  }

}



/* 修复桌面端折叠样式被覆盖的问题 */

.app-shell.shell-device-desktop.is-sidebar-collapsed {

  grid-template-columns: minmax(0, 1fr) !important;

}





/* ===== 加载状态：隐藏默认内容，防止闪烁 ===== */

.app-shell.is-loading .shell-sidebar,

.app-shell.is-loading .shell-topbar,

.app-shell.is-loading .shell-page-heading,

.app-shell.is-loading .shell-bottom-nav,

.app-shell.is-loading .shell-main {

  visibility: hidden !important;

  opacity: 0 !important;

}



.app-shell.is-loading::before {

  content: '';

  position: fixed;

  top: 0;

  left: 0;

  right: 0;

  bottom: 0;

  background: var(--shell-bg);

  z-index: 99998;

}



.app-shell.is-loading::after {

  content: '';

  position: fixed;

  top: 50%;

  left: 50%;

  width: 40px;

  height: 40px;

  margin: -20px 0 0 -20px;

  border: 3px solid rgba(var(--shell-accent-rgb), 0.2);

  border-top-color: var(--shell-accent);

  border-radius: 50%;

  animation: shell-loading-spin 0.8s linear infinite;

  z-index: 99999;

}



@keyframes shell-loading-spin {

  to { transform: rotate(360deg); }

}





/* ===== 登录模态框 ===== */

.shell-login-modal {

  position: fixed;

  inset: 0;

  z-index: 100000;

  display: block;

}



.shell-login-modal[hidden] {

  display: none;

}



.shell-login-modal-backdrop {

  position: absolute;

  inset: 0;

  /* 与后台解锁遮罩（.admin-auth-lock）保持同一档透明度和模糊度 */
  background: color-mix(in srgb, #303133 45%, transparent);

  backdrop-filter: none;

}



.shell-login-modal-container {

  position: absolute;

  inset: 0;

  width: 100%;

  max-width: none;

  height: 100%;

  max-height: none;

  background: transparent;

  border-radius: 0;

  box-shadow: none;

  overflow: hidden;

  animation: none;

}



.shell-login-modal-close {

  position: absolute;

  top: 12px;

  right: 12px;

  z-index: 10;

  width: 32px;

  height: 32px;

  border: none;

  border-radius: 50%;

  background: color-mix(in srgb, var(--shell-text) 5%, transparent);

  color: var(--shell-text-muted);

  font-size: 20px;

  line-height: 1;

  cursor: pointer;

  display: flex;

  align-items: center;

  justify-content: center;

  transition: all 0.2s;

}



.shell-login-modal-close:hover {

  background: color-mix(in srgb, var(--shell-text) 10%, transparent);

  color: var(--shell-text);

}



.shell-login-frame {

  width: 100%;

  height: 100%;

  min-height: 100%;

  border: none;

  display: block;

  background: transparent !important;

  background-color: transparent !important;

}



@media (max-width: 640px) {

  .shell-login-frame {

    height: 100%;

  }

}



/* ===== 主题颜色切换（全局统一，外壳中枢入口）===== */

.shell-topbar-theme {

  /* 与右侧“上报地址”图标按钮同尺寸 */
  width: 34px;

  height: 34px;

  min-width: 34px;

  min-height: 34px;

  padding: 0;

  display: inline-flex;

  align-items: center;

  justify-content: center;

  border: 1px solid var(--shell-border);

  border-radius: var(--shell-radius-xs);

  background: var(--shell-surface-soft);

  color: var(--shell-text);

  cursor: pointer;

  transition: border-color 0.2s ease, background 0.2s ease, transform 0.2s ease;

}

.shell-topbar-theme:hover {

  border-color: var(--shell-border-strong);

  background: var(--shell-surface-soft);

  transform: scale(1.1);

}

.shell-theme-swatch {

  width: 18px;

  height: 22px;

  border-radius: 50%;

  background: radial-gradient(circle at 30% 30%, var(--shell-theme-swatch-primary, var(--shell-accent)), var(--shell-theme-swatch-secondary, var(--shell-accent-2)));

  border: 1px solid var(--shell-theme-swatch-border, transparent);

  box-shadow: 0 1px 3px color-mix(in srgb, var(--shell-text) 25%, transparent);

}

html[data-theme="light"] .shell-theme-swatch {

  --shell-theme-swatch-primary: #ffffff;

  --shell-theme-swatch-secondary: #f5f7fa;

  --shell-theme-swatch-border: #dcdfe6;

}

.shell-theme-picker {

  position: fixed;

  z-index: 100001;

  width: 232px;

  display: block;

  padding: 14px;

  border: 1px solid var(--shell-border);

  border-radius: 10px;

  background: var(--shell-surface);

  box-shadow: var(--shell-shadow-card);

  opacity: 0;

  visibility: hidden;

  pointer-events: none;

  transform: translateY(-10px) scale(0.92);

  transform-origin: top right;

  will-change: transform, opacity;

  transition:

    opacity 0.28s ease,

    transform 0.42s cubic-bezier(0.16, 1, 0.3, 1),

    visibility 0s linear 0.42s;

}

.shell-theme-picker[hidden] {

  display: none;

}

.shell-theme-picker.is-placement-up {

  transform: translateY(10px) scale(0.92);

  transform-origin: bottom right;

}

.shell-theme-picker.is-open {

  opacity: 1;

  visibility: visible;

  pointer-events: auto;

  transform: translateY(0) scale(1);

  transition:

    opacity 0.26s ease,

    transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),

    visibility 0s linear 0s;

}

.shell-theme-picker-head {

  margin: 0 0 10px;

  font-size: 13px;

  font-weight: 600;

  color: var(--shell-text);

}

.shell-theme-picker-grid {

  display: grid;

  grid-template-columns: repeat(2, 1fr);

  gap: 6px;

}

.shell-theme-option {

  display: inline-flex;

  align-items: center;

  gap: 8px;

  min-height: 36px;

  padding: 5px 8px;

  border: 1px solid var(--shell-border);

  border-radius: 8px;

  background: transparent;

  color: var(--shell-text);

  font-size: 12px;

  cursor: pointer;

  transition: border-color 0.15s ease, background 0.15s ease;

}

.shell-theme-option:hover {

  border-color: var(--shell-accent);

  background: var(--shell-surface-soft);

}

.shell-theme-option.is-active {

  border-color: var(--shell-accent);

  box-shadow: 0 0 0 1px var(--shell-accent);

}

.shell-theme-dot {

  width: 14px;

  height: 14px;

  border-radius: 50%;

  background: var(--swatch, var(--shell-accent));

  border: 1px solid var(--shell-theme-dot-border, transparent);

  box-shadow: 0 1px 2px color-mix(in srgb, var(--shell-text) 20%, transparent);

  flex: none;

}

.shell-theme-option[data-shell-theme="light"] .shell-theme-dot {

  --shell-theme-dot-border: #dcdfe6;

}



/* 顶部栏logo：容器撑满侧边栏宽度，内容在侧边栏宽度内居中对齐 */



/* 顶部栏logo居中：不破坏布局，纯CSS实现，高优先级（已移除手动微调，真正居中） */

html body .app-shell .shell-topbar {

  grid-template-columns: var(--shell-sidebar-width) minmax(0, 1fr) auto !important;

  padding-left: 0 !important;

}

html body .app-shell .shell-brand--topbar {

  display: flex !important;

  justify-content: center !important;

  align-items: center !important;

  width: 100% !important;

  min-width: 0 !important;

  padding: 0 !important;

  margin: 0 !important;

}



/* 主题深浅度切换 */

.shell-theme-depth {

  margin-top: 12px;

  padding-top: 12px;

  border-top: 1px solid var(--shell-border);

}

.shell-theme-depth-label {

  margin-bottom: 8px;

  font-size: 12px;

  font-weight: 600;

  color: var(--shell-text);

}

.shell-theme-depth-options {

  display: flex;

  gap: 6px;

}

.shell-theme-depth-option {

  flex: 1;

  min-height: 32px;

  padding: 4px 8px;

  border: 1px solid var(--shell-border);

  border-radius: 7px;

  background: transparent;

  color: var(--shell-text);

  font-size: 12px;

  cursor: pointer;

  transition: border-color 0.15s ease, background 0.15s ease;

}

.shell-theme-depth-option:hover {

  border-color: var(--shell-accent);

  background: var(--shell-surface-soft);

}

.shell-theme-depth-option.is-active {

  border-color: var(--shell-accent);

  background: var(--shell-surface-soft);

  box-shadow: 0 0 0 1px var(--shell-accent);

  font-weight: 600;

}



/* ===== 切换动效统一入口（外壳右上角，全局）===== */

.shell-topbar-effect .shell-effect-toggle-icon {

  width: 15px;

  height: 15px;

  display: block;

}

.shell-effect-menu {

  position: fixed;

  z-index: 100001;

  width: 244px;

  max-height: calc(100vh - 24px);

  overflow-y: auto;

  scrollbar-width: thin;

  scrollbar-color: color-mix(in srgb, var(--shell-accent) 55%, transparent) transparent;

  padding: 10px;

  border: 1px solid var(--shell-border);

  border-radius: 12px;

  background: var(--shell-surface);

  box-shadow: var(--shell-shadow-card);

  box-sizing: border-box;

  opacity: 0;

  visibility: hidden;

  pointer-events: none;

  transform: translateY(-10px) scale(0.96);

  transform-origin: top right;

  transition:

    opacity .22s ease,

    transform .38s cubic-bezier(0.34, 1.56, 0.64, 1),

    visibility 0s linear .22s;

}

.shell-effect-menu[hidden] {

  display: none;

}

.shell-effect-menu.is-placement-up {

  transform: translateY(10px) scale(0.96);

  transform-origin: bottom right;

}

.shell-effect-menu::-webkit-scrollbar {

  width: 6px;

}

.shell-effect-menu::-webkit-scrollbar-thumb {

  background: color-mix(in srgb, var(--shell-accent) 50%, transparent);

  border-radius: 6px;

}

.shell-effect-menu::-webkit-scrollbar-track {

  background: transparent;

}

.shell-effect-menu.is-open {

  opacity: 1;

  visibility: visible;

  pointer-events: auto;

  transform: translateY(0) scale(1);

  transition:

    opacity .22s ease,

    transform .38s cubic-bezier(0.34, 1.56, 0.64, 1),

    visibility 0s linear 0s;

}

.shell-effect-menu__head {

  display: flex;

  align-items: center;

  justify-content: space-between;

  gap: 10px;

  padding: 2px 2px 10px;

  border-bottom: 1px solid var(--shell-border);

  margin-bottom: 8px;

}

.shell-effect-menu__head-label {

  font-size: 13px;

  font-weight: 600;

  color: var(--shell-text);

  white-space: nowrap;

}

.shell-effect-duration {

  display: flex;

  align-items: center;

  gap: 8px;

  flex: 1;

  min-width: 0;

}

.shell-effect-duration__slider {

  flex: 1;

  min-width: 0;

  -webkit-appearance: none;

  appearance: none;

  height: 4px;

  border-radius: 4px;

  background: var(--shell-border-strong);

  outline: none;

  cursor: pointer;

}

.shell-effect-duration__slider::-webkit-slider-thumb {

  -webkit-appearance: none;

  appearance: none;

  width: 16px;

  height: 16px;

  border-radius: 50%;

  background: var(--shell-accent);

  border: 2px solid var(--shell-surface);

  box-shadow: 0 1px 4px color-mix(in srgb, var(--shell-text) 30%, transparent);

  cursor: pointer;

}

.shell-effect-duration__slider::-moz-range-thumb {

  width: 16px;

  height: 16px;

  border-radius: 50%;

  background: var(--shell-accent);

  border: 2px solid var(--shell-surface);

  cursor: pointer;

}

.shell-effect-duration__value {

  font-size: 12px;

  font-weight: 600;

  color: var(--shell-text-strong, #1f2937);

  min-width: 38px;

  text-align: right;

  font-variant-numeric: tabular-nums;

}

.shell-effect-menu__group {

  margin-bottom: 6px;

}

.shell-effect-menu__group-title {

  font-size: 11px;

  font-weight: 600;

  color: var(--shell-text);

  padding: 6px 4px 4px;

  letter-spacing: .02em;

  opacity: .72;

}

.shell-effect-option {

  display: flex;

  align-items: center;

  justify-content: center;

  gap: 6px;

  width: 100%;

  min-height: 32px;

  padding: 6px 10px;

  border: none;

  background: transparent;

  border-radius: 8px;

  font-size: 12.5px;

  font-weight: 600;

  color: var(--shell-text);

  cursor: pointer;

  text-align: center;

  font-family: inherit;

  transition: background .18s ease, color .18s ease;

}

.shell-effect-option:hover,

.shell-effect-option.is-active {

  background: color-mix(in srgb, var(--shell-accent) 16%, transparent);

  color: var(--shell-text-strong, #1f2937);

}

.shell-effect-option.is-active::after {

  content: '\2713';

  margin-left: 4px;

  font-weight: 700;

}



/* 主题颜色切换过渡遮罩（6 种动效 + 关闭） */

.shell-theme-transition {

  position: fixed;

  inset: 0;

  z-index: 2147483000;

  pointer-events: none;

  opacity: 0;

  background: var(--tt-color, var(--shell-accent));

  will-change: transform, opacity, clip-path;

}

.shell-theme-transition--ripple {

  background: radial-gradient(circle, var(--tt-color, var(--shell-accent)) 0%, color-mix(in srgb, var(--tt-color, var(--shell-accent)) 55%, transparent) 42%, transparent 68%);

  transform: scale(0);

  transform-origin: var(--tt-x, 50%) var(--tt-y, 50%);

  transition:

    transform var(--switch-effect-duration, .3s) cubic-bezier(0.34, 1.56, 0.64, 1),

    opacity var(--switch-effect-duration, .3s) ease;

}

.shell-theme-transition--ripple.is-active {

  transform: scale(3.4);

  opacity: 1;

}

.shell-theme-transition--fade {

  transition: opacity var(--switch-effect-duration, .3s) ease;

}

.shell-theme-transition--fade.is-active {

  opacity: .5;

}

.shell-theme-transition--wipe {

  clip-path: inset(0 100% 0 0);

  transition:

    clip-path var(--switch-effect-duration, .3s) cubic-bezier(0.34, 1.56, 0.64, 1),

    opacity var(--switch-effect-duration, .3s) ease;

}

.shell-theme-transition--wipe.is-active {

  clip-path: inset(0 0 0 0);

  opacity: 1;

}

.shell-theme-transition--blinds {

  background-color: transparent;

  background-image: repeating-linear-gradient(90deg, var(--tt-color, var(--shell-accent)) 0 44px, transparent 44px 88px);

  transform: scaleX(0);

  transform-origin: left center;

  transition:

    transform var(--switch-effect-duration, .3s) ease,

    opacity var(--switch-effect-duration, .3s) ease;

}

.shell-theme-transition--blinds.is-active {

  transform: scaleX(1);

  opacity: 1;

}

.shell-theme-transition--diagonal {

  clip-path: polygon(0 0, 0 0, 100% 100%, 0 100%);

  transition:

    clip-path var(--switch-effect-duration, .3s) ease,

    opacity var(--switch-effect-duration, .3s) ease;

}

.shell-theme-transition--diagonal.is-active {

  clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);

  opacity: 1;

}

.shell-theme-transition--zoom {

  transform: scale(0);

  transform-origin: center;

  transition:

    transform var(--switch-effect-duration, .3s) cubic-bezier(0.34, 1.56, 0.64, 1),

    opacity var(--switch-effect-duration, .3s) ease;

}

.shell-theme-transition--zoom.is-active {

  transform: scale(1);

  opacity: .55;

}





/* ===== 壳子页面切换动效（shell 顶层导航：后台管理/会员/合伙人/消息/个人中心）===== */

.shell-page-enter-fade { animation: shellPageFadeIn var(--switch-effect-duration, .3s) ease; }

.shell-page-enter-slide-up { animation: shellPageSlideUpIn var(--switch-effect-duration, .3s) ease; }

.shell-page-enter-slide-right { animation: shellPageSlideRightIn var(--switch-effect-duration, .3s) ease; }

.shell-page-enter-zoom { animation: shellPageZoomIn var(--switch-effect-duration, .3s) ease; }

.shell-page-enter-blur { animation: shellPageBlurIn var(--switch-effect-duration, .3s) ease; }

.shell-page-enter-rotate { animation: shellPageRotateIn var(--switch-effect-duration, .3s) ease; }



@keyframes shellPageFadeIn { from { opacity: .72; } to { opacity: 1; } }

@keyframes shellPageSlideUpIn { from { opacity: .72; transform: translate3d(0, 12px, 0); } 60% { opacity: 0.86; transform: translate3d(0, 4px, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } }

@keyframes shellPageSlideRightIn { from { opacity: .72; transform: translate3d(18px, 0, 0); } 40% { opacity: 0.82; transform: translate3d(10px, 0, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } }

@keyframes shellPageZoomIn { 0% { opacity: .72; transform: scale(.985); } 50% { opacity: 0.88; transform: scale(.992); } 80% { opacity: 0.97; transform: scale(.998); } 100% { opacity: 1; transform: scale(1); } }

@keyframes shellPageBlurIn { from { opacity: .72; filter: blur(2px); } to { opacity: 1; filter: blur(0); } }

@keyframes shellPageRotateIn { 0% { opacity: .72; transform: rotateZ(-1.5deg) scale(.99); } 70% { opacity: 0.9; transform: rotateZ(-.3deg) scale(.998); } 100% { opacity: 1; transform: rotateZ(0deg) scale(1); } }



/* ===== 白色主题独立颜色层级（普通网站风格） ===== */

html[data-theme="light"] {

  /* --- theme 变量 --- */

  --theme-primary: #409eff;

  --theme-primary-rgb: 64, 158, 255;

  --theme-accent: #66b1ff;

  --theme-accent-rgb: 102, 177, 255;

  --theme-page-bg: #f5f7fa;

  --theme-panel-bg: #ffffff;

  --theme-panel-soft: #fafafa;

  --theme-panel-strong: #f5f7fa;

  --theme-chrome-bg: #ffffff;

  --theme-border: #e4e7ed;

  --theme-border-strong: #dcdfe6;

  --theme-border-soft: #ebeef5;

  --theme-text: #303133;

  --theme-text-muted: #606266;

  --theme-text-soft: #909399;

  --theme-on-primary: #ffffff;

  --theme-button-bg: #409eff;

  --theme-button-hover: #66b1ff;

  --theme-button-text: #ffffff;

  --theme-button-soft: #ecf5ff;

  --theme-button-soft-hover: #d9ecff;

  --theme-button-soft-border: #b3d8ff;

  --theme-button-disabled: #a0cfff;

  --theme-button-disabled-text: #ffffff;

  --theme-input-bg: #ffffff;

  --theme-input-border: #dcdfe6;

  --theme-modal-shell: #ffffff;

  --theme-modal-bar: #f5f7fa;

  --theme-modal-body: #ffffff;

  --theme-modal-field: #fafafa;

  --theme-modal-divider: #e4e7ed;

  --theme-overlay-bg: rgba(0, 0, 0, 0.5);

  --theme-toast-bg: #303133;

  --theme-toast-text: #ffffff;

  --theme-shadow-panel: 0 2px 12px rgba(0, 0, 0, 0.1);

  --theme-shadow-card: 0 2px 8px rgba(0, 0, 0, 0.08);

  --theme-shadow-strong: 0 4px 16px rgba(0, 0, 0, 0.12);

  --theme-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.15);



  /* --- shell 变量 --- */

  --shell-bg: #f5f7fa;

  --shell-surface: #ffffff;

  --shell-surface-soft: #fafafa;

  --shell-chrome-surface: #ffffff;

  --shell-border: #e4e7ed;

  --shell-border-strong: #dcdfe6;

  --shell-text: #303133;

  --shell-text-muted: #606266;

  --shell-text-soft: #909399;

  --shell-accent: #409eff;

  --shell-accent-rgb: 64, 158, 255;

  --shell-on-accent: #ffffff;



  /* --- wb-theme 工作台变量（关键：这些是其他页面看不清的原因） --- */

  --wb-theme-body-bg: #f5f7fa;

  --wb-theme-surface-bg: #ffffff;

  --wb-theme-surface-border: #e4e7ed;

  --wb-theme-sidebar-bg: #ffffff;

  --wb-theme-nav-bg: linear-gradient(180deg, #ffffff 0%, #fafafa 100%);

  --wb-theme-nav-bg-hover: linear-gradient(180deg, #f5f7fa 0%, #ebeef5 100%);

  --wb-theme-nav-bg-active: linear-gradient(180deg, #ecf5ff 0%, #d9ecff 100%);

  --wb-theme-surface-muted: linear-gradient(180deg, #fafafa 0%, #f5f7fa 100%);

  --wb-theme-modal-field-bg: linear-gradient(180deg, #fafafa 0%, #f5f7fa 100%);

  --wb-theme-modal-body: var(--admin-panel-surface, #ffffff);

  --wb-theme-modal-shell: linear-gradient(180deg, #f5f7fa 0%, #ebeef5 100%);

  --wb-theme-modal-shell-muted: linear-gradient(180deg, #ebeef5 0%, #e4e7ed 100%);

  --wb-theme-button-soft: linear-gradient(180deg, #ffffff 0%, #f5f7fa 100%);

  --wb-theme-button-soft-hover: linear-gradient(180deg, #f5f7fa 0%, #ebeef5 100%);

  --wb-theme-info-soft: linear-gradient(180deg, #ecf5ff 0%, #d9ecff 100%);



  /* --- admin-panel 变量 --- */

  --admin-panel-muted-surface-image: linear-gradient(180deg, #fafafa 0%, #f5f7fa 100%);

  --admin-panel-surface-soft-image: linear-gradient(180deg, #ffffff 0%, #fafafa 100%);

  --admin-panel-surface-image: linear-gradient(180deg, #ffffff 0%, #f5f7fa 100%);

  --admin-panel-surface-strong-image: linear-gradient(180deg, #f5f7fa 0%, #ebeef5 100%);

  --admin-panel-header-image: linear-gradient(180deg, #f5f7fa 0%, #ebeef5 100%);

  --admin-panel-text-strong: #1f2937;

  --admin-panel-text-muted: #606266;



  /* --- wb-theme 文字变量（最关键：确保文字是深色） --- */

  --wb-theme-sidebar-subtitle: #606266;

  --wb-theme-nav-text: #303133;

  --wb-theme-nav-text-hover: #1f2937;

  --wb-theme-button-soft-text: #303133;

  --wb-theme-nav-text-active: #409eff;

  --wb-theme-sidebar-title: #1f2937;

}

