/* Orbit 风格 · 暗黑默认，html[data-theme=light] 切浅色（与官网共用 ds_theme）；深海军蓝底 + 绿强调，浅色为同族反推 */
:root{
  color-scheme:light;
  --bg:#f6f8fc; --bg-soft:#eef2f8; --panel:#ffffff; --surface-2:#f2f6fb; --border:rgba(23,64,148,.12); --border-strong:rgba(23,64,148,.22);
  --text:#0d1b2e; --muted:#4a5b74; --faint:#7d8ca3;
  --primary:#0a8a5f; --primary-2:#0a9965; --primary-dark:#076b4a; --primary-soft:rgba(10,138,95,.1);
  --danger:#d3384f; --green:#0a8a5f;
  --m-get:#0a8a5f; --m-post:#2563eb; --m-put:#b45309; --m-delete:#d3384f;
  --radius:14px; --radius-sm:10px; --radius-lg:18px;
  --shadow-sm:0 1px 2px rgba(13,27,46,.05);
  --shadow:0 1px 3px rgba(13,27,46,.06);
  --shadow-lg:0 12px 40px rgba(10,138,95,.12);
  --grad:linear-gradient(135deg,#087a52 0%,#0a8a5f 55%,#0d9488 100%);
  --grad-fg:#ffffff;
  --badge-fg:#ffffff;
  --btn-primary-bg:#087a52; --btn-primary-fg:#ffffff; --btn-primary-glow:0 6px 18px rgba(8,122,82,.28);
  --nav-bg:rgba(246,248,252,.86);
  --reader-nav-bg:rgba(246,248,252,.88);
  --overlay:rgba(13,27,46,.45);
  --overlay-drawer:rgba(13,27,46,.42);
  --table-hover:#f2f6fb;
  --input-bg:#ffffff;
  --danger-soft:#fdf1f3; --danger-border:#f3c9d1; --danger-border-btn:#eab0bc;
  --warn-bg:#fdf6e7; --warn-border:#f0d9a6; --warn-text:#8a6116;
  --ok-bg:#e7f6ef; --ok-bg-tag:#ecf9f2; --ok-border:#c4e8d4; --ok-text:#0a7a52;
  --info-bg:#e8effc; --info-bg-tag:#eef3fc; --info-border-tag:#c5d4f5; --info-text:#2563eb;
  --info-border:rgba(37,99,235,.3);
  --field-error-bg:#fffbfc;
  --avatar-ring:#ffffff;
  --toast-bg:#0d1b2e;
  --auth-fx:radial-gradient(600px 400px at 20% 0%,rgba(10,153,101,.08),transparent 60%),radial-gradient(700px 420px at 85% 100%,rgba(13,148,136,.06),transparent 60%);
  --shadow-pop:0 18px 48px rgba(13,27,46,.14),0 2px 8px rgba(13,27,46,.06);
  --shadow-modal:0 24px 80px rgba(13,27,46,.2);
  --shadow-dropdown:0 12px 40px rgba(13,27,46,.12);
  --shadow-xsel:0 12px 32px rgba(13,27,46,.14);
  --shadow-auth:0 20px 60px rgba(13,27,46,.08);
  --shadow-drawer:8px 0 32px rgba(13,27,46,.16);
  --shadow-gate:0 24px 64px rgba(13,27,46,.1),0 2px 8px rgba(13,27,46,.04);
}
html[data-theme="dark"]{
  color-scheme:dark;
  --bg:#070d1a; --bg-soft:#0b1424; --panel:#0e1a2e; --surface-2:#122038; --border:rgba(122,168,255,.16); --border-strong:rgba(122,168,255,.28);
  --text:#e8eefb; --muted:#9fb0cc; --faint:#6d80a3;
  --primary:#3dfaa0; --primary-2:#6ffbb4; --primary-dark:#a7ffcf; --primary-soft:rgba(61,250,160,.14);
  --danger:#ff7a90; --green:#34d399;
  --m-get:#34d399; --m-post:#5b8cff; --m-put:#fbbf24; --m-delete:#ff7a90;
  --shadow-sm:none;
  --shadow:none;
  --shadow-lg:0 12px 40px rgba(61,250,160,.14);
  --grad:linear-gradient(135deg,#3dfaa0 0%,#14b8a6 100%);
  --grad-fg:#04130b;
  --badge-fg:#04130b;
  --btn-primary-bg:#3dfaa0; --btn-primary-fg:#04130b; --btn-primary-glow:0 0 24px rgba(61,250,160,.22);
  --nav-bg:rgba(7,13,26,.86);
  --reader-nav-bg:rgba(7,13,26,.88);
  --overlay:rgba(0,0,0,.62);
  --overlay-drawer:rgba(0,0,0,.58);
  --table-hover:rgba(122,168,255,.06);
  --input-bg:#0b1424;
  --danger-soft:rgba(255,122,144,.12); --danger-border:rgba(255,122,144,.35); --danger-border-btn:rgba(255,122,144,.45);
  --warn-bg:rgba(250,204,21,.1); --warn-border:rgba(250,204,21,.32); --warn-text:#fbbf24;
  --ok-bg:rgba(52,211,153,.12); --ok-bg-tag:rgba(52,211,153,.12); --ok-border:rgba(52,211,153,.3); --ok-text:#34d399;
  --info-bg:rgba(91,140,255,.12); --info-bg-tag:rgba(91,140,255,.12); --info-border-tag:rgba(91,140,255,.35); --info-text:#5b8cff;
  --info-border:rgba(91,140,255,.35);
  --field-error-bg:rgba(255,122,144,.08);
  --avatar-ring:#0e1a2e;
  --toast-bg:#122038;
  --auth-fx:radial-gradient(600px 400px at 20% 0%,rgba(61,250,160,.07),transparent 60%),radial-gradient(700px 420px at 85% 100%,rgba(20,184,166,.06),transparent 60%);
  --shadow-pop:0 18px 48px rgba(0,0,0,.55),0 2px 8px rgba(0,0,0,.3);
  --shadow-modal:0 24px 80px rgba(0,0,0,.6);
  --shadow-dropdown:0 12px 40px rgba(0,0,0,.5);
  --shadow-xsel:0 12px 32px rgba(0,0,0,.5);
  --shadow-auth:0 20px 60px rgba(0,0,0,.45);
  --shadow-drawer:8px 0 32px rgba(0,0,0,.55);
  --shadow-gate:0 24px 64px rgba(0,0,0,.5),0 2px 8px rgba(0,0,0,.25);
}
html[data-theme-anim] body,
html[data-theme-anim] .topnav,
html[data-theme-anim] .panel,
html[data-theme-anim] .stat-card,
html[data-theme-anim] .auth-card,
html[data-theme-anim] .reader-header,
html[data-theme-anim] .modal,
html[data-theme-anim] .btn{transition:background-color .25s,color .25s,border-color .25s,box-shadow .25s}
*{box-sizing:border-box}
body{margin:0;font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:15px;line-height:1.7;-webkit-font-smoothing:antialiased}
/* hidden 属性兜底：防止组件级 display 规则覆盖 UA 的 display:none（如 auth-card label） */
[hidden]{display:none!important}
a{color:var(--primary);text-decoration:none;transition:color .15s}
a:hover{color:var(--primary-dark)}
h1,h2{letter-spacing:-.02em;font-weight:800}
.mono{font-family:ui-monospace,"JetBrains Mono",SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}
.muted{color:var(--muted)}

/* 全局加载态：居中转圈 + 文案，替代灰条/纯文字 */
.ui-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:36px 20px;min-height:112px;box-sizing:border-box;text-align:center;color:var(--muted)}
.ui-loading.is-compact{min-height:72px;padding:22px 14px;gap:10px}
.ui-loading-spinner{width:26px;height:26px;border-radius:50%;border:2.5px solid var(--border-strong);border-top-color:var(--primary);animation:ui-spin .65s linear infinite;flex:none}
.ui-loading-text{font-size:13px;line-height:1.4;color:var(--muted)}
@keyframes ui-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){
  .ui-loading-spinner{animation:none;border-top-color:var(--primary);opacity:.85}
}

