/* ============================================================================
   v126 登录页（LISHI 登录入口）—— 作用域隔离样式（仅 .login-*）
   v129 变更（仅 ≤720px 手机端面板内部；双区结构与桌面/平板不动）：
     - 内容列宽统一为 342px（390 − 24 − 24），Logo/标题/说明/按钮/辅助/状态/帮助/分隔线共用同一条左边缘
     - Logo 缩至 70px（视觉签名，不再与标题争夺主层级；矮屏 68px）
     - 节奏重排：面板顶→Logo 28 / Logo→标题 42 / 标题→说明 10 / 说明→按钮 28 / 按钮→辅助 12 /
       辅助→帮助 32（有状态时 28）/ 页脚 padding-top 24 + 分隔线 16
     - 按钮 48px / 圆角 9 / 内边距 18；错误信息 12px、行高 1.55、图标 14px、图标文字间距 7px、可完整换行

   v128 变更（仅 ≤720px 手机端，桌面/平板布局完全不动）：
   手机端改为「建筑影像 + 白色登录面板」上下双区结构：
     - 建筑图回归（object-fit:cover / object-position:37% 48%，不拉伸、无遮罩、无文字覆盖）
     - 白色面板顶部圆角 22px 并上移 20px 覆盖图片（极轻微的 iOS 底部面板关系，静态排版）
     - 面板内三行「品牌 / 主体 / 页脚」，页脚用弹性空间自然贴底（非 fixed）
     - 独立垂直节奏（不做桌面端等距公式）；矮屏（≤720 高）单独压缩；横屏隐藏图片
   桌面端（≥721px）的所有规则与本次改动无关，未做任何修改。

   v127 变更（纠正等距定义）：
   桌面端的等距指 |A − B| ≤ 4px：
     A = 右侧白色面板顶部 → Logo 可见图形顶部
     B = Logo 可见图形底部 → 「欢迎回来」标题顶部
   实现：Logo 独立放入 .login-brand-slot（高度 = 已确认的标题位置），Logo 在槽内垂直居中，
   于是 A = B = (槽高 − Logo 高)/2 恒等成立；标题及其以下元素、页脚、卡片尺寸均不移动。
   （v126 的「把 Logo→帮助入口整组居中」已废弃；不再使用任何整组 translate 偏移。）

   v126 变更：
   1) 桌面端等距：右侧面板改为 grid「主体槽 minmax(0,1fr) + 页脚 auto」，
      登录主体在槽内垂直居中（margin-block:auto，内容超高时自然滚动不裁切），
      上留白与下留白自动相等（不再使用固定 translate 偏移）；
   2) 移动端（≤720px）改为完整页面式布局：取消桌面浮动卡片（透明/无圆角/无阴影），
      单栏内容居中、页脚居底、安全区适配、窗影弱化；
   3) ICP 备案信息为可配置项（见 src/site-config.js），未配置时不渲染任何占位。

   ⚠️ 必须保留（勿在后续"简化"迭代中删除）：
   1) 背景窗影层 .login-bg-shadow —— 页面左侧柔和窗影，提供空间氛围；
   2) 左侧建筑实景 .login-card__media —— 与新建筑图中的自然光影相互呼应。
   卡片投影只负责轻微层次，不得用加重 box-shadow 替代背景窗影。
   ============================================================================ */

.login-page {
  position: relative;
  min-height: 100vh;
  min-height: 100dvh;
  display: flex;
  align-items: center;
  justify-content: center;
  /* 上下至少 56–72px 呼吸空间；左右至少 48px */
  padding: clamp(56px, 7vh, 72px) 48px;
  box-sizing: border-box;
  align-items: stretch;                    /* 由卡片 margin:auto 实现居中（溢出时不裁切顶部） */
  background: #f7f6f4;                       /* 窗影加载失败时仍为完整暖白背景 */
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
  overflow-x: hidden;
}

/* 背景窗影：独立装饰层——内容之下、不参与指针与键盘、不平铺、左侧定位；
   非 cover，宽屏不会把窗影裁掉；无循环动画、不随鼠标移动、无实时模糊 */
.login-bg-shadow {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-image: url('../assets/login/login-window-shadow.png?v=20260917');
  background-repeat: no-repeat;
  background-position: left center;
  background-size: auto 112%;
  /* v134：窗影素材已在图内做右侧 alpha 渐隐（窗框硬边已抹除），
     各引擎渲染一致，无需 CSS mask（Safari 对该 mask 组合支持不稳定，v133 实测）。 */
}