/* nav */
/* 内容列与 1680px 容器对齐：左右内边距 32px，故半宽为 840-32=808；窄于 1728px 时容器贴边，56px = 24px 外边距 + 32px 内边距 */
.topnav{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--nav-bg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border);padding:0 max(56px,calc(50vw - 808px));height:72px;position:sticky;top:0;z-index:10}
/* 窄屏汉堡：桌面隐藏 */
.nav-toggle{display:none;align-items:center;justify-content:center;flex-direction:column;gap:5px;width:36px;height:36px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;cursor:pointer;flex:none;color:var(--text)}
.nav-toggle:hover{border-color:var(--border-strong);background:var(--panel)}
.nav-toggle-bar{display:block;width:18px;height:2px;border-radius:1px;background:currentColor;transition:transform .2s,opacity .2s}
.nav-toggle[aria-expanded="true"] .nav-toggle-bar:nth-child(1){transform:translateY(7px) rotate(45deg)}
.nav-toggle[aria-expanded="true"] .nav-toggle-bar:nth-child(2){opacity:0}
.nav-toggle[aria-expanded="true"] .nav-toggle-bar:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
/* 移动抽屉 */
.nav-drawer-overlay{position:fixed;inset:0;z-index:100;background:var(--overlay-drawer);display:flex;justify-content:flex-start;align-items:stretch;padding:0;margin:0;border:0}
.nav-drawer-overlay[hidden]{display:none!important}
.nav-drawer{width:min(300px,86vw);background:var(--panel);box-shadow:var(--shadow-drawer);display:flex;flex-direction:column;animation:navDrawerIn .22s ease-out}
@keyframes navDrawerIn{from{transform:translateX(-12px);opacity:.6}to{transform:none;opacity:1}}
.nav-drawer-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 18px;border-bottom:1px solid var(--border)}
.nav-drawer-title{font-weight:700;font-size:15px;letter-spacing:-.3px}
.nav-drawer-close{width:32px;height:32px;border:0;border-radius:6px;background:transparent;color:var(--muted);cursor:pointer;font-size:16px;line-height:1}
.nav-drawer-close:hover{background:var(--bg-soft);color:var(--text)}
.nav-drawer-links{display:flex;flex-direction:column;padding:10px 12px 20px;gap:2px;overflow:auto}
.nav-drawer-links a{display:block;padding:11px 14px;border-radius:8px;color:var(--text);font-size:14.5px;font-weight:500;text-decoration:none}
.nav-drawer-links a:hover{background:var(--bg-soft);text-decoration:none}
.nav-drawer-links a.active{color:var(--l-nav-on, var(--primary-dark));background:var(--l-nav-on-bg, var(--primary-soft))}
body.nav-drawer-open{overflow:hidden}
/* 品牌 logo 与首页 .l-logo 同款：渐变方块 D + 文字（或自定义 Logo 图） */
.nav-brand a{display:inline-flex;align-items:center;gap:9px;font-weight:700;font-size:16px;letter-spacing:-.4px;color:var(--text)}
.nav-brand a b{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;background:var(--grad);color:var(--grad-fg);font-size:13px;letter-spacing:0}
.nav-brand a img.nav-logo{width:36px;height:36px;border-radius:9px;object-fit:cover;display:block}
/* 链接相对顶栏水平居中（脱离文档流，避免被左右不等宽的品牌/工具组挤偏）；与落地页顶栏同构 */
.nav-brand{position:relative;z-index:2;flex:none}
.nav-links{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:1;display:flex;gap:6px;justify-content:center;white-space:nowrap}
.nav-links a{color:var(--muted);font-weight:600;font-size:14px;padding:8px 14px;border-radius:8px;transition:all .15s}
.nav-links a:hover{color:var(--text);background:var(--bg-soft);text-decoration:none}
/* 当前页菜单项高亮：与官网 scroll-spy、窄屏抽屉同款背景焦点；类由 ui.js 按 pathname 打（置于 :hover 后保证悬停不被覆盖） */
.nav-links a.active{color:var(--l-nav-on, var(--primary-dark));background:var(--l-nav-on-bg, var(--primary-soft));text-decoration:none}
.nav-links .drop-btn.active{color:var(--l-nav-on, var(--primary-dark));background:var(--l-nav-on-bg, var(--primary-soft))}
/* 后台导航右侧工具组：主题 / GitHub / 语言切换，同为 ghost 风格 36px 等高 */
.nav-right-tools{display:flex;align-items:center;gap:8px;margin-left:auto;position:relative;z-index:2;flex:none}
.theme-toggle,.nav-gh,.msg-bell{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;color:var(--muted);border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;transition:all .15s;cursor:pointer;font:inherit}
.theme-toggle:hover,.nav-gh:hover,.msg-bell:hover{color:var(--text);border-color:var(--border-strong);background:var(--panel)}
.msg-menu{position:relative}
.msg-bell{position:relative}
.msg-badge{position:absolute;top:2px;right:2px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--danger);color:#fff;font-size:10px;font-weight:700;line-height:16px;text-align:center;box-sizing:border-box}
.msg-dropdown{position:absolute;right:0;top:calc(100% + 8px);width:min(360px,92vw);max-height:420px;display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-dropdown);z-index:40;overflow:hidden}
.msg-dropdown-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-bottom:1px solid var(--border);font-weight:600;font-size:13.5px}
.msg-dropdown-list{overflow:auto;flex:1;max-height:360px}
.msg-item{display:block;width:100%;text-align:left;padding:12px 14px;border:0;border-bottom:1px solid var(--border);background:transparent;cursor:pointer;font:inherit;color:var(--text)}
.msg-item:hover{background:var(--bg-soft)}
.msg-item.is-unread{background:var(--primary-soft)}
.msg-item-title{font-size:13.5px;font-weight:600;margin:0 0 4px}
.msg-item-body{font-size:12.5px;color:var(--muted);margin:0 0 4px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.msg-item-time{font-size:11.5px;color:var(--faint)}
.msg-empty{padding:28px 16px;text-align:center;font-size:13px}
.theme-toggle .i-sun{display:none}
.theme-toggle .i-moon{display:block}
html[data-theme="light"] .theme-toggle .i-sun{display:block}
html[data-theme="light"] .theme-toggle .i-moon{display:none}
.topnav .lang-switch select{height:36px;padding:0 10px;border-color:transparent;background:transparent;color:var(--muted)}
.topnav .lang-switch select:hover{border-color:var(--border-strong);background:var(--panel);color:var(--text)}
.nav-user{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:13px}
.user-menu{position:relative;z-index:2;flex:none}
.user-chip{display:flex;align-items:center;gap:8px;padding:4px 14px 4px 6px;border:1px solid var(--border);background:var(--panel);border-radius:6px;cursor:pointer;font-size:13px;color:var(--text);font-family:inherit;transition:all .15s}
.user-chip:hover{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.user-avatar{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--grad);color:var(--grad-fg);font-size:12px;font-weight:600;flex:none;overflow:hidden}
.user-avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%}
/* 表格内小头像 */
.user-avatar-sm{width:30px;height:30px;font-size:13px}
/* 头像选择器（弹窗内） */
.avatar-pick{display:flex;align-items:center;gap:12px;padding-bottom:14px;margin-bottom:14px;border-bottom:1px solid var(--border)}
.avatar-box{width:46px;height:46px;font-size:18px}
/* API 密钥页：对接文档与密钥展示 */
.api-doc{padding:22px 26px;margin-top:20px}
.api-doc h2{margin:0 0 12px;font-size:16px}
.api-doc p{margin:10px 0;color:var(--text)}
.api-doc code{background:var(--bg-soft);border:1px solid var(--border);border-radius:5px;padding:1px 6px;font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:12.5px}
.api-code{background:#0b1424;color:#c9d6ec;border-radius:var(--radius-sm);padding:14px 16px;overflow:auto;font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:12.5px;line-height:1.7}
.api-doc .table th,.api-doc .table td{padding:9px 14px}
/* API 文档页：左侧目录 + 右侧分区内容（参考主流 API 文档站布局） */
.doc-wrap{max-width:1200px}
.doc-layout{display:flex;gap:28px;align-items:flex-start}
.doc-side{position:sticky;top:84px;width:210px;flex:none;display:flex;flex-direction:column;gap:2px;padding:6px 0;max-height:calc(100vh - 108px);overflow:auto}
.doc-side a{display:block;padding:7px 14px;border-radius:8px;color:var(--muted);font-size:13.5px;font-weight:500;transition:all .15s}
.doc-side a:hover{color:var(--text);background:var(--bg-soft);text-decoration:none}
.doc-side a.active{color:var(--primary-dark);background:var(--primary-soft)}
.doc-side a.side-parent{color:var(--text);font-weight:600}
/* 层级目录：分组名 + 逐接口条目（彩色方法圆点 + METHOD 路径） */
.doc-side a.side-lv1{padding-left:22px;font-weight:600;color:var(--text)}
.doc-side a.side-lv1.active{color:var(--primary-dark)}
.doc-side a.side-lv2{display:flex;align-items:center;padding:5px 12px 5px 40px;font-size:12.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.m-dot{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:8px;flex:none}
.m-dot.m-get{background:var(--m-get)}
.m-dot.m-post{background:var(--m-post)}
.m-dot.m-put{background:var(--m-put)}
.m-dot.m-delete{background:var(--m-delete)}
.doc-main{flex:1;min-width:0}
.doc-sec{padding:22px 26px}
.doc-sec h2{margin:0 0 14px;font-size:19px;padding-bottom:12px;border-bottom:1px solid var(--border)}
.doc-sec p{margin:10px 0;color:var(--text)}
.doc-sec .table th,.doc-sec .table td{padding:9px 14px}
/* Base URL 提示条：左侧主色竖线 */
.doc-callout{border-left:3px solid var(--primary);background:var(--bg-soft);border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:10px 16px;margin:14px 0 4px;font-size:13.5px;color:var(--text)}
/* 快速开始：数字圆点步骤 */
.doc-steps{list-style:none;margin:14px 0 4px;padding:0;counter-reset:step}
.doc-steps li{counter-increment:step;position:relative;padding-left:36px;margin:12px 0;color:var(--text)}
.doc-steps li::before{content:counter(step);position:absolute;left:0;top:1px;width:23px;height:23px;border-radius:50%;background:var(--primary-soft);color:var(--primary-dark);font-size:12px;font-weight:600;display:grid;place-items:center}
/* 窄屏隐藏侧边目录 */
@media (max-width:960px){.doc-side{display:none}}

/* 文档列表：左侧项目导航 */
.docs-wrap{/* max-width 见 .container.docs-wrap */}
.docs-layout{display:flex;gap:22px;align-items:flex-start}
.docs-side{width:200px}
.docs-side-label{padding:4px 14px 10px;font-size:11.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--faint)}
.docs-side a{display:flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden}
.docs-side a .side-name{min-width:0;overflow:hidden;text-overflow:ellipsis}
.docs-side a .tag{flex:none;padding:0 6px;font-size:10px;line-height:16px}
.docs-side a .side-count{flex:none;margin-left:auto;font-variant-numeric:tabular-nums;color:var(--faint);font-size:11px}
.docs-main{flex:1;min-width:0}
/* 页头以下小一号：继承字 15→14，已写死的字号各减 1px；不波及 .page-head */
.docs-layout{font-size:14px}
.docs-layout .docs-side-label{font-size:10.5px}
.docs-layout .doc-side a{font-size:12.5px}
.docs-layout .table th{font-size:11px}
.docs-layout .btn{font-size:13px}
.docs-layout .btn-sm{font-size:12px}
.docs-layout .search-bar input,
.docs-layout .filter-bar select,
.docs-layout .filter-bar .xsel-btn{font-size:13px}
.docs-layout .xsel-opt{font-size:12px}
.docs-layout .tag{font-size:11px}
.docs-layout .mono{font-size:11px}
.docs-layout .doc-snippet{font-size:11px}
.docs-layout .ops-item{font-size:12px}
.docs-layout .pager .muted{font-size:12px}
.docs-layout .pager .pager-size,
.docs-layout .pager .xsel-btn{font-size:11.5px}
.docs-wrap .trash-tip{font-size:12px}
/* 桌面用侧栏选项目：隐藏查询栏的项目下拉（含 skinSelect 外层 .xsel 容器，而非原生 select） */
.filter-bar .xsel:has(> select.docs-project-mobile){display:none}
/* 13 寸等窄屏（≤1440 CSS px）：隐藏左侧项目栏让表格占满宽度；项目筛选改用查询栏下拉 */
@media (max-width:1440px){
  .docs-layout{display:block}
  .docs-side{display:none}
  .filter-bar .xsel:has(> select.docs-project-mobile){display:inline-flex}
}
/* 可用接口：分组标题 + 逐接口卡片 + 参数表 */
.ep-group{margin:20px 0 10px;font-size:14.5px;font-weight:650;color:var(--text)}
.ep{border:1px solid var(--border);border-radius:10px;padding:12px 16px;margin:10px 0;background:var(--panel);transition:border-color .15s}
.ep:hover{border-color:var(--border-strong)}
.ep-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ep-method{flex:none;min-width:62px;text-align:center;padding:3px 0;border-radius:6px;font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:11.5px;font-weight:700;color:var(--badge-fg);letter-spacing:.3px}
.m-get{background:var(--m-get)}
.m-post{background:var(--m-post)}
.m-put{background:var(--m-put)}
.m-delete{background:var(--m-delete)}
.ep-path{font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:12.5px;background:var(--bg-soft);border:1px solid var(--border);border-radius:6px;padding:2px 8px;word-break:break-all}
.ep-desc{color:var(--muted);font-size:13px}
.ep-params{margin-top:10px;border-top:1px dashed var(--border)}
.ep-params th,.ep-params td{padding:6px 10px;font-size:12.5px}
.ep-pname{font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:12px;background:var(--bg-soft);border:1px solid var(--border);border-radius:5px;padding:1px 6px}
.p-badge{font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:10.5px;color:var(--muted);border:1px solid var(--border);border-radius:4px;padding:0 5px;margin-left:6px}
/* 接口卡片内请求/响应示例 */
.ep-ex{margin-top:4px}
.ep-ex-label{display:block;font-size:12px;font-weight:600;color:var(--muted);margin:12px 0 6px}
.ep-ex .api-code{padding:12px 14px;font-size:12px}
/* 错误码表：状态码徽章 */
.err-table td.err-msg{font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:12px}
.st{display:inline-block;min-width:38px;text-align:center;padding:1px 8px;border-radius:6px;font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:11.5px;font-weight:700;color:var(--badge-fg)}
.st-400{background:var(--m-put)}
.st-401,.st-403{background:var(--m-delete)}
.st-404{background:var(--faint)}
.st-500{background:var(--danger)}
/* 面板内复用 .api-doc 作为分区正文，去掉独立面板时的外边距 */
.panel .api-doc{margin-top:0;padding:18px 24px 22px}
/* 请求头徽章 */
.hdr-badge{display:inline-block;background:var(--bg-soft);border:1px solid var(--border);border-radius:6px;padding:2px 10px;font-weight:600;font-size:12px}
/* 代码块：深色头部栏（语言标签 + 复制按钮） */
.code-wrap{position:relative;margin:14px 0 4px;border-radius:var(--radius-sm);overflow:hidden;border:1px solid rgba(122,168,255,.22)}
.code-wrap .api-code{margin:0;border-radius:0;border:none}
.code-bar{display:flex;align-items:center;justify-content:space-between;background:#122038;padding:7px 14px}
.code-lang{font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:11px;color:#6d80a3;letter-spacing:.6px;text-transform:uppercase}
.code-copy{border:1px solid rgba(122,168,255,.28);background:transparent;color:#e8eefb;border-radius:6px;padding:3px 10px;font-size:11.5px;font-family:inherit;cursor:pointer;transition:all .15s}
.code-copy:hover{background:rgba(61,250,160,.12);border-color:rgba(61,250,160,.38);color:#3dfaa0}
.secret-warn{background:var(--primary-soft);color:var(--primary-dark);border-radius:var(--radius-sm);padding:10px 14px;font-size:13px;margin-bottom:14px}
.secret-row{display:flex;gap:8px;align-items:center;margin-top:6px}
.secret-row input{flex:1;font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:12.5px;background:var(--bg-soft)}
.secret-row .btn{flex:none}
.chip-caret{color:var(--muted);font-size:11px}
.user-dropdown{position:absolute;right:0;top:calc(100% + 8px);min-width:160px;background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-dropdown);padding:6px;z-index:20;animation:modalUp .16s cubic-bezier(.2,.8,.3,1)}
.user-dropdown button{display:block;width:100%;text-align:left;padding:9px 12px;border:none;background:none;border-radius:8px;font-size:13.5px;font-family:inherit;color:var(--text);cursor:pointer;transition:background .12s}
.user-dropdown button:hover{background:var(--bg-soft)}
.user-dropdown button.danger{color:var(--danger)}
.user-dropdown button.danger:hover{background:var(--danger-soft)}
/* 语言切换器：被 xsel 美化前后都要能用，尺寸从紧 */
.lang-switch{display:inline-flex}
.lang-switch select{padding:5px 9px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-family:inherit;font-size:12.5px}
.lang-switch .xsel-btn{min-width:0;padding:5px 9px;gap:6px;font-size:12.5px}
.lang-switch .xsel-panel{left:auto;right:0}
.auth-tools{position:absolute;top:18px;right:22px;display:flex;align-items:center;gap:8px;z-index:2}
.auth-tools .theme-toggle{width:36px;height:36px}
/* 分享密码门：左上品牌（logo + 站点名）与底部版权行 */
.auth-brand{position:absolute;top:16px;left:22px;display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:15px;letter-spacing:-.2px;color:var(--text);text-decoration:none}
.auth-brand:hover{text-decoration:none;color:var(--text)}
.auth-brand img{width:26px;height:26px;border-radius:6px;display:block}
/* 文档流脚注：短屏贴底、长表单随内容下移，避免 absolute 叠在卡片上 */
.auth-foot{flex:none;width:100%;display:flex;flex-wrap:wrap;justify-content:center;gap:8px 16px;font-size:12px;color:var(--muted);padding:12px 16px calc(16px + env(safe-area-inset-bottom,0px));box-sizing:border-box;text-align:center}
.auth-foot a{color:var(--muted);text-decoration:none}
.auth-foot a:hover{color:var(--text);text-decoration:none}
/* 后台页面公共 footer：内容不足一屏时钉在视口底部，超出时随内容下移。
   min-width:0：flex 子项默认 min-width:auto，宽表/长标题会按内容最小宽度撑开整页横向滚动。
   不在这里写 max-width：会盖过 .container 的 1680px，内容列与 .topnav 错开。宽表由 .panel 横向滚动。 */
body:has(.admin-foot){min-height:100vh;display:flex;flex-direction:column;max-width:100%;overflow-x:hidden}
body:has(.admin-foot) main.container{flex:1 0 auto;width:100%;min-width:0}
.admin-foot{display:flex;justify-content:center;gap:16px;margin:40px 0 24px;margin-top:auto;padding-top:24px;font-size:12px;color:var(--muted);max-width:100%;flex-wrap:wrap}
.admin-foot a{color:var(--muted);text-decoration:none}
.admin-foot a:hover{color:var(--text);text-decoration:none}
.btn-link{background:none;border:none;color:var(--primary);cursor:pointer;font-size:13px;padding:0}
.llm-model-pop{max-height:200px;overflow:auto;margin-top:6px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--panel);box-shadow:var(--shadow-dropdown)}
.llm-model-pop button{display:block;width:100%;text-align:left;background:none;border:0;padding:8px 12px;cursor:pointer;color:var(--text);font-size:13px}
.llm-model-pop button:hover{background:var(--table-hover)}
.btn-link:hover{color:var(--primary-dark)}

/* container：与 .topnav 同一内容列（1680px，左右内边距 32px） */
.container{max-width:min(1680px, calc(100vw - 48px));margin:32px auto;padding:0 32px}
.container.wide{max-width:min(1680px, calc(100vw - 48px))}
.container.docs-wrap{max-width:min(1680px, calc(100vw - 48px))}
.container.doc-wrap{max-width:min(1680px, calc(100vw - 48px))}
/* 控制台内容区小一号：继承字 15→14，已写死的字号各减 1px；顶栏不受影响；.page-head 标题保持原尺度 */
main.container{font-size:14px}
main.container .page-head{font-size:15px}
/* 仪表盘裸 h1 与 .page-head h1 同尺度（15px×2em），不随内容区缩小 */
main.container > h1{font-size:30px;font-weight:800;letter-spacing:-.02em}
main.container .panel-head h2{font-size:16px}
main.container .stat-num{font-size:30px}
main.container .stat-label{font-size:12px}
main.container .table th{font-size:11px}
main.container .btn{font-size:13px}
main.container .btn-sm{font-size:12px}
main.container .tag{font-size:11px}
main.container .mono{font-size:11px}
main.container .search-bar input,
main.container .filter-bar select,
main.container .filter-bar .xsel-btn{font-size:13px}
main.container .xsel-opt{font-size:12px}
main.container .pager .muted{font-size:12px}
main.container .pager .pager-size,
main.container .pager .xsel-btn{font-size:11.5px}
.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}
/* 页头左侧：标题 + 项目/分类下拉同排 */
.head-title{display:flex;align-items:center;gap:18px}
.head-meta{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
/* 控制台页标题统一仪表盘尺度（裸 h1 默认 2em≈30px），不用营销页大字号 */
.page-head h1{margin:0;font-size:2em;font-weight:800;letter-spacing:-.02em}
/* 窄屏编辑/预览切换；桌面隐藏 */
.edit-pane-tabs{display:none;gap:0;margin:0 0 12px;padding:3px;background:var(--bg-soft);border:1px solid var(--border);border-radius:10px}
.edit-pane-tab{flex:1;padding:9px 12px;border:0;border-radius:8px;background:transparent;color:var(--muted);font:inherit;font-size:13.5px;font-weight:550;cursor:pointer}
.edit-pane-tab.active{background:var(--panel);color:var(--text);box-shadow:var(--shadow-sm)}
.edit-grid.is-preview .edit-left,
.edit-grid.is-write .edit-right{display:none}

/* buttons */
.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 20px;border:1px solid var(--border-strong);background:transparent;color:var(--text);border-radius:var(--radius-sm);cursor:pointer;font-size:14px;font-weight:600;font-family:inherit;line-height:normal;transition:all .18s;box-shadow:none}
.btn:hover{border-color:var(--primary);color:var(--primary);background:transparent;text-decoration:none}
.btn:disabled,.btn[disabled]{opacity:.65;cursor:not-allowed;pointer-events:none;filter:none}
.btn-primary{background:var(--btn-primary-bg);border-color:transparent;color:var(--btn-primary-fg);font-weight:700;box-shadow:var(--btn-primary-glow)}
/* hover 必须重新声明 background：否则被 .btn:hover 的透明底夺走主色 */
.btn-primary:hover{background:var(--btn-primary-bg);color:var(--btn-primary-fg);filter:brightness(1.06);transform:translateY(-1px);box-shadow:var(--btn-primary-glow)}
.btn-danger{background:transparent;border-color:var(--danger-border-btn);color:var(--danger);box-shadow:none}
.btn-danger:hover{background:var(--danger);border-color:var(--danger);color:#fff}
/* 危险确认按钮：破坏性操作（删除/重置）二次确认弹窗的红色实心主按钮 */
.btn-danger-solid{background:var(--danger)!important;border-color:transparent!important;color:#fff!important;box-shadow:0 4px 14px rgba(229,72,77,.28)}
.btn-danger-solid:hover{background:#ef5f64!important;filter:none;box-shadow:0 6px 18px rgba(229,72,77,.34)}
.btn-sm{padding:4px 12px;font-size:13px;border-radius:6px}
.btn-block{width:100%;justify-content:center}

/* panel / card */
.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:48px;overflow-x:auto}
.panel-head{display:flex;align-items:center;justify-content:space-between;padding:20px 26px;border-bottom:1px solid var(--border)}
.panel-head h2{margin:0;font-size:17px;font-weight:800}

/* stat */
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px}
.stat-card{position:relative;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:26px 24px;box-shadow:var(--shadow-sm);overflow:hidden;transition:box-shadow .2s,transform .2s}
.stat-card:hover{box-shadow:var(--shadow-lg);transform:translateY(-1px)}
.stat-card::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:var(--grad)}
button.stat-card{display:block;width:100%;text-align:left;font:inherit;color:inherit;cursor:pointer;-webkit-appearance:none;appearance:none}
button.stat-card:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
a.stat-card{display:block;text-decoration:none;color:inherit}
a.stat-card:hover{text-decoration:none;color:inherit}
a.stat-card:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
/* 主：大数字；次行：项目数标签 + 关联旁注同一行对齐 */
.stat-card-split{display:block}
.stat-split-meta{display:flex;align-items:center;flex-wrap:nowrap;gap:8px;margin-top:2px;min-width:0}
.stat-card-split .stat-label{margin-top:0;flex:none}
.stat-card-split .stat-split-side{display:inline-flex;align-items:baseline;gap:5px;padding:3px 8px;border-radius:999px;background:var(--bg-soft);border:1px solid var(--border);color:var(--muted);line-height:1.2;flex:none;white-space:nowrap}
.stat-side-label{font-size:11px;font-weight:500}
.stat-side-num{font-size:13px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}
@media(max-width:900px){.stat-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.stat-grid{grid-template-columns:1fr}}
.stat-num{font-size:34px;font-weight:700;letter-spacing:-.03em;background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.stat-label{color:var(--muted);font-size:13px;margin-top:2px}

/* table：单元格不换行，按内容撑开列宽；过宽时由 .panel 横向滚动 */
.table{width:100%;min-width:max-content;border-collapse:collapse}
.table th,.table td{padding:12px 14px;text-align:left;border-bottom:1px solid var(--border);vertical-align:middle;white-space:nowrap}
.table th{color:var(--muted);font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.04em;background:var(--bg-soft)}
.table tbody tr{transition:background .12s}
.table tbody tr:hover{background:var(--table-hover)}
.table tr:last-child td{border-bottom:none}
.col-actions{white-space:nowrap;text-align:right}
.col-actions .btn{margin-left:6px}
.row-menu{display:inline-block;text-align:left}
.row-menu-pop{position:fixed;z-index:80;min-width:148px;padding:4px;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-dropdown)}
.row-menu-pop[hidden]{display:none}
.row-menu-pop button{display:block;width:100%;text-align:left;padding:8px 10px;border:none;background:none;border-radius:8px;font:inherit;font-size:13px;color:var(--text);cursor:pointer}
.row-menu-pop button:hover{background:var(--bg-soft)}
.row-menu-pop button.danger{color:var(--danger)}
.row-menu-pop button.danger:hover{background:var(--danger-soft)}
.table td.cell-muted{color:var(--muted)}
.table td.empty,.table .empty-row td{white-space:normal;text-align:center;color:var(--faint);padding:40px 16px}
/* API 文档说明表仍需换行 */
.api-doc .table{min-width:0;width:100%}
.api-doc .table th,.api-doc .table td{white-space:normal}
.empty{text-align:center;color:var(--faint);padding:40px}
.cell-input{width:100%;padding:5px 10px;border:1px solid var(--border);border-radius:6px;font-family:inherit;font-size:13px;transition:border-color .15s;background:var(--input-bg);color:var(--text)}
.cell-input:focus{outline:none;border-color:var(--primary)}
.table select{padding:5px 8px;border:1px solid var(--border);border-radius:6px;background:var(--input-bg);color:var(--text);font-family:inherit;font-size:13px}

/* search */
.search-bar{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
.search-bar input{flex:1;padding:9px 14px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:14px;transition:all .15s;background:var(--input-bg);color:var(--text)}
.search-bar input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
/* 筛选栏关键词框固定短宽，不随行拉满（文档/项目/密钥等） */
.search-bar.filter-bar input{flex:0 1 220px;width:220px;max-width:100%}
/* 文档列表筛选栏：项目/分类下拉 */
.filter-bar select{padding:9px 12px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:14px;background:var(--panel);color:var(--text);max-width:180px}
.filter-bar select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
/* 页头操作区：项目/分类下拉 + 按钮同排 */
.head-side{display:flex;align-items:center;gap:10px}
.meta-select{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);font-weight:500;flex:none}
.meta-select select{padding:8px 10px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:13px;background:var(--panel);color:var(--text);min-width:110px;cursor:pointer;transition:all .15s}
.meta-select select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.meta-select input{padding:8px 10px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:13px;background:var(--panel);color:var(--text);width:120px;transition:all .15s}
.meta-select input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.pager{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px;margin:20px 0}
.pager .pager-pages{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pager .pager-pages .btn{min-width:36px;padding:6px 10px}
.pager .muted{font-size:13px;line-height:1.4}
.pager .pager-size{padding:2px 8px;border:1px solid var(--border-strong);border-radius:6px;font-family:inherit;font-size:12.5px;line-height:1.4;background:var(--panel);color:var(--text);cursor:pointer;height:auto}
.pager .pager-size:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
/* skinSelect 后可见的是 .xsel-btn，需单独压矮，与旁侧页码文案对齐 */
.pager .xsel{min-width:0}
.pager .xsel-btn{padding:2px 8px;font-size:12.5px;line-height:1.4;min-width:0;border-radius:6px}

/* 自定义下拉（UI.skinSelect）：原生 select 隐藏但保留在表单内，叠按钮触发器 + 自绘面板 */
.xsel{position:relative;display:inline-flex}
.xsel select{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none;margin:0}
.xsel-btn{display:inline-flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-width:110px;padding:8px 10px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-family:inherit;font-size:13px;cursor:pointer;transition:all .15s;text-align:left}
.xsel-btn:hover{border-color:var(--primary)}
.xsel-btn:focus{outline:none}
.xsel-btn.open{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.xsel-btn.disabled{opacity:.5;cursor:not-allowed}
.xsel-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.xsel-caret{color:var(--muted);font-size:11px;transition:transform .15s;flex:none}
.xsel-btn.open .xsel-caret{transform:rotate(180deg)}
.xsel-panel{position:absolute;top:calc(100% + 4px);left:0;min-width:100%;max-height:240px;overflow:auto;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-xsel);padding:4px;z-index:60;animation:xsIn .12s ease-out}
@keyframes xsIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.xsel-opt{padding:7px 12px;border-radius:7px;font-size:13px;color:var(--text);cursor:pointer;white-space:nowrap;display:flex;align-items:center;justify-content:space-between;gap:16px}
.xsel-opt:hover{background:var(--primary-soft);color:var(--primary)}
.xsel-opt.sel{color:var(--primary);font-weight:600}
.xsel-opt.sel::after{content:'✓';font-size:12px}
/* 上下文尺寸适配：继承原 select 在各区域的规格 */
.filter-bar .xsel{max-width:180px}
.filter-bar .xsel-btn{font-size:14px;padding:9px 12px}
.share-body .xsel{display:block;width:100%;margin-top:6px}
.share-body .xsel-btn{font-size:14px;padding:8px 12px;min-width:0}

/* auth：登录/注册与密码门共用底盘；登录/注册用 :not(.share-gate) 对齐 gate 层次，不覆盖 gate 自身规则 */
.auth-body{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;min-height:100vh;min-height:100dvh;background:var(--bg-soft);background-image:var(--auth-fx);box-sizing:border-box;padding:24px 16px 0}
.auth-card{background:var(--panel);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow-auth);padding:40px;width:380px;max-width:100%;box-sizing:border-box;margin-top:auto;margin-bottom:auto}
.auth-card:not(.share-gate){position:relative;overflow:hidden;border-radius:20px;box-shadow:var(--shadow-gate);padding:36px 34px 32px;animation:shareGateIn .35s cubic-bezier(.2,.8,.3,1)}
.auth-card:not(.share-gate)::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:var(--grad)}
.auth-title{text-align:center;margin:0;font-size:26px;font-weight:400;letter-spacing:-.03em;background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.auth-title .auth-title-brand{font-weight:700}
/* 认证页标题内联 logo：inline 排版不破坏渐变文字 */
.auth-title .auth-logo{width:34px;height:34px;border-radius:8px;margin-right:10px;vertical-align:-9px}
.auth-sub{text-align:center;color:var(--muted);margin:8px 0 0;font-size:13.5px;line-height:1.55}
/* alert 常驻 DOM（hidden 时不占位），表单统一顶距；不作用于 .share-gate（其 .auth-sub 已自带底距） */
.auth-card:not(.share-gate) form{margin-top:24px}
.auth-card:not(.share-gate)>.alert:not([hidden])+form{margin-top:0}
.auth-card:not(.share-gate)>.auth-title+.alert:not([hidden]),
.auth-card:not(.share-gate)>.auth-sub+.alert:not([hidden]){margin-top:16px}
.auth-card label{display:block;margin-bottom:16px;font-weight:500;color:var(--text);font-size:13px}
.auth-card .auth-field{display:block;margin-bottom:16px}
.auth-card .auth-field>input,.auth-card .auth-field>.captcha-row{margin-top:0}
.auth-card input:not([type=checkbox]):not([type=radio]){width:100%;margin-top:6px;padding:11px 14px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-size:15px;font-family:inherit;transition:border-color .15s,box-shadow .15s;background:var(--input-bg);color:var(--text)}
.auth-card input:not([type=checkbox]):not([type=radio]):focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.auth-card input:not([type=checkbox]):not([type=radio])::placeholder{color:var(--faint)}
.auth-card .btn-block{margin-top:8px;padding:12px;font-size:15px;border-radius:10px}
/* TOTP 步骤：替代模板 inline style，明暗主题一致 */
.auth-totp-hint{font-size:13px;margin:0 0 10px;color:var(--muted);line-height:1.55;text-align:center}
.auth-totp-qr{width:180px;height:180px;display:block;margin:0 auto 10px;border-radius:12px;background:var(--bg-soft)}
.auth-totp-secret{font-size:12px;word-break:break-all;text-align:center;margin:0 0 10px;color:var(--muted)}
/* 邮箱验证码弹窗：独立于分栏表单 captcha 壳，输入与图片等高对齐 */
#mailCaptchaModal .captcha-row{display:flex;align-items:center;gap:8px;margin-top:0;border:none;border-radius:0;background:transparent;box-shadow:none;overflow:visible}
#mailCaptchaModal input[type=text]{flex:1;min-width:0;margin:0;height:40px;padding:0 12px;box-sizing:border-box;font-size:14px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--input-bg);box-shadow:none}
#mailCaptchaModal input[type=text]:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
#mailCaptchaModal .captcha-img{width:120px;height:40px;flex:none;aspect-ratio:auto;border:1px solid var(--border-strong);border-radius:var(--radius-sm);border-left:1px solid var(--border-strong)}

/* 登录/注册分栏（无顶栏）：左品牌 + 右表单；密码门仍走居中卡片 */
.auth-body.auth-split{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);align-items:stretch;padding:0;background:var(--panel);background-image:none;overflow-x:hidden}
.auth-brand-pane{position:relative;display:flex;flex-direction:column;padding:40px 48px 48px;background:var(--bg-soft);background-image:var(--auth-fx);overflow:hidden;min-height:100vh;min-height:100dvh;box-sizing:border-box}
.auth-brand-pane::before{content:"";position:absolute;inset:-20% -10% auto auto;width:70%;height:70%;border-radius:50%;background:radial-gradient(circle,var(--primary-soft),transparent 68%);pointer-events:none}
.auth-brand-pane::after{content:"";position:absolute;inset:auto auto -30% -20%;width:80%;height:80%;border-radius:50%;background:radial-gradient(circle,rgba(13,148,136,.08),transparent 70%);pointer-events:none}
.auth-brand-home{position:relative;z-index:1;display:inline-flex;align-items:center;gap:10px;font-weight:700;font-size:16px;letter-spacing:-.02em;color:var(--text);text-decoration:none;width:fit-content}
.auth-brand-home:hover{color:var(--text);text-decoration:none}
.auth-brand-home-img{width:36px;height:36px;border-radius:9px;object-fit:cover;display:block}
.auth-brand-copy{position:relative;z-index:1;margin-top:min(18vh,140px);max-width:min(100%,480px)}
.auth-brand-eyebrow{margin:0 0 14px;font-size:12.5px;font-weight:600;letter-spacing:.04em;color:var(--primary)}
.auth-brand-pills{list-style:none;margin:0 0 18px;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.auth-brand-pills li{margin:0;padding:6px 12px;border-radius:999px;font-size:12.5px;font-weight:600;letter-spacing:.02em;color:var(--primary);background:var(--primary-soft);border:1px solid transparent;line-height:1.2}
.auth-brand-title{margin:0;font-size:clamp(26px,2.8vw,34px);font-weight:800;letter-spacing:-.04em;line-height:1.3;color:var(--text);word-break:keep-all;line-break:strict;overflow-wrap:normal}
.auth-brand-title .auth-brand-line{display:block}
.auth-brand-title em{font-style:normal;margin-top:.12em;background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.auth-brand-lead{margin:16px 0 0;font-size:14px;line-height:1.55;color:var(--muted);max-width:36em}
.auth-brand-art{position:relative;z-index:1;margin-top:auto;height:200px;width:min(100%,360px)}
.auth-brand-folder{position:absolute;left:8%;bottom:8%;width:72%;height:58%;border-radius:18px 18px 14px 14px;background:var(--grad);box-shadow:var(--shadow-lg);opacity:.92}
.auth-brand-folder::after{content:"";position:absolute;left:14%;right:14%;top:18%;height:10px;border-radius:6px;background:rgba(255,255,255,.28)}
.auth-brand-chip{position:absolute;width:52px;height:52px;border-radius:14px;border:1px solid var(--border);background:var(--panel);box-shadow:var(--shadow-pop)}
.auth-brand-chip-a{right:12%;top:18%;background:var(--primary-soft);border-color:transparent}
.auth-brand-chip-b{right:28%;top:42%;width:44px;height:44px;border-radius:12px}
.auth-brand-chip-c{left:42%;top:8%;width:40px;height:40px;border-radius:11px;background:var(--surface-2)}
.auth-form-pane{position:relative;display:flex;flex-direction:column;align-items:center;min-height:100vh;min-height:100dvh;padding:72px 56px 24px;box-sizing:border-box;background:var(--panel);overflow:auto}
.auth-split .auth-tools{position:absolute;top:20px;right:24px;display:flex;align-items:center;gap:8px;z-index:2}
.auth-mobile-brand{display:none;align-items:center;gap:8px;font-weight:700;font-size:15px;color:var(--text);text-decoration:none;margin:0 0 8px}
.auth-mobile-brand:hover{color:var(--text);text-decoration:none}
.auth-mobile-brand img{width:28px;height:28px;border-radius:7px;display:block}
/* 对齐阿里云/Qoder SSO 账密表单内容区宽度（约 350px） */
.auth-split .auth-card{width:100%;max-width:350px;margin:auto}
.auth-split .auth-foot{width:100%;max-width:350px;margin-top:0;padding:16px 0 calc(12px + env(safe-area-inset-bottom,0px))}
/* Qoder 风格：分段 Tab + 大圆角输入 / 主按钮 */
.auth-tabs{
  display:flex;align-items:stretch;gap:0;margin:0 0 20px;padding:4px;
  border-radius:999px;background:var(--bg-soft);border:1px solid var(--border);
}
.auth-tab{
  flex:1;height:36px;margin:0;padding:0 12px;border:none;border-radius:999px;
  background:transparent;color:var(--muted);font:inherit;font-size:13.5px;font-weight:600;
  cursor:pointer;transition:background .15s,color .15s,box-shadow .15s
}
.auth-tab.is-active,.auth-tab[aria-selected="true"]{
  background:var(--panel);color:var(--text);box-shadow:0 1px 4px rgba(15,23,42,.08)
}
.auth-tab:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.auth-pane{display:block}
.auth-card .auth-field>input,
.auth-card .auth-field>.captcha-row{
  background:var(--bg-soft)
}
/* 验证码行：整行一颗胶囊，内层 input/图去掉圆角边框，避免「胶囊套胶囊」 */
.auth-card .captcha-row{
  display:flex;align-items:stretch;gap:0;margin-top:0;
  border:1px solid var(--border-strong);border-radius:999px;overflow:hidden
}
.auth-card .captcha-row:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.auth-card .captcha-row input:not([type=checkbox]):not([type=radio]){
  flex:1;min-width:0;width:auto;height:48px;margin:0;padding:0 20px;box-sizing:border-box;
  border:none;border-radius:0;box-shadow:none;background:transparent;outline:none
}
.auth-card .captcha-row input:not([type=checkbox]):not([type=radio]):focus{
  border:none;box-shadow:none;outline:none
}
.auth-card .captcha-row .captcha-img{
  flex:none;width:120px;height:48px;aspect-ratio:auto;align-self:stretch;
  border:none;border-left:1px solid var(--border);border-radius:0;box-shadow:none;
  object-fit:cover;cursor:pointer;background:var(--bg-soft)
}
.auth-card .captcha-row .captcha-img:hover{box-shadow:none}
.auth-card .captcha-row .btn,
.auth-card .captcha-row .btn-sm{
  flex:none;align-self:stretch;height:auto;min-height:48px;margin:0;padding:0 14px;
  border:none;border-left:1px solid var(--border);border-radius:0;background:transparent;
  color:var(--primary);font-weight:600;box-shadow:none;white-space:nowrap
}
.auth-card .auth-submit.btn-block{
  height:48px;margin-top:12px;padding:0 20px;border-radius:999px;font-size:16px;font-weight:700
}
.auth-pwd-wrap{position:relative;display:block}
.auth-pwd-wrap>input{padding-right:48px}
.auth-pwd-toggle{
  position:absolute;right:10px;top:50%;transform:translateY(-50%);
  width:32px;height:32px;margin:0;padding:0;border:none;border-radius:8px;
  background:transparent;color:var(--muted);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center
}
.auth-pwd-toggle:hover{color:var(--text);background:var(--bg-soft)}
.auth-pwd-toggle:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.auth-pwd-toggle .auth-pwd-ico{display:none;flex:none;overflow:visible}
.auth-pwd-toggle .auth-pwd-ico-off{display:block}          /* 默认密文：划眼 */
.auth-pwd-toggle.is-plain .auth-pwd-ico-off{display:none}
.auth-pwd-toggle.is-plain .auth-pwd-ico-on{display:block}  /* 明文：睁眼 */
/* 盖过 .auth-card label{display:block}，否则 gap 不生效、勾选与文字贴死 */
.auth-card label.auth-agree{
  display:flex;align-items:center;gap:6px;
  margin:2px 0 16px;font-size:12.5px;line-height:1.55;font-weight:400;
  color:var(--muted);cursor:pointer
}
.auth-card .auth-agree input[type=checkbox]{
  flex:none;width:14px;height:14px;margin:0;padding:0;
  border:none;border-radius:0;box-shadow:none;background:transparent;
  accent-color:var(--primary)
}
.auth-agree-text{flex:1;min-width:0}
.auth-agree a{color:var(--primary);text-decoration:none;white-space:nowrap}
.auth-agree a:hover{text-decoration:underline}
.auth-recover{display:flex;justify-content:center;align-items:center;gap:10px;margin:12px 0 0;font-size:13px}
.auth-recover a{color:var(--muted);text-decoration:none}
.auth-recover a:hover{color:var(--primary);text-decoration:none}
.auth-recover-sep{color:var(--faint)}
/* 协议/隐私/找回：单栏居中，无左侧品牌图 */
.auth-body.auth-legal-page,
.auth-body.auth-solo-page{
  display:flex;flex-direction:column;align-items:center;
  min-height:100vh;min-height:100dvh;padding:24px 16px 0;box-sizing:border-box;
  background:var(--bg-soft);background-image:var(--auth-fx)
}
.auth-legal-page .auth-tools,
.auth-solo-page .auth-tools{position:absolute;top:18px;right:22px;z-index:2}
.auth-legal-wrap,
.auth-solo-wrap{
  width:100%;max-width:720px;margin:auto;padding:48px 0 24px;box-sizing:border-box;
  display:flex;flex-direction:column;align-items:stretch
}
.auth-solo-wrap{max-width:420px}
.auth-solo-page .auth-card{
  width:100%;max-width:none;margin:0;box-sizing:border-box
}
.auth-solo-page .auth-title{
  text-align:center;-webkit-text-fill-color:unset;background:none;color:var(--text);
  font-size:24px;font-weight:800;letter-spacing:-.03em
}
.auth-solo-page .auth-sub,.auth-solo-page .auth-alt{text-align:center}
.auth-solo-page .auth-foot{width:100%;max-width:none;margin-top:8px;padding:12px 0 calc(16px + env(safe-area-inset-bottom,0px))}
.auth-solo-page .auth-card .auth-field>input,
.auth-solo-page .auth-card .auth-pwd-wrap>input{
  margin-top:0;height:48px;padding:0 20px;box-sizing:border-box;
  border-radius:999px;background:var(--bg-soft)
}
.auth-solo-page .auth-card .captcha-row{
  display:flex;align-items:stretch;gap:0;margin-top:0;
  border:1px solid var(--border-strong);border-radius:999px;background:var(--bg-soft);overflow:hidden
}
.auth-solo-page .auth-card .captcha-row:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.auth-solo-page .auth-card .captcha-row input:not([type=checkbox]):not([type=radio]){
  flex:1;min-width:0;width:auto;height:48px;margin:0;padding:0 20px;box-sizing:border-box;
  border:none;border-radius:0;box-shadow:none;background:transparent;outline:none
}
.auth-solo-page .auth-card .captcha-row input:not([type=checkbox]):not([type=radio]):focus{
  border:none;box-shadow:none;outline:none
}
.auth-solo-page .auth-card .captcha-row .captcha-img{
  flex:none;width:120px;height:48px;aspect-ratio:auto;align-self:stretch;
  border:none;border-left:1px solid var(--border);border-radius:0;box-shadow:none;
  object-fit:cover;background:var(--bg-soft)
}
.auth-solo-page .auth-card .captcha-row .captcha-img:hover{box-shadow:none}
.auth-solo-page .auth-card .btn-block{
  display:flex;align-items:center;justify-content:center;
  height:48px;margin-top:12px;padding:0 20px;border-radius:999px;font-size:16px;font-weight:700
}
.auth-legal-brand{
  display:inline-flex;align-items:center;gap:8px;align-self:center;
  margin:0 0 20px;font-weight:700;font-size:15px;color:var(--text);text-decoration:none
}
.auth-legal-brand:hover{color:var(--text);text-decoration:none}
.auth-legal-brand img{width:28px;height:28px;border-radius:7px;display:block}
.auth-legal-card{
  width:100%;max-width:none;margin:0;box-sizing:border-box;
  padding:32px 36px 28px
}
.auth-legal-card .auth-title{
  text-align:left;-webkit-text-fill-color:unset;background:none;color:var(--text);
  font-size:26px;font-weight:800;letter-spacing:-.03em
}
.auth-legal-card .auth-alt{text-align:left;margin-top:20px}
.auth-legal-page .auth-foot{width:100%;max-width:none;margin-top:8px;padding:12px 0 calc(16px + env(safe-area-inset-bottom,0px))}
.auth-legal-meta{margin:6px 0 0;font-size:12.5px;color:var(--faint)}
.auth-legal-body{margin-top:18px;font-size:14px;line-height:1.75;color:var(--muted);max-height:none;overflow:visible;padding-right:0}
.auth-legal-body .auth-legal-lead{color:var(--text);font-weight:500}
.auth-legal-body h2{margin:18px 0 8px;font-size:14.5px;font-weight:600;color:var(--text);line-height:1.4}
.auth-legal-body h2:first-of-type{margin-top:14px}
.auth-legal-body p{margin:0 0 10px}
@media (max-width:640px){
  .auth-legal-card{padding:24px 18px 20px}
  .auth-legal-wrap{padding-top:56px}
}
.alert-ok{background:var(--ok-soft,rgba(22,163,74,.12));color:var(--ok,#16a34a);border:1px solid var(--ok-border,rgba(22,163,74,.28));padding:10px 12px;border-radius:10px;font-size:13px;margin:0 0 14px}
.auth-oauth{margin-top:22px}
.auth-oauth-divider{display:flex;align-items:center;gap:12px;margin:0 0 16px;color:var(--faint);font-size:12px}
.auth-oauth-divider::before,.auth-oauth-divider::after{content:"";flex:1;height:1px;background:var(--border)}
.auth-oauth-divider span{flex:none}
.auth-oauth-icons{display:flex;align-items:center;justify-content:center;gap:20px}
.auth-oauth-icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;border-radius:50%;
  border:1px solid var(--border-strong);background:var(--surface);
  color:var(--text);text-decoration:none;
  transition:border-color .15s,box-shadow .15s,transform .15s
}
.auth-oauth-icon:hover{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);text-decoration:none;color:var(--text);transform:translateY(-1px)}
.auth-oauth-icon:focus-visible{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.auth-oauth-icon svg{display:block;flex:none}

/* 仅桌面：右栏对齐参考稿（同宽、左对齐、48px 等高输入、验证码并入一行） */
@media (min-width:901px){
  .auth-split .auth-card{border:none;box-shadow:none;background:transparent;border-radius:0;padding:0;animation:none;overflow:visible}
  .auth-split .auth-card::before{display:none}
  .auth-split .auth-title{text-align:left;-webkit-text-fill-color:unset;background:none;color:var(--text);font-size:30px;font-weight:400;letter-spacing:-.04em;line-height:1.3}
  .auth-split .auth-title .auth-title-brand{font-weight:700;-webkit-text-fill-color:unset;color:inherit}
  .auth-split .auth-sub{text-align:left;margin-top:10px;margin-bottom:0;font-size:14px;line-height:1.5}
  .auth-split .auth-alt{text-align:center;margin-top:16px}
  .auth-split .auth-card:not(.share-gate) form{margin-top:28px}
  .auth-split .auth-tabs{margin-bottom:22px}
  .auth-split .auth-card .auth-field>input{background:var(--bg-soft)}
  .auth-split .auth-card:not(.share-gate)>.alert:not([hidden])+form{margin-top:0}
  .auth-split .auth-card .auth-field{margin-bottom:18px}
  .auth-split .auth-card .auth-field>input,
  .auth-split .auth-card .auth-pwd-wrap>input{
    margin-top:0;height:48px;padding:0 20px;box-sizing:border-box;
    border-radius:999px;border:1px solid var(--border-strong);background:var(--input-bg);font-size:15px
  }
  .auth-split .auth-card .auth-field>input:focus,
  .auth-split .auth-card .auth-pwd-wrap>input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
  /* 仅表单卡内验证码行；勿选中 #mailCaptchaModal，避免弹层串用整行边框壳 */
  .auth-split .auth-card .captcha-row{
    display:flex;align-items:stretch;gap:0;margin-top:8px;
    border:1px solid var(--border-strong);border-radius:999px;background:var(--input-bg);overflow:hidden
  }
  .auth-split .auth-card .captcha-row:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
  .auth-split .auth-card .captcha-row input:not([type=checkbox]):not([type=radio]){
    flex:1;min-width:0;width:auto;height:48px;margin:0;padding:0 20px;box-sizing:border-box;
    border:none;border-radius:0;box-shadow:none;background:transparent;outline:none
  }
  .auth-split .auth-card .captcha-row input:not([type=checkbox]):not([type=radio]):focus{
    border:none;box-shadow:none;outline:none
  }
  .auth-split .auth-card .captcha-row .captcha-img{
    flex:none;width:120px;height:48px;aspect-ratio:auto;align-self:stretch;
    border:none;border-left:1px solid var(--border);border-radius:0;box-shadow:none;
    object-fit:cover;background:var(--bg-soft)
  }
  .auth-split .auth-card .captcha-row .captcha-img:hover{box-shadow:none}
  .auth-split .auth-card .captcha-row .btn,
  .auth-split .auth-card .captcha-row .btn-sm{
    flex:none;align-self:stretch;height:auto;min-height:48px;margin:0;padding:0 14px;
    border:none;border-left:1px solid var(--border);border-radius:0;background:transparent;
    color:var(--primary);font-weight:600;box-shadow:none;white-space:nowrap
  }
  .auth-split .auth-card .captcha-row .btn:hover,
  .auth-split .auth-card .captcha-row .btn-sm:hover{background:var(--primary-soft);transform:none;filter:none}
  .auth-split .auth-card .btn-block{
    display:flex;align-items:center;justify-content:center;
    width:100%;height:48px;margin-top:8px;padding:0 20px;box-sizing:border-box;
    border-radius:999px;font-size:15px;font-weight:700;line-height:1
  }
}

/* 分享密码门：在 auth-card 上增强层次，不改动登录/注册主结构 */
.share-gate{position:relative;width:400px;max-width:calc(100% - 32px);padding:36px 34px 32px;border-radius:20px;box-shadow:var(--shadow-gate);overflow:hidden;animation:shareGateIn .35s cubic-bezier(.2,.8,.3,1)}
.share-gate::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:var(--grad)}
.share-gate-icon{width:56px;height:56px;margin:0 auto 18px;border-radius:16px;display:grid;place-items:center;background:var(--primary-soft);color:var(--primary);box-shadow:inset 0 0 0 1px var(--border)}
.share-gate-title{text-align:center;margin:0;font-size:20px;font-weight:700;letter-spacing:-.02em;line-height:1.45;color:var(--text)}
.share-gate .auth-sub{margin:10px 0 26px;font-size:13.5px}
.share-gate .btn-block{margin-top:4px;padding:12px;font-size:15px;border-radius:10px}
.share-apply-divider{display:flex;align-items:center;gap:12px;margin:22px 0 16px;color:var(--faint);font-size:12px}
.share-apply-divider::before,.share-apply-divider::after{content:"";flex:1;height:1px;background:var(--border)}
.share-apply-divider span{flex:none}
.alert-info{background:var(--primary-soft);color:var(--primary-dark);border:1px solid var(--info-border)}
@keyframes shareGateIn{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}

/* 编辑页：他人正在编辑提示条 */
.editing-banner{margin-bottom:14px;padding:8px 14px;background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-text);border-radius:var(--radius-sm);font-size:13px}
/* 注册方式单选 */
.reg-method{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--text);margin-bottom:10px;cursor:pointer}
.reg-method input[type=radio]{width:15px;height:15px;margin:0;accent-color:var(--primary);cursor:pointer}

.toolbar-hint{font-size:12px;color:var(--muted);margin-left:auto;padding-right:4px}
.md-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:5px 8px;border:1px solid var(--border-strong);border-bottom:none;border-radius:var(--radius-sm) var(--radius-sm) 0 0;background:var(--bg-soft);margin-top:12px}
.md-toolbar button{min-width:30px;height:28px;padding:0 8px;border:none;background:none;border-radius:6px;font-size:13px;font-family:inherit;color:var(--muted);cursor:pointer;transition:all .12s;line-height:1}
.md-toolbar button:hover{background:var(--primary-soft);color:var(--primary)}
.md-toolbar button:active{transform:scale(.94)}
.tb-sep{width:1px;height:16px;background:var(--border-strong);margin:0 6px;flex:none}
.md-toolbar + .editor{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}
/* Markdown 表格右键菜单（源码区） */
.md-table-menu{position:fixed;z-index:90;min-width:168px;padding:6px;background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-dropdown)}
.md-table-menu button{display:block;width:100%;text-align:left;padding:8px 12px;border:none;background:none;border-radius:8px;font-size:13px;font-family:inherit;color:var(--text);cursor:pointer}
.md-table-menu button:hover{background:var(--bg-soft)}
.md-table-menu button.danger{color:var(--danger)}
.md-table-menu button.danger:hover{background:var(--danger-soft)}
.md-preview-table th,.md-preview-table td{outline:none;min-width:2em}
.md-preview-table th:focus,.md-preview-table td:focus{box-shadow:inset 0 0 0 2px var(--primary-soft)}
/* 预览正文直接编辑（段落/标题/列表项） */
.edit-preview :is(p,h1,h2,h3,h4,h5,h6,li)[contenteditable="true"]{outline:none;min-width:1em;border-radius:4px;cursor:text;transition:box-shadow .12s}
.edit-preview :is(p,h1,h2,h3,h4,h5,h6,li)[contenteditable="true"]:hover{box-shadow:0 0 0 1px var(--border)}
.edit-preview :is(p,h1,h2,h3,h4,h5,h6,li)[contenteditable="true"]:focus{box-shadow:inset 0 0 0 2px var(--primary-soft)}
.badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:500;white-space:nowrap}
.field-error{border-color:var(--danger)!important;background:var(--field-error-bg)!important}
.field-error:focus{outline:none;border-color:var(--danger)!important;box-shadow:0 0 0 3px var(--danger-soft)!important}
.badge-on{background:var(--ok-bg);color:var(--ok-text)}
.badge-off{background:var(--danger-soft);color:var(--danger)}
.auth-alt{text-align:center;margin:18px 0 0;font-size:13px;color:var(--muted);line-height:1.5;font-weight:400}
.auth-alt a{color:var(--primary);font-weight:400;text-decoration:none}
.auth-alt a:hover{text-decoration:underline}
.auth-alt-switch{margin-top:10px;margin-bottom:0}
.auth-alt-switch+.auth-oauth{margin-top:18px}
.alert{padding:10px 14px;border-radius:var(--radius-sm);margin-bottom:16px;font-size:13px}
.alert-error{background:var(--danger-soft);color:var(--danger);border:1px solid var(--danger-border)}
.captcha-row{display:flex;gap:10px;align-items:stretch;margin-top:6px}
.captcha-row input{margin-top:0;flex:1;min-width:0}
.captcha-img{width:120px;height:auto;aspect-ratio:3/1;border:1px solid var(--border-strong);border-radius:var(--radius-sm);cursor:pointer;background:var(--bg-soft);object-fit:cover;transition:box-shadow .15s}
.captcha-img:hover{box-shadow:0 0 0 3px var(--primary-soft)}

/* forms */
.form-row{display:flex;gap:10px;padding:22px;flex-wrap:wrap;align-items:center}
.form-row input,.form-row select{padding:8px 12px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:14px;background:var(--input-bg);color:var(--text)}
.form-row input:focus,.form-row select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}

/* editor */
.edit-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:24px}
.edit-left,.edit-right{display:flex;flex-direction:column;min-height:60vh}
.input-title{padding:12px 16px;font-size:18px;font-weight:600;letter-spacing:-.01em;border:1px solid var(--border-strong);border-radius:var(--radius-sm);margin-bottom:12px;font-family:inherit;transition:all .15s;background:var(--input-bg);color:var(--text)}
.input-title:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.editor{flex:1;resize:vertical;padding:16px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:13.5px;line-height:1.7;background:var(--input-bg);color:var(--text);transition:all .15s}
.editor:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.preview-head{padding:9px 16px;background:var(--bg-soft);border:1px solid var(--border);border-bottom:none;border-radius:var(--radius-sm) var(--radius-sm) 0 0;color:var(--muted);font-weight:550;font-size:13px}
#preview.edit-preview{flex:1;background:var(--panel);border:1px solid var(--border);border-radius:0 0 var(--radius-sm) var(--radius-sm);padding:18px;overflow:auto}