/* 主卡片：受控体量（不再接近满屏）；圆角 16；两层克制投影 */
.login-card {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: 52% 48%;
  width: min(1080px, calc(100vw - 96px));
  height: min(640px, calc(100vh - 120px));
  min-height: 580px;
  max-height: 680px;
  margin: auto;                            /* 垂直/水平居中；视口不足时贴顶滚动，不裁切 */
  background: #fff;
  border-radius: 16px;
  overflow: hidden;                          /* 图片圆角由卡片裁切实现，交界不加分割线 */
  box-shadow:
    0 24px 70px rgba(32, 27, 21, 0.08),
    0 6px 20px rgba(32, 27, 21, 0.045);
  animation: login-card-enter 280ms cubic-bezier(0.22, 0.61, 0.36, 1) both;
}

/* 左侧建筑实景：铺满左栏、保持原比例（cover）、按 40% center 取景
   （保留洞石墙面 / 中部木门 / 右侧弧形墙一部分 / 地面自然光影；弧形墙不占满整图）
   不提高饱和度、锐度、对比度；不叠加文字、渐变蒙版或深色遮罩 */
.login-card__media {
  position: relative;
  min-height: 0;
  overflow: hidden;
  background: #efece8;
}
.login-media { display: block; width: 100%; height: 100%; }   /* v132：<picture> 容器撑满 */
.login-media__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 40% center;
}

/* 右侧面板（v127）：三行——品牌槽 / 主体（可滚动）/ 固定页脚
   - 品牌槽高度 = 标题顶部位置 ⇒ 其内垂直居中的 Logo 自动满足 A = B
   - 主体自上而下排列（标题/说明/按钮/状态/帮助），错误增长由主体区承接（不外溢、不裁切）
   - 页脚固定在卡片底部（分隔线 + 公司信息），不随上面内容变化 */
.login-card__panel {
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  padding: 0 clamp(48px, 5vw, 72px) 34px;   /* 顶部留白由品牌槽承担（A/B 等距的来源） */
  box-sizing: border-box;
  min-width: 0;
  /* v136：裁切 .login-body 外扩进来的滚动条（见 .login-body 的负 margin 注释） */
  overflow: hidden;
}

/* 品牌槽：Logo 独立占位区——高度取“已确认的标题位置”，Logo 在槽内垂直居中
   A = 面板顶部→Logo 顶 = (槽高 − Logo 高)/2
   B = Logo 底→标题顶   = 槽高 − Logo 高 − A = (槽高 − Logo 高)/2  ⇒ A ≡ B（恒等） */
.login-brand-slot {
  display: flex;
  align-items: center;
  width: min(100%, 368px);
  margin-inline: auto;
  height: var(--brand-slot-h, 249px);
}

/* 主体区（桌面/平板）：网格三行——品牌槽定高 → 内容（标题…帮助）→ 弹性空间；
   内容超高时本区滚动，不裁切错误（顶部对齐，不产生 v126 的居中裁切问题）
   行高与 v129 等价：品牌槽行 = var(--brand-slot-h)，内容紧随其后，剩余高度归弹性空间 */
.login-body {
  min-height: 0;
  display: grid;
  grid-template-rows: var(--brand-slot-h, 249px) auto minmax(0, 1fr);
  overflow: auto;
  /* v136：本容器在部分视口高度下内容溢出几 px，WebKit 会渲染全局 ::-webkit-scrollbar
     （10px 暖色 thumb）在卡片右缘显为一条竖线（用户实测；Safari 忽略
     ::-webkit-scrollbar/scrollbar-width，隐藏滚动条的 CSS 方案不可靠）。
     改用几何裁切：负 margin 把滚动条外推进面板 overflow:hidden 的裁切区，
     等量 padding 保持内容列几何不变；滚轮/触控板滚动能力保留。 */
  overflow-y: auto;
  margin-right: -90px;
  padding-right: 90px;
}
.login-body::-webkit-scrollbar, .login-panel__main::-webkit-scrollbar { display: none; }
.login-body__spacer { min-height: 0; }

/* 登录主体内容列（标题…帮助）：受控宽度，左对齐 */
.login-main-content {
  width: min(100%, 368px);
  margin-inline: auto;
  margin-block: 0;
}
.login-content { width: min(100%, 368px); margin-inline: auto; }   /* 兼容保留 */

.login-brand__logo {
  width: 86px;                     /* 上限 96px；克制小尺寸，高度按原图比例自动 */
  height: auto;
  display: block;
}

/* v127：标题位置由品牌槽高度决定（不再用 margin-top 叠加间距）。
   Logo 底→标题顶 的视觉间距由品牌槽自动给出，见 .login-brand-slot 注释。 */
.login-panel__main { margin-top: 0; }

.login-title {
  margin: 0;
  font-size: 28px;
  line-height: 1.25;
  font-weight: 600;
  letter-spacing: -0.02em;
  color: #1b1b1d;
}

.login-desc {
  margin: 12px 0 0;
  font-size: 13px;
  line-height: 1.65;
  color: #6b6b70;
}