/* share panel (弹窗内复用) */
.share-body{padding:22px}
.share-body label{display:block;margin-bottom:14px;font-weight:500;color:var(--text);font-size:13px}
.share-type-row{display:flex;gap:18px;margin:2px 0 12px}
.share-type-row .check{margin-bottom:0}
.share-body .pwd-row{display:flex;gap:8px;margin-top:6px;align-items:center}
.share-body .pwd-row input{flex:1;min-width:0;margin-top:0;height:40px;box-sizing:border-box}
.share-body .pwd-row .btn{flex:none;height:40px;padding-top:0;padding-bottom:0}
/* 只作用于表单控件，避免误伤 checkbox；number/textarea 同样要覆盖（项目描述、分类排序字段） */
.share-body input[type=text],.share-body input[type=password],.share-body input[type=number],.share-body input[type=email],.share-body input[type=tel],.share-body textarea,.share-body select{display:block;margin-top:6px;padding:8px 12px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);width:100%;font-family:inherit;font-size:14px;transition:all .15s;background:var(--panel);color:var(--text)}
.share-body textarea{resize:vertical;min-height:64px;line-height:1.6}
.share-body input[type=text]:focus,.share-body input[type=password]:focus,.share-body input[type=number]:focus,.share-body input[type=email]:focus,.share-body input[type=tel]:focus,.share-body textarea:focus,.share-body select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.share-body input::placeholder,.share-body textarea::placeholder{color:var(--muted)}
label.check{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}
.check input[type=checkbox]{width:16px;height:16px;margin:0;padding:0;border:initial;box-shadow:none;accent-color:var(--primary);cursor:pointer}
.share-config{margin-top:18px;padding-top:18px;border-top:1px solid var(--border)}
.share-link{margin:14px 0;display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.share-link code{flex:1 1 100%;order:2;display:block;background:var(--primary-soft);color:var(--primary-dark);padding:10px 12px;border-radius:8px;word-break:break-all;font-size:12.5px;line-height:1.6}
.share-link .btn{order:3;align-self:flex-start}
@media(min-width:560px){.share-link code{order:1;flex:1 1 auto}.share-link .btn{order:2}}
.share-access-box{margin-top:18px;padding-top:16px;border-top:1px solid var(--border)}
.share-access-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.share-access-head strong{font-size:13px}
.share-access-list{max-height:260px;overflow:auto}
.share-access-list .table{min-width:0;width:100%}
.share-access-list .table th,.share-access-list .table td{padding:9px 10px;white-space:nowrap}
.share-access-list .empty-block{min-height:120px;padding:28px 16px}

/* modal */
.modal-overlay{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--overlay);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);animation:modalFade .18s ease}
.modal-overlay[hidden]{display:none}
.modal{width:520px;max-width:100%;max-height:calc(100vh - 48px);display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow-modal);animation:modalUp .22s cubic-bezier(.2,.8,.3,1)}
.modal-sm{width:400px}
.modal-lg{width:720px}
.modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:18px 22px;border-bottom:1px solid var(--border)}
.modal-head h2{margin:0;font-size:16px;min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 新建文档/模板的类型选择卡片（docs.html 与 templates.html 共用） */
#docTypeModal .modal-head,#tplTypeModal .modal-head{padding-bottom:16px}
#docTypeModal .modal-body,#tplTypeModal .modal-body{padding:16px 22px 18px}
.doc-type-grid{display:flex;flex-direction:column;align-items:center;gap:12px}
.doc-type-card{display:inline-flex;align-items:center;gap:12px;width:340px;max-width:100%;padding:11px 16px 11px 12px;border:1px solid var(--border);border-radius:12px;background:var(--panel);cursor:pointer;text-align:left;font-family:inherit;transition:all .15s}
.doc-type-card:hover{border-color:var(--primary);background:var(--primary-soft)}
.doc-type-icon{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;background:var(--primary-soft);color:var(--primary);flex:none}
.doc-type-icon svg{width:19px;height:19px}
.doc-type-card strong{font-size:13.5px;color:var(--text)}
.doc-type-card .muted{font-size:12px;line-height:1.45;margin-top:1px}
.doc-type-card .doc-type-text{display:flex;flex-direction:column;min-width:0}
.embed-head-title{flex:1;min-width:0;margin:0;padding:4px 8px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--text);font:inherit;font-size:16px;font-weight:600;line-height:1.3;outline:none;transition:border-color .15s,background .15s}
.embed-head-title::placeholder{color:var(--muted);font-weight:600}
.embed-head-title:hover{border-color:var(--border);background:var(--bg-soft)}
.embed-head-title:focus{border-color:var(--primary);background:var(--panel)}
.embed-head-title:disabled{opacity:.75;cursor:default}
.pending-apply-body{padding:0;overflow:hidden}
.pending-apply-scroll{max-height:min(60vh,480px);overflow:auto}
.pending-apply-scroll .table{min-width:0;width:100%}
.pending-apply-scroll .table th,.pending-apply-scroll .table td{white-space:nowrap}
.pending-apply-scroll .table td:nth-child(2){max-width:240px;overflow:hidden;text-overflow:ellipsis}
.empty-block{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:48px 28px;text-align:center;min-height:180px}
.empty-block .empty-title{font-size:14.5px;font-weight:550;color:var(--muted);line-height:1.45}
.empty-block .empty-tip{font-size:12.5px;color:var(--faint);line-height:1.55;max-width:28em}
.modal-close{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:none;background:none;color:var(--muted);font-size:15px;border-radius:8px;cursor:pointer;transition:all .15s}
.modal-close:hover{background:var(--bg-soft);color:var(--text)}
.modal-body{overflow-y:auto}
.modal form{display:flex;flex-direction:column;min-height:0;flex:1}
.modal-body .share-body{padding:22px}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:16px 22px;border-top:1px solid var(--border);background:var(--bg-soft);border-radius:0 0 16px 16px}
body.modal-open{overflow:hidden}
@keyframes modalFade{from{opacity:0}to{opacity:1}}
@keyframes modalUp{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}