/* 说明 → 按钮 34–38px */
.login-action { margin-top: 36px; }

.login-btn {
  width: 100%;
  height: 48px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 0 20px;
  box-sizing: border-box;
  border: 1px solid transparent;
  border-radius: 8px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  transition: background-color 160ms ease, color 160ms ease, border-color 160ms ease, transform 90ms ease;
}
.login-btn--primary { background: #1b1b1d; color: #fff; }
.login-btn--primary:hover { background: #242424; }
.login-btn--primary:active { transform: translateY(1px); }
.login-btn--ghost { background: #fff; color: #1b1b1d; border-color: #dcdcd7; }
.login-btn--ghost:hover { background: #f4f3f1; }
.login-btn--ghost:active { transform: translateY(1px); }
.login-btn:focus-visible { outline: 2px solid rgba(24, 24, 24, 0.7); outline-offset: 3px; }
.login-btn[disabled] { opacity: 0.6; cursor: default; }
.login-btn[disabled]:hover { background: inherit; }
.login-btn__label { text-align: left; }
.login-btn__arrow { display: inline-flex; flex: 0 0 auto; transition: transform 160ms ease; }
.login-btn:hover:not([disabled]) .login-btn__arrow { transform: translateX(2px); }

.login-shortcut-copy {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  margin: 2px 0 0;
  padding: 8px 0;
  border: 0;
  background: transparent;
  color: #77777b;
  font: inherit;
  font-size: 12px;
  line-height: 1.5;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.login-shortcut-copy:hover { color: #1b1b1d; }
.login-shortcut-copy:focus-visible { outline: 2px solid rgba(24, 24, 24, 0.7); outline-offset: 3px; }

/* 辅助说明：按钮下 14px */
.login-hint {
  margin: 14px 0 0;
  font-size: 12px;
  line-height: 1.6;
  color: rgba(24, 24, 24, 0.48);
}

/* 登录状态/错误：无内容时 display:none + margin:0（不产生占位空洞）；
   有内容时才提供顶部间距（紧随辅助说明，位于帮助入口之上） */
.login-status {
  display: none;
  margin: 0;
  font-size: 12.5px;
  line-height: 1.6;
  color: #6b6b70;
  overflow-wrap: anywhere;
  /* v126：不使用 max-height/overflow:hidden 截断错误内容——
     错误增长由主体区（.login-body；桌面 overflow:auto、手机自然流）自然承接，页脚固定不受影响 */
}
.login-status.is-on { display: block; margin-top: 8px; }   /* v150.41：-6px 配合 dev 模块收紧 */
.login-status.is-err { color: #b42318; }
.login-status__row { display: flex; align-items: flex-start; gap: 8px; }
.login-status__spinner {
  width: 13px; height: 13px; flex: 0 0 auto; margin-top: 2px;
  border: 2px solid rgba(107, 107, 112, 0.28);
  border-top-color: #6b6b70;
  border-radius: 50%;
  animation: login-spin 700ms linear infinite;
}
.login-status__retry { margin-top: 12px; }

/* 帮助入口：辅助说明下 44–52px */
.login-help {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 48px;
  font-size: 12px;
}
.login-help__label { color: #8a8a8f; }
.login-help__contact {
  color: #3f3f46;                  /* 深灰：Windows 屏幕上清晰可读 */
  text-decoration: none;
  border-radius: 4px;
  transition: color 140ms ease;
}
.login-help__contact:hover { color: #1b1b1d; text-decoration: underline; text-underline-offset: 3px; }
.login-help__contact:focus-visible { outline: 2px solid rgba(24, 24, 24, 0.7); outline-offset: 3px; }
/* v132：可点击/可聚焦入口的触控热区——padding 扩大命中盒、等量负 margin 抵消布局占位，
   使有效点击区域 ≥44px 高，同时**不改变**视觉位置与行高（保证已确认的桌面排版不变） */
.login-help__contact {
  padding: 15px 10px;
  margin: -15px -10px;
  box-sizing: content-box;
}

/* 页脚：卡内底部 32–38px；分隔线 → 页脚 18px；与登录主体共用同一条左对齐线 */
.login-panel__foot { align-self: end; width: min(100%, 368px); margin-inline: auto; }
.login-divider { height: 1px; background: #ecebe8; margin: 0 0 18px; }
.login-company {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  font-size: 11px;
  color: #6f6f74;                  /* 提高可读性（不使用过浅灰） */
}
.login-company__right { display: inline-flex; align-items: center; gap: 8px; }
/* ICP 备案（仅在配置了真实备案号时渲染；未配置不产生占位） */
.login-icp {
  color: #6f6f74;
  text-decoration: none;
  white-space: nowrap;             /* 桌面不换行破坏布局 */
  border-radius: 3px;
}
.login-icp:hover { color: #1b1b1d; text-decoration: underline; text-underline-offset: 3px; }
.login-icp:focus-visible { outline: 2px solid rgba(24, 24, 24, 0.7); outline-offset: 2px; }

/* 本地开发环境标记：极弱、固定页面右下角，不进入登录内容流（正式环境不渲染） */
.login-env-badge {
  position: fixed;
  right: 14px;
  bottom: 12px;
  z-index: 5;
  font-size: 10.5px;
  line-height: 1;
  color: rgba(24, 24, 24, 0.32);
  background: none;
  border: 0;
  padding: 4px 6px;
  cursor: pointer;
  font-family: inherit;
}
.login-env-badge:hover { color: rgba(24, 24, 24, 0.5); }
.login-env-badge:focus-visible { outline: 2px solid rgba(24, 24, 24, 0.4); outline-offset: 2px; border-radius: 4px; }
.login-env-picker {
  position: fixed;
  right: 14px;
  bottom: 34px;
  z-index: 6;
  background: #fff;
  border: 1px solid #e6e5e2;
  border-radius: 10px;
  padding: 10px 12px;
  box-shadow: 0 12px 30px rgba(32, 27, 21, 0.10);
  font-size: 12px;
}

@keyframes login-card-enter {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 1; transform: none; }
}
@keyframes login-spin { to { transform: rotate(360deg); } }

@media (prefers-reduced-motion: reduce) {
  .login-card { animation: none; }
  .login-btn, .login-btn__arrow { transition: none; }
  .login-btn--primary:active, .login-btn--ghost:active { transform: none; }
  .login-btn:hover .login-btn__arrow { transform: none; }
  .login-status__spinner { animation-duration: 1.6s; }
}

/* ---------- 1366×768 等矮桌面：进一步收紧（卡片 ≤600 高、间距压缩） ---------- */
@media (min-width: 1081px) and (max-height: 820px) {
  .login-page { padding: 40px 48px; }
  .login-card {
    width: min(1040px, calc(100vw - 96px));
    height: min(600px, calc(100vh - 80px));
    min-height: 540px;
  }
  .login-card__panel { padding: 0 clamp(44px, 4.4vw, 60px) 28px; --brand-slot-h: 220px; }
  .login-brand-slot { width: min(100%, 352px); }
  .login-content { width: min(100%, 352px); }
  .login-main-content { width: min(100%, 352px); }
  .login-panel__foot { width: min(100%, 352px); }
  .login-panel__main { margin-top: 0; }
  .login-help { margin-top: 40px; }
}

/* ---------- 平板（≤1080）：左栏略收、右侧留白收紧，按钮仍 ≥300px ---------- */
@media (max-width: 1080px) {
  .login-card {
    grid-template-columns: 46% 54%;
    width: min(100%, calc(100vw - 64px));
    height: auto;
    min-height: 0;
    max-height: none;
  }
  .login-card__panel { padding: 0 clamp(32px, 4vw, 48px) 32px; --brand-slot-h: 153px; }
  .login-brand-slot, .login-content, .login-main-content { width: min(100%, 360px); }
  .login-panel__foot { width: min(100%, 360px); }
  .login-panel__main { margin-top: 0; }
  .login-bg-shadow { background-size: auto 92%; opacity: 0.9; }
}

/* ---------- 手机（≤720）：单栏、隐藏建筑图、按钮占满、页脚上下排列 ---------- */
/* ============================================================
   手机端（≤720px）—— 独立重设计：建筑影像 + 白色登录面板
   结构：建筑图（约 32–36% 视口高）→ 白色面板（圆角上沿覆盖图片 20px）
        品牌 Logo / 登录主体（标题-说明-按钮-辅助-状态-帮助）/ 页脚（弹性贴底）
   - 不使用桌面端等距公式；不出现大面积空白；不做拖拽抽屉、无毛玻璃、无横杠
   - 页脚非 fixed；矮屏自然滚动；无横向滚动；可点目标 ≥44px
   ============================================================ */
@media (max-width: 720px) {
  .login-page {
    min-height: 100dvh;
    padding: 0;
    display: block;
    background: #f5f4f1;
  }
  .login-card {
    width: 100%;
    min-height: 100dvh;
    display: grid;
    grid-template-columns: 1fr;              /* 关键：覆盖平板的两列模板（否则图片与面板并排） */
    grid-template-rows: auto minmax(0, 1fr);
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    overflow: visible;
    margin: 0;
    animation: none;                      /* 手机端由图片/面板分别入场（见下方动效） */
  }

  /* 建筑影像：回归手机端（品牌气质）——原图不拉伸、不加遮罩与文字 */
  .login-card__media {
    display: block;
    width: 100%;
    height: clamp(210px, 34dvh, 290px);
    min-height: 210px;
    overflow: hidden;
    opacity: 0;
    animation: login-media-in 240ms ease-out forwards;
  }
  .login-media__img {
    width: 100%;
    height: 100%;
    object-fit: cover;                    /* 保持原图比例，不拉伸 */
    object-position: 37% 48%;             /* 保留洞石墙 / 木门 / 少量弧形墙 / 自然光影 */
  }

  /* 白色登录面板：顶部圆角并上移覆盖图片 20px */
  .login-card__panel {
    min-height: 0;
    padding: 0 24px calc(20px + env(safe-area-inset-bottom, 0px));      /* 顶部留白由内容组居中自动得到 */
    background: #fff;
    border-radius: 22px 22px 0 0;
    margin-top: -20px;
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-rows: minmax(0, 1fr) auto;                            /* 主体槽 / 页脚 */
    opacity: 0;
    animation: login-panel-in 280ms cubic-bezier(0.22, 0.61, 0.36, 1) forwards;
  }

  /* 品牌区：Logo 在面板内（不覆盖图片）；面板顶 → Logo 28–32px（= 面板 padding-top 30） */
  .login-brand-slot { height: auto; align-items: flex-start; width: 100%; max-width: 342px; margin-inline: auto; }
  .login-brand__logo { width: 70px; height: auto; display: block; }   /* 68–72px：品牌签名，非主标题 */

  /* 主体：Logo → 标题 44–52px（紧凑，不使用桌面等距公式） */
  .login-panel__main { margin-top: 42px; }              /* Logo → 标题 42px（40–44） */
  .login-content,
  .login-main-content,
  .login-panel__foot { width: 100%; max-width: 342px; margin-inline: auto; }   /* 390 − 24 − 24 */
  .login-main-content { margin-block: 0; }
  /* 主体槽（手机）：把「Logo + 欢迎回来 + 说明 + 按钮 + 辅助说明 + 状态 + 帮助入口」
     作为一个整体在「面板顶 ↔ 分隔线」之间垂直居中；正常/退出/错误状态变化后自动重新居中 */
  .login-body {
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-height: 0;
    overflow: visible;
  }
  .login-body__spacer { display: none; }

  /* 字号/控件（手机端） */
  .login-title { font-size: 26px; line-height: 1.25; font-weight: 600; letter-spacing: -0.02em; }   /* ≤27px */
  .login-desc { font-size: 13px; line-height: 1.55; margin-top: 10px; }
  .login-action { margin-top: 28px; }                       /* 说明 → 按钮 28px（26–30） */
  .login-btn { height: 48px; border-radius: 9px; padding: 0 18px; font-size: 14px; font-weight: 600; }
  .login-hint { margin-top: 12px; font-size: 12px; line-height: 1.55; }   /* 按钮 → 辅助说明 12px */
  .login-status { font-size: 12px; line-height: 1.55; }
  .login-status.is-on { margin-top: 12px; }                 /* 状态：辅助说明下方 12px */
  .login-status__row { gap: 7px; }                          /* 图标与文字间距 7px */
  .login-status__text { min-width: 0; overflow-wrap: anywhere; }
  .login-status.is-err { color: #b42318; }                  /* 克制的深红（无红底/红卡/弹窗） */
  .login-help { margin-top: 32px; min-height: 44px; font-size: 12px; align-items: center; gap: 8px; }
  /* 有状态时收紧到 28px（由 JS 在状态出现时给内容组加 .is-stated，不依赖 :has() 支持） */
  .login-main-content.is-stated .login-help { margin-top: 28px; }
  .login-help__contact { min-height: 44px; display: inline-flex; align-items: center; }

  /* 页脚：居中两行，弹性贴底，非 fixed；分隔线保留但极浅 */
  .login-panel__foot { align-self: end; padding-top: 0; margin-top: 0; }   /* 下边界＝分隔线，居中由主体槽计算 */
  .login-divider { display: block; width: 100%; background: #f2f1ee; margin: 0 0 16px; }
  .login-company { flex-direction: column; align-items: center; justify-content: center; gap: 4px; text-align: center; font-size: 11px; line-height: 1.45; }
  .login-company__right { flex-wrap: wrap; justify-content: center; }
  .login-icp { white-space: normal; }

  /* 背景窗影：极淡保留（不干扰白色面板与文字对比度） */
  .login-bg-shadow { background-size: auto 82%; background-position: left top; opacity: 0.35; }

  .login-env-badge { bottom: calc(8px + env(safe-area-inset-bottom, 0px)); }
}

/* 手机端入场动效：图片淡入 240ms；面板淡入 + 上移 6px 280ms（不做逐项瀑布，不阻塞点击） */
@keyframes login-media-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes login-panel-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@media (max-width: 720px) and (prefers-reduced-motion: reduce) {
  .login-card__media, .login-card__panel { animation: none; opacity: 1; transform: none; }
}

/* 手机矮屏（≤720 高）：压缩图片与留白，允许滚动，不裁切错误、不压缩按钮 */
@media (max-width: 720px) and (max-height: 720px) {
  .login-card__media { height: 190px; min-height: 190px; }
  .login-card__panel { padding-top: 0; }
  /* 矮屏空间不足：不做强制居中，改用顶部安全留白 + 自然流（内容可滚动、页脚跟随） */
  .login-body { display: block; padding-top: 40px; }
  .login-panel__foot { margin-top: 48px; }
  .login-brand__logo { width: 68px; }
  .login-panel__main { margin-top: 34px; }
  .login-action { margin-top: 24px; }
  .login-help { margin-top: 24px; }
  .login-main-content.is-stated .login-help { margin-top: 26px; }
  .login-panel__foot { padding-top: 22px; }
}

/* 手机横屏（≤900 宽 且 ≤480 高）：隐藏图片装饰，保证登录操作完整可见，允许滚动 */
@media (max-width: 900px) and (max-height: 480px) {
  .login-page {
    min-height: 100dvh;
    padding: 0;
    display: block;
    background: #f5f4f1;
  }
  .login-card {
    display: block;
    width: 100%;
    min-height: 0;
    margin: 0;
    grid-template-columns: 1fr;
    background: transparent;
    border-radius: 0;
    box-shadow: none;
    overflow: visible;
    animation: none;
  }
  .login-card__media { display: none; }                      /* 横屏不沿用竖屏 34dvh 图片高度 */
  .login-card__panel {
    min-height: 100dvh;
    padding: 40px 24px calc(20px + env(safe-area-inset-bottom, 0px));
    border-radius: 0;
    margin-top: 0;
    grid-template-rows: minmax(0, 1fr) auto;
    opacity: 1;
    animation: none;
  }
  .login-body { display: block; }
  .login-panel__foot { margin-top: 48px; padding-top: 0; }
  .login-brand-slot, .login-content, .login-main-content, .login-panel__foot { width: 100%; max-width: 342px; margin-inline: auto; }
  .login-brand-slot { height: auto; align-items: flex-start; }
  .login-brand__logo { width: 70px; display: block; }
  .login-panel__main { margin-top: 34px; }
  .login-title { font-size: 26px; }
  .login-desc { font-size: 13px; line-height: 1.55; margin-top: 10px; }
  .login-action { margin-top: 24px; }
  .login-btn { height: 48px; border-radius: 9px; padding: 0 18px; font-size: 14px; font-weight: 600; }
  .login-hint { margin-top: 12px; font-size: 12px; line-height: 1.55; }
  .login-status { font-size: 12px; line-height: 1.55; }
  .login-status.is-on { margin-top: 12px; }
  .login-status__row { gap: 7px; }
  .login-help { margin-top: 24px; min-height: 44px; font-size: 12px; }
  .login-main-content.is-stated .login-help { margin-top: 26px; }
  .login-panel__foot { padding-top: 22px; }
  .login-company { gap: 4px; font-size: 11px; line-height: 1.45; }
  .login-divider { display: block; }
  .login-company { flex-direction: column; align-items: center; justify-content: center; gap: 5px; text-align: center; font-size: 11px; }
  .login-company__right { flex-wrap: wrap; justify-content: center; }
  .login-divider { width: 100%; background: #f2f1ee; margin: 0 0 16px; }
  .login-bg-shadow { background-size: auto 90%; background-position: left top; opacity: 0.35; }
}

/* 强制颜色模式：边界与焦点可见 */
@media (forced-colors: active) {
  .login-card { border: 1px solid CanvasText; }
  .login-btn { border: 1px solid CanvasText; }
  .login-btn:focus-visible, .login-help__contact:focus-visible, .login-env-badge:focus-visible, .login-icp:focus-visible { outline-color: Highlight; }
}

/* ==================== v150.3：本地开发快速进入模块（v144 布局分叉根治） ====================
   根因：v144 为装下 5 列身份选择器，把 dev 内容列放宽到 460px（.is-dev !important + 页脚 460 覆盖），
   导致 Logo/标题/按钮/页脚整体偏离生产 368 列（Logo x 偏 46px、页脚分割线漂移）。
   修复：删除全部宽度覆盖——dev 与生产共用同一 368 内容列与按钮组件；
   5 列身份格在 368 内自适应（字号 12.5、勾选图标取消、选中态改「浅底+内嵌深边」表达，腾出横向空间）；
   dev 主按钮不再覆盖高度/圆角（继承生产 .login-btn 48/8）。dev 仅替换主体操作内容，骨架零分叉。 */
.login-dev-module { display: flex; flex-direction: column; gap: 12px; margin-top: 30px; }
.login-dev-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.login-dev-title { font-size: 13px; font-weight: 600; color: #6b6b70; letter-spacing: 0.2px; }
.login-dev-current { font-size: 13px; color: #6b6b70; white-space: nowrap; }

/* 主按钮（v150.3）：完全继承生产 .login-btn 组件（h48/radius8/padding），仅品牌深底为 dev 既有视觉 */
.login-dev-module .login-btn--primary { background: linear-gradient(180deg, #2c2c2e, #1b1b1d); box-shadow: none; }
.login-dev-module .login-btn--primary:hover { background: linear-gradient(180deg, #3a3a3c, #262628); }
.login-dev-module .login-btn--primary:active { background: #17171a; transform: translateY(1px); }
.login-dev-module .login-btn--primary:disabled { opacity: 0.7; cursor: default; }
.login-dev-module .login-btn--primary .login-btn__arrow { transition: transform 180ms var(--ease-standard, ease); }
.login-dev-module .login-btn--primary:hover .login-btn__arrow { transform: translateX(2px); }

/* 模块内辅助说明 */
.login-dev-note { font-size: 12.5px; line-height: 1.5; color: #9a9a9e; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* v144：页脚防重叠——窄容器自动两行（公司名一行 / 工作空间·备案一行），不靠缩小字号 */
.login-company { flex-wrap: wrap; row-gap: 4px; }
.login-company__name { white-space: nowrap; }
.login-company__right { min-width: 0; white-space: nowrap; }
/* 登录状态与页脚分离：状态行下间距保证 */
.login-status.is-on { margin-bottom: 6px; }

@media (max-width: 720px) {
  .login-dev-note { white-space: normal; }
  .is-dev { width: 100% !important; }
}
@media (prefers-reduced-motion: reduce) {
  .login-dev-module .login-btn--primary .login-btn__arrow { transition: none; }
}

/* ==================== 本地登录页滚动行为 ====================
   沿用正式登录卡片的尺寸与左右比例，避免开发登录态把建筑图裁成横幅。
   右侧主体负责长内容滚动；身份下拉保持有限高度，列表在下拉内滚动。 */
@media (min-width: 721px) {
  .login-card.is-dev .login-card__panel {
    grid-template-rows: minmax(0, 1fr) auto;
    overflow: hidden;
  }

  .login-card.is-dev .login-body {
    min-height: 0;
    overflow-x: hidden;
    overflow-y: hidden;   /* v150.42：桌面端结构性禁滚——触控热区隐形 padding 尾巴不再构成可滚区域；仅浮层列表内滚 */
  }


  .login-card.is-dev .login-dev-list {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
  }
}
.login-dev-module { gap: 8px; margin-top: 12px; }   /* v150.41：与矮桌面收紧值对齐（-12-6），修 S6c 31px 溢出 */
.login-card.is-dev .login-help { margin-top: 14px; min-height: 0; }
.login-card.is-dev .login-status { min-height: 0; }

/* v150.11：矮桌面视口（≤820px 高且 ≥721px 宽，如 1366×768 / 1280×800）垂直空间收紧——
   根因：dev 模块完整渲染（head+3 行分段+按钮+note）+ 页面 56px 呼吸 padding
   → 卡片超出视口出现页面级滚动条（WebKit 占宽滚动条使布局整体横移，登录卡不再与生产基准同源）。
   修复：压缩页面上下 padding（56→32）与 dev 模块纵向节奏（margin 24→12 / gap 10→8），
   触控高度（格子 ≥44 / 按钮 48）与水平布局不动；手机端（≤720）页面滚动本就是设计允许（v150.5），排除。 */
@media (max-height: 820px) and (min-width: 721px) {
  .login-page { padding-top: 32px; padding-bottom: 32px; }
  .login-card.is-dev {
    min-height: min(500px, calc(100vh - 64px));
    min-height: min(500px, calc(100dvh - 64px));
  }
  .login-card.is-dev .login-dev-module { margin-top: 12px; gap: 8px; }
  .login-card.is-dev .login-help { margin-top: 14px; }
}


/* ==================== v150.12：折叠式可搜索身份选择器（图1） ==================== */
.login-dev-trigger {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  width: 100%; height: 48px; padding: 0 14px;
  border: 1px solid #dcdcd7; border-radius: 11px;
  background: #fbfaf8; color: #1b1b1d;
  font-size: 14px; font-family: inherit; text-align: left;
  box-sizing: border-box; cursor: pointer;
  transition: border-color 180ms var(--ease-standard, ease), background 180ms var(--ease-standard, ease);
}
.login-dev-trigger:hover { border-color: #c9c9c2; background: #f6f5f2; }
.login-dev-trigger:focus-visible { outline: 2px solid #1677ff; outline-offset: 1px; }
.login-dev-trigger.is-open { border-color: #b9b9b1; background: #f6f5f2; }
.login-dev-trigger__text { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.login-dev-trigger__chevron { flex: none; color: #6b6b70; font-size: 13px; transition: transform 180ms var(--ease-standard, ease); }
.login-dev-trigger.is-open .login-dev-trigger__chevron { transform: rotate(180deg); }

/* 面板：流内展开（把下方内容自然推下，无覆盖无重叠）；桌面由主体区统一滚动 */
.login-dev-pop { display: none; }
/* v150.42 浮层化：挂 document.body + fixed——脱离卡片裁剪链，展开零位移，
   外层 .login-body 不滚动；top/left/width/max-height 由 JS 按触发框矩形注入 */
.login-dev-pop.is-open {
  position: fixed; z-index: 70;   /* > create-menu 60、< modal-mask 80 */
  display: flex; flex-direction: column;
  border: 1px solid #dcdcd7; border-radius: 12px; background: #ffffff;
  max-height: 328px; overflow: hidden;
  box-shadow: 0 12px 32px rgba(27, 27, 29, 0.12);
}
/* v150.41：搜索框相对容器 + 清空按钮 + 匹配计数（对齐 glass .input 焦点环 token） */
.login-dev-searchwrap { position: relative; flex: none; margin: 10px 10px 0; }
.login-dev-search {
  flex: none; height: 42px;
  border-radius: 9px; border: 1px solid #e3e2dd; background: #fbfaf8;
  font-size: 13.5px; padding: 0 34px 0 12px; box-sizing: border-box; width: 100%;
}
.login-dev-search:focus { outline: none; border-color: #1677ff; background: #ffffff; box-shadow: 0 0 0 3px rgba(22, 119, 255, 0.08); }
.login-dev-clear {
  position: absolute; right: 7px; top: 50%; transform: translateY(-50%);
  display: none; align-items: center; justify-content: center;
  width: 24px; height: 24px; border: none; border-radius: 50%;
  background: #eceae6; color: #6b6b70; font-size: 14px; line-height: 1;
  cursor: pointer; font-family: inherit;
}
.login-dev-clear:hover { background: #e0ded9; color: #1b1b1d; }
.login-dev-searchwrap.has-value .login-dev-clear { display: flex; }
.login-dev-match { flex: none; font-size: 11.5px; color: #9a9a9e; padding: 4px 12px 0; min-height: 0; }
.login-dev-match:empty { display: none; }

.login-dev-list { flex: 1; min-height: 0; overflow-y: auto; padding: 2px 6px 8px; overscroll-behavior-y: auto; }
/* v150.41：角色色点（组头 + 选项行；低饱和暖色系由 JS 内联注入背景色） */
.login-dev-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; flex: none; }
.login-dev-dot--opt { width: 6px; height: 6px; margin-right: 2px; }
.login-dev-group {
  display: flex; align-items: center; gap: 6px;
  font-size: 11px; font-weight: 600; color: #9a9a9e; letter-spacing: 0.4px;
  padding: 10px 8px 4px; position: sticky; top: 0; background: #ffffff;
}
.login-dev-group__count { margin-left: auto; font-weight: 400; color: #c4c4c8; }
.login-dev-opt {
  display: flex; flex-direction: column; align-items: flex-start; gap: 1px;
  width: 100%; min-height: 44px; padding: 6px 10px;
  border: none; border-radius: 8px; background: transparent;
  color: #1b1b1d; font-family: inherit; text-align: left; cursor: pointer; box-sizing: border-box;
}
.login-dev-opt:hover, .login-dev-opt.is-active { background: #f4f3f1; }
.login-dev-opt.is-on { background: #f0ede7; box-shadow: inset 0 0 0 1px #1b1b1d; }
.login-dev-opt:focus-visible { outline: 2px solid #1677ff; outline-offset: -2px; }
.login-dev-opt__name { font-size: 13.5px; font-weight: 600; line-height: 1.35; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.login-dev-opt__sub { font-size: 11px; color: #9a9a9e; line-height: 1.3; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.login-dev-opt.is-disabled { cursor: not-allowed; opacity: 0.5; }
.login-dev-opt.is-disabled .login-dev-opt__name { font-weight: 400; }
.login-dev-empty { padding: 18px 10px; text-align: center; font-size: 12.5px; color: #9a9a9e; }
/* v150.41：隐藏组的底部备注 */
.login-dev-footnote { padding: 8px 10px 2px; font-size: 11px; color: #c4c4c8; text-align: center; }
.login-dev-missing {
  font-size: 12.5px; line-height: 1.5; color: #8a5a00;
  background: #fdf6e7; border: 1px solid #f0e2bd; border-radius: 8px; padding: 8px 12px;
}
@media (max-width: 720px) {
  .login-dev-note { white-space: normal; }
}