/* ui toast & dialog */
#ui-toasts{position:fixed;top:76px;left:50%;transform:translateX(-50%);z-index:120;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}
.toast{padding:9px 20px;border-radius:999px;font-size:13px;font-weight:500;color:#fff;background:var(--toast-bg);box-shadow:0 8px 28px rgba(26,26,34,.25);opacity:0;transform:translateY(-10px);transition:all .25s}
.toast.show{opacity:1;transform:none}
.toast-success{background:var(--green)}
.toast-error{background:var(--danger)}
.ui-dialog{opacity:0;transition:opacity .18s}
.ui-dialog.show{opacity:1}
.ui-dialog.closing{opacity:0}
.ui-dialog .dialog{width:380px;max-width:100%;background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:26px 24px 20px;box-shadow:var(--shadow-modal);transform:translateY(14px) scale(.98);transition:transform .22s cubic-bezier(.2,.8,.3,1)}
.ui-dialog.show .dialog{transform:none}
.dialog-msg{font-size:14.5px;line-height:1.65;color:var(--text)}
.dialog-input{display:block;width:100%;margin-top:14px;padding:9px 12px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:14px;transition:all .15s;background:var(--input-bg);color:var(--text)}
.dialog-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.dialog-input.error{border-color:var(--danger);box-shadow:0 0 0 3px var(--danger-soft)}
.dialog-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}
/* 插入表格：列数 × 行数 同行双输入 */
.dialog-size{display:flex;align-items:flex-end;justify-content:center;gap:12px;margin-top:16px}
.dialog-size-field{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0;margin:0;font-size:12.5px;font-weight:500;color:var(--muted)}
.dialog-size-field .dialog-input{margin:0;text-align:center;font-size:16px;font-weight:600;color:var(--text)}
.dialog-size-x{flex:none;padding-bottom:10px;font-size:18px;font-weight:600;color:var(--muted);line-height:1}

/* reader */
.reader-body{background:var(--panel)}
.reader-header{border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--reader-nav-bg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);z-index:5}
.reader-head-inner{max-width:840px;margin:0 auto;padding:16px 24px;display:flex;justify-content:space-between;align-items:center;gap:14px}
/* 阅读页品牌与首页/控制台同款：渐变方块 D（或自定义 Logo 图）+ 站点名 */
.reader-brand a{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:15px;letter-spacing:-.4px;color:var(--text);text-decoration:none}
.reader-brand a b{display:grid;place-items:center;width:22px;height:22px;border-radius:5px;background:var(--grad);color:#fff;font-size:12px;letter-spacing:0}
.reader-brand a img.reader-logo{width:32px;height:32px;border-radius:7px;object-fit:cover;display:block}
.reader-tools{display:flex;align-items:center;gap:8px;margin-left:auto}
.reader-tools .theme-toggle{width:32px;height:32px}
.reader-head-inner .lang-switch .xsel-btn,.reader-head-inner .lang-switch select{padding:4px 8px;font-size:12px}

/* 阅读页：访客头像（跟在浏览次数同一行） */
.doc-visitors{display:inline-flex;align-items:center;flex-wrap:wrap;gap:4px;margin:0;padding:0;border:0;font-size:inherit;color:inherit}
.doc-visitors-label{margin-right:4px}
.visitor-avatars{display:inline-flex;align-items:center;flex-wrap:wrap;gap:2px}
.visitor-avatar{width:26px;height:26px;padding:0;border:1px solid var(--border);border-radius:50%;background:var(--panel);cursor:pointer;overflow:hidden;display:grid;place-items:center;font-size:12px;color:var(--muted)}
.visitor-avatar img{width:100%;height:100%;object-fit:cover;display:block}
.visitor-fallback{line-height:1}
.visitor-tip{margin:-20px 0 18px;padding:6px 10px;background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:12.5px;color:var(--text)}
/* 阅读中文档有更新：贴在顶栏（66px）下方，不抢焦点 */
.doc-update-banner{position:sticky;top:66px;z-index:30;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:10px 14px;padding:10px 16px;background:var(--warn-bg);border-bottom:1px solid var(--warn-border);color:var(--warn-text);font-size:13.5px;box-sizing:border-box}
.doc-update-banner[hidden]{display:none!important}
.doc-update-banner-text{flex:1 1 auto;min-width:0;text-align:center}
.doc-update-dismiss{color:var(--warn-text);font-size:13px}
/* 画布 / HTML 全屏页无顶栏：固定贴顶 */
.doc-update-banner--fixed{position:fixed;top:0;left:0;right:0;z-index:60}
@media (max-width:600px){
  .doc-update-banner{padding:10px 12px;gap:8px;font-size:13px}
  .doc-update-banner-text{flex:1 1 100%;text-align:left}
}
/* 阅读页：分享编辑条与编辑器 */
.doc-editbar{display:flex;align-items:center;gap:8px;margin-bottom:16px}
.reader-editor{width:100%;min-height:420px;resize:vertical;padding:16px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:13.5px;line-height:1.7;background:var(--input-bg);color:var(--text);margin-bottom:12px}
.reader-editor:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
/* 阅读页：评论区 */
.comments{width:min(1080px,100%);max-width:1080px;margin:0 auto;padding:0 24px 80px;border-top:1px solid var(--border);box-sizing:border-box}
.comments-title{font-size:18px;margin:28px 0 16px}
.comment-item{display:flex;flex-direction:column;gap:4px;padding:12px 0;border-bottom:1px solid var(--border)}
.comment-item.is-reply{border-bottom:none;padding:8px 0}
.comment-item.is-bot .comment-name{color:var(--primary)}
.comment-head{display:flex;align-items:center;gap:8px;font-size:13px}
.comment-avatar{width:24px;height:24px;border-radius:50%;overflow:hidden;background:var(--primary-soft);color:var(--primary-dark);display:grid;place-items:center;font-size:12px;font-weight:600;flex:none}
.comment-avatar img{width:100%;height:100%;object-fit:cover;display:block}
.comment-name{font-weight:600;color:var(--text)}
.comment-guest-tag,.comment-bot-tag{font-size:11px;color:var(--muted);border:1px solid var(--border);border-radius:4px;padding:0 4px}
.comment-bot-tag{color:var(--primary);border-color:var(--primary-soft);background:var(--primary-soft)}
.comment-mention{color:var(--primary);font-weight:600}
.mention-popup{position:absolute;left:12px;right:auto;top:0;transform:translateY(calc(-100% - 4px));width:min(280px,calc(100% - 24px));box-sizing:border-box;max-height:220px;overflow:auto;background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius-sm);box-shadow:var(--shadow-dropdown);z-index:20;padding:4px}
.mention-popup[hidden]{display:none!important}
.mention-item{display:block;width:100%;box-sizing:border-box;text-align:left;padding:8px 10px;border:0;background:transparent;color:var(--text);font-size:13px;border-radius:6px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mention-item:hover,.mention-item.is-active{background:var(--primary-soft);color:var(--primary-dark)}
@media (max-width:600px){
  .mention-popup{left:8px;width:min(240px,calc(100% - 16px));max-height:180px}
}
/* 阅读页对话：低调图标钮，避免主色 glow 在右下角形成光斑 */
.reader-chat-fab{position:fixed;right:20px;bottom:20px;z-index:40;display:inline-flex;align-items:center;justify-content:center;gap:0;width:48px;height:48px;padding:0;border:1px solid var(--border-strong);border-radius:50%;background:var(--panel);color:var(--text);box-shadow:var(--shadow);cursor:pointer}
.reader-chat-fab span{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.reader-chat-fab:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.reader-chat-fab.is-open{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.reader-chat-panel{position:fixed;right:20px;bottom:78px;z-index:41;width:min(380px,calc(100vw - 32px));height:min(520px,calc(100vh - 120px));flex-direction:column;background:var(--panel);border:1px solid var(--border-strong);border-radius:var(--radius-lg);box-shadow:var(--shadow-pop);overflow:hidden}
.reader-chat-panel:not([hidden]){display:flex}
.reader-chat-panel[hidden]{display:none!important}
.reader-chat-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px;border-bottom:1px solid var(--border);font-size:14px}
.reader-chat-head-actions{display:flex;align-items:center;gap:10px;flex:none}
.reader-chat-full{font-size:12.5px;color:var(--primary);text-decoration:none;white-space:nowrap}
.reader-chat-full:hover{text-decoration:underline}
.reader-chat-head #readerChatClose{font-size:20px;line-height:1;padding:0 4px;color:var(--muted)}
.reader-chat-msgs{flex:1;overflow:auto;padding:12px 14px;display:flex;flex-direction:column;gap:10px}
.reader-chat-bubble{max-width:92%;padding:8px 12px;border-radius:12px;font-size:13.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.reader-chat-bubble.is-user{align-self:flex-end;background:var(--primary-soft);color:var(--text)}
.reader-chat-bubble.is-assistant{align-self:flex-start;background:var(--bg-soft);color:var(--text)}
.reader-chat-body:empty:not(:only-child){display:none}
.reader-chat-body.is-waiting{color:var(--muted);font-size:12.5px}
.reader-chat-bubble.is-streaming .reader-chat-body:not(:empty):not(.is-waiting)::after{content:"|";animation:reader-chat-blink 1s step-end infinite}
.reader-chat-think{margin:0 0 6px;border:none;background:transparent;font-size:12px;color:var(--muted);white-space:normal}
.reader-chat-think summary{cursor:pointer;padding:0 0 2px;user-select:none;list-style:none;opacity:.9}
.reader-chat-think summary::-webkit-details-marker{display:none}
.reader-chat-think-body{padding:0 0 2px;max-height:120px;overflow-y:auto;white-space:pre-wrap;line-height:1.5}
@keyframes reader-chat-blink{50%{opacity:0}}
.reader-chat-form{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border-top:1px solid var(--border)}
.reader-chat-form textarea{width:100%;resize:none;border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 10px;font:inherit;font-size:13.5px;background:var(--input-bg);color:var(--text);box-sizing:border-box}
.reader-chat-form textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.reader-chat-form .btn{align-self:flex-end}
.comment-time{color:var(--faint);font-size:12px}
.comment-actions{margin-left:auto;display:flex;gap:10px}
.comment-content{font-size:14px;line-height:1.65;white-space:pre-wrap;word-break:break-word;padding-left:32px}
.comment-reply-to{color:var(--primary);font-weight:600;margin-right:2px}
/* 回复区：浅色内嵌卡片，与父评论内容对齐（头像 24 + 间距 8 = 36） */
.comment-replies{margin:4px 0 6px 32px;padding:2px 12px;background:var(--bg-soft);border-radius:10px}
.comment-replies .comment-item{border-bottom:none;padding:7px 0}
.comment-replies .comment-item:last-child{padding-bottom:2px}
.comment-replies .comment-actions .btn-link{font-size:12px}
.comment-form{margin-top:16px}
.comment-compose{position:relative;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--input-bg);transition:border-color .15s,box-shadow .15s}
.comment-compose:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.comment-compose textarea{width:100%;padding:10px 12px;border:0;border-radius:0;font-family:inherit;font-size:14px;resize:vertical;background:transparent;color:var(--text);box-sizing:border-box;display:block;min-height:72px}
.comment-compose.has-img-tool textarea{padding-bottom:36px}
.comment-compose textarea:focus{outline:none;box-shadow:none}
.comment-compose .comment-img-btn{position:absolute;left:8px;bottom:8px;z-index:1;display:inline-grid;place-items:center;width:28px;height:28px;padding:0;border-radius:6px;color:var(--muted);background:transparent}
.comment-compose .comment-img-btn:hover{color:var(--primary);background:var(--primary-soft)}
.comment-form-foot{display:flex;align-items:center;gap:10px;justify-content:flex-end;margin-top:8px;flex-wrap:wrap}
.comment-replying{margin-right:auto;font-size:12.5px;cursor:pointer}
.comment-compose .comment-img-previews{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:10px 12px 0}
.comment-compose .comment-img-previews[hidden]{display:none!important}
.comment-img-card{position:relative;width:72px;height:72px;border-radius:8px;overflow:hidden;border:1px solid var(--border);background:var(--bg-soft)}
.comment-img-card img{width:100%;height:100%;object-fit:cover;display:block}
.comment-img-card.is-uploading{opacity:.6}
.comment-img-loading{display:grid;place-items:center;width:100%;height:100%;color:var(--muted);font-size:18px}
.comment-img-remove{position:absolute;top:2px;right:2px;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;font-size:14px;line-height:1;cursor:pointer}
.comment-img-remove:hover{background:rgba(0,0,0,.75)}
.comment-images{display:flex;flex-wrap:wrap;gap:8px;padding:6px 0 2px 32px}
.comment-image-link{display:block;max-width:220px;padding:0;border-radius:8px;overflow:hidden;border:1px solid var(--border);background:var(--bg-soft);cursor:zoom-in}
.comment-image-link img{display:block;max-width:100%;max-height:180px;width:auto;height:auto;object-fit:contain}
/* 历史版本表格：版本号 / 更新人 / 更新时间 / 操作 四列；说明跨四列显示在该行下方 */
.revision-table{width:100%;border-collapse:collapse;font-size:13px}
.revision-table th{padding:10px 16px;text-align:left;font-size:12px;font-weight:600;color:var(--muted);background:var(--bg-soft);border-bottom:1px solid var(--border);white-space:nowrap}
.revision-table th.rev-ops-th{text-align:right}
.revision-table td{padding:11px 16px;vertical-align:middle}
/* 分隔线只画在逻辑行之间：主行与它的说明行之间不画 */
.revision-table tr.rev-row td{border-bottom:none}
.revision-table tr.rev-row + tr.rev-row td{border-top:1px solid var(--border)}
.revision-table tr.rev-note-row td{padding-top:2px;padding-bottom:12px;border-bottom:1px solid var(--border);color:var(--muted);font-size:12px;line-height:1.6;word-break:break-word;white-space:pre-wrap}
.revision-table tbody tr:last-child td{border-bottom:none}
/* 版本号：手工标签主色胶囊突出，自动编号（v1.0.3）弱化等宽 */
.revision-label{display:inline-block;padding:1px 8px;border-radius:999px;background:var(--primary-soft);color:var(--primary);font-size:11.5px;font-weight:600;line-height:1.7;white-space:nowrap}
.rev-auto{font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:12.5px;color:var(--muted);white-space:nowrap}
.rev-time{color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.rev-ops{display:flex;gap:8px;justify-content:flex-end;white-space:nowrap}
.rev-empty{padding:22px}
.reader{width:min(1080px,100%);max-width:1080px;margin:0 auto;padding:44px 24px 96px;box-sizing:border-box}
.doc-title-row{display:flex;align-items:center;gap:8px 10px;margin:0 0 12px;flex-wrap:wrap}
.doc-title{font-size:26px;font-weight:700;line-height:1.2;letter-spacing:-.02em;margin:0;padding:0;border:none;flex:0 1 auto;min-width:0;max-width:100%}
.doc-export{display:inline-flex;align-items:center;align-self:center;gap:6px;flex:none}
.doc-export-btn{text-decoration:none;font-weight:400;font-size:12px;padding:2px 8px;line-height:1.4;min-height:0;border-radius:6px}
.doc-export-btn[aria-busy="true"]{opacity:.55;pointer-events:none}
/* 阅读/分享页标题旁的业务版本号小胶囊，与标题、下载按钮同一行居中 */
.doc-version-tag{display:inline-flex;align-items:center;align-self:center;margin:0;padding:2px 10px;font-size:13px;font-weight:500;line-height:1.4;letter-spacing:0;color:var(--primary-dark);background:var(--primary-soft);border-radius:999px}
/* 阅读页作者信息：头像 + 昵称 + 更新时间 + 浏览 + 访客 */
.doc-author{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 28px;color:var(--muted);font-size:13.5px}
.doc-author .user-avatar-sm{width:30px;height:30px;font-size:13px}
.doc-author-name{color:var(--text);font-weight:600}

/* markdown body */
/* 防止移动端横向溢出：长词断行，溢出由内部容器消化 */
.markdown-body{font-size:15.5px;line-height:1.8;color:var(--text);overflow-wrap:break-word}
.markdown-body h1{font-size:1.7em;letter-spacing:-.02em;margin:1.4em 0 .6em;padding-bottom:.35em;border-bottom:1px solid var(--border)}
.markdown-body h2{font-size:1.35em;letter-spacing:-.015em;margin:1.5em 0 .6em;padding-bottom:.3em;border-bottom:1px solid var(--border)}
.markdown-body h3{font-size:1.15em;margin:1.3em 0 .5em}
.markdown-body img{max-width:100%;border-radius:var(--radius-sm)}
.markdown-body pre{background:var(--bg-soft);border:1px solid var(--border);padding:16px;border-radius:10px;overflow:auto;font-size:.9em}
.markdown-body code{background:var(--primary-soft);color:var(--primary-dark);padding:2px 6px;border-radius:5px;font-family:ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace;font-size:85%;overflow-wrap:anywhere}
.markdown-body pre code{background:none;padding:0;color:var(--text)}
.markdown-body blockquote{margin:1em 0;padding:.6em 1.2em;color:var(--muted);border-left:3px solid var(--primary-2);background:var(--bg-soft);border-radius:0 var(--radius-sm) var(--radius-sm) 0}
.markdown-body table{display:block;border-collapse:collapse;width:100%;overflow-x:auto}
.markdown-body th,.markdown-body td{border:1px solid var(--border);padding:9px 14px}
.markdown-body th{background:var(--bg-soft)}
.markdown-body a{color:var(--primary)}
.markdown-body ul,.markdown-body ol{padding-left:1.5em}
.markdown-body hr{border:none;border-top:1px solid var(--border);margin:2em 0}

/* tag */
.tag{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;background:var(--bg-soft);border:1px solid var(--border);color:var(--muted);font-size:12px;font-weight:500;white-space:nowrap;flex:none}
.tag-green{background:var(--ok-bg-tag);border-color:var(--ok-border);color:var(--green)}
.tag-linked{background:var(--info-bg-tag);border-color:var(--info-border-tag);color:var(--info-text);font-weight:600}
.tag-embed{background:var(--primary-soft);border-color:transparent;color:var(--primary-dark);margin-right:4px}
.doc-embed-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
/* 搜索结果：正文命中摘要（最多两行）+ 关键词标黄 */
/* mark 主题化：暗色（默认）半透明黄底+主题文字色，浅色实底+深色字，保证对比度 */
:root{--mark-bg:rgba(255,229,143,.26)}
html[data-theme="light"]{--mark-bg:#ffe58f;--mark-fg:#0d1b2e}
mark{background:var(--mark-bg);color:var(--mark-fg,var(--text));padding:0 1px;border-radius:2px}
.doc-snippet,.sr-snippet{color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-all}
.doc-snippet{margin-top:3px;font-size:12px;line-height:1.5;max-width:52ch}
/* 搜索态结果列表（非管理表格） */
.search-results{padding:6px 0}
.sr-item{padding:12px 16px;border-bottom:1px solid var(--border)}
.sr-item:last-child{border-bottom:none}
.sr-title{font-size:15px;font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sr-title a{color:var(--primary-dark)}
.sr-title a:hover{text-decoration:underline}
.sr-snippet{margin-top:5px;font-size:13px;line-height:1.6}
.sr-meta{margin-top:5px;font-size:12px}
.sr-ops{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap}
/* 搜索态行操作复用 .ops-item 的 JS 委托，但改成小按钮形态（覆盖内联 <style> 的 width:100%） */
.sr-ops .ops-item{display:inline-flex;align-items:center;width:auto;padding:4px 10px;border:1px solid var(--border);border-radius:6px;background:var(--panel);font-size:12px}

/* Markdown 嵌入块（思维导图 / 画板） */
.md-embed{margin:1.1em 0;cursor:pointer;user-select:none;position:relative}
.md-embed-card{display:flex;align-items:center;gap:14px;padding:16px 18px;border:1px dashed var(--border-strong);border-radius:12px;background:linear-gradient(135deg,var(--bg-soft),var(--panel));transition:border-color .15s,background .15s,transform .12s}
.md-embed:hover .md-embed-card{border-color:var(--primary);background:var(--primary-soft)}
.md-embed:active .md-embed-card{transform:scale(.995)}
.md-embed-icon{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--primary);background:var(--panel);border:1px solid var(--border);flex:none}
.md-embed-meta{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.md-embed-meta strong{font-size:14px;color:var(--text)}
.md-embed-meta span{font-size:12.5px;color:var(--muted)}
.md-embed-mindmap .md-embed-icon{color:#0b7a75}
.md-embed-excalidraw .md-embed-icon{color:#c45c26}
.md-embed-del{flex:none;margin-left:auto;width:32px;height:32px;padding:0;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--muted);font-size:20px;line-height:1;cursor:pointer;transition:color .15s,background .15s,border-color .15s}
.md-embed-del:hover{color:var(--danger);background:var(--danger-bg,rgba(220,53,69,.08));border-color:var(--danger-border,rgba(220,53,69,.25))}
.md-embed-preview{position:relative;border:1px solid var(--border);border-radius:12px;overflow:hidden;background:var(--panel);transition:border-color .15s,box-shadow .15s}
.md-embed:hover .md-embed-preview{border-color:var(--primary);box-shadow:0 4px 18px rgba(0,0,0,.06)}
.md-embed-preview .md-embed-del{position:absolute;top:8px;right:8px;z-index:2;margin:0;background:var(--panel);border-color:var(--border);box-shadow:0 2px 8px rgba(0,0,0,.06)}
/* 勿用 width:100% + max-height：会把图拉满宽度后再被 max-height 裁切上下 */
.md-embed-preview img{display:block;max-width:100%;width:auto;height:auto;max-height:min(70vh,720px);margin:0 auto;object-fit:contain;background:var(--bg-soft)}
.md-embed-preview-caption{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 12px;padding:10px 14px;border-top:1px solid var(--border);background:var(--bg-soft)}
.md-embed-preview-caption strong{font-size:13.5px;color:var(--text)}
.md-embed-preview-caption span{font-size:12.5px;color:var(--muted)}
.embed-lightbox-overlay{z-index:90;padding:16px;cursor:zoom-out;overflow:auto}
.embed-lightbox-img{max-width:min(96vw,1400px);max-height:92vh;width:auto;height:auto;object-fit:contain;border-radius:8px;box-shadow:var(--shadow-pop);background:var(--panel);cursor:zoom-out}

.embed-modal-overlay{z-index:80}
.embed-modal{width:min(1100px,96vw);height:min(820px,92vh);max-height:92vh}
.embed-modal-body{flex:1;min-height:0;padding:0;display:flex;flex-direction:column;position:relative;overflow:hidden}
.embed-status{padding:12px 18px}
.embed-hint{flex:none;padding:8px 16px;font-size:12.5px;color:var(--muted);border-bottom:1px solid var(--border);background:var(--bg-soft)}
.embed-toolbar{flex:none;display:flex;flex-wrap:wrap;gap:12px 16px;align-items:center;padding:8px 16px;border-bottom:1px solid var(--border);background:var(--panel)}
.embed-toolbar-field{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--muted)}
.embed-toolbar-select{min-width:140px;max-width:220px;padding:5px 8px;border:1px solid var(--border-strong);border-radius:8px;background:var(--bg-soft);color:var(--text);font:inherit;cursor:pointer}
.embed-toolbar-select:disabled{opacity:.65;cursor:default}
/* 容器必须有明确宽高；勿强制子元素 100% 宽高（会挤坏 simple-mind-map 节点文字） */
.embed-mount{flex:1;min-height:480px;width:100%;height:100%;position:relative;overflow:hidden;font-size:16px;line-height:normal;background:var(--panel)}
.embed-mount.embed-mount-mindmap *{margin:0;padding:0}
.embed-mount.embed-mount-excalidraw > .excalidraw,.embed-mount.embed-mount-excalidraw > div{width:100%;height:100%}
/* drawio iframe：iframe 自身已 100% 宽高，容器只管布局 */
.embed-mount.embed-mount-drawio{display:flex}
.embed-mount.embed-mount-drawio > iframe{flex:1}
.embed-modal .modal-foot{flex:none}

/* 用户信息悬停卡（所有者 / 成员名） */
.owner-link{cursor:pointer;color:var(--primary);font-weight:500}
.owner-link:hover{color:var(--primary-dark);text-decoration:underline}
/* 文档列表：所有者/更新人是当前登录用户时显示「我」+人形图标
   —— 非交互元素：灰色弱化、无手型，与可悬停的他人昵称明确区分 */
.me-badge{display:inline-flex;align-items:center;gap:4px;color:var(--muted);cursor:default}
.me-badge .me-ico{flex:none}
.owner-pop{position:fixed;z-index:80;width:272px;padding:0;background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-pop);overflow:visible;pointer-events:none}
.owner-pop::before{content:"";position:absolute;top:-5px;left:var(--arrow-x,28px);width:10px;height:10px;background:linear-gradient(135deg,var(--primary-soft) 50%,var(--panel) 50%);border-left:1px solid var(--border);border-top:1px solid var(--border);transform:rotate(45deg);z-index:1}
.owner-pop-head{display:flex;gap:12px;align-items:center;padding:14px 14px 12px;background:linear-gradient(165deg,var(--primary-soft) 0%,transparent 72%);border-radius:14px 14px 0 0}
.owner-pop .owner-initial{width:48px;height:48px;border-radius:50%;overflow:hidden;flex:none;display:grid;place-items:center;background:var(--grad);color:var(--grad-fg);font-weight:700;font-size:18px;border:2.5px solid var(--avatar-ring);box-shadow:var(--shadow)}
.owner-pop .owner-initial img{width:100%;height:100%;object-fit:cover;display:block}
.owner-pop .info{min-width:0;flex:1}
.owner-pop .info .name{font-weight:600;font-size:14.5px;color:var(--text);line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.owner-pop .info .username{font-size:12px;color:var(--muted);line-height:1.4;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.owner-pop-body{padding:4px 14px 14px}
.owner-pop .field{font-size:12.5px;line-height:1.35;display:flex;align-items:baseline;gap:10px;padding:7px 0;border-top:1px solid var(--border);white-space:nowrap}
.owner-pop .field:first-child{border-top:none;padding-top:2px}
.owner-pop .field .lbl{color:var(--muted);flex:none;min-width:3.5em}
.owner-pop .field .val{color:var(--text);overflow:hidden;text-overflow:ellipsis;font-weight:500}

/* API 文档窄屏目录选择器（JS 注入） */
.doc-toc-mobile{display:none;width:100%;margin:0 0 16px;padding:10px 12px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:14px;background:var(--panel);color:var(--text)}

/* 窄屏列表卡片：JS 注入 data-label 后生效 */
@media(max-width:700px){
  .panel>.table.table-cards,.docs-main .panel>.table.table-cards{
    min-width:0;width:100%;display:block
  }
  .table.table-cards thead{display:none}
  .table.table-cards tbody{display:block}
  .table.table-cards tbody tr{
    display:block;padding:12px 14px 10px;margin:0 0 12px;
    border:1px solid var(--border);border-radius:12px;background:var(--panel);
    box-shadow:var(--shadow-sm);white-space:normal
  }
  .table.table-cards tbody tr:last-child{margin-bottom:0}
  .table.table-cards tbody tr:hover{background:var(--panel)}
  /* 两列网格：标签 | 值。值在 .table-card-val 内折行（含无空格长串），多行左对齐便于阅读。
     不用 space-between：同一格多段内容不会被甩到中间。 */
  .table.table-cards tbody tr td{
    display:grid;grid-template-columns:5em minmax(0,1fr);column-gap:12px;align-items:start;
    padding:8px 0;border-bottom:1px dashed var(--border);white-space:normal;text-align:left;min-width:0
  }
  .table.table-cards tbody tr td:last-child{border-bottom:none}
  .table.table-cards tbody tr td::before{
    content:attr(data-label);grid-column:1;min-width:0;text-align:left;overflow-wrap:anywhere;
    color:var(--muted);font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:.03em
  }
  .table.table-cards tbody tr td > .table-card-val{
    grid-column:2;min-width:0;overflow-wrap:anywhere;word-break:break-word;text-align:left
  }
  .table.table-cards tbody tr td.cell-title > .table-card-val{
    display:flex;flex-direction:column;align-items:stretch;gap:4px
  }
  .table.table-cards tbody tr td.cell-title .doc-embed-tags{justify-content:flex-start;margin-top:0}
  .table.table-cards tbody tr td.cell-title .doc-snippet{max-width:none}
  .table.table-cards tbody tr td.col-actions{
    display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:8px;
    padding-top:12px;margin-top:4px;border-top:1px solid var(--border);border-bottom:none
  }
  .table.table-cards tbody tr td.col-actions::before{display:none}
  .table.table-cards tbody tr td[colspan],
  .table.table-cards .empty-row td{
    display:block;text-align:center;border:0;padding:28px 12px
  }
  .table.table-cards tbody tr td[colspan]::before,
  .table.table-cards .empty-row td::before{display:none}
  .panel:has(>.table.table-cards),.panel.panel-cards{overflow:visible;padding:0;background:transparent;border:0;box-shadow:none}
  .panel:has(>.table.table-cards)>.panel-head,.panel.panel-cards>.panel-head{padding:0 0 12px;border-bottom:0}
}

@media(max-width:900px){
  .edit-grid{grid-template-columns:1fr}
  .nav-links{display:none}
  .nav-toggle{display:inline-flex}
  .topnav{padding:0 14px;gap:8px}
  .nav-brand a{font-size:15px;max-width:42vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .nav-gh{display:none}
  .user-chip{padding:4px 8px 4px 4px}
  .user-chip-name,.chip-caret{display:none}
  .container{padding:0 16px}
  .container.wide{max-width:100%;padding:0 12px}
  .page-head{flex-wrap:wrap;gap:12px;align-items:flex-start}
  .page-head h1{font-size:20px}
  .page-head>div{display:flex;flex-wrap:wrap;gap:8px}
  /* 编辑页顶栏：标题 → 项目/分类 → 操作，纵向分层 */
  .page-head-edit{
    flex-direction:column;align-items:stretch;gap:12px
  }
  .page-head-edit .head-title{
    flex-direction:column;align-items:stretch;gap:10px;width:100%
  }
  .page-head-edit .head-title h1{font-size:18px;line-height:1.3}
  .page-head-edit .head-meta{
    display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%
  }
  .page-head-edit .meta-select{
    display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:6px;width:100%;min-width:0
  }
  .page-head-edit .meta-select select,
  .page-head-edit .meta-select .xsel{
    width:100%;min-width:0;max-width:none
  }
  .page-head-edit .meta-select .xsel-btn{width:100%}
  .page-head-edit .head-side{
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;width:100%
  }
  .page-head-edit .head-side .btn{
    width:100%;justify-content:center;text-align:center;box-sizing:border-box
  }
  .page-head-edit .head-side .btn-primary{grid-column:1/-1}
  .edit-pane-tabs{display:flex}
  .edit-grid{gap:0}
  .edit-left,.edit-right{min-height:0}
  .edit-left .editor{min-height:min(58vh,520px);font-size:13px;overflow-x:auto;word-break:break-word}
  .edit-right #preview,
  #preview.edit-preview{min-height:min(58vh,520px);overflow:auto;-webkit-overflow-scrolling:touch}
  .toolbar-hint{display:none}
  .md-toolbar{gap:1px;padding:4px 6px}
  .md-toolbar button{min-width:28px;height:28px;padding:0 6px;font-size:12px}
  .tb-sep{margin:0 3px}
  .search-bar.filter-bar{flex-wrap:wrap}
  .search-bar.filter-bar input,
  .filter-bar select,
  .filter-bar .xsel{flex:1 1 140px;max-width:none;width:auto;min-width:0}
  .search-bar.filter-bar input{flex:1 1 100%}
  .filter-bar .btn{flex:none}
  .doc-toc-mobile{display:block}
  /* 100% 相对父级，避免 100vw 含滚动条宽度导致横向溢出 */
  .auth-card{width:100%;max-width:100%;padding:28px 22px;box-sizing:border-box}
  .auth-card:not(.share-gate){padding:28px 22px}
  .auth-brand,.auth-tools{position:static;margin:0}
  .auth-body{padding:16px 16px 0;align-items:center;box-sizing:border-box;max-width:100%;overflow-x:hidden}
  .auth-body .auth-brand{position:absolute;top:16px;left:16px}
  .auth-body .auth-tools{position:absolute;top:16px;right:16px}
  .auth-title{font-size:22px}
  .auth-totp-qr{width:160px;height:160px}
  /* 分栏窄屏：恢复居中卡片（与改版前一致），桌面仍左右分栏 */
  .auth-body.auth-split{
    display:flex;flex-direction:column;align-items:center;
    padding:16px 16px 0;overflow-x:hidden;
    background:var(--bg-soft);background-image:var(--auth-fx)
  }
  .auth-split .auth-brand-pane{display:none}
  .auth-split .auth-form-pane{
    display:flex;flex-direction:column;align-items:center;
    flex:1 0 auto;width:100%;max-width:100%;min-height:0;
    padding:48px 0 0;background:transparent;overflow:visible;box-sizing:border-box
  }
  .auth-split .auth-tools{position:absolute;top:14px;right:14px}
  .auth-split .auth-mobile-brand{
    display:inline-flex;position:absolute;top:14px;left:14px;margin:0;z-index:2
  }
  .auth-split .auth-card{
    /* overflow:visible：避免 focus 外圈被裁；顶条用自身圆角贴合卡片 */
    position:relative;overflow:visible;width:100%;max-width:100%;
    margin-top:auto;margin-bottom:auto;padding:28px 22px;
    border:1px solid var(--border);border-radius:20px;
    box-shadow:var(--shadow-gate);background:var(--panel);
    animation:shareGateIn .35s cubic-bezier(.2,.8,.3,1)
  }
  .auth-split .auth-card::before{
    display:block;content:"";position:absolute;inset:0 0 auto 0;height:3px;background:var(--grad);
    border-radius:20px 20px 0 0
  }
  .auth-split .auth-title{
    text-align:center;font-size:22px;color:transparent;
    background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent
  }
  .auth-split .auth-sub,.auth-split .auth-alt{text-align:center}
  .auth-split .auth-card .auth-field>input,
  .auth-split .auth-card .auth-pwd-wrap>input{border-radius:999px;padding:0 20px}
  .auth-split .auth-card .captcha-row input:not([type=checkbox]):not([type=radio]){border-radius:0;padding:0 20px}
  .auth-split .auth-card .btn-block{margin-top:8px;padding:0 20px;border-radius:999px;font-weight:700}
  .auth-split .auth-foot{width:100%}
}
/* 桌面始终双栏，忽略窄屏切换态 */
@media(min-width:901px){
  .edit-grid.is-preview .edit-left,
  .edit-grid.is-write .edit-right{display:flex}
}
