/* 软技快传 - 全局样式（支持暗黑模式） */
:root {
  --bg: #eef1f7;
  --panel: #ffffff;
  --text: #232936;
  --muted: #5f6b82;
  --border: #e4e7f0;
  --primary: #4f7cff;
  --link: #3d63d9;
  --primary-hover: #3d68f0;
  --primary-soft: rgba(79,124,255,.10);
  --grad-a: #4f7cff;
  --grad-b: #8b5cf6;
  --grad-c: #38bdf8;
  --green: #14b892;
  --red: #ef5350;
  --orange: #f59e0b;
  --blue: #4f7cff;
  --radius-sm: 10px;
  --radius: 14px;
  --radius-lg: 20px;
  --ease-smooth: cubic-bezier(.4, 0, .2, 1);
  --ease-spring: cubic-bezier(.22, .9, .32, 1.18);
  --ring: 0 0 0 3px rgba(79,124,255,.16);
  --shadow-sm: 0 1px 2px rgba(23,31,56,.05), 0 2px 8px rgba(23,31,56,.04);
  --shadow-md: 0 2px 6px rgba(23,31,56,.05), 0 10px 24px rgba(23,31,56,.09);
  --shadow-lg: 0 6px 16px rgba(23,31,56,.08), 0 24px 56px rgba(23,31,56,.14);
  --shadow-glow: 0 8px 30px rgba(79,124,255,.22);
  --topbar-h: 62px;
}

/* 目录与文件权限页 */
.permissions-page{min-width:0}.permissions-head{align-items:flex-start;gap:16px}.permissions-head .layui-btn{flex-shrink:0}.permissions-stats{grid-template-columns:repeat(4,minmax(0,1fr));margin:0 0 16px}.permissions-stats .stat-good strong{color:#15803d}.permissions-stats .stat-warn strong{color:#b45309}.permissions-stats .stat-error strong{color:#b91c1c}.permissions-panel{min-width:0}.permissions-panel-head{align-items:flex-start;gap:16px}.permissions-bulk-form{flex-shrink:0}.permissions-bulk-form .layui-btn{min-height:42px}.permissions-table-wrap{overflow-x:auto}.permissions-table{min-width:1040px}.permissions-table td{vertical-align:top;word-break:break-word}.permissions-table td small{display:block;margin-top:4px;color:var(--muted);font-size:0.75rem;line-height:1.45}.permissions-table code{font-size:0.75rem;overflow-wrap:anywhere}.permissions-row-warn{background:color-mix(in srgb,#f59e0b 4%,transparent)}.permissions-row-error{background:color-mix(in srgb,#ef4444 5%,transparent)}.permissions-status{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;font-size:0.75rem;font-weight:700;white-space:nowrap}.permissions-status-good{background:rgba(22,163,74,.1);color:#15803d}.permissions-status-warn{background:rgba(217,119,6,.12);color:#b45309}.permissions-status-error{background:rgba(220,38,38,.1);color:#b91c1c}.permissions-table form{margin:0}.permissions-table .layui-btn{min-height:34px}.permissions-table .hint{white-space:nowrap}
.permissions-runtime{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin:0 0 16px;padding:16px;border:1px solid var(--border);border-radius:var(--radius);background:color-mix(in srgb,var(--panel) 78%,var(--bg));box-shadow:var(--shadow-sm)}
.permissions-runtime .runtime-item{display:flex;flex-direction:column;gap:3px;min-width:0;padding:10px 14px;border-radius:var(--radius-sm);background:var(--panel);border:1px solid var(--border)}
.permissions-runtime .runtime-item b{font-size:0.875rem;color:var(--text);overflow-wrap:anywhere}
.permissions-runtime .runtime-item small{color:var(--muted);font-size:0.75rem;line-height:1.45;overflow-wrap:anywhere}
.permissions-runtime .runtime-item small.is-warn{color:#b45309;font-weight:600}
.permissions-runtime .runtime-item-label{font-size:0.6875rem;font-weight:700;letter-spacing:.05em;color:var(--muted);text-transform:none}
.permissions-runtime .runtime-item-path{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:0.6875rem}
.permissions-runtime .runtime-item-done{border-color:color-mix(in srgb,var(--green) 32%,var(--border))}
.permissions-runtime .runtime-item-done b{color:var(--green)}
.permissions-all-good{display:flex;align-items:center;gap:8px;margin:0 0 16px;padding:12px 16px}
.permissions-bars{display:flex;height:8px;gap:3px;margin:0 0 10px;border-radius:999px;overflow:hidden;background:color-mix(in srgb,var(--border) 55%,transparent)}
.permissions-bars>span{height:100%;display:block;border-radius:999px;transition:flex-grow .4s var(--ease-smooth)}
.permissions-bars .bar-good{background:linear-gradient(90deg,#16a34a,#4ade80)}
.permissions-bars .bar-warn{background:linear-gradient(90deg,#d97706,#fbbf24)}
.permissions-bars .bar-error{background:linear-gradient(90deg,#dc2626,#f87171)}
.permissions-bars-legend{display:flex;flex-wrap:wrap;gap:14px;margin:0 0 16px;color:var(--muted);font-size:0.75rem}
.permissions-bars-legend span{display:inline-flex;align-items:center;gap:6px}
.permissions-bars-legend i{width:10px;height:10px;border-radius:50%;display:inline-block;flex:0 0 auto}
.permissions-bars-legend .dot-good{background:#22c55e}
.permissions-bars-legend .dot-warn{background:#f59e0b}
.permissions-bars-legend .dot-error{background:#ef4444}
@media(max-width:900px){.permissions-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.permissions-runtime{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.permissions-head,.permissions-panel-head{display:block}.permissions-head .layui-btn,.permissions-bulk-form,.permissions-bulk-form .layui-btn{width:100%;margin-top:12px;justify-content:center}.permissions-stats{gap:8px}.permissions-stats .stat{padding:12px}.permissions-runtime{grid-template-columns:1fr;gap:8px;padding:12px}.permissions-runtime .runtime-item{padding:10px 12px}.permissions-table-wrap{overflow:visible}.permissions-table{min-width:0;width:100%;display:block}.permissions-table thead{display:none}.permissions-table tbody,.permissions-table tr,.permissions-table td{display:block;width:100%}.permissions-table tr{margin:0 0 10px;padding:10px 12px;border:1px solid var(--border);border-radius:calc(var(--radius-sm) - 2px);background:var(--panel)}.permissions-table td{display:grid;grid-template-columns:94px minmax(0,1fr);gap:8px;padding:6px 0;border:0;overflow-wrap:anywhere}.permissions-table td:before{content:attr(data-label);color:var(--muted);font-size:0.75rem;font-weight:600}.permissions-table td:last-child{display:block;padding-top:10px;border-top:1px solid var(--border)}.permissions-table td:last-child:before{display:block;margin-bottom:7px}.permissions-table td:last-child form,.permissions-table td:last-child .layui-btn{width:100%}.permissions-table .hint{white-space:normal}}

:root { font-size: calc(16px * var(--ui-font-scale, 1)); }
[data-theme="dark"] {
  --bg: #12151c;
  --panel: #1a1f29;
  --text: #e5e9f2;
  --muted: #8a94ab;
  --border: #262d3a;
  --primary: #6b8bff;
  --link: #6b8bff;
  --primary-hover: #84a0ff;
  --primary-soft: rgba(107,139,255,.14);
  --ring: 0 0 0 3px rgba(107,139,255,.22);
  --shadow-sm: 0 1px 2px rgba(0,0,0,.25);
  --shadow-md: 0 4px 16px rgba(0,0,0,.35);
  --shadow-lg: 0 12px 36px rgba(0,0,0,.45);
  --shadow-glow: 0 8px 32px rgba(107,139,255,.20);
}

/* ============================================================
   暗色主题：主题化背景 + 硬编码文字色的补偿（必须保留）
   问题：以下 8 处规则的**背景**已用 color-mix(…, var(--panel))（即背景随主题变深），
   但**文字色**是硬编码的深色值 → 暗色主题下背景变深、文字不变，对比度反而**比亮色更差**。
   实测（相对亮度精算，文字对自身背景）：
     .badge-yellow/.badge-warn  #a16207  亮 4.42:1 → 暗 **2.60:1** ❌
     .badge-orange              #b86b00  亮 3.66:1 → 暗 **3.13:1** ❌
     .badge-purple              #6d28d9  亮 5.75:1 → 暗 **2.09:1** ❌（几乎不可读）
     .alert-warn                #a16207 / .admin-changelog-meta b #a16207  → 暗色不达标
     .admin-changelog-source-changelog #1d4ed8 / -readme #047857
     .queue-item .qbatch        #0f766e  → 暗色不达标
   对照：同区块的 .badge-green/red/gray/blue 文字用 **主题令牌**（var(--green) 等），
   故其暗色对比度反而**变好**（如 green 亮 2.22:1 → 暗 5.22:1）—— 上述 8 处属「令牌旁路」。
   修法：**沿用项目既有暗色修补惯例**（见 .share-result-status-badge 用 #6fe1c5 / #ff8f8b），
   为这 8 处补 [data-theme="dark"] 覆盖，取同色系更亮变体。
   —— 仅覆盖暗色，**亮色主题下视觉零变化**（不改基础规则本身）。
   ============================================================ */
[data-theme="dark"] .badge-yellow,
[data-theme="dark"] .badge-warn { color: #fbbf24; }   /* 暗色下 7.66:1（原 2.60） */
[data-theme="dark"] .badge-orange { color: #fdba74; } /* 暗色下 7.59:1（原 3.13） */
[data-theme="dark"] .badge-purple { color: #c4b5fd; } /* 暗色下 8.02:1（原 2.09） */
[data-theme="dark"] .alert-warn { color: #fbbf24; }   /* 暗色下 8.30:1 */
[data-theme="dark"] .admin-changelog-meta b { color: #fbbf24; }              /* 暗色下 7.66:1 */
[data-theme="dark"] .admin-changelog-source-changelog { color: #93c5fd; }    /* 暗色下 7.58:1 */
[data-theme="dark"] .admin-changelog-source-readme { color: #6fe1c5; }       /* 暗色下 8.27:1（复用项目既有成功色） */
[data-theme="dark"] .queue-item .qbatch { color: #5eead4; }                  /* 暗色下 10.10:1 */

* { box-sizing: border-box; margin: 0; padding: 0; }
:where([hidden]) { display: none !important; }
body {
  font-family: -apple-system, "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif;
  background: var(--bg);
  background-image:
    radial-gradient(760px circle at 10% -10%, color-mix(in srgb, var(--primary) 10%, transparent), transparent 58%),
    radial-gradient(920px circle at 94% -14%, rgba(139,92,246,.09), transparent 60%),
    radial-gradient(660px circle at 50% 118%, rgba(56,189,248,.06), transparent 62%);
  background-attachment: fixed;
  color: var(--text);
  line-height: 1.6;
  transition: background-color .2s, color .2s;
  -webkit-font-smoothing: antialiased;
}
[data-theme="dark"] body {
  background-image:
    radial-gradient(760px circle at 12% -8%, rgba(90,120,255,.10), transparent 55%),
    radial-gradient(900px circle at 95% -15%, rgba(140,92,250,.09), transparent 58%),
    radial-gradient(680px circle at 50% 120%, rgba(56,150,248,.06), transparent 62%);
}
::selection { background: var(--primary); color: #fff; }
html { scroll-behavior: smooth; }
/* 全局滚动条：品牌色细条，深色模式自动适配 */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--muted) 34%, transparent); border: 2px solid transparent; border-radius: 999px; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: color-mix(in srgb, var(--primary) 55%, transparent); border: 2px solid transparent; background-clip: padding-box; }
* { scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--muted) 34%, transparent) transparent; }
/* 键盘用户链接焦点框 */
/* 全站链接键盘焦点环：body 前缀(0,1,2)压过 layui 的 `a:active,a:hover{outline:0}`(0,1,1)，
   避免「键盘聚焦 + 鼠标悬停/按下同时成立」时（同特异性、layui 后加载）焦点环被抹掉。 */
body a:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 35%, transparent); outline-offset: 2px; border-radius: calc(var(--radius-sm) - 4px); }
a { color: var(--primary); text-decoration: none; transition: color .15s; }
a:hover { color: var(--primary-hover); }
.container { max-width: 1000px; margin: 0 auto; padding: 0 20px; }

/* 提取码状态页：与首页/分享页共用品牌视觉，避免内联样式造成布局漂移。 */
.state-page { min-height: 100vh; }
.state-shell { min-height: 100vh; display: flex; flex-direction: column; }
.state-main { flex: 1; width: 100%; display: grid; place-items: center; padding-top: clamp(36px, 9vh, 110px); padding-bottom: clamp(48px, 11vh, 132px); }
.state-card {
  position: relative; width: min(100%, 560px); padding: clamp(34px, 6vw, 58px) clamp(22px, 6vw, 64px) clamp(30px, 5vw, 48px);
  overflow: hidden; text-align: center; background: color-mix(in srgb, var(--panel) 94%, transparent);
  border: 1px solid color-mix(in srgb, var(--border) 88%, var(--primary)); border-radius: calc(var(--radius-lg) + 4px);
  box-shadow: var(--shadow-lg); isolation: isolate;
}
.state-card::before { content: ''; position: absolute; width: 240px; height: 240px; top: -132px; right: -62px; border-radius: 50%; background: radial-gradient(circle, color-mix(in srgb, var(--primary) 18%, transparent), transparent 70%); z-index: -1; pointer-events: none; }
.state-card::after { content: ''; position: absolute; width: 220px; height: 220px; bottom: -146px; left: -80px; border-radius: 50%; background: radial-gradient(circle, rgba(139,92,246,.14), transparent 68%); z-index: -1; pointer-events: none; }
.state-icon { width: 78px; height: 78px; display: grid; place-items: center; margin: 0 auto 20px; border-radius: calc(var(--radius-lg) + 4px); color: var(--primary); background: linear-gradient(145deg, var(--primary-soft), color-mix(in srgb, var(--grad-b) 14%, transparent)); box-shadow: 0 14px 28px color-mix(in srgb, var(--primary) 16%, transparent), inset 0 1px 0 rgba(255,255,255,.48); }
.state-icon svg { width: 42px; height: 42px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.state-eyebrow { margin-bottom: 8px; color: var(--primary); font-size: 0.8125rem; font-weight: 700; letter-spacing: .12em; }
.state-card h1 { margin: 0; color: var(--text); font-size: clamp(26px, 4vw, 34px); line-height: 1.25; letter-spacing: -.02em; text-wrap: balance; }
.state-message { max-width: 420px; margin: 14px auto 0; color: var(--muted); font-size: 1rem; line-height: 1.75; overflow-wrap: anywhere; }
.state-actions { display: flex; justify-content: center; gap: 10px; flex-wrap: wrap; margin-top: 30px; }
.state-actions .layui-btn { min-width: 150px; min-height: 46px; justify-content: center; }
.state-help { max-width: 390px; margin: 22px auto 0; color: var(--muted); font-size: 0.78125rem; line-height: 1.7; }
[data-theme="dark"] .state-card { background: color-mix(in srgb, var(--panel) 96%, transparent); border-color: color-mix(in srgb, var(--border) 82%, var(--primary)); }
[data-theme="dark"] .state-icon { box-shadow: 0 14px 30px rgba(0,0,0,.24), inset 0 1px 0 rgba(255,255,255,.10); }
@media (max-width: 560px) {
  .state-main { align-items: start; padding-top: 34px; padding-bottom: 48px; }
  .state-card { border-radius: var(--radius-lg); padding: 32px 20px 28px; }
  .state-icon { width: 68px; height: 68px; margin-bottom: 16px; border-radius: var(--radius-lg); }
  .state-icon svg { width: 36px; height: 36px; }
  .state-card h1 { font-size: 1.6875rem; }
  .state-message { font-size: 0.9375rem; line-height: 1.7; }
  .state-card__actions, .state-actions { width: 100%; flex-direction: column; gap: 8px; }
  .state-actions .layui-btn { width: 100%; min-width: 0; }
  .state-help { margin-top: 18px; font-size: 0.75rem; }
}

/* 动画 */
@keyframes fadeInUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
.panel { animation: fadeInUp .35s ease both; }
.hero, .banner, .banner-slider { animation: fadeInUp .4s ease both; }
.ui-motion-off *, .ui-motion-off *::before, .ui-motion-off *::after { animation-duration: 0s !important; animation-delay: 0s !important; transition-duration: 0s !important; scroll-behavior: auto !important; }

/* 品牌主题自定义：颜色、圆角和字号均由后台安全变量控制（2026-08-30 13:57:41） */
.theme-customization-panel { margin-top:16px; padding:14px; border:1px solid color-mix(in srgb,var(--primary) 18%,var(--border)); border-radius:var(--radius,14px); background:color-mix(in srgb,var(--primary) 4%,var(--panel)); }
.theme-customization-panel h4 { margin:0 0 6px; font-size:0.875rem; }
.theme-custom-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; margin-top:12px; }
.theme-custom-grid > div { min-width:0; }
.theme-color-field { display:flex; flex-direction:column; gap:5px; }
.theme-radius-field { display:flex; flex-direction:column; gap:5px; }
.theme-radius-field input[type=number] { width:100%; min-height:40px; }
.theme-color-control { display:flex; align-items:center; gap:8px; min-height:44px; }
.theme-color-control input[type=color] { width:48px; height:40px; padding:3px; flex:0 0 48px; cursor:pointer; }
.theme-color-control code { color:var(--muted); font-size:0.75rem; letter-spacing:.04em; }
@media (max-width:900px) {
  .theme-custom-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media (max-width:768px) {
  .theme-customization-panel { padding:12px; }
  .theme-custom-grid { grid-template-columns:1fr; gap:10px; }
  .theme-color-control input[type=color] { width:52px; height:44px; flex-basis:52px; }
}

/* 顶栏（玻璃拟态） */
.topbar {
  position: sticky; top: 0; z-index: 900;
  background: color-mix(in srgb, var(--panel) 78%, transparent);
  -webkit-backdrop-filter: saturate(1.6) blur(16px);
  backdrop-filter: saturate(1.6) blur(16px);
  border-bottom: 1px solid var(--border);
  box-shadow: 0 6px 24px rgba(23,31,56,.05);
}
/* 顶栏底部品牌渐变发丝线 */
.topbar::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--primary) 45%, transparent) 30%, rgba(139,92,246,.45) 70%, transparent);
  opacity: .55; pointer-events: none;
}
@supports not (backdrop-filter: blur(4px)) { .topbar { background: var(--panel); } }
.topbar > .container { max-width: 1440px; }
.topbar-inner { display: flex; align-items: center; justify-content: space-between; height: var(--topbar-h); gap: 16px; min-width: 0; }
.topbar-inner .logo { flex: 0 0 auto; min-width: max-content; white-space: nowrap; }
.topbar-inner .topnav { flex: 1 1 auto; justify-content: flex-start; }
.topbar-inner > .theme-toggle, .topbar-actions .theme-toggle { flex: 0 0 auto; }
.topbar-actions { display: inline-flex; align-items: center; gap: 8px; flex: 0 0 auto; min-width: 0; }
.logo {
  font-size: 1.25rem; font-weight: 800; color: var(--text); letter-spacing: 0;
  display: inline-flex; align-items: center; gap: 9px;
}
/* 站点 logo 图标：未上传时使用默认闪电标，上传后改用真实图片 */
.logo::before {
  content: ''; width: var(--site-logo-height, 30px); height: var(--site-logo-height, 30px); border-radius: calc(var(--radius) - 5px); flex-shrink: 0;
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
  box-shadow: 0 3px 10px color-mix(in srgb, var(--primary) 35%, transparent), inset 0 1px 0 rgba(255,255,255,.35);
  background-image: url('../img/favicon.svg'), linear-gradient(135deg, var(--grad-a), var(--grad-b));
  background-size: 100% 100%;
  background-repeat: no-repeat;
}
.logo.has-logo-img::before { display: none; }
.site-logo-img {
  width: auto; height: calc(var(--site-logo-height, 30px) * var(--site-logo-scale, 1));
  max-width: min(var(--site-logo-max-width, 240px), 46vw); object-fit: contain; object-position: left center;
  border-radius: calc(var(--radius-sm) - 4px); flex-shrink: 0; background: transparent;
}
.site-footer-mark-img { width: auto; height: calc(22px * var(--site-logo-scale, 1)); max-width: min(var(--site-logo-max-width, 240px), 120px); object-fit: contain; object-position: left center; border-radius: 4px; flex: 0 0 auto; }
.extract-code-cell { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; justify-content: flex-end; }
/* 2026-09-17：extract-code-cell 内的长内容（IPv6、请求编号、ETag、链接等）必须能
   在 flex 中收缩换行 —— flex 子项默认 min-width:auto 导致无空格长串不换行而溢出，
   需显式 min-width:0 + overflow-wrap:anywhere 才能完整显示。 */
.extract-code-cell > code,
.extract-code-cell > span,
.extract-code-cell > a,
.extract-code-cell > small { min-width: 0; max-width: 100%; overflow-wrap: anywhere; word-break: break-word; white-space: normal; }
.extract-code-link { font-weight: 700; font-variant-numeric: tabular-nums; }
.extract-copy-btn { min-height: 32px; padding: 0 8px; }
.profile-copy-field { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.profile-copy-field input { flex: 1 1 180px; min-width: 0; }
.user-page .profile-copy-field { width: 100%; justify-content: flex-start; }
.branding-field { display: grid; gap: 8px; max-width: none; }
.branding-pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; grid-column: 1 / -1; }
.branding-slot { display: grid; gap: 8px; min-width: 0; }
.admin-sidebar-branding { grid-column: 1 / -1; display: grid; gap: 12px; padding: 12px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--panel-bg, #fff) 96%, transparent); min-width: 0; }
.admin-sidebar-branding-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px; }
.admin-sidebar-branding-head h4 { margin: 0; font-size: 0.9375rem; }
.admin-sidebar-branding-body { display: grid; grid-template-columns: minmax(220px, 320px) 1fr; gap: 16px; align-items: start; min-width: 0; }
.admin-sidebar-branding-preview { display: grid; gap: 8px; min-width: 0; }
.admin-brand-preview-sidebar { position: relative !important; display: flex; flex-direction: column; width: 100%; max-width: 260px; height: 210px; min-height: 0; overflow: hidden; border-radius: calc(var(--radius) - 2px); border: 1px solid var(--sb-border, color-mix(in srgb, var(--primary) 18%, transparent)); box-shadow: 0 8px 22px rgba(15,23,42,.14); }
.admin-brand-preview-sidebar .admin-brand-preview-brand { position: static; border-radius: 0; }
.admin-brand-preview-nav { flex: 1; display: grid; align-content: start; gap: 8px; padding: 12px 14px; background: var(--sb-bg, linear-gradient(180deg,#151a26 0%,#121722 100%)); }
.admin-brand-preview-nav span { display: block; height: 8px; border-radius: calc(var(--radius-sm) - 4px); background: color-mix(in srgb, var(--sb-text, #cfd6e4) 16%, transparent); }
.admin-brand-preview-nav span:first-child { width: 74%; background: color-mix(in srgb, var(--primary) 38%, transparent); }
.admin-brand-preview-nav span:nth-child(2) { width: 88%; }
.admin-brand-preview-nav span:nth-child(3) { width: 62%; }
.admin-brand-preview-nav span:nth-child(4) { width: 80%; }
.admin-brand-preview-nav span:nth-child(5) { width: 68%; }
.admin-brand-preview-nav span:nth-child(6) { width: 54%; }
.admin-sidebar-branding-fields { display: grid; gap: 10px; min-width: 0; }
.admin-sidebar-custom-field.is-hidden { display: none; }
.branding-slot-limits { display: grid; gap: 8px; padding: 8px 10px; border: 1px dashed var(--border); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--bg) 70%, transparent); }
.branding-slot-limits > summary { cursor: pointer; font-size: 0.8125rem; font-weight: 700; min-height: 32px; display: flex; align-items: center; }
.branding-card { display: flex; gap: 10px; align-items: flex-start; padding: 10px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--panel) 92%, var(--bg)); }
.branding-preview { flex: 0 0 auto; }
.branding-preview-open { position: relative; display: inline-flex; padding: 0; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); cursor: zoom-in; overflow: hidden; }
.branding-preview-img, .branding-preview img { width: 56px; height: 56px; object-fit: contain; display: block; background: var(--bg); }
.branding-preview-zoom { position: absolute; right: 4px; bottom: 4px; font-size: 0.6875rem; line-height: 1; padding: 3px 6px; border-radius: 999px; background: color-mix(in srgb, #000 55%, transparent); color: #fff; }
.branding-preview-empty { width: 56px; height: 56px; display: flex; align-items: center; justify-content: center; padding: 6px; border: 1px dashed var(--border); border-radius: var(--radius-sm); color: var(--muted); background: var(--bg); font-size: 0.75rem; text-align: center; }
.logo-scale-live { display: grid; gap: 8px; padding: 10px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--bg) 78%, var(--panel)); }
.logo-scale-live-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px; }
.logo-scale-live-bar { display: flex; align-items: center; gap: 10px; min-height: 56px; padding: 10px 12px; border-radius: var(--radius-sm); background: var(--panel); border: 1px dashed var(--border); overflow: hidden; }
.logo-scale-live-img { max-width: min(var(--site-logo-max-width, 240px), 100%); }
.logo-scale-live-name { font-weight: 800; white-space: nowrap; }
.logo-scale-live-empty { color: var(--muted); font-size: 0.8125rem; }
@media (max-width: 768px) {
  .logo-scale-live-bar { min-height: 48px; }
  .logo-scale-live-name { font-size: 0.9375rem; }
}
.branding-main { display: grid; gap: 6px; min-width: 0; flex: 1 1 auto; }
.branding-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.branding-status { margin: 0; font-size: 0.75rem; color: var(--muted); }
.branding-actions { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.branding-file-input { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; }
.branding-file-btn, .branding-zoom-btn, .branding-actions .layui-btn, .branding-clear { min-height: 36px; }
.branding-field input[type="text"] { min-height: 36px; }
.branding-choice-field { display: grid; gap: 6px; max-width: none; }
.branding-choice-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px; }
.branding-choice-head .hint { margin: 0; }
.branding-choice-list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.branding-choice-item { display: inline-flex; align-items: center; gap: 2px; min-height: 32px; padding: 3px 4px 3px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--bg); cursor: pointer; }
.branding-choice-item[data-choice-pick="1"]:hover { border-color: var(--primary); color: var(--primary); }
.branding-choice-item.is-on { border-color: transparent; background: linear-gradient(135deg, var(--grad-a), var(--grad-b)); color: #fff; }
.branding-choice-item.is-on .branding-choice-icon { color: #fff; }
.branding-choice-item b { font-size: 0.75rem; font-weight: 600; padding-right: 2px; }
.branding-choice-icon { width: 24px; height: 24px; min-height: 24px; padding: 0; border: 0; border-radius: calc(var(--radius-sm) - 2px); background: transparent; color: var(--muted); cursor: pointer; }
.branding-choice-add { display: inline-flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.branding-choice-add input[type="number"], .branding-choice-unit-custom { width: 72px; min-height: 36px; }
.branding-choice-add input[type="text"] { width: 88px; min-height: 36px; }
.branding-choice-unit { width: 88px; min-height: 36px; }
.branding-choice-add .layui-btn { min-height: 36px; }
.media-filter { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 14px; }
.media-filter select, .media-filter .layui-btn, .media-filter input[type="search"] { min-height: 44px; }
.media-filter input[type="search"] { min-width: 180px; flex: 1 1 180px; }
.media-thumb-btn { display: inline-flex; padding: 0; border: 0; background: transparent; cursor: zoom-in; }
.media-thumb { width: 56px; height: 56px; object-fit: contain; border-radius: var(--radius-sm); background: var(--bg); border: 1px solid var(--border); }
.media-upload-form, .media-import-form { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.media-import-form { margin-top: 12px; }
.media-upload-form input[type="file"], .media-upload-form .layui-btn, .media-import-form input[type="url"], .media-import-form .layui-btn { min-height: 44px; }
.media-import-form input[type="url"] { flex: 1 1 280px; }
.media-local-preview { display: grid; gap: 8px; margin-top: 12px; }
.media-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; }
.media-card { display: grid; gap: 10px; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: color-mix(in srgb, var(--panel) 92%, var(--bg)); }
.media-card-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 32px; }
.media-card-preview { position: relative; display: block; width: 100%; padding: 0; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: var(--bg); overflow: hidden; cursor: zoom-in; min-height: 140px; }
.media-card-preview img { width: 100%; height: 140px; object-fit: contain; display: block; background: var(--bg); }
.media-card-meta { display: grid; gap: 4px; }
.media-card-meta strong { font-size: 0.875rem; }
.media-empty { padding: 24px 8px; text-align: center; }
.media-batch-form { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin: 0 0 14px; }
.media-batch-form .layui-btn, .media-batch-form .checkbox { min-height: 44px; }
.media-ops { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.media-assign-form { display: inline-flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.media-assign-form select { min-height: 44px; }
@media (max-width: 768px) {
  .logo::before { width: max(24px, calc(var(--site-logo-height, 30px) - 4px)); height: max(24px, calc(var(--site-logo-height, 30px) - 4px)); }
  .site-logo-img { height: max(24px, calc((var(--site-logo-height, 30px) - 4px) * var(--site-logo-scale, 1))); width: auto; max-width: min(var(--site-logo-max-width, 240px), 52vw); }
  .branding-pair { grid-template-columns: 1fr; }
  .branding-field, .branding-slot, .media-filter, .branding-choice-field { grid-column: 1 / -1; max-width: none; }
  .branding-slot-limits > summary { min-height: 44px; }
  .branding-card { flex-wrap: wrap; }
  .branding-actions { flex-wrap: wrap; }
  .branding-file-btn, .branding-zoom-btn, .branding-actions .layui-btn, .branding-clear { min-height: 44px; }
  .branding-choice-item { min-height: 40px; }
  .branding-choice-head select, .branding-choice-add input, .branding-choice-add select, .branding-choice-add .layui-btn { min-height: 44px; }
  .branding-choice-add input[type="number"], .branding-choice-add input[type="text"], .branding-choice-unit, .branding-choice-unit-custom { width: auto; flex: 1 1 80px; }
  .branding-preview-open, .branding-preview-img, .branding-preview img, .branding-preview-empty { width: 64px; height: 64px; min-height: 64px; }
  .media-filter, .media-upload-form, .media-import-form, .media-batch-form, .media-ops, .media-assign-form { flex-direction: column; align-items: stretch; }
  .media-grid { grid-template-columns: 1fr; }
  .media-card-preview, .media-card-preview img { min-height: 180px; height: 180px; }
  .media-filter select, .media-filter .layui-btn, .media-filter input[type="search"], .media-upload-form input[type="file"], .media-upload-form .layui-btn, .media-import-form input[type="url"], .media-import-form .layui-btn, .media-batch-form .layui-btn, .media-assign-form select, .media-ops .link-btn, .media-ops .layui-btn, .media-ops .layui-btn-sm { width: 100%; min-height: 44px; }
  .banner-add-form input[type="file"], .banner-add-form select, .banner-add-form .banner-add-submit { width: 100%; min-height: 44px; }
  .banner-preview-open, .banner-preview-img { width: 100%; min-height: 140px; height: 140px; }
  .announcement-flags { flex-direction: column; align-items: stretch; }
  .announcement-flags .checkbox, .announcement-content-input { width: 100%; min-height: 44px; }
  .admin-sidebar-branding-body { grid-template-columns: 1fr; }
  .admin-brand-preview-sidebar { max-width: none; height: 190px; }
  .admin-sidebar-branding-fields .grid2 { grid-template-columns: 1fr; }
}
.mobile-auth-actions { display: none; }
.mobile-auth-link { min-height: 44px; display: inline-flex; align-items: center; justify-content: center; padding: 0 10px; color: var(--primary); font-size: 0.875rem; touch-action: manipulation; position: relative; z-index: 12; }
.mobile-auth-link.primary { border: 1px solid var(--primary); border-radius: calc(var(--radius-sm) - 2px); }
.topnav { display: flex; align-items: center; gap: 6px; min-width: 0; overflow-x: auto; scrollbar-width: none; }
.topnav.is-empty, .topnav:empty { display: none; background: transparent; box-shadow: none; padding: 0; min-width: 0; }
.topnav::-webkit-scrollbar { display: none; }
.topnav a {
  color: var(--muted); font-size: 0.875rem; touch-action: manipulation;
  padding: 7px 11px; border-radius: calc(var(--radius) - 5px); transition: color .15s, background .15s;
  display: inline-flex; align-items: center; gap: 5px;
  white-space: nowrap; flex: 0 0 auto; min-width: max-content; word-break: keep-all; writing-mode: horizontal-tb;
}
.topnav a:hover { color: var(--primary); background: var(--primary-soft); }
.topnav a .action-icon { width: 16px; height: 16px; margin-right: 0; flex-shrink: 0; }
.mobile-auth-actions a { display: inline-flex; align-items: center; gap: 4px; }
.nav-unread-badge, .mobile-nav-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px; padding: 0 4px; border-radius: 999px; background: var(--red); color: #fff; font-size: 0.625rem; line-height: 1; font-weight: 800; letter-spacing: 0; white-space: nowrap; max-width: 44px; overflow: hidden; font-variant-numeric: tabular-nums; box-shadow: 0 0 0 2px var(--panel); }
.topnav a { position: relative; }
.topnav a.nav-has-unread, .topnav a:has(.nav-unread-badge) { padding-right: 30px; }
.topnav a .nav-unread-badge { position: absolute; top: 1px; right: 4px; margin: 0; pointer-events: none; }
.nav-toggle { display:none; min-width:44px; min-height:44px; padding:0; align-items:center; justify-content:center; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); background:transparent; color:var(--text); cursor:pointer; touch-action:manipulation; transition:color .15s, border-color .15s, background .15s, transform .15s; position:relative; z-index:12; }
.nav-toggle:hover, .nav-toggle[aria-expanded="true"] { color:var(--primary); border-color:var(--primary); background:var(--primary-soft); }
.nav-toggle:active { transform:scale(.96); }
.nav-toggle:focus-visible { outline:3px solid color-mix(in srgb, var(--primary) 35%, transparent); outline-offset:2px; }
.nav-toggle svg { width:21px; height:21px; display:block; pointer-events:none; }
.topnav-more { position: relative; flex: 0 0 auto; display: none; }
.topnav-more.is-visible, .topnav-more.is-measuring { display: inline-flex; }
.topnav-more-toggle {
  min-height: 36px; padding: 0 12px; display: inline-flex; align-items: center; gap: 4px;
  border: 1px solid var(--border); border-radius: calc(var(--radius) - 5px); background: transparent; color: var(--muted);
  font: inherit; font-size: 0.875rem; cursor: pointer; white-space: nowrap; touch-action: manipulation;
}
.topnav-more-toggle svg { width: 14px; height: 14px; }
.topnav-more-toggle:hover, .topnav-more.is-open .topnav-more-toggle { color: var(--primary); border-color: var(--primary); background: var(--primary-soft); }
.topnav-more-menu {
  display: none; position: absolute; right: 0; top: calc(100% + 8px); min-width: 180px; padding: 8px;
  border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: var(--panel); box-shadow: var(--shadow-md); z-index: 40;
}
.topnav-more.is-open .topnav-more-menu { display: grid; gap: 2px; }
.topnav-more-menu a { width: 100%; min-width: 0; justify-content: flex-start; }
.mobile-bottom-nav { display:none; }
.theme-toggle { min-height: 40px; padding: 0 12px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 5px); background: transparent; color: var(--text); cursor: pointer; font: inherit; font-size: 0.8125rem; line-height: 1; transition: color .15s, border-color .15s, background .15s; touch-action: manipulation; }
.theme-toggle:hover { border-color: var(--primary); color: var(--primary); background: color-mix(in srgb, var(--primary) 8%, transparent); }
.theme-toggle:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 35%, transparent); outline-offset: 2px; }

/* Banner */
.banner { margin-top: 16px; }
.banner img { width: 100%; border-radius: calc(var(--radius) - 2px); }
.banner-slider { position: relative; border-radius: calc(var(--radius) - 2px); overflow: hidden; margin-top: 16px; }
.banner-slide { display: none; }
.banner-slide.active { display: block; }
.banner-slide.is-static { pointer-events: none; }
.banner-slide img { width: 100%; display: block; }
.banner-thumb-btn { display: inline-flex; padding: 0; border: 0; background: transparent; cursor: zoom-in; }
.banner-thumb { height: 72px; width: auto; max-width: 160px; object-fit: cover; border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--bg); }
.banner-add-preview { margin-top: 12px; display: grid; gap: 8px; }
.banner-preview-open { position: relative; display: inline-flex; padding: 0; border: 1px solid var(--border); border-radius: var(--radius); background: var(--bg); overflow: hidden; cursor: zoom-in; }
.banner-preview-img { width: 220px; height: 110px; object-fit: contain; display: block; background: var(--bg); }
.banner-add-form .banner-add-submit { margin-top: 12px; min-height: 44px; }
.banner-add-form input[type="file"], .banner-add-form select { min-height: 44px; }
.banner-dots { position: absolute; bottom: 12px; left: 50%; transform: translateX(-50%); display: flex; gap: 6px; }
.banner-dot { width: 8px; height: 8px; border-radius: 50%; background: rgba(255,255,255,.5); cursor: pointer; }
.banner-dot.active { background: #fff; }

/* 提取码入口 */
.hero { text-align: center; padding: 60px 0 38px; position: relative; }
/* Hero 品牌氛围光斑（深色模式自动加深） */
.hero::before, .hero::after {
  content: ''; position: absolute; border-radius: 50%; pointer-events: none; z-index: -1;
  filter: blur(48px); opacity: .85;
}
.hero::before { width: 300px; height: 300px; top: -90px; left: 5%; background: radial-gradient(circle, color-mix(in srgb, var(--primary) 20%, transparent), transparent 68%); }
.hero::after { width: 340px; height: 340px; top: -80px; right: 3%; background: radial-gradient(circle, rgba(139,92,246,.18), transparent 68%); }
[data-theme="dark"] .hero::before { background: radial-gradient(circle, rgba(107,139,255,.22), transparent 68%); }
[data-theme="dark"] .hero::after { background: radial-gradient(circle, rgba(150,110,255,.20), transparent 68%); }
.hero h1 {
  font-size: 2.25rem; font-weight: 800; letter-spacing: -.5px; line-height: 1.25;
  text-wrap: balance;
  background: linear-gradient(120deg, var(--grad-a), var(--grad-b), var(--grad-c), var(--grad-a));
  background-size: 220% auto;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: heroTitleShift 7s var(--ease-smooth) infinite;
}
@keyframes heroTitleShift { 0%, 100% { background-position: 0% center; } 50% { background-position: 100% center; } }
.hero .sub { color: var(--muted); margin: 12px auto 26px; max-width: 560px; font-size: 0.9375rem; }
.code-form {
  display: flex; gap: 8px; max-width: 560px; margin: 0 auto;
  background: var(--panel); border: 1.5px solid var(--border); border-radius: 999px;
  padding: 6px 6px 6px 22px; box-shadow: var(--shadow-md);
  transition: box-shadow .2s, border-color .2s;
}
.code-form:hover { border-color: color-mix(in srgb, var(--primary) 30%, var(--border)); }
.code-form:focus-within {
  border-color: var(--primary);
  box-shadow: 0 0 0 4px var(--primary-soft), 0 10px 28px color-mix(in srgb, var(--primary) 20%, transparent);
}
.code-form input {
  flex: 1; min-width: 0; border: none; background: transparent;
  font-size: 1rem; color: var(--text); outline: none; letter-spacing: 2px;
  font-weight: 500; caret-color: var(--primary);
  text-transform: uppercase;
}
.code-form input::placeholder { letter-spacing: normal; font-weight: 400; text-transform: none; }
.code-form .layui-btn { border-radius: 999px; padding: 10px 30px; letter-spacing: 2px; }
.code-form-hint { text-align: center; margin-top: 14px; font-size: 0.78125rem; user-select: none; }
.code-form-hint b { color: var(--primary); font-weight: 600; }

/* 面板 */
.panel {
  background: var(--panel); border-radius: var(--radius); padding: 26px; margin-bottom: 24px;
  border: 1px solid var(--border); box-shadow: var(--shadow-sm);
  transition: box-shadow .22s var(--ease-smooth), border-color .22s var(--ease-smooth);
}
.panel:hover { box-shadow: var(--shadow-md); border-color: color-mix(in srgb, var(--primary) 16%, var(--border)); }
.panel h3 { font-size: 1rem; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
.panel h3 .action-icon { color: var(--primary); }

/* 搜索框与筛选栏（圆角输入 + 放大镜图标 + 清空按钮） */
.search-bar, .filter {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.search-bar { position: relative; align-items: center; }
/* 统一搜索栏：语法提示与最近/热门词标签（各页面共用） */
.search-ui { display: flex; flex-direction: column; gap: 8px; }
.search-ui-hint { margin: 0; font-size: 0.78125rem; line-height: 1.7; }
.search-ui-hint code { background: color-mix(in srgb, var(--muted) 14%, transparent); padding: 1px 6px; border-radius: 4px; }
.search-chips { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.search-chips-label { font-size: 0.75rem; color: var(--muted); margin-right: 2px; }
.search-chip { display: inline-flex; align-items: center; min-height: 34px; padding: 5px 12px; border-radius: 999px; background: color-mix(in srgb, var(--muted) 12%, transparent); color: var(--text); font-size: 0.78125rem; text-decoration: none; }
.search-chip:hover { background: color-mix(in srgb, var(--primary) 16%, transparent); color: var(--primary); }
.search-bar-range { margin-top: 8px; }
/* 搜索命中高亮：先转义再标注，长词优先 */
.search-hit { background: #ffe58a; color: inherit; border-radius: 3px; padding: 0 2px; }
@media (max-width: 760px) {
  .search-ui-hint { font-size: 0.75rem; }
  .search-chip { min-height: 44px; }
  .search-bar-range { flex-direction: column; align-items: stretch; }
  .search-bar-range input[type="date"], .search-bar-range .layui-btn { width: 100%; }
}
.search-icon {
  position: absolute; left: 12px; top: 50%; transform: translateY(-50%);
  width: 18px; height: 18px; min-width: 18px; min-height: 18px;
  color: var(--muted); pointer-events: none;
  fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
  transition: color .18s ease, transform .18s ease; z-index: 2;
}
.input-wrap .search-icon,
.search-bar .input-wrap .search-icon,
.filter .input-wrap .search-icon {
  left: 12px; width: 18px; height: 18px; max-width: 18px; max-height: 18px;
}
.input-wrap:focus-within .search-icon,
.search-bar:focus-within .input-wrap .search-icon { color: var(--primary); transform: translateY(-50%) scale(1.08); }
.search-bar > input[type=text]:first-child,
.search-bar > input[type=search]:first-child,
.search-bar .input-wrap > input[type=text],
.search-bar .input-wrap > input[type=search] {
  flex: 1 1 220px; min-width: 0; min-height: 46px; padding-left: 40px;
  border-radius: calc(var(--radius) - 3px); background: color-mix(in srgb, var(--panel) 94%, var(--bg));
}
.search-bar > select:first-of-type { border-radius: calc(var(--radius) - 3px); padding-left: 16px; width: auto; min-width: 128px; cursor: pointer; }
.search-bar > .layui-btn, .filter > .layui-btn { border-radius: calc(var(--radius) - 3px); padding-left: 22px; padding-right: 22px; flex-shrink: 0; }
/* 搜索框旁边按钮：悬停带品牌光晕，触控设备保留轻微下压反馈 */
.search-bar > .layui-btn, .filter > .layui-btn {
  min-height: 46px;
  box-shadow: 0 2px 8px color-mix(in srgb, var(--primary) 16%, transparent), inset 0 1px 0 rgba(255,255,255,.28);
}
.search-bar > .layui-btn:hover, .filter > .layui-btn:hover,
.search-bar > .layui-btn:focus-visible, .filter > .layui-btn:focus-visible {
  box-shadow: 0 8px 20px color-mix(in srgb, var(--primary) 32%, transparent), inset 0 1px 0 rgba(255,255,255,.28);
  transform: translateY(-1px);
}
.search-bar > .layui-btn:active, .filter > .layui-btn:active { transform: translateY(0) scale(.98); }
.search-bar > .layui-btn.layui-btn-primary:hover, .filter > .layui-btn.layui-btn-primary:hover,
.search-bar > .layui-btn.layui-btn-primary:focus-visible, .filter > .layui-btn.layui-btn-primary:focus-visible {
  box-shadow: 0 6px 16px color-mix(in srgb, var(--primary) 14%, transparent);
}

/* Tabs */
.tabs {
  display: flex; gap: 4px; margin-bottom: 20px; padding: 5px;
  background: color-mix(in srgb, var(--bg) 72%, var(--panel));
  border: 1px solid var(--border); border-radius: calc(var(--radius) - 1px);
  width: fit-content; max-width: 100%;
}
.tab {
  padding: 10px 18px; background: none; border: none; font-size: 0.9375rem; cursor: pointer;
  color: var(--muted); border-radius: var(--radius-sm); transition: color .18s var(--ease-smooth), background .18s var(--ease-smooth), box-shadow .18s var(--ease-smooth), transform .18s var(--ease-smooth);
}
.tab:active { transform: scale(.97); }
.tab:hover { color: var(--text); background: var(--bg); }
.tab.active { color: #fff; font-weight: 600; background: linear-gradient(135deg, var(--grad-a), var(--grad-b)); box-shadow: 0 4px 12px color-mix(in srgb, var(--primary) 32%, transparent), inset 0 1px 0 rgba(255,255,255,.22); }

/* 拖拽上传 */
.dropzone {
  border: 2px dashed var(--border); border-radius: var(--radius); padding: 44px 32px;
  text-align: center; cursor: pointer; transition: border-color .18s, background .18s, transform .18s;
  position: relative; overflow: hidden;
}
.dropzone::before {
  content: ''; position: absolute; inset: -40%; opacity: 0; transition: opacity .25s; pointer-events: none;
  background: radial-gradient(circle at center, var(--primary-soft), transparent 62%);
}
.dropzone:hover, .dropzone.dragover { border-color: var(--primary); background: color-mix(in srgb, var(--primary) 4.5%, transparent); transform: translateY(-1px); }
.dropzone:hover::before, .dropzone.dragover::before { opacity: 1; }
.dropzone.dragover { border-style: solid; }
.dz-icon { font-size: 2.5rem; line-height: 1; display: inline-block; transition: transform .22s var(--ease-spring); }
.dropzone:hover .dz-icon, .dropzone.dragover .dz-icon { transform: translateY(-3px) scale(1.06); }
.home-page.home-global-file-dragover .dropzone { border-color: var(--primary); border-style: solid; background: color-mix(in srgb, var(--primary-soft) 72%, var(--panel)); box-shadow: 0 0 0 5px color-mix(in srgb, var(--primary) 12%, transparent); transform: translateY(-1px); }
.home-page.home-global-file-dragover .dropzone::after { content: '松开鼠标即可加入文件或文件夹'; position: absolute; inset: 10px; z-index: 2; display: grid; place-items: center; border: 2px solid color-mix(in srgb, var(--primary) 50%, transparent); border-radius: calc(var(--radius) - 4px); background: color-mix(in srgb, var(--panel) 76%, var(--primary-soft)); color: var(--primary); font-size: clamp(16px, 2vw, 22px); font-weight: 800; letter-spacing: .04em; pointer-events: none; }
.dz-inner p { color: var(--muted); margin-top: 8px; }
/* 正文链接用 --link：浅色主题加深至 WCAG AA 对比度，深色主题同 primary */
.link { color: var(--link, var(--primary)); cursor: pointer; }
.hint { color: var(--muted); font-size: 0.8125rem; }

/* 上传队列 */
.queue { margin-top: 16px; }
.queue-restore-notice {
  display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap;
  margin-top: 12px; padding: 12px 14px; border: 1px solid color-mix(in srgb, var(--primary) 34%, var(--border));
  border-radius: var(--radius-sm); background: color-mix(in srgb, var(--primary-soft) 72%, var(--panel));
  animation: panelRise .24s ease;
}
.queue-restore-copy { display: flex; align-items: baseline; gap: 10px; min-width: 0; flex: 1 1 260px; }
.queue-restore-copy strong { color: var(--text); font-size: 0.875rem; }
.queue-restore-actions { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.queue-restore-actions .layui-btn { min-height: 44px; }
.queue-item-restored { outline: 1px solid color-mix(in srgb, var(--primary) 26%, transparent); }
.queue-item {
  display: flex; align-items: center; gap: 12px; padding: 10px 14px;
  background: var(--bg); border-radius: var(--radius-sm); margin-bottom: 8px;
  animation: queueItemIn .24s ease both;
}
.q-select { width: 18px; height: 18px; flex: 0 0 auto; accent-color: var(--primary); }
.queue-item .qname { flex: 1 1 220px; min-width: 0; max-width: 100%; overflow: visible; text-overflow: clip; white-space: normal; overflow-wrap: anywhere; word-break: break-word; line-height: 1.5; font-size: 0.875rem; }
.q-progress-wrap { flex: 1 1 220px; min-width: 160px; }
.queue-item .qinfo { color: var(--muted); font-size: 0.75rem; min-width: 120px; text-align: right; }
.progress { height: 7px; background: var(--border); border-radius: 99px; overflow: hidden; margin-top: 4px; }
.progress-bar {
  height: 100%; width: 0; border-radius: 99px;
  background: linear-gradient(90deg, var(--grad-a), var(--grad-b));
  transition: width .2s; position: relative;
}
.progress-bar::after {
  content: ''; position: absolute; inset: 0; border-radius: inherit; opacity: .35;
  background-image: linear-gradient(45deg, rgba(255,255,255,.5) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.5) 50%, rgba(255,255,255,.5) 75%, transparent 75%);
  background-size: 14px 14px; animation: progressStripe 1s linear infinite;
}
@keyframes progressStripe { from { background-position: 0 0; } to { background-position: 28px 0; } }
@keyframes queueItemIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }
.progress-error { background: linear-gradient(90deg, #f3706d, var(--red)) !important; }
.queue-item.upload-done .qinfo, .queue-item.upload-done .qname { color: var(--green); }
.queue-item { transition: opacity .2s ease; }
.queue-item:hover { background: color-mix(in srgb, var(--primary) 4%, var(--bg)); }
.upload-queue-toolbar, .upload-queue-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.upload-queue-toolbar { justify-content: space-between; margin-top: 12px; padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--panel) 88%, var(--primary) 12%); animation: fadeIn .22s ease; }
.queue-toolbar-meta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; min-width: 0; }
.queue-select-all { display: inline-flex; align-items: center; gap: 7px; margin: 0; color: var(--text); white-space: nowrap; }
.queue-select-all input { width: 18px; height: 18px; margin: 0; accent-color: var(--primary); }
.queue-order { min-height: 44px; min-width: 132px; padding: 8px 34px 8px 11px; font-size: 0.8125rem; }
.queue-summary { color: var(--muted); font-size: 0.8125rem; min-width: 0; overflow-wrap: anywhere; }
/* 本次上传总文件数量徽标：突出显示这一轮上传的文件总数与完成情况。 */
.queue-batch-total { display: inline-flex; align-items: center; min-height: 26px; padding: 4px 11px; border: 1px solid color-mix(in srgb, var(--primary) 26%, var(--border)); border-radius: 999px; background: color-mix(in srgb, var(--primary-soft) 55%, var(--panel)); color: var(--primary); font-size: 0.78125rem; font-weight: 700; line-height: 1.3; white-space: nowrap; }
.queue-batch-total[hidden] { display: none; }
.batch-edit-panel { margin-top: 12px; padding: 16px; border: 1px solid color-mix(in srgb, var(--primary) 24%, var(--border)); border-radius: var(--radius-sm); background: var(--panel); box-shadow: 0 8px 24px rgba(15,23,42,.08); animation: panelRise .24s ease; }
@keyframes panelRise { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: translateY(0); } }

/* 设置 */
.settings { margin-top: 20px; }
.settings h4 { font-size: 0.875rem; margin-bottom: 12px; color: var(--muted); }
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 14px; }
.grid2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; }
label { display: block; font-size: 0.8125rem; margin-bottom: 6px; color: var(--muted); }
input:where(:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]):not([type=button]):not([type=submit]):not([type=reset])),
select,
textarea {
  width: 100%; min-height: 44px; padding: 10px 13px; border: 1px solid var(--border); border-radius: var(--radius-sm);
  font-size: 0.875rem; line-height: 1.4; background: color-mix(in srgb, var(--panel) 92%, var(--bg)); color: var(--text); outline: none; font-family: inherit;
  box-shadow: inset 0 1px 2px rgba(15, 23, 42, .03);
  transition: border-color .18s ease, box-shadow .18s ease, background .18s ease, opacity .18s ease;
}
input::placeholder, textarea::placeholder { color: color-mix(in srgb, var(--muted) 82%, transparent); }
input:hover:not(:disabled):not(:read-only):not(:focus), select:hover:not(:disabled):not(:focus), textarea:hover:not(:disabled):not(:read-only):not(:focus) {
  border-color: color-mix(in srgb, var(--primary) 32%, var(--border));
}
input:focus, select:focus, textarea:focus {
  border-color: var(--primary); background: var(--panel);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 16%, transparent);
}
input:disabled, select:disabled, textarea:disabled, input[readonly] {
  opacity: .68; cursor: not-allowed; background: color-mix(in srgb, var(--bg) 78%, var(--panel));
}
input.input-invalid, select.input-invalid, textarea.input-invalid,
input:user-invalid, select:user-invalid, textarea:user-invalid {
  border-color: var(--red);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--red) 12%, transparent);
}
select {
  appearance: none; -webkit-appearance: none; padding-right: 42px; cursor: pointer;
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='m7 10 5 5 5-5'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 13px center; background-size: 18px 18px;
}
[data-theme="dark"] select {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23c7cede' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='m7 10 5 5 5-5'/%3E%3C/svg%3E");
}
select:disabled { background-image: none; cursor: not-allowed; }
textarea { min-height: 96px; resize: vertical; }
input[type=date], input[type=datetime-local], input[type=time], input[type=month], input[type=week] { position: relative; min-height: 44px; cursor: pointer; }
input[type=date]::-webkit-calendar-picker-indicator,
input[type=datetime-local]::-webkit-calendar-picker-indicator,
input[type=time]::-webkit-calendar-picker-indicator { cursor: pointer; opacity: .72; filter: none; }
[data-theme="dark"] input[type=date]::-webkit-calendar-picker-indicator,
[data-theme="dark"] input[type=datetime-local]::-webkit-calendar-picker-indicator,
[data-theme="dark"] input[type=time]::-webkit-calendar-picker-indicator { filter: invert(1) brightness(1.8) contrast(.85); }
input[type=file] {
  display: block; width: 100%; min-height: 44px; padding: 8px 10px; overflow: hidden;
  border: 1px dashed color-mix(in srgb, var(--primary) 35%, var(--border)); border-radius: var(--radius-sm);
  color: var(--muted); background: color-mix(in srgb, var(--primary) 4%, var(--panel)); cursor: pointer;
}
input[type=file]::file-selector-button,
input[type=file]::-webkit-file-upload-button {
  min-height: 32px; margin-right: 10px; padding: 6px 13px; border: 0; border-radius: calc(var(--radius-sm) - 2px);
  background: var(--primary-soft); color: var(--primary); font-size: 0.8125rem; font-weight: 600; cursor: pointer;
}
.checkbox input, .compact-checkbox input {
  width: 20px; height: 20px; margin: 0; border-radius: 5px; accent-color: var(--primary);
  cursor: pointer; transition: transform .12s ease;
}
.checkbox input:active, .compact-checkbox input:active { transform: scale(.92); }
.input-hint, small.hint { margin-top: 6px; line-height: 1.45; }
.custom-code-preview { display: block; margin-top: 6px; font-size: 0.8125rem; line-height: 1.45; color: var(--primary); font-weight: 600; }
.checkbox { display: flex; align-items: center; gap: 8px; font-size: 0.875rem; color: var(--text); margin-bottom: 12px; }

/* 文本 */
.text-area { min-height: 240px; font-family: "SF Mono", Consolas, monospace; font-size: 0.875rem; }
.text-meta { display: flex; align-items: center; justify-content: space-between; gap: 10px; text-align: right; color: var(--muted); font-size: 0.75rem; margin: 6px 0 0; }

/* 按钮 */
.layui-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 10px 22px; border: none; border-radius: var(--radius-sm);
  min-height: 44px; font-size: 0.875rem; font-weight: 500; cursor: pointer;
  transition: background .18s var(--ease-smooth), transform .12s var(--ease-smooth), box-shadow .18s var(--ease-smooth), color .18s var(--ease-smooth), border-color .18s var(--ease-smooth);
  background: var(--primary); color: #fff; text-decoration: none;
  touch-action: manipulation; position: relative; z-index: 1; overflow: hidden;
  letter-spacing: .2px;
}
/* 按钮悬停光泽扫过（半透明高光从左向右划过，不影响文字可读性） */
.layui-btn::before {
  content: ''; position: absolute; top: 0; bottom: 0; left: 0; width: 46%;
  background: linear-gradient(105deg, transparent 0%, rgba(255,255,255,.30) 50%, transparent 100%);
  transform: translateX(-140%) skewX(-18deg); pointer-events: none;
  transition: transform .6s var(--ease-smooth);
}
.layui-btn:hover::before { transform: translateX(320%) skewX(-18deg); }
.layui-btn:disabled::before, .layui-btn-primary::before { display: none; }
.layui-btn-normal { background: linear-gradient(135deg, var(--grad-a), var(--grad-b)); color: #fff; box-shadow: 0 4px 14px color-mix(in srgb, var(--primary) 32%, transparent), inset 0 1px 0 rgba(255,255,255,.26); }
.layui-btn-normal:hover { background: linear-gradient(135deg, #4270f5, #7c4df0); box-shadow: 0 8px 22px color-mix(in srgb, var(--primary) 40%, transparent), inset 0 1px 0 rgba(255,255,255,.26); transform: translateY(-1px); }
.layui-btn:hover { background: var(--primary-hover); box-shadow: var(--shadow-md); }
.layui-btn .action-icon { width: 16px; height: 16px; margin-right: 0; vertical-align: 0; }
.layui-btn:focus-visible, .link-btn:focus-visible, .ops button.link:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 32%, transparent); outline-offset: 2px; }
.layui-btn-primary:focus-visible, .layui-btn-primary:focus { box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 16%, transparent); outline: 2px solid color-mix(in srgb, var(--primary) 78%, transparent); outline-offset: 2px; }
.layui-btn:active { transform: scale(.97) translateY(0); }
.layui-btn:disabled { background: #c0c4cc; cursor: not-allowed; box-shadow: none; }
.layui-btn-danger { background: var(--red); color: #fff; }
.layui-btn-danger:hover { background: #d63f3c; color: #fff; }
.layui-btn-primary { background: transparent; color: var(--link, var(--primary)); border: 1px solid color-mix(in srgb, var(--primary) 45%, transparent); box-shadow: none; }
.layui-btn-primary:hover { background: var(--primary-soft); border-color: var(--primary); box-shadow: none; }
.layui-btn-sm { padding: 6px 14px; font-size: 0.8125rem; }

/* 结果 */
.result { text-align: center; }
.result-code {
  margin: 20px auto 18px; display: inline-flex; align-items: center; justify-content: center;
  min-width: 220px; padding: 16px 36px; border-radius: calc(var(--radius) + 2px);
  background:
    linear-gradient(var(--panel), var(--panel)) padding-box,
    linear-gradient(120deg, var(--grad-a), var(--grad-b)) border-box;
  border: 2px solid transparent;
  box-shadow: var(--shadow-md);
}
.big-code {
  font-size: 2.625rem; font-weight: 800; letter-spacing: 8px;
  background: linear-gradient(120deg, var(--grad-a), var(--grad-b), var(--grad-c), var(--grad-a));
  background-size: 220% auto;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  font-family: "SF Mono", ui-monospace, Consolas, monospace;
  animation: heroTitleShift 6s var(--ease-smooth) infinite;
}
/* 大字提取码为可点击复制按钮：重置原生外观并补反馈 */
.big-code-btn {
  border: 0; padding: 0; margin: 0; cursor: pointer;
  -webkit-tap-highlight-color: transparent; touch-action: manipulation;
  transition: transform .15s, filter .15s;
}
.big-code-btn:hover { transform: translateY(-1px) scale(1.02); filter: brightness(1.08); }
.big-code-btn:active { transform: scale(.96); }
.big-code-btn:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 35%, transparent); outline-offset: 4px; }
.result-link { display: flex; gap: 10px; max-width: 540px; margin: 0 auto 16px; }
.result-link input { flex: 1; }
.qr-wrap { display: flex; justify-content: center; }
#qrcode { background: #fff; padding: 12px; border-radius: calc(var(--radius) - 2px); box-shadow: var(--shadow-sm); border: 1px solid var(--border); }

/* 批量上传结果列表 */
.zip-list { display: flex; flex-direction: column; gap: 8px; max-width: 640px; margin: 0 auto; text-align: left; }
.zip-item { display: flex; align-items: center; gap: 10px; padding: 10px 14px; background: var(--bg); border-radius: calc(var(--radius-sm) - 2px); font-size: 0.875rem; }
.zip-item .checkbox { margin: 0; min-height: 44px; }
.zip-item .zname { flex: 1 1 220px; min-width: 0; white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; word-break: break-word; line-height: 1.5; }
.zip-item .zcode { font-weight: 700; color: var(--primary); letter-spacing: 1px; }

/* 多文件上传分享结果中心（2026-08-31 17:49:45） */
.share-result-center { position: relative; overflow: hidden; border-color: color-mix(in srgb, var(--primary) 20%, var(--border)); }
.share-result-head { align-items: flex-start; gap: 16px; }
.share-result-head > div:first-child { min-width: 0; }
.share-result-head-actions { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.share-result-filter-label { margin: 0; color: var(--muted); font-size: 0.8125rem; white-space: nowrap; }
.share-result-filter { width: auto; min-width: 126px; min-height: 40px; }
.share-result-toolbar { display: flex; flex-wrap: wrap; gap: 8px; margin: 14px 0; padding: 10px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--primary) 4%, var(--panel)); align-items: center; }
.share-result-toolbar .layui-btn { min-height: 40px; }
.share-result-select-all { display: inline-flex; align-items: center; gap: 8px; margin: 0; min-height: 40px; }
.share-result-select-all input { width: 18px; height: 18px; margin: 0; accent-color: var(--primary); }
.share-result-toolbar .hint { margin-right: auto; }
.share-result-table-wrap { width: 100%; overflow-x: auto; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); -webkit-overflow-scrolling: touch; }
.share-result-table { width: 100%; min-width: 920px; border-collapse: separate; border-spacing: 0; table-layout: fixed; font-size: 0.8125rem; }
.share-result-table th { padding: 11px 10px; color: var(--muted); background: color-mix(in srgb, var(--primary) 5%, var(--panel)); border-bottom: 1px solid var(--border); text-align: left; font-size: 0.75rem; font-weight: 700; white-space: nowrap; }
.share-result-table th.share-result-check-col,
.share-result-table td.share-result-check-cell { width: 44px; }
.share-result-check-cell input { width: 18px; height: 18px; margin: 0; accent-color: var(--primary); }
.share-result-table th:nth-child(2) { width: 20%; }
.share-result-table th:nth-child(3) { width: 10%; }
.share-result-table th:nth-child(4) { width: 10%; }
.share-result-table th:nth-child(5) { width: 14%; }
.share-result-table th:nth-child(6) { width: 10%; }
.share-result-table th:nth-child(7) { width: 10%; }
.share-result-table th:nth-child(8) { width: 14%; }
.share-result-table th:last-child { width: 250px; }
.share-result-table td { padding: 12px 10px; border-bottom: 1px solid var(--border); vertical-align: top; color: var(--text); }
.share-result-table tbody tr:last-child td { border-bottom: 0; }
.share-result-table tbody tr { transition: background-color .16s var(--ease-smooth), box-shadow .16s var(--ease-smooth); }
.share-result-table tbody tr:hover { background: color-mix(in srgb, var(--primary) 3.5%, var(--panel)); }
.share-result-table tbody tr.share-result-status-error { background: color-mix(in srgb, var(--red) 4%, var(--panel)); }
.share-result-table tbody tr.share-result-status-processing { background: color-mix(in srgb, var(--primary) 3%, var(--panel)); }
.share-result-name-cell { min-width: 0; }
.share-result-name { display: block; max-width: 100%; color: var(--text); font-weight: 650; line-height: 1.45; white-space: normal; overflow-wrap: anywhere; word-break: break-word; }
.share-result-kind-badge { display: inline-flex; align-items: center; margin-top: 5px; padding: 1px 7px; border-radius: 999px; color: var(--primary); background: var(--primary-soft); font-size: 0.6875rem; font-weight: 700; }
.share-result-code { display: inline-flex; padding: 3px 8px; border-radius: calc(var(--radius-sm) - 2px); color: var(--primary); background: var(--primary-soft); font-family: "SF Mono", ui-monospace, Consolas, monospace; font-size: 0.875rem; font-weight: 800; letter-spacing: .08em; }
.share-result-size-cell, .share-result-expire-cell, .share-result-method-cell, .share-result-completed-cell { color: var(--muted); overflow-wrap: anywhere; word-break: break-word; }
.share-result-status-cell { min-width: 0; }
.share-result-status-badge { display: inline-flex; align-items: center; min-height: 26px; padding: 3px 9px; border-radius: 999px; font-size: 0.75rem; font-weight: 750; white-space: nowrap; }
.share-result-status-badge.status-success { color: #087e64; background: color-mix(in srgb, var(--green) 15%, transparent); }
.share-result-status-badge.status-processing { color: var(--primary); background: var(--primary-soft); }
.share-result-status-badge.status-error { color: #c83d39; background: color-mix(in srgb, var(--red) 14%, transparent); }
.share-result-message { display: block; max-width: 180px; margin-top: 5px; color: var(--red); line-height: 1.45; white-space: normal; overflow-wrap: anywhere; word-break: break-word; }
.share-result-actions-cell { min-width: 0; }
.share-result-actions { display: flex; flex-wrap: wrap; gap: 6px; }
.share-result-action { min-height: 34px; padding: 5px 9px; font-size: 0.75rem; white-space: nowrap; }
.share-result-detail-action { color: #fff; background: linear-gradient(135deg, var(--grad-a), var(--grad-b)); border-color: transparent; }
.share-result-detail-action:hover { color: #fff; }
.share-result-remove-action { color: var(--red); border-color: color-mix(in srgb, var(--red) 45%, transparent); }
.share-result-empty-row td { padding: 24px; color: var(--muted); text-align: center; }
.share-result-mobile-hint { display: none; margin-top: 10px; }
.share-result-detail { border-color: color-mix(in srgb, var(--primary) 18%, var(--border)); }
.share-result-detail-list-wrap { margin-top: 18px; padding-top: 16px; border-top: 1px dashed var(--border); }
.share-result-detail-list-head { align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 10px; }
.share-result-detail-table { min-width: 0; }
.share-result-detail-table th:first-child { width: 28%; }
.share-result-detail-table th:nth-child(2) { width: 12%; }
.share-result-detail-table th:nth-child(3) { width: 32%; }
.share-result-detail-table th:last-child { width: 28%; }
.share-result-detail-link-cell input {
  width: 100%; min-width: 0; padding: 7px 9px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px);
  background: var(--bg); color: var(--text); font-size: 0.75rem; line-height: 1.35;
}
.share-result-detail-link-cell input:focus { outline: none; border-color: color-mix(in srgb, var(--primary) 56%, var(--border)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 12%, transparent); }
.share-result-detail-actions-cell { min-width: 0; }
.share-result-layout-compact .share-result-table td { padding-top: 8px; padding-bottom: 8px; }
.share-result-layout-compact .share-result-action { min-height: 30px; padding: 3px 7px; }

/* 后台选择“卡片”时，电脑端也使用两列结果卡片。 */
.share-result-layout-card .share-result-table-wrap { overflow: visible; border: 0; background: transparent; }
.share-result-layout-card .share-result-table { display: block; min-width: 0; }
.share-result-layout-card .share-result-table thead { display: none; }
.share-result-layout-card .share-result-table tbody { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.share-result-layout-card .share-result-table tbody tr { display: grid; grid-template-columns: minmax(0, 1fr) minmax(110px, auto); gap: 8px 14px; padding: 15px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); box-shadow: var(--shadow-sm); }
.share-result-layout-card .share-result-table td { display: grid; grid-template-columns: minmax(76px, auto) minmax(0, 1fr); gap: 8px; padding: 0; border: 0; }
.share-result-layout-card .share-result-table td::before { content: attr(data-label); color: var(--muted); font-size: 0.75rem; font-weight: 650; }
.share-result-layout-card .share-result-table .share-result-check-cell,
.share-result-layout-card .share-result-table .share-result-name-cell,
.share-result-layout-card .share-result-table .share-result-actions-cell { grid-column: 1 / -1; }
.share-result-layout-card .share-result-table .share-result-check-cell { display: flex; align-items: center; gap: 8px; }
.share-result-layout-card .share-result-table .share-result-actions-cell { display: block; padding-top: 10px; border-top: 1px dashed var(--border); }
.share-result-layout-card .share-result-table .share-result-actions-cell::before,
.share-result-layout-card .share-result-table .share-result-name-cell::before,
.share-result-layout-card .share-result-table .share-result-check-cell::before { display: none; }
[data-theme="dark"] .share-result-status-badge.status-success { color: #6fe1c5; }
[data-theme="dark"] .share-result-status-badge.status-error { color: #ff8f8b; }

@media (max-width: 768px) {
  .share-result-center { padding: 14px; overflow: visible; }
  .share-result-head { align-items: stretch; }
  .share-result-head-actions { width: 100%; }
  .share-result-filter-label { flex: 0 0 auto; }
  .share-result-filter { flex: 1 1 auto; width: 100%; min-height: 44px; }
  .share-result-toolbar { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 8px; }
  .share-result-select-all, .share-result-toolbar .hint { grid-column: 1 / -1; min-height: 48px; }
  .share-result-toolbar .layui-btn { width: 100%; min-width: 0; min-height: 48px; padding-left: 8px; padding-right: 8px; white-space: normal; line-height: 1.25; }
  .share-result-mobile-hint { display: block; }

  .share-result-mobile-card .share-result-table-wrap,
  .share-result-mobile-compact .share-result-table-wrap { overflow: visible; border: 0; background: transparent; }
  .share-result-mobile-card .share-result-table,
  .share-result-mobile-compact .share-result-table { display: block; min-width: 0; }
  .share-result-mobile-card .share-result-table thead,
  .share-result-mobile-compact .share-result-table thead { display: none; }
  .share-result-mobile-card .share-result-table tbody,
  .share-result-mobile-compact .share-result-table tbody { display: block; }
  .share-result-mobile-card .share-result-table tbody tr,
  .share-result-mobile-compact .share-result-table tbody tr { display: block; margin-bottom: 11px; padding: 14px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); box-shadow: var(--shadow-sm); }
  .share-result-mobile-card .share-result-table tbody tr:last-child,
  .share-result-mobile-compact .share-result-table tbody tr:last-child { margin-bottom: 0; }
  .share-result-mobile-card .share-result-table td,
  .share-result-mobile-compact .share-result-table td { display: grid; grid-template-columns: 82px minmax(0, 1fr); gap: 9px; width: 100%; padding: 8px 0; border: 0; border-bottom: 1px dashed color-mix(in srgb, var(--border) 78%, transparent); }
  .share-result-mobile-card .share-result-table td::before,
  .share-result-mobile-compact .share-result-table td::before,
  .share-result-table td::before { content: attr(data-label); color: var(--muted); font-size: 0.75rem; font-weight: 650; }
  .share-result-mobile-card .share-result-table .share-result-check-cell,
  .share-result-mobile-compact .share-result-table .share-result-check-cell { display: flex; align-items: center; gap: 8px; padding-top: 0; }
  .share-result-mobile-card .share-result-table .share-result-name-cell,
  .share-result-mobile-compact .share-result-table .share-result-name-cell { display: block; padding-top: 0; }
  .share-result-mobile-card .share-result-table .share-result-name-cell::before,
  .share-result-mobile-compact .share-result-table .share-result-name-cell::before,
  .share-result-mobile-card .share-result-table .share-result-check-cell::before,
  .share-result-mobile-compact .share-result-table .share-result-check-cell::before { display: none; }
  .share-result-mobile-card .share-result-table .share-result-actions-cell,
  .share-result-mobile-compact .share-result-table .share-result-actions-cell { display: block; padding-top: 12px; padding-bottom: 0; border-bottom: 0; }
  .share-result-mobile-card .share-result-table .share-result-actions-cell::before,
  .share-result-mobile-compact .share-result-table .share-result-actions-cell::before { display: none; }
  .share-result-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .share-result-action { width: 100%; min-width: 0; min-height: 44px; padding: 7px 8px; white-space: normal; }
  .share-result-name { font-size: 0.9375rem; line-height: 1.5; overflow-wrap: anywhere; word-break: break-word; }
  .share-result-message { max-width: none; }

  .share-result-mobile-compact .share-result-table tbody tr { padding: 11px; }
  .share-result-mobile-compact .share-result-table td { grid-template-columns: 72px minmax(0, 1fr); padding: 5px 0; }
  .share-result-mobile-compact .share-result-actions { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
  .share-result-mobile-compact .share-result-action { min-height: 40px; font-size: 0.6875rem; }

  .share-result-mobile-scroll-table .share-result-table-wrap { overflow-x: auto; border: 1px solid var(--border); }
  .share-result-mobile-scroll-table .share-result-table { min-width: 860px; }
  /* 手机端选择“横向表格”时，覆盖桌面“卡片”布局的规则，恢复语义表头和标准表格行。 */
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-table-wrap { overflow-x: auto; border: 1px solid var(--border); background: var(--panel); }
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-table { display: table; min-width: 860px; table-layout: fixed; }
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-table thead { display: table-header-group; }
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-table tbody { display: table-row-group; }
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-table tbody tr { display: table-row; margin: 0; padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; }
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-table td { display: table-cell; width: auto; padding: 12px 10px; border: 0; border-bottom: 1px solid var(--border); }
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-table td::before { display: none; content: none; }
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-table .share-result-name-cell,
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-table .share-result-actions-cell { display: table-cell; grid-column: auto; padding-top: 12px; border-top: 0; }
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-actions { display: flex; flex-wrap: wrap; gap: 6px; }
  .share-result-layout-card.share-result-mobile-scroll-table .share-result-action { width: auto; min-height: 34px; padding: 5px 9px; font-size: 0.75rem; }
}

/* 结果区过期倒计时 + 复制提取码按钮 */
.result-code { gap: 14px; flex-wrap: wrap; }
.result-expire { margin-top: -6px; color: var(--primary); font-variant-numeric: tabular-nums; }

/* 本机提取码历史 */
.history-list { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }
.history-item {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 10px 14px; background: var(--bg); border: 1px solid transparent;
  border-radius: var(--radius-sm); transition: border-color .15s ease, background .15s ease;
}
.history-item:hover { border-color: color-mix(in srgb, var(--primary) 32%, var(--border)); background: color-mix(in srgb, var(--primary) 4%, var(--bg)); }
.history-item .h-info { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.history-item .h-info .code-cell { font-size: 1rem; }
.history-item .h-info .hint { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.history-item .h-actions { display: flex; gap: 6px; flex-shrink: 0; }
.home-pin-panel { margin-top: 14px; }
.home-pin-list { display: grid; gap: 8px; margin-top: 12px; }
.home-pin-item { display: flex; align-items: center; gap: 8px; padding: 9px 12px; background: var(--bg); border: 1px solid transparent; border-radius: var(--radius-sm); transition: border-color .15s ease, background .15s ease; }
.home-pin-item:hover { border-color: color-mix(in srgb, var(--primary) 32%, var(--border)); background: color-mix(in srgb, var(--primary) 4%, var(--bg)); }
.home-pin-item .home-pin-star { color: #e3a008; font-size: 0.9375rem; flex-shrink: 0; }
.home-pin-item .home-pin-name { min-width: 0; flex: 1 1 auto; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.home-pin-item .home-pin-code { font-family: var(--mono, monospace); font-variant-numeric: tabular-nums; color: var(--primary); }
.home-pin-item .layui-btn { min-height: 30px; padding: 4px 10px; flex-shrink: 0; }
.zip-setting-hint { margin-top: 6px; }
.action-icon { width: 16px; height: 16px; display: inline-block; vertical-align: -3px; margin-right: 5px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; pointer-events: none; }
.profile-avatar { width: 88px; height: 88px; margin-top: 14px; border-radius: 50%; overflow: hidden; display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--primary) 7%, var(--panel)); color: var(--primary); font-size: 2.125rem; font-weight: 700; }
.profile-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* 个人资料页：桌面双栏，手机单列，保持面板高度与触控间距可控。 */
.profile-page { display: flex; flex-direction: column; gap: 16px; }
.profile-alert { margin: 0; }
.profile-hero { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 24px; border-color: color-mix(in srgb, var(--primary) 16%, var(--border)); background: color-mix(in srgb, var(--primary) 4%, var(--panel)); }
.profile-hero-main { min-width: 0; display: flex; align-items: center; gap: 18px; }
.profile-avatar-large { width: 104px; height: 104px; flex: 0 0 104px; margin: 0; border: 4px solid var(--panel); box-shadow: 0 8px 24px rgba(15,23,42,.12); }
.profile-hero-copy { min-width: 0; }
.profile-eyebrow { color: var(--primary); font-size: 0.75rem; font-weight: 700; letter-spacing: .06em; }
.profile-hero-copy h1 { margin: 4px 0 5px; font-size: clamp(24px, 3vw, 34px); line-height: 1.15; overflow-wrap: anywhere; }
.profile-hero-copy p { margin: 0; color: var(--muted); font-size: 0.8125rem; }
.profile-badges { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 12px; }
.profile-completeness { width: min(300px, 100%); flex: 0 1 300px; padding: 15px 16px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--panel) 86%, var(--bg)); }
.profile-completeness-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; font-size: 0.8125rem; }
.profile-completeness-head span { color: var(--primary); font-size: 1.25rem; font-weight: 800; }
.profile-progress { height: 8px; margin: 10px 0 7px; overflow: hidden; border-radius: 999px; background: color-mix(in srgb, var(--primary) 13%, var(--bg)); }
.profile-progress i { display: block; height: 100%; border-radius: inherit; background: var(--primary); transition: width .25s ease; }
.profile-completeness small { color: var(--muted); font-size: 0.75rem; }
.profile-layout { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(260px, .85fr); gap: 16px; align-items: start; }
.profile-editor-panel, .profile-account-card, .profile-security-links, .profile-storage-panel { min-width: 0; }
.profile-form { display: flex; flex-direction: column; gap: 16px; }
.profile-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 16px; }
.profile-field { min-width: 0; }
.profile-field label { display: block; margin-bottom: 7px; color: var(--text); font-size: 0.8125rem; font-weight: 700; }
.profile-field input[readonly], .profile-field input:disabled { cursor: not-allowed; opacity: .72; background: color-mix(in srgb, var(--bg) 85%, var(--panel)); }
.profile-input-action { display: flex; align-items: center; gap: 8px; }
.profile-input-action input { min-width: 0; flex: 1 1 auto; }
.profile-form-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; padding-top: 3px; }
.profile-form-actions .hint { margin-left: auto; }
.profile-side-column { display: flex; flex-direction: column; gap: 16px; }
.profile-meta-list { display: flex; flex-direction: column; gap: 0; margin: 0; }
.profile-meta-list div { display: flex; justify-content: space-between; gap: 14px; padding: 11px 0; border-bottom: 1px solid var(--border); }
.profile-meta-list div:last-child { border-bottom: 0; padding-bottom: 0; }
.profile-meta-list dt { color: var(--muted); font-size: 0.75rem; }
.profile-meta-list dd { margin: 0; color: var(--text); font-size: 0.8125rem; font-weight: 600; text-align: right; overflow-wrap: anywhere; }
.profile-link-list { display: flex; flex-direction: column; gap: 8px; }
.profile-link-list a { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px 12px; align-items: center; padding: 11px 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); color: var(--text); text-decoration: none; transition: border-color .18s, background .18s, transform .18s; }
.profile-link-list a:hover { border-color: color-mix(in srgb, var(--primary) 38%, var(--border)); background: color-mix(in srgb, var(--primary) 6%, var(--panel)); transform: translateY(-1px); }
.profile-link-list a span { font-size: 0.8125rem; font-weight: 700; }
.profile-link-list a small { color: var(--muted); font-size: 0.75rem; }
.profile-link-list a b { grid-row: 1 / span 2; grid-column: 2; color: var(--primary); font-size: 1.375rem; font-weight: 400; }
.profile-storage-panel .panel-head { align-items: center; }
.profile-verification-card { border-color: color-mix(in srgb, #d97706 34%, var(--border)); background: color-mix(in srgb, #f59e0b 5%, var(--panel)); }
.profile-verification-card .panel-head { align-items: flex-start; }
.profile-verification-card h3 { margin-bottom: 3px; }
.profile-verification-form { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 12px; }
.profile-verification-form .layui-btn { min-height: 38px; }
.profile-verification-time { margin: 10px 0 0; font-variant-numeric: tabular-nums; }
.profile-verification-disabled { margin: 12px 0 0; }
.profile-activity-panel { overflow: hidden; }
.profile-activity-toolbar { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) auto; gap: 10px; align-items: end; margin: 14px 0 12px; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--panel) 92%, var(--bg)); }
.profile-activity-toolbar > div { min-width: 0; }
.profile-activity-toolbar label { display: block; margin-bottom: 5px; color: var(--muted); font-size: 0.75rem; }
.profile-activity-toolbar select { width: 100%; min-height: 40px; }
.profile-activity-toolbar-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.profile-activity-toolbar-actions .layui-btn { min-height: 40px; white-space: normal; }
.profile-activity-summary { margin: 0 0 12px; color: var(--muted); font-size: 0.75rem; line-height: 1.5; font-variant-numeric: tabular-nums; }
.profile-activity-list { display: grid; gap: 10px; }
.profile-activity-item { position: relative; display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 10px; padding: 12px 13px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--panel) 88%, var(--bg)); }
.profile-activity-item::before { content: ''; position: absolute; left: 21px; top: 30px; bottom: -11px; width: 1px; background: var(--border); }
.profile-activity-item:last-child::before { display: none; }
.profile-activity-dot { position: relative; z-index: 1; width: 10px; height: 10px; margin: 5px 0 0 4px; border-radius: 50%; background: var(--orange); box-shadow: 0 0 0 4px color-mix(in srgb, var(--orange) 16%, transparent); }
.profile-activity-dot.is-success { background: var(--green); box-shadow: 0 0 0 4px color-mix(in srgb, var(--green) 14%, transparent); }
.profile-activity-dot.is-error { background: var(--red); box-shadow: 0 0 0 4px color-mix(in srgb, var(--red) 14%, transparent); }
.profile-activity-main { min-width: 0; }
.profile-activity-title { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.profile-activity-title strong { min-width: 0; font-size: 0.8125rem; overflow-wrap: anywhere; word-break: break-word; }
.profile-activity-tags { display: inline-flex; align-items: center; justify-content: flex-end; gap: 6px; flex-wrap: wrap; }
.profile-activity-main p { margin: 6px 0 0; color: var(--muted); font-size: 0.75rem; line-height: 1.55; overflow-wrap: anywhere; }
.profile-activity-main small { display: block; margin-top: 6px; color: var(--muted); font-size: 0.75rem; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.profile-activity-empty { margin: 0; }
.profile-bottom-grid { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); gap: 16px; align-items: start; }
.profile-bottom-grid .share-defaults-form { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.profile-bottom-grid .profile-storage-panel { min-width: 0; }

@media (max-width: 900px) {
  .profile-hero { align-items: stretch; flex-direction: column; }
  .profile-completeness { width: auto; flex-basis: auto; }
  .profile-layout { grid-template-columns: 1fr; }
  .profile-side-column { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .profile-bottom-grid { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .profile-page { gap: 12px; }
  .profile-hero { padding: 17px 15px; gap: 16px; }
  .profile-hero-main { align-items: flex-start; gap: 13px; }
  .profile-avatar-large { width: 76px; height: 76px; flex-basis: 76px; border-width: 3px; font-size: 1.75rem; }
  .profile-hero-copy h1 { font-size: 1.5rem; }
  .profile-hero-copy p { line-height: 1.5; }
  .profile-form-grid, .profile-side-column { grid-template-columns: 1fr; }
  .profile-form-actions { align-items: stretch; flex-direction: column; }
  .profile-form-actions .layui-btn { width: 100%; min-height: 44px; }
  .profile-form-actions .hint { margin-left: 0; }
  .profile-input-action { align-items: stretch; flex-direction: column; }
  .profile-input-action .layui-btn { min-height: 42px; }
  .profile-meta-list div { align-items: flex-start; flex-direction: column; gap: 4px; }
  .profile-meta-list dd { text-align: left; }
  .profile-verification-card .panel-head { gap: 10px; }
  .profile-verification-form { align-items: stretch; flex-direction: column; }
  .profile-verification-form .layui-btn { width: 100%; min-height: 44px; }
  .profile-activity-toolbar { grid-template-columns: 1fr; gap: 8px; margin-top: 12px; padding: 10px; }
  .profile-activity-toolbar-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .profile-activity-toolbar-actions .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .profile-activity-summary { margin-bottom: 10px; }
  .profile-activity-item { grid-template-columns: 16px minmax(0, 1fr); padding: 11px 10px; }
  .profile-activity-item::before { left: 18px; }
  .profile-activity-title { align-items: flex-start; flex-direction: column; gap: 6px; }
  .profile-activity-title strong { white-space: normal; }
  .profile-activity-tags { justify-content: flex-start; }
}
.share-comments-upload-preview { display: block; width: 100%; max-width: 100%; margin-top: 8px; min-width: 0; }
.share-comments-upload-preview-list { display: grid; gap: 8px; width: 100%; min-width: 0; }
.share-comments-upload-preview-item { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; width: 100%; max-width: none; min-width: 0; box-sizing: border-box; padding: 7px 8px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); font-size: 0.75rem; color: var(--muted, #6b7280); overflow: hidden; background: color-mix(in srgb, var(--panel, #fff) 97%, var(--primary, #4f7cff) 3%); }
.share-comments-upload-preview-item img { width: 38px; height: 38px; object-fit: cover; border-radius: 4px; flex: 0 0 auto; }
.share-comments-upload-preview-pick { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; width: 26px; min-height: 34px; cursor: pointer; }
.share-comments-upload-preview-pick input { width: 17px; height: 17px; margin: 0; cursor: pointer; }
.share-comments-upload-preview-info { display: flex; flex: 1 1 120px; flex-direction: column; gap: 2px; min-width: 0; overflow: hidden; }
.share-comments-upload-preview-info small { color: var(--muted, #6b7280); }
.share-comments-upload-preview-name { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; overflow-wrap: anywhere; color: inherit; }
.share-comments-upload-preview-actions { display: flex; flex: 0 1 auto; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 4px; min-width: 0; }
.share-comments-upload-preview-actions button { min-height: 34px; padding: 4px 9px; border: 1px solid var(--border, #d1d5db); border-radius: calc(var(--radius-sm) - 4px); background: var(--panel, #fff); color: var(--muted, #4b5563); font-size: 0.75rem; line-height: 1.2; cursor: pointer; }
.share-comments-upload-preview-actions button:hover { border-color: var(--primary, #4f7cff); color: var(--primary, #4f7cff); background: color-mix(in srgb, var(--primary, #4f7cff) 7%, transparent); }
.share-comments-upload-preview-actions button:disabled { opacity: .45; cursor: not-allowed; }
.share-comments-upload-preview-insert { border-color: color-mix(in srgb, var(--primary, #4f7cff) 48%, var(--border, #d1d5db)) !important; background: color-mix(in srgb, var(--primary, #4f7cff) 9%, var(--panel, #fff)) !important; color: var(--primary, #4f7cff) !important; font-weight: 600; }
.share-comments-upload-preview-remove { color: var(--danger, #dc2626) !important; }
.share-comments-upload-preview-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; width: 100%; box-sizing: border-box; margin-top: 8px; padding: 8px 10px; border: 1px dashed var(--border, #d1d5db); border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--panel, #fff) 96%, var(--primary, #4f7cff) 4%); }
.share-comments-upload-preview-all { display: inline-flex; align-items: center; gap: 5px; min-height: 34px; cursor: pointer; white-space: nowrap; }
.share-comments-upload-preview-all input { width: 17px; height: 17px; margin: 0; }
.share-comments-upload-preview-bulk-delete { min-height: 36px; }
.share-comments-upload-preview-summary { margin: 6px 0 0; }
.share-comments-upload-preview-item.is-invalid { border-color: var(--danger, #e5484d); color: var(--danger, #e5484d); background: color-mix(in srgb, var(--danger, #e5484d) 7%, transparent); }
@media (max-width: 768px) {
  .share-comments-upload-label { width: 100%; box-sizing: border-box; flex-wrap: wrap; min-height: 44px; }
  .share-comments-upload-label input[type="file"] { flex: 1 1 100%; width: 100%; min-width: 0; max-width: 100%; }
  .share-comments-upload-preview-item { padding: 8px; }
  .share-comments-upload-preview-name { white-space: normal; overflow-wrap: anywhere; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
  .share-comments-upload-preview-actions { flex-basis: 100%; justify-content: flex-start; padding-top: 2px; }
  .share-comments-upload-preview-actions button { min-width: 40px; min-height: 40px; }
  .share-comments-upload-preview-insert { flex: 1 1 96px; }
  .share-comments-upload-preview-toolbar { align-items: stretch; }
  .share-comments-upload-preview-toolbar .share-comments-upload-preview-bulk-delete { min-height: 40px; }
}
@media (max-width: 420px) {
  .share-comments-upload-preview-actions button { flex: 1 1 auto; }
  .share-comments-upload-preview-toolbar > * { flex: 1 1 auto; }
  .share-comments-upload-preview-toolbar .share-comments-upload-preview-all { justify-content: center; }
}

/* 系统公告 */
.announcement-box {
  border: 1px solid var(--border); border-left: 4px solid var(--primary);
  background: linear-gradient(90deg, var(--primary-soft), var(--panel) 42%);
}
/*
 * ⚠️ 第 46 轮补丁：首页系统公告卡片「上下太大」。
 *
 * 根因：公告容器同时带 `panel` 类（见 includes/home_announcement.php 的容器类名数组），
 *   而 `.panel { padding: 26px }` —— 上下各 26px，对「标题 + 若干行公告」这种
 *   内容偏矮的区块来说过于空旷；再叠加 `.announce-head` 的 margin-bottom:14px
 *   与条目 padding:13px 0，整体上下留白明显。
 *
 * 修法：仅针对公告容器把上下内边距收窄到 16px（左右保持 26px 不变，
 *   避免标题与左边框的视觉平衡被破坏）。
 *   用 `body` 前缀把特异性提到 (0,1,1)，高于 `.panel` 的 (0,1,0)，
 *   防止被后面的 `.panel` 规则反压（本项目第 43–44 轮已确立此手法）。
 */
body .home-announcement.announcement-box { padding-top: 16px; padding-bottom: 16px; }
/* 末条公告自带 13px 下内边距会与容器下内边距叠加，使底部比顶部「松」，
   故抵消掉末条的下内边距，让上下视觉留白对称。 */
body .home-announcement .announce-item:last-child { padding-bottom: 4px; }
/* 标题与首条公告的间距同步收窄，避免「压了容器、标题却仍悬空」 */
body .home-announcement .announce-head { margin-bottom: 10px; }
body .home-announcement .announce-head h3 { margin-bottom: 0; }
.announce-item { padding: 11px 0; border-bottom: 1px dashed var(--border); }
.announce-item:last-child { border-bottom: none; }
.announce-title { font-weight: 600; font-size: 0.9375rem; }
.announce-content { color: var(--muted); font-size: 0.875rem; margin-top: 4px; white-space: pre-wrap; }

/* 首页公告增强：置顶高亮 / 折叠展开 / 附件 / Markdown 排版 */
.home-announcement .announce-item.is-top {
  background: color-mix(in srgb, var(--primary-soft) 55%, transparent);
  border-radius: var(--radius-sm);
  padding-left: 12px;
  padding-right: 12px;
  border-bottom-color: transparent;
}
.home-announcement .announce-item.is-top + .announce-item { margin-top: 4px; }
.announce-title-text { word-break: break-word; }
.announce-format-tag { margin-left: 8px; vertical-align: middle; font-size: 0.6875rem; }
.announce-time time { font-variant-numeric: tabular-nums; }
.home-announcement .announce-content { white-space: normal; font-size: var(--announce-font-size, 14px); line-height: var(--announce-line-height, 1.75); }
/* 折叠：用 max-height 截断（对 Markdown 的块级元素同样有效，line-clamp 对块级子元素无效） */
.home-announcement .announce-content.is-collapsed {
  max-height: calc(var(--announce-clamp, 3) * var(--announce-line-height, 1.75) * 1em);
  overflow: hidden;
  -webkit-mask-image: linear-gradient(180deg, #000 68%, transparent 100%);
  mask-image: linear-gradient(180deg, #000 68%, transparent 100%);
}
.home-announcement .announce-content[data-announce-body] { transition: max-height .22s ease; }
.home-announcement .announce-content.is-empty { display: none; }
/* 容器外观自定义变量 */
.home-announcement {
  border-radius: var(--announce-radius, 12px);
  --announce-accent: var(--primary);
}
.home-announcement.announce-border-none { border: none; }
.home-announcement.announce-border-thin { border: 1px solid var(--border); border-left: 1px solid var(--border); }
.home-announcement.announce-border-accent { border-left: 4px solid var(--announce-accent); }
.home-announcement.announce-border-dashed { border: 1px dashed var(--border); border-left: 4px dashed var(--announce-accent); }
.home-announcement.announce-bg-gradient { background: linear-gradient(120deg, color-mix(in srgb, var(--announce-accent) 12%, var(--panel)), var(--panel) 62%); }
.home-announcement.announce-bg-solid { background: var(--panel); }
.home-announcement.announce-bg-glass { background: color-mix(in srgb, var(--panel) 72%, transparent); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); }
.home-announcement.announce-bg-plain { background: none; }
/* 内容宽度 */
.home-announcement.announce-width-wide .announce-list, .home-announcement.announce-width-wide .announce-head { max-width: 1080px; margin-inline: auto; }
.home-announcement.announce-width-reading .announce-list, .home-announcement.announce-width-reading .announce-head { max-width: 760px; margin-inline: auto; }
.home-announcement.announce-width-narrow .announce-list, .home-announcement.announce-width-narrow .announce-head { max-width: 620px; margin-inline: auto; }
/* 标题对齐 */
.home-announcement .announce-head { display: flex; align-items: center; gap: 10px; }
.home-announcement.announce-title-center .announce-head { justify-content: center; text-align: center; }
.home-announcement.announce-title-between .announce-head { justify-content: space-between; }
.home-announcement.announce-title-between .announce-head h3 { flex: 1 1 auto; }
.announce-count-badge { flex: none; }
/* 紧凑度 */
.home-announcement.announce-density-loose .announce-item { padding: 18px 0; }
.home-announcement.announce-density-compact .announce-item { padding: 8px 0; }
.home-announcement.announce-density-dense .announce-item { padding: 5px 0; }
.home-announcement.announce-density-compact .announce-content, .home-announcement.announce-density-dense .announce-content { margin-top: 2px; }
/* 最大高度：超出内部滚动 */
.home-announcement[style*="--announce-max-height"] .announce-list {
  max-height: var(--announce-max-height);
  overflow-y: auto;
  overscroll-behavior: contain;
  padding-right: 4px;
}
/* 入场动画 */
.home-announcement.announce-anim-fade { animation: announceFadeIn .38s ease both; }
.home-announcement.announce-anim-rise { animation: announceRiseIn .42s cubic-bezier(.22,.61,.36,1) both; }
.home-announcement.announce-anim-slide { animation: announceSlideIn .42s cubic-bezier(.22,.61,.36,1) both; }
@keyframes announceFadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes announceRiseIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
@keyframes announceSlideIn { from { opacity: 0; transform: translateX(-22px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .home-announcement.announce-anim-fade, .home-announcement.announce-anim-rise, .home-announcement.announce-anim-slide { animation: none; }
}
/* 显示方式：卡片网格 */
.home-announcement.announce-layout-card .announce-list { display: grid; gap: 12px; grid-template-columns: repeat(var(--announce-cols, 3), minmax(0, 1fr)); }
.home-announcement.announce-layout-card .announce-item {
  border: 1px solid var(--border);
  border-radius: var(--announce-radius, 12px);
  padding: 14px;
  border-bottom: 1px solid var(--border);
  background: color-mix(in srgb, var(--panel) 92%, transparent);
}
.home-announcement.announce-layout-card .announce-item.is-top { border-color: color-mix(in srgb, var(--announce-accent) 42%, var(--border)); }
.home-announcement.announce-cols-2 { --announce-cols: 2; }
.home-announcement.announce-cols-3 { --announce-cols: 3; }
.home-announcement.announce-cols-4 { --announce-cols: 4; }
/* 显示方式：紧凑标题（点击展开正文） */
.home-announcement.announce-layout-compact .announce-item { padding: 6px 0; border-bottom: 1px dashed var(--border); }
.announce-compact-toggle {
  display: flex; align-items: center; gap: 8px; width: 100%;
  min-height: 44px; padding: 4px 2px;
  border: none; background: none; cursor: pointer; text-align: left;
  font-weight: 600; font-size: 0.90625rem; color: var(--text);
}
.announce-compact-caret { flex: none; display: inline-block; transition: transform .18s ease; color: var(--announce-accent); }
.announce-item.is-open .announce-compact-caret { transform: rotate(90deg); }
.announce-compact-toggle .announce-time { margin-left: auto; flex: none; font-weight: 400; }
.home-announcement.announce-layout-compact .announce-content { max-height: 0; overflow: hidden; transition: max-height .22s ease; }
.home-announcement.announce-layout-compact .announce-content:not(.is-collapsed) { max-height: none; }
/* 显示方式：横向滚动（单行跑马灯，CSS 动画无缝循环） */
.home-announcement.announce-layout-ticker .announce-ticker {
  overflow: hidden;
  position: relative;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 4%, #000 96%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 4%, #000 96%, transparent);
}
.home-announcement.announce-layout-ticker .announce-ticker-track {
  display: flex;
  align-items: center;
  /* 不使用 flex gap：gap 会让「内容×2 + 1 个 gap」≠ 2×内容，位移 50% 循环时会对不齐而跳帧。
     改为每条公告自身带右间距，保证轨道总宽正好是单份内容的两倍，实现真正无缝循环。 */
  width: max-content;
  animation: announceTickerRun var(--announce-ticker-duration, 30s) linear infinite;
  will-change: transform;
}
.home-announcement.announce-layout-ticker .announce-ticker-item { margin-right: 36px; }
.home-announcement.announce-layout-ticker.announce-ticker-pausable .announce-ticker:hover .announce-ticker-track,
.home-announcement.announce-layout-ticker.announce-ticker-pausable .announce-ticker:focus-within .announce-ticker-track {
  animation-play-state: paused;
}
/* 轨道内容复制两份，位移 50% 实现无缝衔接 */
@keyframes announceTickerRun {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
.announce-ticker-item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex: none;
  min-height: 44px;
  padding: 4px 2px;
  color: var(--text);
  text-decoration: none;
  font-size: 0.875rem;
  font-weight: 600;
  white-space: nowrap;
}
/* 显示正文摘要时：改为纵向排列的定宽卡片，所有条目等高，保证无缝循环不抖动 */
.announce-ticker-item.has-excerpt {
  display: block;
  width: var(--announce-ticker-item-width, 320px);
  white-space: normal;
  vertical-align: top;
  padding: 8px 0;
}
.announce-ticker-item.has-excerpt > .announce-ticker-link { display: block; }
.announce-ticker-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.announce-ticker-excerpt {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: var(--announce-ticker-lines, 2);
  line-clamp: var(--announce-ticker-lines, 2);
  overflow: hidden;
  margin-top: 4px;
  font-size: 0.8125rem;
  font-weight: 400;
  line-height: 1.6;
  color: var(--muted);
  white-space: normal;
}
.announce-ticker-excerpt p, .announce-ticker-excerpt ul, .announce-ticker-excerpt ol { margin: 0; padding-left: 18px; }
.announce-ticker-excerpt h1, .announce-ticker-excerpt h2, .announce-ticker-excerpt h3,
.announce-ticker-excerpt h4, .announce-ticker-excerpt h5, .announce-ticker-excerpt h6 {
  margin: 0; font-size: 0.84375rem; font-weight: 600; color: var(--text);
}
.announce-ticker-excerpt img { max-height: 40px; width: auto; border-radius: calc(var(--radius-sm) - 4px); }
.announce-ticker-excerpt pre, .announce-ticker-excerpt blockquote { display: none; }
.announce-ticker-link { color: inherit; text-decoration: none; }
.announce-ticker-item:hover .announce-title-text { color: var(--announce-accent); text-decoration: none; }
.announce-ticker-item .announce-time { font-weight: 400; flex: none; }
.announce-ticker-item.is-read .announce-title-text { color: var(--muted); font-weight: 500; }
/* 内容不足以填满容器时不滚动（由 JS 检测后打标记），并隐藏克隆份，避免出现大片空白 */
.home-announcement.announce-layout-ticker .announce-ticker.is-not-scrollable .announce-ticker-track { animation: none; justify-content: center; }
.home-announcement.announce-layout-ticker .announce-ticker.is-not-scrollable [data-ticker-clone="1"] { display: none; }
.announce-unread-dot { flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--danger, #ef4444); box-shadow: 0 0 0 3px color-mix(in srgb, var(--danger, #ef4444) 18%, transparent); }
@media (prefers-reduced-motion: reduce) {
  .home-announcement.announce-layout-ticker .announce-ticker-track { animation: none; }
  .home-announcement.announce-layout-ticker .announce-ticker { overflow-x: auto; }
}
/* 已读确认 */
.announce-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 8px; }
.announce-read-btn {
  display: inline-flex; align-items: center; gap: 7px;
  min-height: 44px; padding: 0 16px;
  border: 1px solid color-mix(in srgb, var(--announce-accent) 42%, var(--border));
  border-radius: calc(var(--announce-radius, 12px) - 2px);
  background: color-mix(in srgb, var(--announce-accent) 10%, var(--panel));
  color: var(--announce-accent);
  font-size: 0.84375rem; font-weight: 600; cursor: pointer;
  transition: background .15s ease, border-color .15s ease, color .15s ease;
}
.announce-read-btn:hover { background: color-mix(in srgb, var(--announce-accent) 18%, var(--panel)); }
.announce-read-btn.is-done {
  border-color: color-mix(in srgb, var(--success, #22c55e) 40%, var(--border));
  background: color-mix(in srgb, var(--success, #22c55e) 10%, var(--panel));
  color: var(--success, #22c55e);
  cursor: default;
}
.announce-read-btn[disabled] { opacity: .75; cursor: progress; }
.announce-item.needs-read { border-left: 3px solid color-mix(in srgb, var(--danger, #ef4444) 52%, transparent); padding-left: 12px; }
.announce-read-tag { margin-left: 8px; vertical-align: middle; font-size: 0.6875rem; }
/* 公告高级标记（迁移 518）：图标、标签徽标、强调色、封面、摘要、内容标签、阅读时长 */
.announce-icon { margin-right: 6px; font-size: 1.05em; line-height: 1; vertical-align: -1px; }
.announce-badge { margin-right: 8px; vertical-align: middle; font-size: 0.6875rem; }
.announce-badge-info { background: color-mix(in srgb, var(--primary, #4f8cff) 18%, transparent); color: color-mix(in srgb, var(--primary, #4f8cff) 88%, var(--text)); }
.announce-badge-success { background: color-mix(in srgb, var(--success, #16a34a) 18%, transparent); color: color-mix(in srgb, var(--success, #16a34a) 88%, var(--text)); }
.announce-badge-warning { background: color-mix(in srgb, var(--warning, #f59e0b) 20%, transparent); color: color-mix(in srgb, var(--warning, #b45309) 90%, var(--text)); }
.announce-badge-danger { background: color-mix(in srgb, var(--danger, #ef4444) 18%, transparent); color: color-mix(in srgb, var(--danger, #ef4444) 88%, var(--text)); }
.announce-readtime { margin-left: 8px; font-size: 0.75rem; vertical-align: middle; white-space: nowrap; }
.announce-summary { margin: 8px 0 0; font-size: 0.84375rem; line-height: 1.7; color: var(--muted); }
.announce-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.announce-tag { display: inline-flex; align-items: center; padding: 3px 10px; border-radius: 999px; font-size: 0.75rem; background: color-mix(in srgb, var(--muted) 12%, transparent); color: var(--muted); }
.announce-cover { margin: 10px 0; overflow: hidden; border-radius: calc(var(--announce-radius, 12px) - 2px); }
.announce-cover img { display: block; width: 100%; height: auto; object-fit: cover; }
.announce-cover-top img { max-height: 260px; }
/* 单条公告强调色：覆盖容器主题色，用于标题与边框 */
.announce-item[style*="--announce-item-accent"] { border-left: 3px solid var(--announce-item-accent); padding-left: 12px; }
.announce-item[style*="--announce-item-accent"] .announce-title-text { color: var(--announce-item-accent); }
.announce-item[style*="--announce-item-accent"] .announce-tag { background: color-mix(in srgb, var(--announce-item-accent) 14%, transparent); color: var(--announce-item-accent); }
/* 左图右文 / 右图左文：用 flex 让封面与正文并排 */
.announce-item.cover-left, .announce-item.cover-right { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 14px; }
.announce-item.cover-left > .announce-cover, .announce-item.cover-right > .announce-cover { flex: 0 0 180px; max-width: 180px; margin: 8px 0; }
.announce-item.cover-left > .announce-cover img, .announce-item.cover-right > .announce-cover img { height: 120px; }
.announce-item.cover-left > .announce-title, .announce-item.cover-left > .announce-content, .announce-item.cover-left > .announce-actions, .announce-item.cover-left > .announce-tags, .announce-item.cover-left > .announce-attachments,
.announce-item.cover-right > .announce-title, .announce-item.cover-right > .announce-content, .announce-item.cover-right > .announce-actions, .announce-item.cover-right > .announce-tags, .announce-item.cover-right > .announce-attachments { flex: 1 1 240px; min-width: 0; }
.announce-item.cover-left > .announce-cover { order: -1; }
@media (max-width: 760px) {
  .announce-item.cover-left, .announce-item.cover-right { display: block; }
  .announce-item.cover-left > .announce-cover, .announce-item.cover-right > .announce-cover { flex: none; max-width: none; }
  .announce-item.cover-left > .announce-cover img, .announce-item.cover-right > .announce-cover img { width: 100%; height: auto; max-height: 220px; }
  .announce-cover-top img { max-height: 200px; }
  .announce-readtime { display: block; margin: 4px 0 0; }
}
.announce-read-progress { margin-left: auto; flex: none; }
.announce-read-toast {
  position: fixed; left: 50%; bottom: 32px; transform: translateX(-50%);
  z-index: 9999; padding: 12px 20px; border-radius: var(--radius-sm);
  background: color-mix(in srgb, var(--panel) 96%, #000); color: var(--text);
  border: 1px solid var(--border); box-shadow: 0 10px 30px rgba(0,0,0,.22);
  font-size: 0.875rem; max-width: 90vw; text-align: center;
}
/* 弹窗强制确认：锁定态的关闭按钮与确定按钮 */
.announce-popup-close.is-locked,
.announce-popup-close[disabled] { opacity: .4; cursor: not-allowed; }
.announce-popup-ok.is-locked,
.announce-popup-ok[disabled] { opacity: .55; cursor: not-allowed; }
.announce-popup-lock-tip {
  flex: 1 1 auto; margin: 0; text-align: left;
  color: var(--danger, #ef4444); font-size: 0.78125rem; line-height: 1.5;
}
.announce-wait-tip { color: var(--primary); font-size: 0.78125rem; }
.announce-popup-item.is-flash { animation: announceFlash 1.5s ease; border-radius: var(--radius-sm); }
/* 「查看全文」按钮：列表与卡片中的次要操作 */
.announce-open-btn {
  display: inline-flex; align-items: center; gap: 5px;
  min-height: 44px; padding: 0 14px; margin-top: 6px;
  border: 1px solid color-mix(in srgb, var(--primary) 34%, var(--border));
  border-radius: calc(var(--radius-sm) - 2px); background: transparent;
  color: var(--primary); font-size: 0.8125rem; font-weight: 600; cursor: pointer;
  transition: background .15s ease;
}
.announce-open-btn:hover { background: color-mix(in srgb, var(--primary) 10%, transparent); }
@media (max-width: 760px) {
  .announce-open-btn { width: 100%; justify-content: center; }
}
/* 跳转定位高亮 */
.announce-item.is-flash { animation: announceFlash 1.5s ease; }
@keyframes announceFlash {
  0%, 100% { background: transparent; }
  18%, 60% { background: color-mix(in srgb, var(--announce-accent) 16%, transparent); }
}
/* 公告弹窗 */
.announce-popup-mask {
  position: fixed; inset: 0; z-index: 10000;
  display: flex; padding: 20px;
  background: color-mix(in srgb, #000 52%, transparent);
  backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  opacity: 0; transition: opacity .2s ease;
  overflow-y: auto; overscroll-behavior: contain;
}
.announce-popup-mask.is-visible { opacity: 1; }
.announce-popup-mask[data-position="center"] { align-items: center; justify-content: center; }
.announce-popup-mask[data-position="top"] { align-items: flex-start; justify-content: center; }
.announce-popup-mask[data-position="bottom"] { align-items: flex-end; justify-content: center; }
.announce-popup {
  width: 100%; max-width: 620px; max-height: 86vh;
  display: flex; flex-direction: column;
  background: var(--panel); border: 1px solid var(--border);
  border-radius: calc(var(--radius) + 2px); box-shadow: 0 24px 60px rgba(0,0,0,.32);
  transform: translateY(12px) scale(.98); transition: transform .22s cubic-bezier(.22,.61,.36,1);
}
.announce-popup-mask.is-visible .announce-popup { transform: none; }
.announce-popup-head {
  display: flex; align-items: center; gap: 10px;
  padding: 16px 18px; border-bottom: 1px solid var(--border);
}
.announce-popup-head h3 { margin: 0; flex: 1 1 auto; font-size: 1.0625rem; display: flex; align-items: center; gap: 8px; }
.announce-popup-icon { font-size: 1.125rem; }
.announce-popup-close {
  flex: none; width: 44px; height: 44px; border-radius: var(--radius-sm);
  border: 1px solid var(--border); background: var(--panel); color: var(--muted);
  font-size: 0.9375rem; cursor: pointer; transition: background .15s ease, color .15s ease;
}
.announce-popup-close:hover { background: var(--primary-soft); color: var(--primary); }
.announce-popup-body { padding: 16px 18px; overflow-y: auto; flex: 1 1 auto; }
.announce-popup-item { padding-bottom: 16px; margin-bottom: 16px; border-bottom: 1px dashed var(--border); }
.announce-popup-item:last-child { padding-bottom: 0; margin-bottom: 0; border-bottom: none; }
.announce-popup-item-title { margin: 0 0 8px; font-size: 0.96875rem; line-height: 1.5; color: var(--text); }
.announce-popup-content { color: var(--muted); font-size: 0.875rem; line-height: 1.75; white-space: pre-wrap; }
.announce-popup-content.announce-content-md { white-space: normal; }
.announce-popup-foot {
  padding: 14px 18px; border-top: 1px solid var(--border);
  display: flex; justify-content: flex-end; gap: 10px;
}
.announce-popup-foot .layui-btn { min-height: 44px; }
@media (max-width: 760px) {
  .announce-popup-mask { padding: 0; align-items: flex-end !important; }
  .announce-popup {
    max-width: 100%; max-height: 88vh;
    border-radius: calc(var(--radius) + 2px) calc(var(--radius) + 2px) 0 0; border-bottom: none;
  }
  .announce-popup-foot { justify-content: stretch; }
  .announce-popup-foot .layui-btn { width: 100%; }
  .announce-read-toast { bottom: 84px; }
}
/* 附件图片尺寸与排列 */
.announce-attachment-image { width: var(--announce-thumb-size, 96px); height: var(--announce-thumb-size, 96px); }
.announce-attach-layout-column .announce-attachment-images { flex-direction: column; align-items: stretch; }
.announce-attach-layout-column .announce-attachment-image { width: 100%; height: auto; max-height: 420px; }
.announce-attach-layout-column .announce-attachment-image img { height: auto; object-fit: contain; }
.announce-attach-layout-scroll .announce-attachment-images { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 6px; }
.announce-attach-tag { margin-left: 8px; vertical-align: middle; font-size: 0.6875rem; }
.announce-empty { margin: 6px 0 0; }.announce-toggle {
  margin-top: 6px;
  min-height: 44px;
  padding: 0 14px;
  border: 1px solid var(--border);
  border-radius: calc(var(--radius-sm) - 2px);
  background: var(--panel);
  color: var(--primary);
  font-size: 0.8125rem;
  font-weight: 600;
  cursor: pointer;
  transition: background .15s ease, border-color .15s ease;
}
.announce-toggle:hover { background: var(--primary-soft); border-color: color-mix(in srgb, var(--primary) 40%, var(--border)); }
/* Markdown 内容排版 */
.announce-content-md > *:first-child { margin-top: 0; }
.announce-content-md > *:last-child { margin-bottom: 0; }
.announce-content-md p { margin: 6px 0; }
.announce-content-md h1, .announce-content-md h2, .announce-content-md h3,
.announce-content-md h4, .announce-content-md h5, .announce-content-md h6 {
  margin: 10px 0 6px; color: var(--text); font-size: 0.9375rem; line-height: 1.5;
}
.announce-content-md ul, .announce-content-md ol { margin: 6px 0; padding-left: 22px; }
.announce-content-md li { margin: 3px 0; }
.announce-content-md blockquote {
  margin: 8px 0; padding: 6px 12px;
  border-left: 3px solid color-mix(in srgb, var(--primary) 45%, var(--border));
  background: color-mix(in srgb, var(--primary-soft) 40%, transparent);
  border-radius: 0 calc(var(--radius-sm) - 2px) calc(var(--radius-sm) - 2px) 0;
}
.announce-content-md code { padding: 1px 5px; border-radius: 5px; background: var(--primary-soft); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.8125rem; }
.announce-content-md pre { margin: 8px 0; padding: 10px 12px; border-radius: var(--radius-sm); background: var(--primary-soft); overflow-x: auto; }
.announce-content-md pre code { padding: 0; background: none; }
.announce-content-md a { color: var(--primary); text-decoration: none; }
.announce-content-md img { max-width: 100%; height: auto; border-radius: var(--radius-sm); margin: 6px 0; }
/* 公告附件 */
.announce-attachments { margin-top: 8px; }
.announce-attachment-images { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.announce-attachment-image { display: block; width: 96px; height: 96px; border-radius: var(--radius-sm); overflow: hidden; border: 1px solid var(--border); }
.announce-attachment-image img { width: 100%; height: 100%; object-fit: cover; display: block; }
.announce-attachment-files { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.announce-attachment-files li { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 0.8125rem; }
.announce-attachment-files a { color: var(--primary); text-decoration: none; word-break: break-all; }
.announce-attachment-icon { flex: none; }

/* 站内信 */
.msg-item { border-bottom: 1px solid var(--border); padding: 12px 4px 12px 12px; border-left: 3px solid transparent; transition: background .15s ease, border-color .15s ease; }
.msg-item:hover { background: color-mix(in srgb, var(--primary) 3%, transparent); }
.msg-item:last-child { border-bottom: none; }
.msg-item.unread .msg-title { font-weight: 600; }
.msg-item.unread { border-left-color: var(--primary); background: linear-gradient(90deg, var(--primary-soft), transparent 55%); }
.msg-head { display: flex; justify-content: space-between; align-items: center; cursor: pointer; }
.msg-head { width: 100%; border: 0; padding: 8px 0; background: transparent; color: inherit; font: inherit; text-align: left; touch-action: manipulation; }
.msg-title { font-size: 0.875rem; display: flex; align-items: center; gap: 6px; }
.message-category-badge { display: inline-flex; align-items: center; padding: 2px 7px; border-radius: 999px; font-size: 0.6875rem; line-height: 1.4; font-weight: 600; color: var(--primary); background: var(--primary-soft); white-space: nowrap; }
.message-category-summary { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; margin: 0 0 14px; }
.message-category-summary-item { display: flex; align-items: baseline; gap: 5px; min-width: 0; padding: 9px 10px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); color: var(--muted); text-decoration: none; background: var(--bg); transition: border-color .15s ease, background .15s ease, transform .15s ease; }
.message-category-summary-item:hover { border-color: var(--primary); background: var(--primary-soft); transform: translateY(-1px); }
.message-category-summary-item strong { margin-left: auto; color: var(--text); font-size: 1.125rem; line-height: 1; }
.message-category-summary-item small { font-size: 0.6875rem; white-space: nowrap; }
.message-category-summary-item.has-unread strong { color: var(--primary); }
.message-category-summary-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.8125rem; }
.category-security { color: var(--red); background: color-mix(in srgb, var(--red) 12%, transparent); }
.category-share { color: #0f766e; background: color-mix(in srgb, #0f766e 12%, transparent); }
.category-quota { color: #a16207; background: color-mix(in srgb, #eab308 18%, transparent); }
.category-admin { color: #7c3aed; background: color-mix(in srgb, #8b5cf6 14%, transparent); }
.msg-check { width: 18px; height: 18px; flex: 0 0 auto; }
.dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--red); }
.msg-body { margin-top: 8px; color: var(--muted); font-size: 0.875rem; white-space: pre-wrap; background: var(--bg); padding: 12px; border-radius: calc(var(--radius-sm) - 2px); }
.message-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin: 12px 0 16px; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }
.message-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.message-actions .layui-btn { transition: transform .15s ease, background .15s ease, border-color .15s ease; }
.message-actions .layui-btn:active { transform: scale(.97); }
.message-filter { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 0 0 14px; padding: 10px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }
.message-filter input { flex: 1 1 240px; min-width: 0; }
.message-filter select { width: 130px; }
.message-date-field { display: inline-flex; align-items: center; gap: 5px; color: var(--muted); font-size: 0.75rem; white-space: nowrap; }
.message-date-field input { width: 145px; flex: 0 1 auto; }
.message-filter .layui-btn { white-space: normal; }
.message-pager { display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; margin-top: 16px; }

/* ===== 消息中心双栏布局（PC 端显示优化） ===== */
.user-messages-main { max-width: 1120px; }
.messages-layout { display: grid; grid-template-columns: 288px minmax(0, 1fr); gap: 20px; align-items: start; }
.messages-sidebar { position: sticky; top: 20px; display: grid; gap: 12px; align-self: start; }
.messages-sidebar-card { padding: 14px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: var(--bg); }
.messages-sidebar-card-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.messages-sidebar-card-head h3 { margin: 0; font-size: 0.75rem; font-weight: 700; color: var(--muted); letter-spacing: .05em; }
.messages-main-col { min-width: 0; }
.messages-main-col .panel-head { padding-bottom: 14px; margin-bottom: 6px; border-bottom: 1px solid var(--border); }
.messages-main-col .panel-head h3 { font-size: 1.25rem; }
.messages-sidebar .message-category-summary { grid-template-columns: 1fr; gap: 6px; margin: 0; }
.messages-sidebar .message-category-summary-item { min-height: 40px; padding: 8px 10px; }
.messages-sidebar .message-category-summary-item strong { font-size: 1rem; }
.messages-sidebar .message-filter { display: grid; gap: 8px; margin: 0; padding: 0; border: 0; background: transparent; }
.messages-sidebar .message-filter input[type="search"], .messages-sidebar .message-filter input[type="text"] { width: 100%; min-width: 0; }
.messages-sidebar .message-filter select { width: 100%; min-width: 0; }
.messages-sidebar .message-date-field { display: grid; grid-template-columns: auto 1fr; gap: 8px; align-items: center; }
.messages-sidebar .message-date-field input { width: 100%; }
.message-filter-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.message-filter-actions .layui-btn { flex: 1 1 auto; white-space: normal; }
.messages-sidebar .message-export-form { margin-top: 2px; }
.messages-sidebar .message-export-form .layui-btn { width: 100%; }
/* 消息项 PC 端：标题省略、时间与徽章不换行 */
.msg-title { min-width: 0; flex: 1 1 auto; gap: 8px; }
.msg-title-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; flex: 1 1 auto; }
.msg-title .message-category-badge { flex: 0 0 auto; }
.msg-head { gap: 16px; }
.msg-head time { flex: 0 0 auto; white-space: nowrap; font-variant-numeric: tabular-nums; }
.msg-check { margin: 0; }
@media (max-width: 900px) {
  .messages-layout { grid-template-columns: 1fr; gap: 12px; }
  .messages-sidebar { position: static; }
  .messages-sidebar .message-category-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ===== 消息中心第二轮优化：展开动画、选中态、正文排版、空状态 ===== */
.msg-body:not([hidden]) { animation: msgBodyIn .22s ease; }
@keyframes msgBodyIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
.msg-body-content { line-height: 1.75; overflow-wrap: anywhere; }
.msg-body-actions { display: flex; gap: 8px; margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--border); }
.msg-body-actions .layui-btn { min-height: 34px; }
.msg-body-actions .message-link { text-decoration: none; }
.msg-item.is-selected { background: color-mix(in srgb, var(--primary) 7%, transparent); border-left-color: var(--primary); }
.msg-item.unread .msg-title-text { font-weight: 700; }
.msg-item.unread { background: linear-gradient(90deg, var(--primary-soft), transparent 60%); }
.msg-item .msg-check { accent-color: var(--primary); }
.msg-selected-count { margin-left: auto; font-variant-numeric: tabular-nums; }
.messages-empty { padding: 44px 20px; text-align: center; display: grid; gap: 8px; justify-items: center; color: var(--muted); }
.messages-empty svg { width: 44px; height: 44px; opacity: .55; }
.messages-empty strong { color: var(--text); font-size: 0.9375rem; }
.message-category-summary-item.is-active { border-color: var(--primary); background: var(--primary-soft); color: var(--primary); box-shadow: 0 0 0 1px var(--primary); }
.message-category-summary-item.is-active strong { color: var(--primary); }
.msg-item .message-extract-code { margin-top: 10px; }
.msg-title-text { font-weight: 500; }
.msg-item.unread .msg-title-text { color: var(--text); }

.admin-user-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-share-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-file-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.user-share-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.user-code-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.user-resource-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-announcement-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-blacklist-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-sensitive-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.user-trash-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-access-frequency-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-message-batch-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-api-key-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-banner-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-security-event-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-login-attempt-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-upload-scan-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.admin-hotlink-event-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }
.security-login-filter, .security-scan-filter, .security-hotlink-filter { margin-bottom:14px; }
.security-blacklist-filter { margin:14px 0; }
/* 文件夹页面包屑 */
.breadcrumb {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  margin: 4px 0 14px; padding: 9px 12px; border-radius: var(--radius-sm);
  background: var(--bg); font-size: 0.8125rem;
}
.breadcrumb a { color: var(--primary); }
.breadcrumb .crumb-sep { color: var(--muted); opacity: .6; }
.breadcrumb .crumb.current { color: var(--text); font-weight: 600; }
.breadcrumb .crumb-view { margin-left: auto; }

/* 回收站筛选栏与剩余保留标识 */
.trash-filter, .code-filter { margin: 12px 0; }
.trash-filter select, .code-filter select { width: 130px; }
.badge-red { animation: purgePulse 1.6s ease-in-out infinite; }
@keyframes purgePulse { 0%,100% { opacity: 1; } 50% { opacity: .55; } }

/* 文件夹操作 */
.folder-search, .folder-create { margin:14px 0; }
.folder-actions { display:flex; gap:8px; flex-wrap:wrap; align-items:center; }
.folder-actions .inline-form { display:flex; gap:6px; align-items:center; margin:0; }
.folder-actions input, .folder-actions select { min-width:120px; max-width:190px; }
.compact-checkbox { display:inline-flex; align-items:center; gap:5px; white-space:nowrap; }
.user-folder-pager { display:flex; align-items:center; justify-content:center; gap:10px; flex-wrap:wrap; margin:14px 0 4px; }

/* 提示 */
.alert { padding: 13px 16px; border-radius: var(--radius-sm); margin-bottom: 16px; font-size: 0.875rem; border: 1px solid transparent; border-left-width: 4px; }
.alert-err { background: color-mix(in srgb,var(--red) 9%,var(--panel)); color: var(--red); border-color: color-mix(in srgb,var(--red) 24%,transparent); border-left-color: var(--red); }
.alert-ok { background: color-mix(in srgb,var(--green) 9%,var(--panel)); color: var(--green); border-color: color-mix(in srgb,var(--green) 26%,transparent); border-left-color: var(--green); }
.alert-warn { background: color-mix(in srgb,var(--orange) 10%,var(--panel)); color: #a16207; border-color: color-mix(in srgb,var(--orange) 30%,transparent); border-left-color: var(--orange); }
.alert-info { background: color-mix(in srgb,var(--blue) 8%,var(--panel)); color: var(--blue); border-color: color-mix(in srgb,var(--blue) 24%,transparent); border-left-color: var(--blue); }

/* 通用空态、弱化文字与错误态 */
.empty { display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 72px; padding: 24px 16px; text-align: center; color: var(--muted); font-size: 0.84375rem; border: 1px dashed color-mix(in srgb,var(--border) 90%,transparent); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb,var(--panel) 42%,var(--bg)); }
td.empty, .table .empty { display: table-cell; min-height: 0; padding: 30px 12px; border: 0; border-radius: 0; background: transparent; }
.muted { color: var(--muted); }
.error-text { color: var(--red); }
.table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--panel); }
/* 页面里直接放在 .table-wrap / .type-summary / .invite-list 中而未加 .table 的原生表格，补成统一视觉 */
.table-wrap table, .type-summary table, .invite-list table {
  width: 100%; border-collapse: collapse; font-size: 0.875rem; color: var(--text);
}
.table-wrap th, .type-summary th, .invite-list th {
  text-align: left; padding: 11px 12px; color: var(--muted); font-weight: 600; font-size: 0.8125rem;
  border-bottom: 1px solid var(--border); white-space: nowrap; background: color-mix(in srgb,var(--bg) 88%,var(--panel));
}
.table-wrap td, .type-summary td, .invite-list td {
  padding: 11px 12px; border-bottom: 1px solid var(--border); vertical-align: middle;
}
.table-wrap tbody tr:last-child td, .type-summary tbody tr:last-child td, .invite-list tbody tr:last-child td { border-bottom: none; }

/* 表格 */
.table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--panel); }
.table { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
.table th {
  text-align: left; padding: 11px 12px; color: var(--muted); font-weight: 600; font-size: 0.8125rem;
  letter-spacing: .2px;
  border-bottom: 1px solid var(--border); white-space: nowrap; background: var(--bg);
}
.table th:first-child { border-radius: calc(var(--radius-sm) - 2px) 0 0 0; }
.table th:last-child { border-radius: 0 calc(var(--radius-sm) - 2px) 0 0; }
.table td { padding: 11px 12px; border-bottom: 1px solid var(--border); vertical-align: middle; transition: background .16s var(--ease-smooth); }
.table tbody tr:last-child td { border-bottom: none; }
.table input[type=checkbox] { width: 20px; height: 20px; accent-color: var(--primary); vertical-align: middle; cursor: pointer; }
.table tr:hover td { background: var(--primary-soft); }
.ellipsis { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 文件名不使用通用省略号：文件名必须完整可读，超长名称在安全边界内换行。 */
.file-name-cell { width: 260px; min-width: 160px; max-width: 420px; white-space: normal !important; overflow: visible !important; text-overflow: clip !important; overflow-wrap: anywhere; word-break: break-word; line-height: 1.55; }
.file-name-cell code, .file-name-cell .code-cell { overflow-wrap: anywhere; word-break: break-word; }
.file-name-display { min-width: 0; white-space: normal; overflow-wrap: anywhere; word-break: break-word; line-height: 1.45; }
.badge { display: inline-block; padding: 3px 11px; border-radius: 99px; font-size: 0.75rem; font-weight: 600; line-height: 1.5; border: 1px solid transparent; white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }
.badge-green { background: color-mix(in srgb,var(--green) 14%,var(--panel)); color: var(--green); border-color: color-mix(in srgb,var(--green) 30%,transparent); }
.badge-red { background: color-mix(in srgb,var(--red) 13%,var(--panel)); color: var(--red); border-color: color-mix(in srgb,var(--red) 28%,transparent); }
.badge-yellow, .badge-warn { background: color-mix(in srgb,var(--orange) 14%,var(--panel)); color: #a16207; border-color: color-mix(in srgb,var(--orange) 32%,transparent); }
.badge-gray { background: color-mix(in srgb,var(--muted) 14%,var(--panel)); color: var(--muted); border-color: color-mix(in srgb,var(--muted) 28%,transparent); }
.badge-blue { background: color-mix(in srgb,var(--blue) 13%,var(--panel)); color: var(--blue); border-color: color-mix(in srgb,var(--blue) 28%,transparent); }
.badge-orange { background: color-mix(in srgb,var(--orange) 14%,var(--panel)); color: #b86b00; border-color: color-mix(in srgb,var(--orange) 32%,transparent); }
.badge-purple { background: color-mix(in srgb,#7c3aed 14%,var(--panel)); color: #6d28d9; border-color: color-mix(in srgb,#7c3aed 28%,transparent); }
.user-group-form { align-items: end; }
.user-group-edit-form { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.user-group-edit-form input[type="text"] { min-width: 110px; max-width: 180px; min-height: 40px; }
.user-group-edit-form input[type="number"] { width: 72px; min-height: 40px; }
.user-group-upload-policy { min-width: 260px; }
.user-group-upload-policy-form { display: grid; gap: 8px; min-width: 250px; }
.user-group-upload-switch { display: inline-flex; align-items: center; gap: 7px; min-height: 38px; font-weight: 600; }
.user-group-upload-policy-grid { display: grid; grid-template-columns: repeat(2, minmax(110px, 1fr)); gap: 8px; }
.user-group-upload-policy-grid label { display: grid; gap: 4px; color: var(--muted); font-size: 0.75rem; }
.user-group-upload-policy-grid input { width: 100%; min-width: 0; min-height: 40px; }
.user-group-upload-policy-form .layui-btn { justify-self: start; min-height: 40px; }
.user-group-upload-policy-readonly { display: grid; gap: 6px; align-items: start; }
.user-group-upload-policy-readonly small { color: var(--muted); line-height: 1.5; }
.admin-group-form select { min-width: 120px; min-height: 40px; }
.user-filter-bar select, .user-filter-bar .layui-btn, .user-group-table .ops .link { min-height: 44px; }
@media (max-width: 640px) {
  .user-group-edit-form, .admin-group-form, .user-group-form, .user-group-upload-policy-form { width: 100%; }
  .user-group-upload-policy { min-width: 0; }
  .user-group-upload-policy-grid { grid-template-columns: 1fr; }
  .user-group-upload-policy-form .layui-btn { justify-self: stretch; }
  .user-group-edit-form input, .admin-group-form select, .admin-group-form .link, .user-group-edit-form .link, .user-group-form input, .user-group-form .layui-btn, .user-group-upload-policy-form input[type="number"], .user-group-upload-policy-form .layui-btn, .user-filter-bar input, .user-filter-bar select, .user-filter-bar .layui-btn, .user-group-table .ops .link { width: 100%; min-height: 48px; }
}
.ops a { margin-right: 10px; font-size: 0.8125rem; }
.ops button.link { min-height: 44px; padding: 8px 4px; touch-action: manipulation; }
.ops { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-width: 180px; }
.ops form { display: inline-flex !important; margin: 0; }
.ops button.link { border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); padding: 8px 10px; background: var(--panel); color: var(--link, var(--primary)); }
.ops button.link:hover { background: color-mix(in srgb, var(--primary) 8%, transparent); border-color: var(--primary); }
.admin-reset-form input { width: 120px; min-height: 40px; padding: 6px 8px; }
.admin-level-form select { width: 96px; min-height: 40px; padding: 6px 8px; }
.admin-level-form input { width: 92px; min-height: 40px; padding: 6px 8px; }
.inline-form { display: inline; margin: 0 10px 0 0; }
.link-btn { min-height: 44px; padding: 0 2px; border: 0; background: transparent; color: var(--primary); font: inherit; font-size: 0.8125rem; cursor: pointer; touch-action: manipulation; }
.link-btn:hover { color: var(--primary-hover); }
.favorite-toggle { width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center; padding: 0; border: 1px solid color-mix(in srgb, var(--primary) 32%, var(--border)); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); color: var(--muted); font-size: 1.375rem; line-height: 1; cursor: pointer; touch-action: manipulation; transition: color .18s ease, background .18s ease, border-color .18s ease, transform .18s ease, opacity .18s ease; }
.favorite-toggle:hover, .favorite-toggle:focus-visible { color: #e3a008; border-color: #e3a008; background: rgba(227,160,8,.10); transform: translateY(-1px) scale(1.03); outline: none; }
.favorite-toggle.is-favorited { color: #e3a008; background: rgba(227,160,8,.13); border-color: rgba(227,160,8,.55); }
.favorite-toggle.is-loading { opacity: .55; cursor: wait; transform: scale(.94); }
.favorite-removing { animation: favoriteRemove .24s ease forwards; }
@keyframes favoriteRemove { to { opacity: 0; transform: translateX(12px); } }
.favorite-filter { min-height: 44px; padding: 0 4px; }
.favorite-cell-tools { display: flex; flex-direction: column; align-items: stretch; gap: 5px; margin-top: 6px; min-width: 118px; }
.favorite-cell-tools .favorite-group-select { width: 100%; min-height: 38px; max-width: 150px; font-size: 0.75rem; }
.favorite-cell-tools .favorite-note-btn { min-height: 34px; font-size: 0.75rem; padding: 4px 10px; }
.favorite-note-btn.has-note { border-color: var(--primary); color: var(--primary); }
.favorite-cell-tools .favorite-pin-btn { min-height: 34px; font-size: 0.75rem; padding: 4px 10px; border: 1px solid color-mix(in srgb, var(--primary) 32%, var(--border)); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); color: var(--muted); cursor: pointer; touch-action: manipulation; transition: color .18s ease, background .18s ease, border-color .18s ease; }
.favorite-cell-tools .favorite-pin-btn:hover, .favorite-cell-tools .favorite-pin-btn:focus-visible { border-color: var(--primary); color: var(--primary); outline: none; }
.favorite-cell-tools .favorite-pin-btn.is-pinned { border-color: rgba(34,197,94,.55); color: #16a34a; background: rgba(34,197,94,.10); }
.favorite-cell-tools .favorite-pin-btn.is-loading { opacity: .55; cursor: wait; }
.favorite-group-panel .favorite-group-create { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 14px; }
.favorite-group-create input[type="text"] { flex: 1 1 200px; min-width: 0; min-height: 44px; }
.favorite-group-create select { min-height: 44px; }
.favorite-group-list { display: flex; flex-direction: column; gap: 8px; }
.favorite-group-item { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }
.favorite-group-item .favorite-group-name { font-weight: 600; min-width: 96px; }
.favorite-group-item .favorite-group-name.is-child { color: var(--muted); font-weight: 500; }
.resource-tag-list { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-width: 110px; }
.resource-tag { display: inline-flex; align-items: center; min-height: 44px; padding: 6px 11px; border: 1px solid color-mix(in srgb, var(--primary) 30%, var(--border)); border-radius: 99px; background: color-mix(in srgb, var(--primary-soft) 72%, var(--panel)); color: var(--primary); font-size: 0.75rem; font-weight: 600; line-height: 1.2; cursor: pointer; touch-action: manipulation; transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease, background .18s ease; }
.resource-tag:hover, .resource-tag:focus-visible { transform: translateY(-1px); border-color: var(--primary); background: var(--primary-soft); box-shadow: 0 6px 16px color-mix(in srgb, var(--primary) 14%, transparent); outline: none; }
.batch-tag-field { flex: 1 1 240px; min-width: 0; }
.batch-tag-field input { width: 100%; min-width: 0; min-height: 44px; }
.duplicate-banner { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 14px; padding: 14px 16px; border: 1px solid color-mix(in srgb, #f39c12 34%, var(--border)); border-left: 4px solid #f39c12; border-radius: var(--radius-sm); background: linear-gradient(90deg, rgba(243,156,18,.12), var(--panel) 52%); animation: panelRise .22s ease; }
.duplicate-info { display: grid; gap: 4px; min-width: 0; }
.duplicate-info b { font-size: 0.9375rem; }
.duplicate-info span { color: var(--muted); font-size: 0.8125rem; line-height: 1.5; }
.duplicate-result { color: #b86b00; font-size: 0.8125rem; }
.duplicate-actions { display: flex; flex: 0 0 auto; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }
.duplicate-actions form { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; }
.duplicate-actions .layui-btn { min-height: 44px; }
.duplicate-badge { margin-top: 4px; }
.share-health { margin-top: 4px; transition: transform .18s ease, box-shadow .18s ease; }
.share-health:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(15,23,42,.08); }
.share-policy-badges { display:flex; flex-wrap:wrap; gap:4px; min-width:120px; }
.share-policy-badges .badge { font-size:0.6875rem; white-space:nowrap; }
.expiring-soon { animation: expiringPulse 1.8s ease-in-out infinite; }
@keyframes expiringPulse { 0%, 100% { opacity: 1; } 50% { opacity: .72; } }
.danger { color: var(--red) !important; }

/* 统计 */
.stats-row, .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 14px; }
.stat {
  text-align: center; padding: 16px 12px 14px; border-radius: calc(var(--radius) - 2px);
  background: var(--bg); border: 1px solid var(--border);
  transition: transform .18s var(--ease-smooth), box-shadow .18s var(--ease-smooth), border-color .18s var(--ease-smooth);
  position: relative; overflow: hidden;
}
/* 统计卡角落品牌氛围光晕 */
.stat::after {
  content: ''; position: absolute; top: -34px; right: -34px; width: 96px; height: 96px;
  border-radius: 50%; pointer-events: none;
  background: radial-gradient(circle, var(--primary-soft), transparent 70%);
}
.stat:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); border-color: color-mix(in srgb, var(--primary) 35%, var(--border)); }
.stat b { display: block; font-size: 1.5rem; font-weight: 800; color: var(--text); letter-spacing: -.5px; }
.stat span { color: var(--muted); font-size: 0.8125rem; }
.stat .stat-value-time { font-size: 0.8125rem; line-height: 1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.stat:first-child b { background: linear-gradient(120deg, var(--grad-a), var(--grad-b)); -webkit-background-clip: text; background-clip: text; color: transparent; }

/* 对象存储管理 */
.storage-hero { border-left: 4px solid var(--primary); }
.storage-hero .panel-head { align-items: flex-start; gap: 14px; }
.storage-hero h2 { margin-bottom: 6px; }
.storage-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 14px; }
.storage-actions form { margin: 0; }
.storage-prefix-form { display: flex; flex: 1 1 360px; gap: 8px; align-items: center; }
.storage-prefix-form input { flex: 1 1 220px; min-width: 160px; min-height: 40px; }
.storage-preview-pagination { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 12px; flex-wrap: wrap; }
.storage-stat-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin: 14px 0; }
.storage-stat-grid .card { min-height: 108px; padding: 16px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--panel); box-shadow: var(--shadow-sm); }
.storage-stat-grid b { display: block; font-size: 1.5625rem; line-height: 1.15; color: var(--text); }
.storage-stat-grid span, .storage-stat-grid small { display: block; margin-top: 6px; color: var(--muted); font-size: 0.8125rem; }
.storage-filter { display: flex; flex-wrap: wrap; }
.storage-filter input[type=search] { flex: 1 1 230px; min-width: 170px; }
.storage-filter select { min-width: 150px; }
.storage-path { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin-top: 3px; }
.storage-table td { vertical-align: top; }
.storage-reconcile-note { align-self: center; }
.storage-last-reconcile { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-top:14px; padding:12px 14px; border:1px solid color-mix(in srgb,var(--primary) 22%,var(--border)); border-radius:var(--radius-sm); background:color-mix(in srgb,var(--primary) 6%,var(--panel)); animation:fadeIn .25s ease; }
.storage-last-reconcile > div:first-child { display:flex; flex-direction:column; gap:3px; min-width:220px; }
.storage-last-reconcile > div:first-child span { color:var(--muted); font-size:0.75rem; overflow-wrap:anywhere; }
.storage-last-reconcile-stats { display:flex; align-items:center; flex-wrap:wrap; gap:8px; color:var(--muted); font-size:0.75rem; }
.storage-history-panel { margin-top: 18px; }
.storage-history-filter { display:flex; flex-wrap:wrap; align-items:flex-end; gap:10px; margin: 12px 0 10px; }
.storage-history-filter label { display:flex; flex-direction:column; gap:5px; color:var(--muted); font-size:0.75rem; min-width:160px; }
.storage-history-filter select { min-height:40px; }
.storage-history-actions { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin-bottom:12px; }
.storage-history-actions form { margin:0; }
.storage-history-table th, .storage-history-table td { vertical-align:top; }
.storage-history-table td { white-space:normal; }
.storage-history-prefix { max-width:220px; overflow-wrap:anywhere; }
.storage-history-anomalies { color:var(--muted); font-size:0.75rem; }
.storage-history-anomalies.is-warning { color:var(--red); font-weight:600; }
.storage-history-table-wrap { overflow-x:auto; }
.storage-reconcile-warning { margin: 0 0 14px; }
.storage-alert-number { color: var(--red) !important; }
.storage-reconcile-columns { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
.storage-reconcile-wide { grid-column: 1 / -1; margin-top: 18px; }
.storage-reconcile-columns h4 { margin: 0 0 8px; font-size: 0.875rem; }
.storage-issue-list { list-style: none; margin: 0; padding: 0; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); overflow: hidden; }
.storage-issue-list li { display: flex; flex-direction: column; gap: 3px; padding: 9px 11px; border-bottom: 1px solid var(--border); font-size: 0.75rem; }
.storage-issue-list li:last-child { border-bottom: 0; }
.storage-issue-list li span { color: var(--muted); overflow-wrap: anywhere; }
.storage-orphan-form { margin: 0; }
.storage-orphan-toolbar, .storage-orphan-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.storage-orphan-filter { flex: 1 1 180px; min-width: 150px; min-height: 40px; }
.storage-orphan-row { flex-direction: row !important; align-items: center; }
.storage-orphan-item { display: flex; align-items: flex-start; gap: 8px; width: 100%; cursor: pointer; }
.storage-orphan-item input { flex: 0 0 auto; margin-top: 2px; }
.storage-orphan-item span { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.storage-orphan-item small { color: var(--muted); font-size: 0.75rem; }
.upload-settings-head { margin-bottom: 6px; }
.upload-settings-head h4 { margin: 0; }
.storage-upload-hint { margin-bottom: 12px; }
.upload-storage-picker { min-width: 0; }
.upload-storage-picker label { display: block; margin-bottom: 6px; }
.upload-storage-picker select { width: 100%; min-height: 44px; font-weight: 700; }
/*
 * ⚠️ 第 46 轮补丁：修复「保存位置」下拉框文字被硬裁。
 *
 * 现象（用户截图）：「本地 · 本地磁盘 · 已测试正常」只显示到「已」的左半边，
 *   视觉上像一个大写字母 E，后面的「测试正常」全部看不见。
 *
 * 根因：本控件位于 `.settings > .grid` 内，而 `.grid` 是
 *   `repeat(auto-fit, minmax(180px, 1fr))`。在约 900px 视口下 grid 切成 4 列，
 *   每列仅 **190.5px**；而 select 自带 `padding-left:13px / padding-right:42px`
 *   （右侧 42px 是给下拉箭头让位的），**内容盒只剩 134px**，
 *   而文字实际需要 **177px** → 溢出 43px → 原生 select 直接**硬裁**文字
 *   （无省略号），这正是「文字显示不全」的来源。
 *   实测：1280px 放得下（内容盒 229px）、900px 被裁（134px）、
 *   760/414/375px 因 grid 转为单列/两列又放得下（595/351px）。
 *   即**只在特定中间宽度暴露**，容易漏测。
 *
 * 修法：给 picker 一个「内容装不下就独占整行」的最小宽度阈值。
 *   `grid-column: 1 / -1` 让它在 grid 内横跨所有列，从而拿到整行宽度。
 *   阈值取 260px：刚好覆盖「文字 177px + 左右内边距 55px + 箭头余量」，
 *   低于该宽度时独占整行，高于时保持正常栅格排布，**不影响桌面端观感**。
 */
.upload-storage-picker { grid-column: 1 / -1; }
@media (min-width: 620px) {
  /* 宽屏下若整行过宽，限制一个舒适的最大宽度，避免下拉框拉得过长 */
  .upload-storage-picker { max-width: 100%; }
}
.upload-storage-picker .hint { margin: 6px 0 0; line-height: 1.45; }
.upload-storage-extra { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(220px, .65fr); gap: 10px 16px; align-items: start; padding: 13px 14px; border: 1px solid color-mix(in srgb, var(--primary) 18%, var(--border)); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--primary-soft) 36%, var(--panel)); }
.upload-storage-extra.is-disabled { opacity: .82; }
.upload-storage-extra-field { min-width: 0; }
.upload-storage-extra-field label { margin-bottom: 6px; }
.upload-storage-extra-field input { min-height: 44px; }
.upload-storage-extra .hint { margin: 6px 0 0; line-height: 1.45; }
.upload-storage-public-option { display: flex; align-items: center; gap: 8px; min-height: 44px; margin: 0; padding: 8px 10px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--panel) 84%, var(--bg)); color: var(--text); cursor: pointer; }
.upload-storage-public-option input { width: 18px; height: 18px; flex: 0 0 auto; margin: 0; accent-color: var(--primary); }
.upload-storage-public-option:focus-within { outline: 3px solid color-mix(in srgb, var(--primary) 22%, transparent); outline-offset: 2px; }
.upload-storage-public-hint { grid-column: 2; margin-top: -5px !important; }
.upload-storage-extra input:disabled { cursor: not-allowed; }

/* 面板头 + 筛选 */
.panel-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; }
.panel-head-actions { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 8px; }
.panel-head-actions .inline-form { display: inline-flex; margin: 0; }
.form-span-all { grid-column: 1 / -1; }
.tab-pane.is-hidden, .share-result-detail.is-hidden { display: none; }
.announce-heading-icon { width: 18px; height: 18px; }
.announce-pin { margin-right: 8px; }
.zip-extract-check { margin-top: 14px; }
.announcement-content-input { min-height: 120px; }
.announcement-flags { margin-top: 12px; display: flex; flex-wrap: wrap; gap: 10px; }
/* 后台公告附件：上传区与已传附件列表 */
.announcement-attachment-block { margin-top: 14px; padding: 12px; border: 1px dashed var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--muted) 5%, transparent); }
.announcement-attachment-block > label { display: block; margin-bottom: 6px; font-weight: 600; }
.announcement-attachment-block input[type="file"] { width: 100%; min-height: 44px; padding: 8px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); }
.announcement-attachment-list { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.announcement-attachment-item { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 8px 10px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); }
.announcement-attachment-item img { width: 44px; height: 44px; object-fit: cover; border-radius: calc(var(--radius-sm) - 4px); flex: none; }
.announcement-attachment-name { flex: 1 1 160px; min-width: 0; word-break: break-all; font-size: 0.8125rem; }
.announcement-attachment-icon { flex: none; font-size: 1.125rem; }
/* 后台公告功能引导 */
.announcement-guide { background: linear-gradient(120deg, color-mix(in srgb, var(--primary) 7%, var(--panel)), var(--panel) 62%); }
.announcement-guide-list { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 8px; font-size: 0.875rem; line-height: 1.7; color: var(--text); }
.announcement-guide-list b { color: var(--primary); }
.announcement-guide-alert { color: var(--warning, #b45309); }
.announcement-guide-list .link { text-decoration: none; }
/* 公告高级编辑面板：模板、Markdown 工具栏、外观标记、定向发布 */
.announcement-template-block { margin: 14px 0; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--primary) 4%, transparent); }
.announcement-template-block > label { display: block; margin-bottom: 6px; font-weight: 600; }
.announcement-template-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.announcement-template-row select { flex: 1 1 240px; min-width: 0; min-height: 44px; }
.announcement-md-toolbar { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; padding: 8px; margin-bottom: 6px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--muted) 6%, transparent); }
.announcement-md-toolbar button { min-height: 36px; min-width: 38px; padding: 4px 10px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); color: var(--text); font-size: 0.8125rem; line-height: 1.2; cursor: pointer; }
.announcement-md-toolbar button:hover { border-color: var(--primary); color: var(--primary); }
/* ⚠️ 焦点指示：工具栏 18 个按钮为「无类裸 <button>」，layui.css 的
   `button,input,...{outline:0}` 会移除其焦点轮廓；项目此前只有 :hover 规则、
   无任何 :focus/:focus-visible 覆盖 → 键盘聚焦时无可见指示（无障碍缺陷）。
   补上与 :hover 一致的品牌色焦点环，特异性 (0,2,0) 压过 layui 的 (0,1,0)。 */
.announcement-md-toolbar button:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 32%, transparent); outline-offset: 2px; border-color: var(--primary); color: var(--primary); }
.announcement-md-sep { width: 1px; height: 22px; background: var(--border); margin: 0 2px; }
.announcement-advanced-block { margin-top: 18px; padding: 14px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--muted) 4%, transparent); }
.announcement-advanced-title { margin: 0 0 12px; font-size: 0.9375rem; display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; }
.announcement-advanced-title .hint { font-weight: 400; font-size: 0.78125rem; }
.announcement-field { margin-bottom: 14px; }
.announcement-field > label { display: block; margin-bottom: 6px; font-weight: 600; font-size: 0.84375rem; }
.announcement-field input[type="text"], .announcement-field input[type="number"], .announcement-field select, .announcement-field textarea { width: 100%; min-height: 44px; padding: 8px 10px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); color: var(--text); font: inherit; }
.announcement-field textarea { min-height: 64px; resize: vertical; }
.announcement-grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.announcement-cover-row { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.announcement-cover-row input[type="file"] { flex: 1 1 240px; min-width: 0; min-height: 44px; padding: 8px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); }
.announcement-cover-current { display: inline-flex; align-items: center; gap: 8px; }
.announcement-cover-current img { width: 72px; height: 48px; object-fit: cover; border-radius: calc(var(--radius-sm) - 2px); border: 1px solid var(--border); }
.announcement-icon-picks { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.announcement-icon-pick { min-height: 40px; min-width: 40px; font-size: 1.125rem; line-height: 1; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); cursor: pointer; }
.announcement-icon-pick:hover { border-color: var(--primary); }
.announcement-accent-row { display: flex; gap: 8px; align-items: center; }
.announcement-accent-row input[type="color"] { width: 52px; height: 44px; padding: 2px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); cursor: pointer; }
.announcement-accent-row input[type="text"] { flex: 1 1 auto; min-width: 0; }
.announcement-summary-row { display: flex; gap: 8px; align-items: flex-start; }
.announcement-summary-row textarea { flex: 1 1 auto; min-width: 0; }
.announcement-summary-row .layui-btn { flex: none; min-height: 44px; }
.announcement-visibility-options { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 12px; }
.announcement-visibility-options .checkbox { min-height: 44px; display: inline-flex; align-items: center; gap: 6px; }
.announcement-group-picks { display: flex; flex-wrap: wrap; gap: 10px; }
.announcement-group-picks .checkbox { min-height: 44px; display: inline-flex; align-items: center; gap: 6px; }
.settings-subsection-title { margin: 18px 0 8px; font-size: 0.875rem; color: var(--muted); font-weight: 700; }
@media (max-width: 760px) {
  .announcement-guide-list { padding-left: 18px; font-size: 0.84375rem; }
  .announcement-attachment-block { padding: 10px; }
  .announcement-attachment-item { gap: 8px; }
  .announcement-grid-2 { grid-template-columns: 1fr; gap: 12px; }
  .announcement-template-row { flex-direction: column; align-items: stretch; }
  .announcement-template-row select, .announcement-template-row .layui-btn { width: 100%; }
  .announcement-md-toolbar { overflow-x: auto; flex-wrap: nowrap; -webkit-overflow-scrolling: touch; }
  .announcement-md-toolbar button { flex: 0 0 auto; min-height: 44px; }
  .announcement-advanced-block { padding: 12px; }
  .announcement-summary-row { flex-direction: column; align-items: stretch; }
  .announcement-summary-row .layui-btn { width: 100%; }
  .announcement-icon-pick { min-height: 44px; min-width: 44px; }
}
.announcement-flags .checkbox { min-height: 44px; }
.settings-block-gap { margin-top: 12px; }
.settings-block-gap-lg { margin-top: 16px; }
.user-narrow-main { max-width: 760px; }
.user-auth-main { max-width: 520px; }
.btn-block { width: 100%; justify-content: center; }
.auth-result-action { text-align: center; margin-top: 18px; }
.auth-reset-hint { margin-bottom: 14px; }
.share-password-shell { width: min(460px, calc(100% - 32px)); }
.share-password-panel { max-width: none; text-align: center; padding: 36px 28px; }
.share-password-panel h2 { margin-bottom: 10px; }
.share-password-code { margin: 0 0 18px; }
.share-password-help { margin-top: 12px; }
.share-password-panel form { text-align: left; }
.share-password-panel .btn-block { margin-top: 18px; }
.email-verification-panel { max-width: none; }
.email-verification-form { margin: 14px 0 0; }
.email-verification-form .layui-btn { min-height: 44px; }
@media (max-width: 640px) {
  .email-verification-panel { padding: 22px 16px; }
  .email-verification-form .layui-btn, .email-verification-panel .btn-block { min-height: 48px; }
}
@media (max-width: 768px) {
  .share-password-shell { width: min(100% - 20px, 460px); }
  .share-password-panel { padding: 24px 16px 22px; }
  .share-password-panel input, .share-password-panel .btn-block { min-height: 48px; }
}
.logs-filter-notice { margin-top: 12px; margin-bottom: 0; }
.code-list-hint { margin-bottom: 16px; }
.filter { display: flex; gap: 8px; }
.search-bar, .filter {
  align-items: center; padding: 10px; border: 1px solid color-mix(in srgb, var(--border) 88%, transparent);
  border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--bg) 72%, var(--panel));
  box-shadow: 0 3px 12px rgba(15, 23, 42, .04); transition: border-color .18s ease, box-shadow .18s ease;
}
.search-bar:focus-within, .filter:focus-within {
  border-color: color-mix(in srgb, var(--primary) 38%, var(--border));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 9%, transparent);
}
.input-wrap { position: relative; display: flex; align-items: center; align-self: center; flex: 1 1 220px; min-width: 0; min-height: 46px; }
.input-wrap.has-search-icon > input[type=text], .input-wrap.has-search-icon > input[type=search] { padding-left: 40px; }
.input-wrap input { padding-right: 42px; }
.input-clear {
  position: absolute; right: 6px; width: 31px; height: 31px; display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: 50%; background: transparent; color: var(--muted); cursor: pointer;
  transition: background .15s ease, color .15s ease, transform .12s ease;
}
.input-clear:hover { background: color-mix(in srgb, var(--muted) 12%, transparent); color: var(--text); }
.input-clear:active { transform: scale(.92); }
.input-clear svg { width: 16px; height: 16px; }
.input-clear[hidden] { display: none; }
.pw-toggle {
  width: 34px; height: 34px; padding: 0; color: var(--muted);
  border: 1px solid transparent; border-radius: calc(var(--radius) - 5px);
  transition: background .15s ease, color .15s ease, border-color .15s ease, transform .12s ease;
}
.pw-toggle:hover { background: color-mix(in srgb, var(--primary) 12%, transparent); color: var(--primary); border-color: color-mix(in srgb, var(--primary) 28%, transparent); }
.pw-toggle:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 30%, transparent); outline-offset: 1px; }
.pw-toggle[aria-pressed="true"] { color: var(--primary); background: color-mix(in srgb, var(--primary) 10%, transparent); border-color: color-mix(in srgb, var(--primary) 24%, transparent); }
.pw-toggle svg { width: 19px; height: 19px; }
.caps-hint {
  position: absolute; top: -32px; left: 12px;
  font-size: 0.6875rem; color: var(--orange); background: color-mix(in srgb, var(--panel) 94%, rgba(245,158,11,.14));
  border: 1px solid rgba(245,158,11,.35); border-radius: calc(var(--radius-sm) - 4px); padding: 2px 8px;
  white-space: nowrap; pointer-events: none; z-index: 3;
  box-shadow: var(--shadow-sm);
}
input[type=password] { letter-spacing: 1px; }
.input-wrap input[type=file] { padding-right: 10px; }
.chip { padding: 5px 14px; border-radius: var(--radius-lg); font-size: 0.8125rem; color: var(--muted); border: 1px solid var(--border); }
.chip.on { background: var(--primary); color: #fff; border-color: var(--primary); }

/* ⚠️ 第 44 轮：基类**必须** `flex-wrap: wrap`。
   原为纯 `display:flex`（默认 nowrap），而同族的 `.share-bulk-toolbar`(1993)、
   `.code-bulk-toolbar`(1997) 都有 wrap —— `.batch-bar` 是唯一漏掉的。
   后果（用户截图实证，用户中心「我的文件」底部批量操作栏）：
     容器 flex-wrap:nowrap 且 overflow 可见 → **容器自身不溢出**（scrollW==clientW），
     但 flex 项被**压缩**，按钮内 `overflow:hidden`（为悬停光泽 ::before 而设）
     把文字**水平硬裁** —— 实测 7 个按钮全部裁切：
       「请选择操作」→「请选择操」、「批量分享」→「批量分」、「复制链接」→「复制链」、
       「复制提取码」→「复制提取」、「取消选择」→「取消选」、「打包下载」、
       「打包本页全部」→「包本页全」
   注意：**这类缺陷在容器层面测不出来**（容器不溢出），必须逐个量按钮的
   scrollWidth/clientWidth 才能发现。 */
.batch-bar { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 16px; align-items: center; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }
.card-link { display: block; color: inherit; text-decoration: none; cursor: pointer; }
.card-link:hover, .card-link:focus-visible { color: inherit; text-decoration: none; }
.card-link:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 35%, transparent); outline-offset: 2px; }
.share-bulk-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: -2px 0 14px; padding: 10px 12px; border: 1px solid color-mix(in srgb, var(--primary) 20%, var(--border)); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--primary-soft) 55%, var(--panel)); animation: fadeIn .24s ease both; }
.share-bulk-toolbar .checkbox { margin: 0; min-height: 44px; }
.share-bulk-toolbar .hint { margin-right: auto; }
.share-bulk-toolbar .layui-btn { min-height: 44px; touch-action: manipulation; }
.code-bulk-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: -2px 0 14px; padding: 10px 12px; border: 1px solid color-mix(in srgb, var(--primary) 20%, var(--border)); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--primary-soft) 55%, var(--panel)); animation: fadeIn .24s ease both; }
.code-bulk-toolbar .checkbox { margin: 0; min-height: 44px; }
.code-bulk-toolbar .hint { margin-right: auto; }
.code-bulk-toolbar .layui-btn { min-height: 44px; touch-action: manipulation; }
.batch-bar select { width: auto; }
.batch-bar input:not([type=checkbox]):not([type=radio]), .batch-bar select { min-height: 44px; }
/* ⚠️ 第 44 轮：原为 `white-space: nowrap`，特异性 (0,2,0) **反压**了本文件末尾
   `body .layui-btn{white-space:normal}` (0,1,1) → 桌面端按钮永不换行，配合
   flex 压缩 + `overflow:hidden` 造成文字硬裁（见上方 .batch-bar 注释的实测清单）。
   改为 normal 与全局 `body .layui-btn` 保持一致：窄容器自动换行、多行自动增高。 */
.batch-bar .layui-btn { white-space: normal; }
.batch-option-field { display: inline-flex; align-items: center; gap: 8px; margin: 0; color: var(--muted); }
.batch-option-field[hidden] { display: none; }
.batch-option-field > span { white-space: nowrap; }
.batch-option-field input { width: 96px; }
.batch-option-field select { max-width: 220px; }
.batch-count { margin-left: auto; font-weight: 600; white-space: nowrap; }

/* 移动端筛选/搜索栏紧凑布局（此前丢失媒体查询包裹，已在桌面端误生效，现归位到 ≤768px） */
@media (max-width:768px) {
  .storage-stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .storage-hero .panel-head { flex-direction: column; }
  .storage-actions { flex-direction: column; }
  .storage-actions form, .storage-actions .layui-btn { width: 100%; }
  .storage-prefix-form { align-items: stretch; flex-direction: column; }
  .storage-prefix-form input, .storage-prefix-form .layui-btn { width: 100%; min-height: 44px; }
  .storage-preview-pagination { align-items: stretch; flex-direction: column; }
  .storage-preview-pagination .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .storage-actions .layui-btn { justify-content: center; min-height: 44px; }
  .storage-filter { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .storage-filter input[type=search] { grid-column: 1 / -1; width: 100%; }
  .storage-filter select, .storage-filter button { width: 100%; min-height: 44px; }
  .storage-table { min-width: 700px; }
  .storage-path { max-width: 180px; }
  .storage-reconcile-columns { grid-template-columns: 1fr; gap: 12px; }
  .storage-reconcile-wide { margin-top: 12px; }
  .storage-reconcile-note { width: 100%; }
  .storage-last-reconcile { align-items:stretch; flex-direction:column; }
  .storage-last-reconcile > div:first-child { min-width:0; }
  .storage-last-reconcile-stats { gap:6px; }
  .storage-last-reconcile > .layui-btn { width:100%; min-height:44px; justify-content:center; }
  .storage-history-filter { display:grid; grid-template-columns:1fr 1fr; align-items:stretch; }
  .storage-history-filter label { min-width:0; }
  .storage-history-filter button { grid-column:1 / -1; width:100%; min-height:44px; justify-content:center; }
  .storage-history-actions { align-items:stretch; flex-direction:column; }
  .storage-history-actions form, .storage-history-actions .layui-btn { width:100%; }
  .storage-history-actions .layui-btn { min-height:44px; justify-content:center; }
  .storage-history-table { min-width:0; }
  .storage-history-table thead { display:none; }
  .storage-history-table, .storage-history-table tbody, .storage-history-table tr, .storage-history-table td { display:block; width:100%; }
  .storage-history-table tr { padding:12px; border:1px solid var(--border); border-radius:var(--radius-sm); margin-bottom:10px; background:var(--panel); }
  .storage-history-table td { display:flex; justify-content:space-between; gap:12px; padding:5px 0; border:0; text-align:right; }
  .storage-history-table td::before { content:attr(data-label); color:var(--muted); font-size:0.75rem; text-align:left; flex:0 0 auto; }
  .storage-history-table td > * { min-width:0; }
  .storage-history-prefix { max-width:none; }
  .storage-orphan-toolbar, .storage-orphan-actions { align-items: stretch; flex-direction: column; }
  .storage-orphan-toolbar .layui-btn, .storage-orphan-actions .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .storage-orphan-filter { width: 100%; min-height: 44px; }
  .storage-orphan-row { align-items: flex-start; }
  .storage-orphan-row .storage-copy-key { flex: 0 0 auto; min-height: 44px; }
  /* 两列紧凑网格：搜索框占整行，下拉与按钮并排，不再全宽拉伸 */
  .search-bar, .filter {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 10px;
  }
  .search-bar > input[type=text]:first-child,
  .search-bar > input[type=search]:first-child,
  .input-wrap,
  .search-bar > .layui-btn[type=submit], .filter > .layui-btn[type=submit],
  .search-bar > button[type=submit], .filter > button[type=submit] { grid-column: 1 / -1; }
  /* 普通按钮恢复正常高度并与所在列同宽，不整行铺满 */
  .search-bar > .layui-btn, .filter > .layui-btn { min-height: 44px; padding-left: 14px; padding-right: 14px; white-space: normal; }
  .search-bar a.layui-btn, .filter a.layui-btn { grid-column: auto; justify-content: center; display: inline-flex; align-items: center; }
  /* 选择框固定单列宽度，禁止被拉伸 */
  .search-bar select, .filter select { width: 100%; min-width: 0; max-width: none; height: 44px; min-height: 44px; font-size: 0.875rem; }
  .trash-filter select, .code-filter select { width: 100%; }
  /* 首个搜索输入在焦点时叠加放大镜留白 */
  .search-bar > input[type=text]:first-child, .search-bar > input[type=search]:first-child,
  .search-bar .input-wrap > input[type=text], .search-bar .input-wrap > input[type=search] { padding-left: 40px; min-height: 44px; border-radius: calc(var(--radius) - 2px); }
  .search-icon, .input-wrap .search-icon { left: 12px; width: 18px; height: 18px; }
  /* 日志筛选：搜索框/日期区占整行，动作、结果与按钮走两列 */
  .logs-filter > input[type=text] { grid-column: 1 / -1; }
  .logs-filter .date-field { grid-column: span 1; min-width: 0; }
  .logs-filter .date-field input { min-height: 44px; }
  .caps-hint { left: 50%; transform: translateX(-50%); top: -30px; position: absolute; }
  .file-actions { gap: 8px; }
  .file-actions .layui-btn { flex: 1 1 calc(50% - 8px); justify-content: center; min-height: 44px; }
  .text-toolbar { flex-wrap: wrap; gap: 8px; }
  .text-share-actions { width: 100%; justify-content: stretch; }
}

/* 资源审核中心：桌面端信息密度优先，手机端改为可读卡片。 */
.content-review-intro .panel-head { align-items: flex-start; gap: 16px; }
.content-review-intro h2 { margin-bottom: 6px; }
.content-review-summary { margin: 0 0 20px; }
.content-review-filter-form { align-items: flex-end; }
.content-review-filter-form > input,
.content-review-filter-form > select { min-width: 150px; }
.content-review-date { display: flex; flex-direction: column; gap: 5px; color: var(--muted); font-size: 0.75rem; font-weight: 600; }
.content-review-date input { min-width: 145px; }
.content-review-head-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }
.content-review-batchbar { display: grid; grid-template-columns: 150px minmax(180px, 1fr) minmax(180px, 1fr) auto auto; gap: 10px; align-items: center; margin-bottom: 14px; }
.content-review-batchbar input { min-width: 0; }
.content-review-table { min-width: 1080px; }
.content-review-table td, .content-review-table th { vertical-align: top; }
.content-review-resource { min-width: 280px; max-width: 420px; }
.content-review-resource b { display: block; overflow-wrap: anywhere; }
.content-review-resource details { margin-top: 7px; }
.content-review-resource summary { color: var(--primary); cursor: pointer; font-size: 0.75rem; }
.content-review-resource details p { margin: 7px 0 0; color: var(--muted); line-height: 1.6; overflow-wrap: anywhere; }
.content-review-history { margin: 8px 0 0; padding-left: 18px; color: var(--muted); font-size: 0.75rem; line-height: 1.7; }
.content-review-history li { margin: 2px 0; overflow-wrap: anywhere; }
.content-review-pager { display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: 14px; }
.content-review-settings-panel .panel-head { align-items: center; }
@media (max-width:1100px) {
  .content-review-batchbar { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .content-review-batchbar .layui-btn, .content-review-batchbar .batch-count { width: auto; }
}
@media (max-width:768px) {
  .content-review-intro .panel-head, .content-review-head-actions { flex-direction: column; align-items: flex-start; }
  .content-review-head-actions, .content-review-head-actions form, .content-review-head-actions .layui-btn { width: 100%; }
  .content-review-head-actions .layui-btn { justify-content: center; }
  .content-review-filter-form { display: grid; grid-template-columns: 1fr; align-items: stretch; }
  .content-review-filter-form > input, .content-review-filter-form > select, .content-review-date input, .content-review-filter-form > button { width: 100%; min-width: 0; min-height: 44px; }
  .content-review-batchbar { grid-template-columns: 1fr; align-items: stretch; }
  .content-review-batchbar .layui-btn, .content-review-batchbar input:not([type=checkbox]):not([type=radio]), .content-review-batchbar select { width: 100%; min-height: 44px; justify-content: center; }
  .content-review-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .content-review-pager { flex-wrap: wrap; }
  .content-review-table-wrap { -webkit-overflow-scrolling: touch; }
}
@media (max-width:768px) {
  body.admin-page[data-mobile-table-mode="card"] .content-review-table { min-width: 0; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table,
  body.admin-page[data-mobile-table-mode="card"] .content-review-table thead,
  body.admin-page[data-mobile-table-mode="card"] .content-review-table tbody,
  body.admin-page[data-mobile-table-mode="card"] .content-review-table tr,
  body.admin-page[data-mobile-table-mode="card"] .content-review-table th,
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td { display: block; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table thead { display: none; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table tbody { display: flex; flex-direction: column; gap: 12px; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table tr { padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); box-shadow: var(--shadow-sm); }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; min-height: 36px; padding: 8px 0; text-align: right; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td::before { content: attr(data-label); flex: 0 0 88px; color: var(--muted); font-size: 0.75rem; font-weight: 700; text-align: left; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:first-child::before { content: '选择'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(2)::before { content: '审核 ID'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(3)::before { content: '类型'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(4)::before { content: '资源'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(5)::before { content: '提取码'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(6)::before { content: '上传者'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(7)::before { content: '状态'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(8)::before { content: '敏感词'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(9)::before { content: '来源'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(10)::before { content: '提交时间'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td:nth-child(11)::before { content: '操作'; }
  body.admin-page[data-admin-page="share_comments"] .content-review-table td:nth-child(1)::before { content: '选择'; }
  body.admin-page[data-admin-page="share_comments"] .content-review-table td:nth-child(2)::before { content: 'ID'; }
  body.admin-page[data-admin-page="share_comments"] .content-review-table td:nth-child(3)::before { content: '分享'; }
  body.admin-page[data-admin-page="share_comments"] .content-review-table td:nth-child(4)::before { content: '发布者'; }
  body.admin-page[data-admin-page="share_comments"] .content-review-table td:nth-child(5)::before { content: '留言内容'; }
  body.admin-page[data-admin-page="share_comments"] .content-review-table td:nth-child(6)::before { content: '状态'; }
  body.admin-page[data-admin-page="share_comments"] .content-review-table td:nth-child(7)::before { content: 'IP / 时间'; }
  body.admin-page[data-admin-page="share_comments"] .content-review-table td:nth-child(8)::before { content: '快捷操作'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td.share-comment-detail-cell::before { content: none; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table tr.share-comment-detail-row { padding: 10px 12px; }
  body.admin-page[data-admin-page="share_comment_attachments"] .content-review-table td:nth-child(1)::before { content: '选择'; }
  body.admin-page[data-admin-page="share_comment_attachments"] .content-review-table td:nth-child(2)::before { content: 'ID'; }
  body.admin-page[data-admin-page="share_comment_attachments"] .content-review-table td:nth-child(3)::before { content: '分享'; }
  body.admin-page[data-admin-page="share_comment_attachments"] .content-review-table td:nth-child(4)::before { content: '留言'; }
  body.admin-page[data-admin-page="share_comment_attachments"] .content-review-table td:nth-child(5)::before { content: '文件名'; }
  body.admin-page[data-admin-page="share_comment_attachments"] .content-review-table td:nth-child(6)::before { content: '类型'; }
  body.admin-page[data-admin-page="share_comment_attachments"] .content-review-table td:nth-child(7)::before { content: '大小'; }
  body.admin-page[data-admin-page="share_comment_attachments"] .content-review-table td:nth-child(8)::before { content: '上传时间'; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td > * { min-width: 0; max-width: calc(100% - 96px); overflow-wrap: anywhere; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-resource { min-width: 0; max-width: calc(100% - 96px); }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td[colspan] { display: block; text-align: center; }
  body.admin-page[data-mobile-table-mode="card"] .content-review-table td[colspan]::before { display: none; }
}

/* 后台顶部清除缓存与刷新按钮：默认使用紧凑图标，文字保留给读屏和悬停提示。 */
.admin-top-actions { min-width: 0; flex-wrap: nowrap; justify-content: flex-end; gap: 8px; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.admin-top-actions::-webkit-scrollbar { display: none; }
.admin-top-actions > * { flex: 0 0 auto; }
.admin-cache-action, .admin-refresh-action {
  width: 40px; min-width: 40px; height: 40px; min-height: 40px;
  display: inline-flex; align-items: center; justify-content: center; gap: 0;
  padding: 0; position: relative; border: 1px solid var(--border); border-radius: var(--radius-sm); background: transparent;
  color: var(--text); font: inherit; font-size: 0.8125rem; line-height: 1; cursor: pointer;
  touch-action: manipulation; transition: color .15s, border-color .15s, background .15s, transform .15s;
}
.admin-fullscreen-action { width:40px; min-width:40px; height:40px; min-height:40px; display:inline-flex; align-items:center; justify-content:center; padding:0; border:1px solid var(--border); border-radius:var(--radius-sm); background:transparent; color:var(--text); cursor:pointer; touch-action:manipulation; }
.admin-fullscreen-action:hover,.admin-fullscreen-action.is-active { border-color:var(--primary); color:var(--primary); background:color-mix(in srgb, var(--primary) 8%, transparent); }
.admin-fullscreen-action svg { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
@media (max-width:768px) { .admin-top-actions .admin-fullscreen-action { width:44px; min-width:44px; height:44px; min-height:44px; flex:0 0 44px; } }
.admin-action-label {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}
.admin-cache-action:hover, .admin-refresh-action:hover { border-color: var(--primary); color: var(--primary); background: color-mix(in srgb, var(--primary) 8%, transparent); }
.admin-cache-action:active, .admin-refresh-action:active { transform: scale(.97); }
.admin-cache-action:focus-visible, .admin-refresh-action:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 35%, transparent); outline-offset: 2px; }
.admin-cache-action:disabled, .admin-refresh-action:disabled { opacity: .65; cursor: wait; }
.admin-cache-action svg, .admin-refresh-action svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
.admin-cache-action.is-busy svg, .admin-refresh-action.is-busy svg { animation: admin-action-spin .8s linear infinite; }
@keyframes admin-action-spin { to { transform: rotate(360deg); } }
.content-schedule-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 14px; }
.content-schedule-grid input[type="datetime-local"] { min-height: 44px; }
.content-schedule-cell { min-width: 220px; color: var(--muted); font-size: 0.75rem; line-height: 1.55; white-space: normal; overflow-wrap: anywhere; }
@media (max-width: 768px) {
  .admin-top-actions { width: auto; flex: 0 1 auto; min-width: 0; gap: 6px; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .admin-top-actions::-webkit-scrollbar { display: none; }
  .admin-top-actions .admin-cache-action, .admin-top-actions .admin-refresh-action { width: 44px; min-width: 44px; height: 44px; min-height: 44px; flex: 0 0 44px; }
  .content-schedule-grid { grid-template-columns: 1fr; gap: 8px; }
  .content-schedule-cell { min-width: 160px; }
}

/* 通知模板中心：桌面双栏，手机端自动单列并保留可触控操作。 */
.notification-template-page{min-width:0}
.notification-template-settings-summary{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:0 0 16px;padding:10px 12px;background:var(--panel);border:1px solid var(--border);border-radius:calc(var(--radius-sm) - 2px);color:var(--muted);font-size:0.75rem}
.notification-template-settings-summary a{color:var(--primary);text-decoration:none;font-weight:600}
.notification-template-layout{display:grid;grid-template-columns:minmax(210px,280px) minmax(0,1fr);gap:18px;align-items:start}
.notification-template-catalog{position:sticky;top:84px;max-height:calc(100vh - 108px);overflow:auto}
.notification-template-list{display:flex;flex-direction:column;gap:8px}
.notification-template-item{display:flex;flex-direction:column;gap:5px;padding:11px 12px;border:1px solid var(--border);border-radius:calc(var(--radius-sm) - 2px);color:var(--text);text-decoration:none;background:var(--panel);transition:border-color .15s,background .15s}
.notification-template-item:hover,.notification-template-item.is-active{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 7%,var(--panel))}
.notification-template-item-title{font-weight:700;font-size:0.875rem}
.notification-template-item-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--muted);font-size:0.6875rem}
.notification-template-item small{color:var(--muted);line-height:1.5}
.notification-template-editor{min-width:0}
.notification-template-form label{display:block;margin:12px 0 6px;font-weight:600}
.notification-template-enabled{display:flex!important;align-items:center;gap:8px;margin:0 0 12px!important;font-weight:600}
.notification-template-enabled input{width:auto;margin:0}
.notification-template-variable-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0 10px;padding:9px;border:1px dashed var(--border);border-radius:calc(var(--radius-sm) - 2px);background:var(--bg);font-size:0.75rem;color:var(--muted)}
.notification-template-variable{min-height:32px;padding:5px 8px;font-size:0.75rem}
.notification-template-variable code{font-size:0.6875rem}
.notification-template-form textarea{min-height:280px;resize:vertical;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;line-height:1.55}
.notification-template-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.notification-template-preview-inbox{margin:0 0 10px;padding:10px 12px;border:1px solid var(--border);border-radius:calc(var(--radius-sm) - 2px);background:var(--bg);font-size:0.8125rem;word-break:break-word}
.notification-template-preview-from{margin:0 0 4px}
.notification-template-preview-subject{padding:0;border:0;background:transparent;font-size:0.8125rem;word-break:break-word}
.notification-template-preview-tabs{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}
.notification-template-preview-tabs .is-active{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.notification-template-preview-stage.is-hidden,.notification-template-preview-plain.is-hidden{display:none}
.notification-template-preview{width:100%;min-height:420px;height:520px;padding:0;border:1px solid var(--border);border-radius:calc(var(--radius-sm) - 2px);background:#eef2f7}
.notification-template-preview-phone{max-width:320px;margin:0 auto;padding:14px 10px 18px;border-radius:calc(var(--radius-lg) + 8px);background:#111827;box-shadow:inset 0 0 0 2px #1f2937}
.notification-template-preview-phone .notification-template-preview{min-height:560px;height:620px;border:0;border-radius:calc(var(--radius-lg) - 2px)}
.notification-template-preview-plain{margin:0;padding:12px;min-height:280px;border:1px solid var(--border);border-radius:calc(var(--radius-sm) - 2px);background:var(--bg);color:var(--text);white-space:pre-wrap;word-break:break-word;font-size:0.8125rem;line-height:1.65}
@media (max-width: 560px){
  .notification-template-preview{min-height:360px;height:440px}
  .notification-template-preview-phone .notification-template-preview{min-height:460px;height:500px}
}
.notification-template-test-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end}
.notification-template-test-form label{grid-column:1/-1;margin:0 0 -4px;font-weight:600}
.notification-template-test-form input{min-width:0}
.notification-template-history{min-width:620px}
.notification-template-history td,.notification-template-history th{vertical-align:middle}
@media (max-width: 900px){
  .notification-template-layout{grid-template-columns:1fr}
  .notification-template-catalog{position:static;max-height:none}
  .notification-template-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width: 560px){
  .notification-template-list{grid-template-columns:1fr}
  .notification-template-settings-summary{gap:7px 10px}
  .notification-template-test-form{grid-template-columns:1fr}
  .notification-template-test-form button{width:100%}
  .notification-template-actions .layui-btn{flex:1 1 140px}
  .notification-template-form textarea{min-height:220px}
}
.logs-filter { align-items: flex-end; flex-wrap: wrap; }
.logs-filter > input[type=text] { min-width: 220px; }
.date-field { display: flex; flex-direction: column; gap: 4px; min-width: 150px; color: var(--muted); font-size: 0.75rem; }
.date-field input { width: 100%; min-height: 40px; }
.logs-actions { display: flex; justify-content: flex-end; margin-top: 10px; }
.settings-search-panel { position: relative; z-index: 1; }

/* 设置页二级侧栏：固定在内容左侧，不被旧吸顶胶囊条盖住 */
.settings-layout { display: grid; grid-template-columns: 232px minmax(0, 1fr); gap: 16px; align-items: start; }
.settings-sidebar { position: sticky; top: 76px; z-index: 6; display: flex; flex-direction: column; gap: 12px; max-height: calc(100vh - 88px); overflow: auto; }
.settings-sidebar .settings-search-panel { margin: 0; padding: 12px; }
.settings-sidebar .settings-search-panel label { font-size: 0.8125rem; }
.settings-sidebar .settings-search-panel input { min-height: 40px; padding-left: 40px; }
.settings-search-panel .input-wrap { width: 100%; }
.settings-search-panel .search-icon { left: 12px; }
.settings-sidebar .settings-search-panel .hint { margin: 6px 0 0; font-size: 0.75rem; }
.settings-sidebar-caption { margin: 0 8px 6px; font-size: 0.8125rem; font-weight: 700; color: var(--text); }
.settings-sidebar-switch { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; padding: 4px 6px 6px; }
.settings-content { min-width: 0; }
.settings-panel-stack { min-width: 0; display: flex; flex-direction: column; }
.settings-panel-stack > .panel,
.settings-panel-stack > form.panel { width: 100%; min-width: 0; }
.settings-group-nav {
  display: flex; flex-direction: column; gap: 4px;
  padding: 8px; margin: 0;
  border: 1px solid var(--border); border-radius: var(--radius);
  background: var(--panel); box-shadow: var(--shadow-sm);
  overflow: visible; position: relative; top: auto; z-index: 1;
  -webkit-backdrop-filter: none; backdrop-filter: none;
}
.settings-menu-group { display: block; }
.settings-menu-toggle {
  display: flex; width: 100%; min-height: 40px; align-items: center; justify-content: space-between;
  gap: 8px; padding: 8px 10px; border: 0; border-radius: var(--radius-sm); background: transparent;
  color: var(--text); font: inherit; font-size: 0.8125rem; font-weight: 700; cursor: pointer; text-align: left;
  touch-action: manipulation;
}
.settings-menu-toggle:hover, .settings-menu-toggle:focus-visible { background: color-mix(in srgb, var(--primary) 10%, transparent); outline: none; }
.settings-menu-chevron { width: 14px; height: 14px; flex-shrink: 0; color: var(--muted); transition: transform .22s; }
.settings-menu-group.is-collapsed .settings-menu-chevron { transform: rotate(-90deg); }
.settings-menu-items { display: flex; flex-direction: column; gap: 2px; padding: 0 6px 8px; }
.settings-menu-group.is-collapsed .settings-menu-items { display: none; }
.settings-group-nav a {
  position: relative; flex-shrink: 0; display: flex; align-items: center; min-height: 36px; min-width: 0; max-width: 100%; overflow: hidden;
  padding: 6px 10px 6px 20px; border: 0; border-radius: calc(var(--radius-sm) - 2px); font-size: 0.8125rem;
  color: var(--muted); background: transparent; text-decoration: none;
  cursor: pointer; touch-action: manipulation;
}
.settings-nav-link-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.settings-group-nav a::before {
  content: ""; position: absolute; left: 8px; top: 50%; transform: translateY(-50%);
  width: 5px; height: 5px; border-radius: 50%; background: currentColor; opacity: .4;
}
.settings-group-nav a:hover { color: var(--primary); background: color-mix(in srgb, var(--primary) 8%, transparent); }
.settings-group-nav a:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 32%, transparent); outline-offset: 2px; }
.settings-group-nav a.on {
  color: #fff; background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
  font-weight: 600; box-shadow: none;
}
.settings-group-nav a.on::before { background: #fff; opacity: 1; }
.settings-group-action {
  width: 100%; min-height: 36px; padding: 6px 10px; border-radius: var(--radius-sm); font-size: 0.75rem;
  color: var(--muted); border: 1px dashed var(--border); background: transparent; cursor: pointer;
  touch-action: manipulation;
}
.settings-group-action:hover { color: var(--primary); border-color: var(--primary); background: color-mix(in srgb, var(--primary) 8%, transparent); }
.settings-group-action:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 32%, transparent); outline-offset: 2px; }
.sidebar .nav-sub-entry { display: flex; align-items: center; gap: 4px; min-width: 0; }
.sidebar .nav-sub-links a { min-width: 0; flex: 1 1 auto; overflow: hidden; }
.sidebar .nav-sub-link-text, .sidebar .nav-sub-group-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sidebar .nav-sub-entry > .nav-favorite { flex: 0 0 auto; }
.sidebar .nav-sub-links a.is-anchor-on { color: #fff; background: linear-gradient(135deg, color-mix(in srgb, var(--primary) 94%, transparent), rgba(139,92,246,.9)); box-shadow: 0 5px 14px color-mix(in srgb, var(--primary) 20%, transparent); }
.sidebar .nav-sub-links a.is-anchor-on::before { background: #fff; opacity: 1; }
@media (max-width: 1024px) {
  .settings-layout { grid-template-columns: 1fr; }
  .settings-sidebar { position: static; max-height: none; overflow: visible; }
  .settings-group-nav { gap: 6px; }
  .settings-menu-items { flex-direction: row; flex-wrap: wrap; gap: 6px; padding: 0 6px 8px; }
  .settings-group-nav a { min-height: 40px; padding: 6px 12px; display: inline-flex; }
  .settings-group-nav a::before { display: none; }
}
.settings-backup-panel { scroll-margin-top: 88px; }
.settings-backup-actions, .settings-backup-confirm { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.settings-backup-upload { display: flex; align-items: end; gap: 12px; flex-wrap: wrap; }
.settings-backup-upload label { width: 100%; }
.settings-backup-upload input[type=file] { min-height: 44px; max-width: 100%; padding: 10px; border: 1px dashed var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--bg); }
.settings-backup-value { max-width: 260px; word-break: break-word; }
.settings-backup-panel small.muted { display: block; color: var(--muted); font-size: 0.75rem; margin-top: 3px; }
.settings-backup-list { display: flex; flex-direction: column; gap: 6px; margin: 14px 0; padding: 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--primary) 5%, transparent); }
.settings-backup-list-error { border-color: #ef4444; background: color-mix(in srgb, #ef4444 6%, transparent); }
.settings-backup-list span { font-size: 0.8125rem; word-break: break-word; }
.settings-backup-confirm { justify-content: space-between; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border); }
.settings-collapse { margin-left: auto; min-height: 34px; padding: 5px 10px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 3px); background: transparent; color: var(--muted); cursor: pointer; font-size: 0.75rem; touch-action: manipulation; transition: color .18s ease, border-color .18s ease, background .18s ease, transform .18s ease; }
.settings-collapse:hover { color: var(--primary); border-color: var(--primary); background: color-mix(in srgb, var(--primary) 8%, transparent); transform: translateY(-1px); }
.panel.is-collapsed > :not(h3) { display: none; }
.panel.is-collapsed > h3 { margin-bottom: 0; }
.smtp-test-row { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(260px, 1.2fr); gap: 14px; align-items: end; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--border); }
.smtp-test-action { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.panel[id^="panel-"] { scroll-margin-top: 210px; }

/* 回收站二次验证、敏感内容、批量预检、健康看板与审计时间线 */
.danger-confirm-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 0 0 12px; padding: 10px; border: 1px solid rgba(231,76,60,.22); border-radius: var(--radius-sm); background: rgba(231,76,60,.05); }
.danger-confirm-row label { font-weight: 700; color: #c0392b; }
.danger-confirm-input { min-height: 44px; min-width: min(260px, 100%); padding: 8px 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); color: var(--text); }
.trash-empty-form { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.sensitive-notice { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 0 12px; padding: 12px; border: 1px solid color-mix(in srgb, var(--primary) 20%, transparent); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--primary) 7%, transparent); animation: fadeIn .22s ease both; }
.sensitive-notice.sensitive-open { border-color: rgba(243,156,18,.32); background: rgba(243,156,18,.08); }
.sensitive-notice b { display: block; font-size: 0.875rem; }
.sensitive-notice span { color: var(--muted); font-size: 0.78125rem; }
.batch-preflight { display: flex; align-items: flex-start; gap: 8px; margin-bottom: 12px; padding: 11px 12px; border: 1px dashed var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--primary) 4%, transparent); }
.batch-preflight b { color: var(--primary); white-space: nowrap; }
.batch-preflight span { color: var(--muted); font-size: 0.8125rem; overflow-wrap: anywhere; }
.health-dashboard { display: grid; grid-template-columns: 340px minmax(0, 1fr); gap: 18px; align-items: start; }
.health-score-panel { display: flex; align-items: center; gap: 18px; }
.health-score { flex: 0 0 132px; width: 132px; height: 132px; border-radius: 50%; display: grid; place-content: center; gap: 2px; color: #fff; box-shadow: inset 0 0 0 7px rgba(255,255,255,.16); transition: transform .25s; }
.health-score:hover { transform: translateY(-2px); }
.health-score.score-good { background: radial-gradient(circle at 30% 25%, #34ce90, #16a34a); }
.health-score.score-warn { background: radial-gradient(circle at 30% 25%, #ffce56, #e67e22); }
.health-score.score-error { background: radial-gradient(circle at 30% 25%, #ff8f8f, #dc2626); animation: healthGlow 2.4s ease-in-out infinite; }
.health-score .score-value { font-size: 2.375rem; font-weight: 800; line-height: 1; }
.health-score .score-label { font-size: 0.75rem; opacity: .9; }
@keyframes healthGlow { 50% { box-shadow: inset 0 0 0 7px rgba(255,255,255,.16), 0 12px 28px rgba(220,38,38,.2); } }
.health-summary h3 { margin: 0 0 8px; }
.health-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 16px; }
.health-report-actions { align-items: center; }
.health-export-form { margin: 0; display: inline-flex; }
.health-export-error { margin-top: 12px; margin-bottom: 0; }
.health-report-source { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: pre-wrap; border: 0; }
.health-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.health-item { padding: 14px; border: 1px solid var(--border); border-left-width: 4px; border-radius: var(--radius-sm); background: var(--panel); transition: transform .18s, box-shadow .18s, border-color .18s; }
.health-item:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.health-item.good { border-left-color: var(--green); }
.health-item.warn { border-left-color: #e67e22; }
.health-item.error { border-left-color: var(--red); animation: fadeIn .25s ease both; }
.health-item header { display: flex; justify-content: space-between; align-items: center; gap: 8px; margin-bottom: 7px; }
.health-item h4 { margin: 0; font-size: 0.875rem; }
.health-item header span { font-size: 0.75rem; color: var(--muted); }
.health-item p { margin: 0; color: var(--muted); font-size: 0.8125rem; line-height: 1.6; }
.health-advice { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border); font-size: 0.78125rem; color: var(--text); }
.audit-timeline { margin: 0; padding: 0; list-style: none; }
.audit-timeline li { position: relative; display: flex; gap: 14px; padding: 0 0 18px 20px; }
.audit-timeline li::before { content: ""; position: absolute; left: 5px; top: 18px; bottom: 0; width: 2px; background: var(--border); }
.audit-timeline li:last-child::before { display: none; }
.timeline-dot { position: absolute; left: 0; top: 6px; width: 12px; height: 12px; border-radius: 50%; background: var(--primary); box-shadow: 0 0 0 4px color-mix(in srgb, var(--primary) 12%, transparent); }
.audit-timeline time { display: block; color: var(--muted); font-size: 0.75rem; }
.audit-timeline strong { display: block; margin: 2px 0; }
.audit-timeline p { margin: 0; color: var(--muted); font-size: 0.8125rem; overflow-wrap: anywhere; }
.audit-timeline li.is-target { padding: 10px 12px; border: 1px solid color-mix(in srgb, var(--primary) 24%, transparent); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--primary) 6%, transparent); }
.timeline-link { color: inherit; text-decoration: none; border-bottom: 1px dashed transparent; transition: color .15s, border-color .15s; }
.timeline-link:hover, .timeline-link:focus-visible { color: var(--primary); border-bottom-color: currentColor; }
.share-policy-title { display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin-top:8px; padding-top:14px; border-top:1px solid var(--border); }
.share-policy-title h3 { margin:0; font-size:1rem; }
.share-policy-title span { color:var(--muted); font-size:0.75rem; }
.webhook-events { display:flex; flex-wrap:wrap; gap:10px 18px; margin:0; padding:14px; border:1px solid var(--border); border-radius:var(--radius-sm); }
.webhook-events legend { padding:0 6px; color:var(--muted); font-size:0.8125rem; }
.webhook-events .checkbox { min-height:44px; display:inline-flex; align-items:center; gap:6px; }
.webhook-create-form .layui-btn { min-height:44px; }
.apikey-quota-form input { width: 112px; min-height: 36px; }
.apikey-quota-form .link { white-space: nowrap; }
.apikey-filter { margin: 12px 0 16px; }
.apikey-filter input[type=search] { flex: 1 1 240px; min-width: 180px; }
.apikey-filter select { min-width: 130px; }
.apikey-batch-form { margin: 0 0 8px; }
.apikey-batch-toolbar { display:flex; flex-wrap:wrap; align-items:center; gap:10px; padding:10px 12px; border:1px solid var(--border); border-radius:var(--radius-sm); background:color-mix(in srgb,var(--panel) 86%,var(--bg)); }
.apikey-batch-toolbar .hint { margin-right:auto; }
.apikey-usage { min-width: 150px; }
.apikey-usage-line { display:flex; justify-content:space-between; gap:8px; color:var(--muted); font-size:0.75rem; }
.apikey-usage-line b { color:var(--text); font-weight:600; }
.apikey-usage-bar { height:6px; margin-top:6px; border-radius:999px; overflow:hidden; background:color-mix(in srgb,var(--muted) 18%,transparent); }
.apikey-usage-bar i { display:block; height:100%; border-radius:inherit; background:linear-gradient(90deg,var(--primary),#21b889); transition:width .25s ease; }
.apikey-permission-grid { display:flex; flex-wrap:wrap; gap:8px 16px; align-items:center; }
.apikey-permission-grid .checkbox { min-height:40px; display:inline-flex; align-items:center; gap:6px; }
.apikey-policy-create { margin-top:14px; }
.apikey-policy-form { display:grid; gap:8px; min-width:260px; max-width:360px; margin-top:8px; padding:10px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); background:color-mix(in srgb,var(--panel) 92%,var(--bg)); }
.apikey-policy-form label { display:grid; gap:4px; font-size:0.75rem; color:var(--muted); }
.apikey-policy-form input, .apikey-policy-form select, .apikey-policy-form textarea { width:100%; min-height:36px; }
.apikey-policy-form textarea { min-height:64px; resize:vertical; }
.apikey-policy-details summary { cursor:pointer; color:var(--accent, var(--link)); font-size:0.8125rem; }
.apikey-permission-badges { display:flex; flex-wrap:wrap; gap:4px; margin-bottom:4px; }
.apikey-permission-badges .badge { font-size:0.6875rem; }
.settings-subsection { grid-column:1/-1; margin-top:14px; padding-top:14px; border-top:1px dashed var(--border); }
.settings-subsection h4 { margin:0 0 10px; color:var(--text); }
.settings-toggle-list .settings-toggle-item { min-height:44px; margin-bottom:8px; }
.settings-toggle-item { align-items:flex-start; gap:10px; margin-bottom:10px; padding:10px 12px; border:1px solid color-mix(in srgb, var(--border) 88%, transparent); border-radius:var(--radius-sm); background:color-mix(in srgb, var(--panel) 76%, var(--bg)); transition:border-color .16s ease, background .16s ease, box-shadow .16s ease; }
.settings-toggle-item:hover { border-color:color-mix(in srgb, var(--primary) 34%, var(--border)); background:var(--panel); }
.settings-toggle-item:has(input:checked) { border-color:color-mix(in srgb, var(--primary) 34%, var(--border)); background:color-mix(in srgb, var(--primary-soft) 46%, var(--panel)); }
.settings-toggle-item input { flex:0 0 auto; width:20px; height:20px; margin-top:2px; }
.settings-toggle-item > span { display:flex; flex-direction:column; gap:2px; min-width:0; line-height:1.4; }
.settings-toggle-item b { font-size:0.84375rem; color:var(--text); font-weight:600; }
.settings-toggle-item small { display:block; font-size:0.75rem; color:var(--muted); line-height:1.5; }
.settings-toggle-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; margin-top:12px; }
.settings-toggle-grid .settings-toggle-item { margin-bottom:0; }
@media (max-width:768px) { .settings-toggle-grid { grid-template-columns:1fr; } }
.password-policy-hint { margin-top:10px; }
.registration-recovery-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; }
.registration-recovery-field { min-width:0; }
.registration-recovery-field select { min-height:44px; width:100%; }
.registration-policy-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; }
.registration-policy-text-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; margin-top:14px; }
.registration-policy-text-grid textarea { min-height:108px; overflow-wrap:anywhere; }
.registration-policy-toggles { margin-top:12px; }
.registration-rate-subsection { margin-top:18px; }
.registration-rate-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:14px; }
.registration-rate-grid > div { min-width:0; }
.registration-rate-grid select { width:100%; min-height:44px; }
.registration-rate-toggles { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px 14px; margin-top:14px; }
.username-policy-hint { margin-top:10px; overflow-wrap:anywhere; }
.email-notification-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px 14px; }
.email-notification-fields { margin-top:14px; }
.email-notification-field { min-width:0; }
.email-notification-field input, .email-notification-field select { width:100%; min-height:44px; }

@media (max-width: 768px) {
  .registration-recovery-grid { grid-template-columns:1fr; gap:10px; }
  .registration-policy-grid, .registration-policy-text-grid, .registration-rate-grid { grid-template-columns:1fr; gap:10px; }
  .registration-rate-toggles { grid-template-columns:1fr; gap:10px; }
  .email-notification-grid { grid-template-columns:1fr; gap:10px; }
  .settings-group-nav { padding: 8px; }
  .settings-group-nav a { min-height: 44px; padding: 8px 12px; }
  .settings-menu-toggle, .settings-group-action { min-height: 44px; }
  .health-dashboard { grid-template-columns: 1fr; }
  .health-score-panel { align-items: flex-start; flex-direction: column; }
  .health-actions .layui-btn { flex: 1 1 150px; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; }
  .health-report-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; }
  .health-report-actions .health-export-form { display: block; }
  .health-report-actions .layui-btn { width: 100%; min-width: 0; }
  .health-grid { grid-template-columns: 1fr; }
  .audit-timeline li { padding-right: 0; }
  .timeline-panel .layui-btn { min-height: 44px; }
  .sensitive-notice { align-items: stretch; flex-direction: column; }
  .sensitive-notice form .layui-btn { width: 100%; min-height: 44px; }
  .batch-preflight { flex-direction: column; gap: 5px; }
  .danger-confirm-row { align-items: stretch; flex-direction: column; }
  .danger-confirm-input { width: 100%; }
  .trash-empty-form { align-items: stretch; flex-direction: column; width: 100%; }
  .trash-empty-form .danger-confirm-input { flex: 1 1 auto; }
  .trash-empty-form .layui-btn { width: 100%; min-height: 44px; }
  .panel[id^="panel-"] { scroll-margin-top: 150px; }
}

/* ===== 2026-08-28 23:59:59 后台设置分组独立页面布局 ===== */
.settings-overview { padding: 22px; }
.settings-overview-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; margin-bottom: 20px; }
.settings-overview-head h2 { margin: 3px 0 8px; font-size: 1.5rem; }
.settings-overview-head .hint { max-width: 720px; margin: 0; }
.settings-overview-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.settings-overview-item { min-width: 0; display: flex; flex-direction: column; padding: 16px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--panel); }
.settings-overview-item-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.settings-overview-item h3 { margin: 0; font-size: 1rem; }
.settings-overview-item-head span { flex-shrink: 0; color: var(--muted); font-size: 0.75rem; }
.settings-overview-item ul { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 12px 0 16px; padding: 0; list-style: none; color: var(--muted); font-size: 0.8125rem; }
.settings-overview-item li::before { content: '·'; margin-right: 5px; color: var(--primary); font-weight: 700; }
.settings-overview-link { display: inline-flex; align-items: center; min-height: 42px; margin-top: auto; color: var(--primary); font-size: 0.8125rem; font-weight: 700; }
.settings-group-heading { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 14px; margin: 0 0 16px; }
.settings-group-heading h2 { margin: 0; font-size: 1.5rem; }
.settings-group-heading .hint { flex-basis: 100%; margin: 0; }
.settings-back-link { color: var(--primary); font-size: 0.8125rem; font-weight: 700; }
@media (max-width: 768px) {
  .settings-overview { padding: 16px; }
  .settings-overview-head { flex-direction: column; gap: 12px; }
  .settings-overview-head .layui-btn { width: 100%; min-height: 44px; }
  .settings-overview-grid { grid-template-columns: 1fr; gap: 10px; }
  .settings-overview-item { padding: 14px; }
  .settings-group-heading h2 { font-size: 1.25rem; }
}
@media (max-width: 420px) {
  .health-report-actions { grid-template-columns: 1fr; }
}

/* 登录 */
.auth-page { background: var(--bg); }
.auth-page[data-auth-background="aurora"] { background: radial-gradient(circle at 12% 10%, color-mix(in srgb, var(--grad-a) 18%, transparent), transparent 36%), radial-gradient(circle at 90% 80%, color-mix(in srgb, var(--grad-b) 15%, transparent), transparent 38%), var(--bg); }
.auth-page[data-auth-background="soft"] { background: linear-gradient(135deg, color-mix(in srgb, var(--primary) 7%, var(--bg)), var(--bg) 52%, color-mix(in srgb, var(--grad-b) 8%, var(--bg))); }
.auth-shell { width: min(100% - 32px, 980px); margin: 34px auto; }
.auth-panel { max-width: 980px; margin: 0 auto; padding: 34px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(320px, 400px); gap: 46px; align-items: center; }
.auth-page[data-auth-layout="card"] .auth-panel { max-width: 460px; grid-template-columns: 1fr; gap: 0; padding: 30px 28px; }
.auth-page[data-auth-benefits="0"] .auth-copy { display: none; }
.auth-page[data-auth-benefits="0"] .auth-panel { max-width: 460px; grid-template-columns: 1fr; gap: 0; }
.auth-copy { min-width: 0; padding: 10px 0; }
.auth-copy h1 { margin: 12px 0; font-size: clamp(30px, 4vw, 48px); line-height: 1.12; letter-spacing: -0.03em; }
.auth-copy .hint { max-width: 48ch; font-size: 0.9375rem; line-height: 1.8; }
.auth-card { min-width: 0; padding: 28px; border: 1px solid color-mix(in srgb, var(--border) 78%, transparent); border-radius: calc(var(--radius-lg) + 4px); background: color-mix(in srgb, var(--panel) 92%, transparent); box-shadow: 0 20px 60px rgba(30, 55, 100, .12); }
.auth-panel h2 { text-align: center; margin-bottom: 22px; font-size: 1.3125rem; }
.auth-panel label { margin-top: 14px; }
.auth-panel .layui-btn { margin-top: 22px; }
.auth-feedback-stack { display: grid; gap: 5px; margin-top: 6px; }
.auth-password-strength { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; }
.auth-password-strength-track { display: block; height: 6px; overflow: hidden; border-radius: 99px; background: color-mix(in srgb, var(--muted) 18%, transparent); }
.auth-password-strength-bar { display: block; width: 0; height: 100%; border-radius: inherit; background: var(--danger, #d65b5b); transition: width .2s ease, background .2s ease; }
.auth-password-strength[data-level="2"] .auth-password-strength-bar { background: #d89c3d; }
.auth-password-strength[data-level="3"] .auth-password-strength-bar { background: #4e9b72; }
.auth-password-strength[data-level="4"] .auth-password-strength-bar { background: var(--primary); }
.auth-password-strength-label, .auth-password-match-feedback, .auth-capslock-warning { margin: 0; font-size: 0.75rem; line-height: 1.45; }
.auth-password-strength-label { color: var(--muted); white-space: nowrap; }
.auth-password-match-feedback.is-ok { color: var(--success, #278a52); }
.auth-password-match-feedback.is-error, .auth-capslock-warning { color: var(--danger, #c0392b); }
.is-auth-submitting { opacity: .78; }
.is-auth-submitting .layui-btn-normal { position: relative; }
.auth-flow { margin-top: 28px; max-width: 430px; }
.auth-ui-preview { display: flex; align-items: center; gap: 12px; margin-top: 16px; padding: 14px; border: 1px solid var(--border); border-radius: var(--radius); background: color-mix(in srgb, var(--primary) 6%, var(--panel)); }
.auth-ui-preview-mark { display: inline-flex; align-items: center; justify-content: center; width: 42px; height: 42px; flex: 0 0 42px; border-radius: calc(var(--radius) - 2px); color: #fff; font-weight: 800; background: linear-gradient(135deg, var(--grad-a), var(--grad-b)); }
.auth-ui-preview .hint { margin: 3px 0 0; }
@media (max-width: 760px) {
  .auth-shell { width: min(100% - 20px, 520px); margin: 18px auto 28px; }
  .auth-panel, .auth-page[data-auth-layout="card"] .auth-panel { grid-template-columns: 1fr; gap: 0; padding: 14px; background: transparent; border: 0; box-shadow: none; }
  .auth-copy { display: none; }
  .auth-card { padding: 22px 18px; border-radius: var(--radius-lg); }
  .auth-panel h2 { margin-bottom: 18px; }
}
.user-create-form, .user-edit-form { display: grid; gap: 14px; }
.user-create-form .grid2, .user-edit-form .grid2 { margin-bottom: 2px; }
.user-create-form .layui-btn, .user-edit-form .layui-btn { min-height: 44px; justify-self: start; }
.user-import-panel { border-left: 4px solid var(--primary); }
.user-import-grid { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 14px; align-items: end; }
.user-import-grid input[type="file"] { min-height: 44px; padding: 9px 10px; }
.user-import-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.user-import-preview { margin-top: 16px; }
.user-import-preview .panel-head { align-items: flex-start; }
.user-import-preview-table td, .user-import-preview-table th { vertical-align: top; }
.user-import-preview-table .import-errors { min-width: 180px; color: var(--danger, #c0392b); white-space: normal; overflow-wrap: anywhere; }
.user-import-preview-table .import-password-state { color: var(--muted); white-space: nowrap; }
.user-email-actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
.user-email-actions form { margin: 0; }
.registration-recovery-toggle { grid-column: 1 / -1; margin-bottom: 2px; }
.auth-title-icon {
  width: 52px; height: 52px; margin: 0 auto 12px; border-radius: calc(var(--radius) + 1px);
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 6px 16px color-mix(in srgb, var(--primary) 35%, transparent);
}
.auth-title-icon svg { width: 26px; height: 26px; stroke: #fff; fill: none; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
/* 记住用户名：勾选框与表单标签同排，桌面紧凑、手机端自动放大点击区域。 */
.remember-username {
  display: flex; align-items: center; gap: 9px;
  margin: 6px 0 14px; padding: 0;
  font-size: 0.875rem; color: var(--text, inherit);
  cursor: pointer; user-select: none; -webkit-user-select: none;
  line-height: 1.45;
}
.remember-username input[type="checkbox"] {
  width: 18px; height: 18px; flex: 0 0 18px; margin: 0;
  accent-color: var(--primary);
  cursor: pointer;
}
.remember-username span { display: inline-block; }
.remember-username:hover { color: var(--primary); }
@media (max-width: 768px) {
  /* 手机端加大触控面积，整行可点，避免误触。 */
  .remember-username { min-height: 44px; margin: 4px 0 12px; font-size: 0.875rem; }
  /* 需覆盖文件后段全局 checkbox 规则（含 max-width/max-height:18px 限制），故提高选择器优先级。 */
  .remember-username input[type="checkbox"]:not(.ui-native-check) {
    width: 20px; height: 20px;
    min-width: 20px; min-height: 20px;
    max-width: 20px; max-height: 20px;
    flex: 0 0 20px;
  }
}
/* ===== 登录注册页面 2.0：玻璃拟态 + 微动效 =====
   设计目标：统一登录、注册、找回密码、重置密码、两步验证、后台登录六个入口的视觉语言。
   兼容策略：全部基于既有 CSS 变量（--primary/--grad-a/--grad-b/--panel/--border），
   仅新增规则，不覆盖上方既有声明，后台「鉴权页外观」设置仍完全生效。 */
.auth-page {
  --auth-glass: color-mix(in srgb, var(--panel) 78%, transparent);
  --auth-glass-line: color-mix(in srgb, var(--border) 62%, transparent);
  --auth-glow: color-mix(in srgb, var(--primary) 22%, transparent);
  position: relative;
  min-height: 100vh;
  overflow-x: hidden;
}
/* 背景光斑：纯装饰层，不接收事件，避免遮挡表单点击。 */
.auth-page::before,
.auth-page::after {
  content: "";
  position: fixed;
  z-index: 0;
  pointer-events: none;
  border-radius: 50%;
  filter: blur(58px);
  opacity: .5;
}
.auth-page::before {
  width: 42vw; height: 42vw; min-width: 260px; min-height: 260px;
  top: -12vw; left: -8vw;
  background: radial-gradient(circle, color-mix(in srgb, var(--grad-a) 34%, transparent), transparent 68%);
  animation: auth-float-a 18s ease-in-out infinite;
}
.auth-page::after {
  width: 38vw; height: 38vw; min-width: 240px; min-height: 240px;
  right: -10vw; bottom: -14vw;
  background: radial-gradient(circle, color-mix(in srgb, var(--grad-b) 30%, transparent), transparent 68%);
  animation: auth-float-b 22s ease-in-out infinite;
}
@keyframes auth-float-a {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  50% { transform: translate3d(4vw, 3vw, 0) scale(1.08); }
}
@keyframes auth-float-b {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1.05); }
  50% { transform: translate3d(-3vw, -3vw, 0) scale(1); }
}
/* 顶栏与主体需浮在光斑之上 */
.auth-page > .topbar,
.auth-page > main,
.auth-page > footer,
.auth-page .auth-shell { position: relative; z-index: 1; }
.auth-page > .topbar {
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--auth-glass-line);
  background: color-mix(in srgb, var(--panel) 62%, transparent);
}
/* 主面板：整体改为玻璃容器，进入时轻微上浮 */
.auth-page .auth-panel {
  position: relative;
  border: 1px solid var(--auth-glass-line);
  border-radius: calc(var(--radius-lg) + 8px);
  background: var(--auth-glass);
  backdrop-filter: blur(18px) saturate(1.25);
  -webkit-backdrop-filter: blur(18px) saturate(1.25);
  box-shadow: 0 24px 70px rgba(22, 40, 80, .14), inset 0 1px 0 color-mix(in srgb, #fff 40%, transparent);
  animation: auth-rise .5s cubic-bezier(.22, .7, .3, 1) both;
}
@keyframes auth-rise {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}
/* 左侧品牌区：标题渐变文字 + 编号流程卡 */
.auth-page .auth-copy h1 {
  background: linear-gradient(120deg, var(--text) 22%, color-mix(in srgb, var(--primary) 78%, var(--text)) 88%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
.auth-page .auth-copy .section-kicker {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 5px 12px;
  border: 1px solid color-mix(in srgb, var(--primary) 30%, transparent);
  border-radius: 99px;
  background: color-mix(in srgb, var(--primary) 10%, transparent);
  color: color-mix(in srgb, var(--primary) 88%, var(--text));
  font-size: 0.75rem; font-weight: 700; letter-spacing: .06em;
}
.auth-page .auth-flow li {
  transition: transform .22s ease, border-color .22s ease, box-shadow .22s ease;
}
.auth-page .auth-flow li:hover {
  transform: translateY(-3px);
  border-color: color-mix(in srgb, var(--primary) 42%, transparent);
  box-shadow: 0 12px 26px var(--auth-glow);
}
.auth-page .auth-flow li b {
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
/* 表单卡：内层再降一层透明度，形成玻璃叠层 */
.auth-page .auth-card {
  border: 1px solid var(--auth-glass-line);
  border-radius: calc(var(--radius-lg) + 2px);
  background: color-mix(in srgb, var(--panel) 86%, transparent);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  box-shadow: 0 14px 40px rgba(22, 40, 80, .10);
}
/* 图标：渐变底 + 呼吸光晕 */
.auth-page .auth-title-icon {
  position: relative;
  transition: transform .28s cubic-bezier(.22, .7, .3, 1), box-shadow .28s ease;
}
.auth-page .auth-title-icon::after {
  content: "";
  position: absolute; inset: -6px;
  border-radius: var(--radius-lg);
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
  opacity: .26;
  filter: blur(12px);
  z-index: -1;
  animation: auth-breathe 3.6s ease-in-out infinite;
}
@keyframes auth-breathe {
  0%, 100% { opacity: .2; transform: scale(.96); }
  50% { opacity: .38; transform: scale(1.04); }
}
.auth-page .auth-card:hover .auth-title-icon { transform: translateY(-2px) rotate(-3deg); }
/* 输入框：聚焦时描边发光，触控友好 */
.auth-page .auth-card input[type="text"],
.auth-page .auth-card input[type="password"],
.auth-page .auth-card input[type="email"],
.auth-page .auth-panel input[type="text"],
.auth-page .auth-panel input[type="password"],
.auth-page .auth-panel input[type="email"] {
  transition: border-color .2s ease, box-shadow .2s ease, background-color .2s ease;
}
.auth-page .auth-card input:focus,
.auth-page .auth-panel input:focus {
  border-color: color-mix(in srgb, var(--primary) 62%, transparent);
  box-shadow: 0 0 0 3px var(--auth-glow);
  outline: none;
}
/* 主按钮：渐变 + 悬停上浮 + 按下回弹 */
.auth-page .auth-panel .layui-btn-normal {
  position: relative;
  border: 0;
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
  box-shadow: 0 10px 24px var(--auth-glow);
  transition: transform .18s ease, box-shadow .22s ease, filter .18s ease;
  overflow: hidden;
}
.auth-page .auth-panel .layui-btn-normal::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(120deg, transparent 20%, color-mix(in srgb, #fff 30%, transparent) 50%, transparent 80%);
  transform: translateX(-120%);
  transition: transform .55s ease;
}
.auth-page .auth-panel .layui-btn-normal:hover { transform: translateY(-1px); box-shadow: 0 14px 32px var(--auth-glow); }
.auth-page .auth-panel .layui-btn-normal:hover::after { transform: translateX(120%); }
.auth-page .auth-panel .layui-btn-normal:active { transform: translateY(0) scale(.99); }
.auth-page .auth-panel .layui-btn-normal:disabled { filter: grayscale(.35); box-shadow: none; }
/* 第三方 / 生物识别按钮：保留各自品牌底色，仅统一圆角、投影与悬停反馈。
   注意：这里刻意不写 background，避免覆盖 .bio-btn-* 与 .wx/.qq 的实色渐变。 */
.auth-page .oauth-btn {
  border: 1px solid transparent;
  transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;
}
.auth-page .oauth-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 22px var(--auth-glow);
}
/* 生物识别：保留原有渐变底色，悬停时加一层与底色匹配的描边 */
.auth-page .bio-btn-passkey:hover { border-color: color-mix(in srgb, var(--primary) 55%, transparent); }
.auth-page .bio-btn-finger:hover { border-color: rgba(18, 183, 165, .55); }
.auth-page .oauth-btn.wx:hover { border-color: rgba(7, 193, 96, .55); }
.auth-page .oauth-btn.qq:hover { border-color: rgba(18, 183, 245, .55); }
.auth-page .oauth-divider { position: relative; }
.auth-page .oauth-divider span {
  padding: 0 12px;
  background: color-mix(in srgb, var(--panel) 86%, transparent);
  border-radius: 99px;
  font-size: 0.75rem;
}
/* 提示条：左侧色条 + 轻微进入动画 */
.auth-page .auth-card .alert,
.auth-page .auth-panel .alert {
  border-left-width: 3px;
  animation: auth-alert-in .3s ease both;
}
@keyframes auth-alert-in {
  from { opacity: 0; transform: translateY(-5px); }
  to { opacity: 1; transform: translateY(0); }
}
/* 表单标签：统一字重与间距，密码规则提示更醒目 */
.auth-page .auth-card > form > label,
.auth-page .auth-panel form > label {
  font-weight: 600;
  font-size: 0.84375rem;
  letter-spacing: .01em;
}
.auth-page .auth-links { text-align: center; }
.auth-page .auth-links .link { font-weight: 600; }

/* 手机端：单列玻璃卡、满宽按钮、触控区放大到 44px 以上 */
@media (max-width: 760px) {
  .auth-page::before,
  .auth-page::after { filter: blur(44px); opacity: .42; }
  .auth-page .auth-shell { width: min(100% - 20px, 520px); margin: 14px auto 26px; }
  /* 手机端取消外层玻璃容器，只保留表单卡，避免双层边框显脏 */
  .auth-page .auth-panel {
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: none;
  }
  .auth-page .auth-card {
    padding: 22px 16px;
    border-radius: var(--radius-lg);
    box-shadow: 0 12px 32px rgba(22, 40, 80, .12);
  }
  .auth-page .auth-title-icon { width: 46px; height: 46px; border-radius: calc(var(--radius) - 1px); margin-bottom: 10px; }
  .auth-page .auth-title-icon svg { width: 23px; height: 23px; }
  .auth-page .auth-panel h2 { font-size: 1.1875rem; margin-bottom: 16px; }
  /* 触控热区：输入框 48px、按钮 50px，符合移动端可达性要求 */
  .auth-page .auth-card input[type="text"],
  .auth-page .auth-card input[type="password"],
  .auth-page .auth-card input[type="email"],
  .auth-page .auth-panel input[type="text"],
  .auth-page .auth-panel input[type="password"],
  .auth-page .auth-panel input[type="email"] { min-height: 48px; font-size: 1rem; }
  .auth-page .auth-panel .layui-btn-normal { min-height: 50px; font-size: 1rem; }
  .auth-page .oauth-btn { min-height: 48px; }
  .auth-page .auth-panel .btn-block { width: 100%; }
  .auth-page .auth-links { font-size: 0.84375rem; }
  .auth-page .sms-row { flex-wrap: wrap; }
  .auth-page .sms-row .layui-btn { width: 100%; min-height: 46px; }
}
@media (max-width: 400px) {
  .auth-page .auth-card { padding: 18px 13px; border-radius: calc(var(--radius-lg) - 2px); }
  .auth-page .auth-copy h1,
  .auth-page .auth-panel h2 { letter-spacing: -0.01em; }
}
/* 尊重系统「减少动态效果」偏好 */
@media (prefers-reduced-motion: reduce) {
  .auth-page::before,
  .auth-page::after,
  .auth-page .auth-title-icon::after { animation: none; }
  .auth-page .auth-panel { animation: none; }
  .auth-page .auth-panel .layui-btn-normal::after { display: none; }
  .auth-page .auth-flow li:hover,
  .auth-page .oauth-btn:hover,
  .auth-page .auth-panel .layui-btn-normal:hover { transform: none; }
}
/* 深色模式：降低光斑强度，提升玻璃对比度 */
[data-theme="dark"] .auth-page::before,
[data-theme="dark"] .auth-page::after { opacity: .34; }
[data-theme="dark"] .auth-page .auth-panel,
[data-theme="dark"] .auth-page .auth-card { box-shadow: 0 20px 60px rgba(0, 0, 0, .42); }

/* 表单卡副标题：图标与标题之间的一句引导文案 */
.auth-page .auth-subtitle {
  margin: -14px 0 18px;
  text-align: center;
  font-size: 0.8125rem;
  color: var(--muted);
  letter-spacing: .01em;
}
/* 备用登录区：与主表单之间用渐隐分隔线区隔，手机端自动加间距 */
.auth-page .auth-alt-zone {
  position: relative;
  margin-top: 22px;
  padding-top: 20px;
}
.auth-page .auth-alt-zone::before {
  content: "";
  position: absolute;
  top: 0; left: 12%; right: 12%;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--auth-glass-line), transparent);
}
@media (max-width: 760px) {
  .auth-page .auth-subtitle { margin: -10px 0 14px; font-size: 0.78125rem; }
  .auth-page .auth-alt-zone { margin-top: 18px; padding-top: 16px; }
}

/* 注册表单字段分组：减少长表单的压迫感，手机端自动收紧间距 */
.auth-page .auth-field-group {
  position: relative;
  margin: 0 0 6px;
  padding: 0 0 4px;
}
.auth-page .auth-field-group + .auth-field-group {
  margin-top: 18px;
  padding-top: 18px;
  border-top: 1px dashed color-mix(in srgb, var(--primary) 28%, transparent);
}
.auth-page .auth-field-group-title {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
  font-size: 0.78125rem;
  font-weight: 700;
  letter-spacing: .05em;
  color: color-mix(in srgb, var(--primary) 82%, var(--text));
}
.auth-page .auth-field-group-title::before {
  content: "";
  width: 3px; height: 13px;
  border-radius: 2px;
  background: linear-gradient(180deg, var(--grad-a), var(--grad-b));
}
.auth-page .auth-field-group-optional {
  padding: 1px 7px;
  border-radius: 99px;
  background: color-mix(in srgb, var(--muted) 14%, transparent);
  color: var(--muted);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0;
}
.auth-page .auth-field-group > label:first-of-type { margin-top: 0; }
@media (max-width: 760px) {
  .auth-page .auth-field-group + .auth-field-group { margin-top: 14px; padding-top: 14px; }
  .auth-page .auth-field-group-title { margin-bottom: 8px; }
}

/* 两步验证：验证码输入框等宽大字距，便于核对；恢复码提示与上方按钮留白 */
.auth-page .twofa-code-input {
  letter-spacing: .32em;
  text-align: center;
  font-size: 1.25rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.auth-page .twofa-recovery-tip { margin-top: 14px; }
@media (max-width: 760px) {
  .auth-page .twofa-code-input { font-size: 1.375rem; letter-spacing: .28em; }
  .auth-page .twofa-recovery-tip { margin-top: 12px; }
}

/* 注册页可选步骤折叠：默认收起以缩短表单，展开后与普通分组一致 */
.auth-page .auth-collapse {
  margin: 18px 0 0;
  padding-top: 18px;
  border-top: 1px dashed color-mix(in srgb, var(--primary) 28%, transparent);
}
.auth-page .auth-collapse > summary {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 44px;
  padding: 4px 0;
  cursor: pointer;
  list-style: none;
  user-select: none;
  -webkit-user-select: none;
}
.auth-page .auth-collapse > summary::-webkit-details-marker { display: none; }
.auth-page .auth-collapse > summary:focus-visible {
  outline: 2px solid color-mix(in srgb, var(--primary) 55%, transparent);
  outline-offset: 3px;
  border-radius: calc(var(--radius-sm) - 2px);
}
.auth-page .auth-collapse-title {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 0.78125rem;
  font-weight: 700;
  letter-spacing: .05em;
  color: color-mix(in srgb, var(--primary) 82%, var(--text));
}
.auth-page .auth-collapse-title::before {
  content: "";
  width: 3px; height: 13px;
  border-radius: 2px;
  background: linear-gradient(180deg, var(--grad-a), var(--grad-b));
}
.auth-page .auth-collapse-note {
  padding: 1px 7px;
  border-radius: 99px;
  background: color-mix(in srgb, var(--muted) 14%, transparent);
  color: var(--muted);
  font-size: 0.6875rem;
  font-weight: 600;
}
.auth-page .auth-collapse-arrow {
  width: 16px; height: 16px;
  margin-left: auto;
  stroke: var(--muted);
  fill: none;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: transform .22s ease;
}
.auth-page .auth-collapse[open] .auth-collapse-arrow { transform: rotate(180deg); }
.auth-page .auth-collapse[open] .auth-collapse-note { display: none; }
.auth-page .auth-collapse-body { padding-top: 4px; }
.auth-page .auth-collapse > summary:hover .auth-collapse-title { color: var(--primary); }
/* 注册页密码区双列：桌面并排压缩高度，手机端自动回到单列 */
.auth-page .auth-grid2 {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 0 12px;
}
.auth-page .auth-grid2 > div { min-width: 0; }
@media (max-width: 620px) {
  .auth-page .auth-grid2 { grid-template-columns: minmax(0, 1fr); gap: 0; }
}

/* ===== 注册表单排版 2.0：标签紧贴输入框、提示统一收纳 ===== */
/* 字段单元：标签与输入框紧贴，字段之间用统一间距分开，避免提示文字打断节奏 */
.auth-page .auth-field { margin: 0 0 15px; }
.auth-page .auth-field:last-child { margin-bottom: 0; }
.auth-page .auth-field > label {
  display: flex;
  align-items: center;
  gap: 7px;
  margin: 0 0 7px;
  font-weight: 600;
  font-size: 0.84375rem;
  letter-spacing: .01em;
}
.auth-page .auth-field > input,
.auth-page .auth-field .sms-row { margin-top: 0; }
/* 可选标记：小胶囊，不抢主标签注意力 */
.auth-page .auth-field-optional {
  padding: 1px 7px;
  border-radius: 99px;
  background: color-mix(in srgb, var(--muted) 14%, transparent);
  color: var(--muted);
  font-size: 0.6875rem;
  font-weight: 600;
  letter-spacing: 0;
}
/* 分组标题与首字段之间收紧，与组内字段间距形成层次 */
.auth-page .auth-field-group .auth-field:first-of-type { margin-top: 2px; }
/* 双列字段：两列标签与输入框严格对齐 */
.auth-page .auth-grid2 .auth-field { margin-bottom: 0; }
.auth-page .auth-grid2 > div > .auth-field > label { white-space: nowrap; }
/* 填写要求收纳：折叠在提交按钮下方，不干扰主流程 */
.auth-page .auth-notes {
  margin-top: 14px;
  border-top: 1px dashed color-mix(in srgb, var(--border) 78%, transparent);
  padding-top: 12px;
}
.auth-page .auth-notes > summary {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-height: 32px;
  cursor: pointer;
  list-style: none;
  font-size: 0.78125rem;
  color: var(--muted);
  user-select: none;
  -webkit-user-select: none;
  transition: color .18s ease;
}
.auth-page .auth-notes > summary::-webkit-details-marker { display: none; }
.auth-page .auth-notes > summary::before {
  content: "";
  width: 13px; height: 13px;
  border: 1.5px solid currentColor;
  border-radius: 50%;
  background:
    linear-gradient(currentColor, currentColor) center / 1.5px 6px no-repeat,
    linear-gradient(currentColor, currentColor) center / 6px 1.5px no-repeat;
  opacity: .7;
}
.auth-page .auth-notes > summary:hover { color: var(--primary); }
.auth-page .auth-notes > summary:focus-visible {
  outline: 2px solid color-mix(in srgb, var(--primary) 55%, transparent);
  outline-offset: 3px;
  border-radius: calc(var(--radius-sm) - 4px);
}
.auth-page .auth-notes ul {
  margin: 8px 0 2px;
  padding-left: 18px;
  color: var(--muted);
  font-size: 0.78125rem;
  line-height: 1.7;
}
.auth-page .auth-notes li + li { margin-top: 3px; }
/* 折叠区内的字段间距与普通分组一致 */
.auth-page .auth-collapse-body .auth-field { margin-bottom: 14px; }
.auth-page .auth-collapse-body .auth-field:last-child { margin-bottom: 0; }
.auth-page .auth-collapse-desc {
  margin-left: 2px;
  color: var(--muted);
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0;
}
@media (max-width: 620px) {
  .auth-page .auth-field { margin-bottom: 13px; }
  .auth-page .auth-grid2 { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .auth-page .auth-grid2 .auth-field { margin-bottom: 13px; }
  .auth-page .auth-grid2 > div:last-child > .auth-field { margin-bottom: 0; }
  .auth-page .auth-collapse-desc { display: none; }
}

/* 注册页左侧价值点：与登录页流程卡呼应的图标列表，手机端随品牌区一起隐藏 */
.auth-page .auth-benefits {
  margin: 26px 0 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 14px;
  max-width: 430px;
}
.auth-page .auth-benefits li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 13px 15px;
  border: 1px solid color-mix(in srgb, var(--border) 72%, transparent);
  border-radius: var(--radius);
  background: color-mix(in srgb, var(--panel) 52%, transparent);
  transition: transform .22s ease, border-color .22s ease, box-shadow .22s ease;
}
.auth-page .auth-benefits li:hover {
  transform: translateY(-3px);
  border-color: color-mix(in srgb, var(--primary) 42%, transparent);
  box-shadow: 0 12px 26px var(--auth-glow);
}
.auth-page .auth-benefit-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 34px;
  width: 34px; height: 34px;
  border-radius: var(--radius-sm);
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
  box-shadow: 0 4px 12px var(--auth-glow);
}
.auth-page .auth-benefit-icon svg {
  width: 17px; height: 17px;
  stroke: #fff;
  fill: none;
  stroke-width: 1.9;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.auth-page .auth-benefits b {
  display: block;
  font-size: 0.875rem;
  font-weight: 700;
  line-height: 1.4;
}
.auth-page .auth-benefits em {
  display: block;
  margin-top: 2px;
  font-size: 0.78125rem;
  font-style: normal;
  line-height: 1.55;
  color: var(--muted);
}
@media (prefers-reduced-motion: reduce) {
  .auth-page .auth-benefits li:hover { transform: none; }
}

.sms-row { display: flex; gap: 8px; }
.sms-row input { flex: 1; }
.sms-row .layui-btn { margin-top: 0; flex-shrink: 0; }
.profile-sms-row { align-items: stretch; }
.profile-sms-row .layui-btn { min-height: 40px; }
@media (max-width: 640px) {
  .profile-sms-row { flex-direction: column; }
  .profile-sms-row .layui-btn { width: 100%; min-height: 44px; }
}

/* 验证码控件：桌面横向紧凑，手机端自动换行，避免挤压提交按钮。 */
.captcha-field { display: grid; gap: 7px; margin: 14px 0; --captcha-scale: 1; justify-items: stretch; }
.captcha-field > label { margin: 0; }
.captcha-field[data-captcha-align="center"] { justify-items: center; }
.captcha-field[data-captcha-align="end"] { justify-items: end; }
.captcha-field[data-captcha-align="center"] .captcha-row,
.captcha-field[data-captcha-align="end"] .captcha-row { width: min(100%, calc(360px * var(--captcha-scale))); }
.captcha-row { display: grid; grid-template-columns: minmax(132px, calc(180px * var(--captcha-scale))) auto minmax(120px, 1fr); align-items: center; gap: 8px; width: 100%; }
.captcha-row-has-audio { grid-template-columns: minmax(132px, calc(180px * var(--captcha-scale))) auto auto minmax(120px, 1fr); }
.captcha-row-has-audio .captcha-input { grid-column: 4; }
.captcha-field[data-captcha-layout="top"] .captcha-row { grid-template-columns: auto minmax(120px, 1fr); }
.captcha-field[data-captcha-layout="top"] .captcha-image { grid-column: 1 / -1; }
.captcha-field[data-captcha-layout="stack"] .captcha-row { grid-template-columns: minmax(0, 1fr); }
.captcha-field[data-captcha-layout="top"] .captcha-refresh,
.captcha-field[data-captcha-layout="stack"] .captcha-refresh { justify-self: start; }
.captcha-field[data-captcha-layout="right"] .captcha-row { grid-template-columns: minmax(120px, 1fr) auto minmax(132px, calc(180px * var(--captcha-scale))); }
.captcha-field[data-captcha-layout="right"] .captcha-input { grid-column: 1; grid-row: 1; }
.captcha-field[data-captcha-layout="right"] .captcha-refresh { grid-column: 2; grid-row: 1; }
.captcha-field[data-captcha-layout="right"] .captcha-image { grid-column: 3; grid-row: 1; }
.captcha-image { display: block; width: calc(180px * var(--captcha-scale)); max-width: 100%; height: calc(58px * var(--captcha-scale)); border: 1px solid var(--border); border-radius: var(--radius-sm); background: #f4f7fb; object-fit: cover; cursor: pointer; }
.captcha-layout-preview { margin-top: 12px; padding: 12px; border: 1px dashed var(--border); border-radius: var(--radius-sm); background: var(--surface-soft, rgba(127,143,170,.05)); }
.captcha-layout-preview-head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.captcha-layout-preview-head h4 { margin: 0; font-size: 0.875rem; }
.captcha-layout-preview-head .hint { margin: 0; }
.captcha-field-preview { margin: 0; padding: 10px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); }
.captcha-refresh { min-height: 40px; white-space: nowrap; }
.captcha-field.is-captcha-cooling .captcha-refresh { opacity: .72; cursor: wait; }
.captcha-input { min-width: 0; min-height: 42px; letter-spacing: 1px; }
.captcha-input.is-captcha-uppercase,
.captcha-field[data-captcha-uppercase="1"] .captcha-input { text-transform: uppercase; letter-spacing: 2px; }
.captcha-field[data-captcha-provider="chinese"] .captcha-input,
.captcha-field[data-captcha-provider="mixed"] .captcha-input { letter-spacing: 3px; font-family: "Microsoft YaHei","PingFang SC","Noto Sans SC",sans-serif; }
.captcha-help, .captcha-countdown { margin: 0; font-size: 0.75rem; }
.captcha-honeypot { position: absolute !important; width: 1px !important; height: 1px !important; margin: -1px !important; padding: 0 !important; overflow: hidden !important; clip: rect(0 0 0 0) !important; clip-path: inset(50%) !important; white-space: nowrap !important; border: 0 !important; }
.captcha-honeypot input { position: absolute !important; width: 1px !important; height: 1px !important; opacity: 0 !important; pointer-events: none !important; }
.captcha-ip-rules textarea { min-height: 88px; resize: vertical; }
.captcha-simulator-fields [data-captcha-simulator-ip] { text-transform: none; letter-spacing: 0; }
.captcha-field-error { margin: 10px 0; }
.captcha-field-error .alert { margin: 0; }
.captcha-image[role="button"]:focus-visible { outline: 3px solid var(--primary); outline-offset: 2px; }
.captcha-admin-actions { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.captcha-admin-preview { display:flex; align-items:center; gap:12px; margin-top:10px; padding:10px 12px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); background:var(--surface-soft, rgba(127,143,170,.06)); }
.captcha-admin-preview img { width:180px; height:58px; flex:0 0 auto; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); background:#f4f7fb; }
.captcha-admin-preview .hint { margin:0; }
.captcha-admin-test-form { display:grid; gap:6px; min-width:0; flex:1 1 280px; }
.captcha-admin-test-form label { margin:0; font-size:0.75rem; font-weight:700; color:var(--muted); }
.captcha-admin-test-row { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.captcha-admin-test-row input { flex:1 1 150px; min-height:36px; }
.captcha-admin-test-row .layui-btn { min-height:36px; }
.captcha-admin-test-form .is-success { color:var(--success,#278a52); }
.captcha-admin-test-form .is-error { color:var(--danger,#c0392b); }
.captcha-scene-overrides { margin-bottom:12px; }
.captcha-scene-experience-grid { margin-bottom:12px; }
.captcha-scene-experience-grid > div { min-width:0; padding:9px 10px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); background:var(--surface-soft, rgba(127,143,170,.04)); }
.captcha-scene-experience-grid .hint { margin:5px 0 0; overflow-wrap:anywhere; }
.captcha-scene-overrides > div { min-width:0; padding:9px 10px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); background:var(--surface-soft, rgba(127,143,170,.04)); }
.captcha-scene-overrides .hint { margin:5px 0 0; }
.captcha-simulator { margin-top:10px; padding:12px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); background:var(--surface-soft, rgba(127,143,170,.06)); }
.captcha-simulator-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; }
.captcha-simulator-head h4 { margin:0 0 4px; font-size:0.875rem; }
.captcha-simulator-head .hint { margin:0; }
.captcha-simulator-fields { margin-top:10px; }
.captcha-simulator-fields label { display:grid; gap:5px; min-width:0; color:var(--muted); font-size:0.75rem; font-weight:700; }
.captcha-simulator-fields input,
.captcha-simulator-fields select { min-height:36px; }
.captcha-simulator-result { margin-top:10px; padding:12px 13px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); color:var(--text); background:linear-gradient(135deg, var(--panel), var(--surface-soft, rgba(127,143,170,.08))); line-height:1.62; overflow-wrap:anywhere; font-size:0.75rem; box-shadow:0 10px 24px rgba(15,23,42,.06); }
.captcha-simulator-result.is-triggered { border-color:rgba(183,121,31,.45); background:linear-gradient(135deg, rgba(183,121,31,.10), var(--panel)); }
.captcha-simulator-result.is-locked { border-color:rgba(192,57,43,.45); background:linear-gradient(135deg, rgba(192,57,43,.10), var(--panel)); color:var(--danger,#c0392b); }
.captcha-simulator-result.is-normal { border-color:rgba(39,174,96,.35); background:linear-gradient(135deg, rgba(39,174,96,.08), var(--panel)); }
.captcha-simulator-result.is-error { border-color:rgba(192,57,43,.45); color:var(--danger,#c0392b); }
.captcha-risk-score { display:block; margin-bottom:6px; font-size:0.875rem; line-height:1.35; color:var(--text); }
.captcha-simulator-result.risk-medium .captcha-risk-score { color:var(--warning,#b7791f); }
.captcha-simulator-result.risk-high .captcha-risk-score,
.captcha-simulator-result.is-locked .captcha-risk-score { color:var(--danger,#c0392b); }
.captcha-risk-summary,
.captcha-risk-detail { margin:4px 0 0; color:var(--muted); }
.captcha-risk-factor-list { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px; margin:9px 0 0; padding:0; list-style:none; }
.captcha-risk-factor-list li { min-width:0; padding:7px 8px; border:1px solid color-mix(in srgb, var(--border) 78%, var(--primary)); border-radius:calc(var(--radius-sm) - 3px); background:rgba(255,255,255,.45); color:var(--text); }
.captcha-admin-stats { margin-top: 10px; padding: 10px 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--surface-soft, rgba(127,143,170,.06)); }
.captcha-admin-stat-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px; }
.captcha-admin-stat-grid > div { min-width: 0; padding: 8px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 3px); background: var(--panel); text-align: center; }
.captcha-admin-stat-grid b { display: block; font-size: 1.25rem; line-height: 1.2; color: var(--primary); }
.captcha-admin-stat-grid span { display: block; margin-top: 3px; color: var(--muted); font-size: 0.75rem; white-space: nowrap; }
.captcha-admin-stats .hint { margin: 9px 0 0; }
.captcha-admin-stats-alert {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  gap: 8px;
  align-items: center;
  margin-top: 10px;
  padding: 9px 11px;
  border: 1px solid var(--border);
  border-radius: calc(var(--radius-sm) - 3px);
  background: var(--surface-soft, rgba(127,143,170,.06));
  color: var(--muted);
  font-size: 0.75rem;
}
.captcha-admin-stats-alert strong { color: var(--text); font-size: 0.8125rem; }
.captcha-admin-stats-alert span { min-width: 0; overflow-wrap: anywhere; }
.captcha-admin-stats-alert small { text-align: right; color: var(--muted); }
.captcha-admin-stats-alert.is-warning { border-color: rgba(192, 57, 43, .42); background: rgba(192, 57, 43, .08); color: var(--danger, #c0392b); }
.captcha-admin-stats-alert.is-warning strong { color: var(--danger, #c0392b); }
.captcha-admin-stats-alert.is-normal { border-color: rgba(39, 174, 96, .35); background: rgba(39, 174, 96, .07); }
.captcha-admin-stats-alert.is-disabled { opacity: .78; }
.captcha-admin-stats-comparison {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 16px;
  align-items: center;
  margin-top: 9px;
  color: var(--muted);
  font-size: 0.75rem;
}
.captcha-admin-stats-comparison span { font-weight: 700; color: var(--text); }
.captcha-admin-stats-comparison b { font-weight: 600; }
.home-upload-captcha { margin: 12px 0 4px; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface-soft, rgba(127,143,170,.06)); }
.home-upload-captcha .captcha-field { margin: 0; }
.home-upload-captcha > .hint { margin: 5px 0 0; }
@media (max-width: 640px) {
  .captcha-row { grid-template-columns: minmax(118px, 1fr) auto; }
  .captcha-field[data-captcha-layout="left"] .captcha-row,
  .captcha-field[data-captcha-layout="right"] .captcha-row { grid-template-columns: minmax(118px, 1fr) auto; }
  .captcha-field[data-captcha-layout="right"] .captcha-input,
  .captcha-field[data-captcha-layout="left"] .captcha-input { grid-column: 1 / -1; grid-row: auto; }
  .captcha-field[data-captcha-layout="right"] .captcha-image,
  .captcha-field[data-captcha-layout="right"] .captcha-refresh { grid-column: auto; grid-row: auto; }
  .captcha-field[data-captcha-layout="top"] .captcha-row { grid-template-columns: 1fr auto; }
  .captcha-field[data-captcha-layout="top"] .captcha-image { grid-column: 1 / -1; }
  .captcha-field[data-captcha-layout="top"] .captcha-input { grid-column: 1 / -1; }
  .captcha-image { width: 100%; min-width: 0; height: auto; aspect-ratio: 180 / 58; }
  .captcha-input { grid-column: 1 / -1; width: 100%; }
  .captcha-layout-preview-head { flex-direction: column; }
  .captcha-row-has-audio .captcha-input { grid-column: 1 / -1; }
  .captcha-audio { grid-column: 1 / -1; width: 100%; }
  .captcha-refresh { min-height: 44px; width: 100%; }
  .captcha-field.is-captcha-cooling .captcha-countdown { line-height: 1.45; }
  .home-upload-captcha { padding: 8px; }
  .captcha-admin-actions { display:grid; grid-template-columns:1fr; }
  .captcha-admin-actions .layui-btn { width:100%; }
  .captcha-admin-preview { align-items:flex-start; flex-direction:column; }
  .captcha-admin-preview img { width:100%; max-width:280px; height:auto; aspect-ratio:180 / 58; }
  .captcha-admin-test-form { width:100%; }
  .captcha-admin-test-row { display:grid; grid-template-columns:1fr; }
  .captcha-admin-test-row .layui-btn { width:100%; }
  .captcha-simulator-head { flex-direction:column; }
  .captcha-simulator-head .layui-btn { width:100%; }
  .captcha-admin-stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .captcha-admin-stat-grid span { white-space: normal; }
  .captcha-admin-stats-alert { grid-template-columns: 1fr; gap: 4px; align-items: start; }
  .captcha-admin-stats-alert small { text-align: left; }
  .captcha-admin-stats-comparison { display: grid; grid-template-columns: 1fr 1fr; gap: 5px 10px; }
  .captcha-admin-stats-comparison span { grid-column: 1 / -1; }
  .captcha-scene-experience-grid { grid-template-columns: 1fr; }
}

/* 验证码统计筛选、场景明细和趋势列表（2026-09-05 09:37:14）。 */
.captcha-admin-stats-filters {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 10px;
  margin-bottom: 12px;
}
.captcha-admin-stats-filters label {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 150px;
  color: var(--muted);
  font-size: 0.75rem;
  font-weight: 700;
}
.captcha-admin-stats-filters select { min-height: 36px; }
.captcha-admin-stats-filters .layui-btn { min-height: 36px; }
.captcha-admin-stats-breakdown,
.captcha-admin-stats-trend { margin-top: 14px; }
.captcha-admin-stats-breakdown h4,
.captcha-admin-stats-trend h4 { margin: 0 0 8px; font-size: 0.8125rem; }
.captcha-admin-stats-breakdown .table-responsive { overflow-x: auto; }
.captcha-admin-stats-breakdown table { width: 100%; min-width: 720px; border-collapse: collapse; }
.captcha-admin-stats-breakdown th,
.captcha-admin-stats-breakdown td { padding: 7px 8px; border-bottom: 1px solid var(--border); text-align: right; font-size: 0.75rem; white-space: nowrap; }
.captcha-admin-stats-breakdown th:first-child,
.captcha-admin-stats-breakdown td:first-child { text-align: left; }
.captcha-admin-stats-trend ul { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; margin: 0; padding: 0; list-style: none; }
.captcha-admin-stats-trend li { display: flex; flex-direction: column; gap: 3px; min-width: 0; padding: 7px 8px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 3px); background: var(--panel); }
.captcha-admin-stats-trend li span { overflow: hidden; color: var(--muted); font-size: 0.6875rem; text-overflow: ellipsis; white-space: nowrap; }
.captcha-admin-stats-trend li b { color: var(--primary); font-size: 0.8125rem; }
.captcha-admin-preset { display:flex; flex-wrap:wrap; align-items:flex-end; gap:10px; margin-top:10px; padding:10px 12px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); background:var(--surface-soft, rgba(127,143,170,.06)); }
.captcha-admin-preset label { display:flex; flex-direction:column; gap:4px; min-width:190px; color:var(--muted); font-size:0.75rem; font-weight:700; }
.captcha-admin-preset select { min-height:36px; }
.captcha-admin-preset .layui-btn { min-height:36px; }
.captcha-admin-preset .hint { flex:1 1 100%; margin:0; }
.captcha-admin-stats-risk { display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin-top:10px; padding:9px 11px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 3px); background:var(--surface-soft, rgba(127,143,170,.06)); color:var(--muted); font-size:0.75rem; }
.captcha-admin-stats-risk strong { color:var(--text); font-size:0.8125rem; }
.captcha-admin-stats-risk.is-normal { border-color:rgba(39,174,96,.35); background:rgba(39,174,96,.07); }
.captcha-admin-stats-risk.is-medium { border-color:rgba(183,121,31,.45); background:rgba(183,121,31,.09); }
.captcha-admin-stats-risk.is-high { border-color:rgba(192,57,43,.45); background:rgba(192,57,43,.09); color:var(--danger,#c0392b); }
.captcha-admin-stats-risk.is-high strong { color:var(--danger,#c0392b); }
.captcha-admin-health { margin-top:10px; padding:10px 12px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 2px); background:var(--surface-soft, rgba(127,143,170,.06)); }
.captcha-admin-health h4 { margin:0 0 8px; font-size:0.8125rem; }
.captcha-health-summary { margin-bottom:8px; color:var(--muted); font-size:0.75rem; }
.captcha-health-summary.is-ok { color:var(--success,#278a52); }
.captcha-health-summary.is-error { color:var(--danger,#c0392b); }
.captcha-admin-health ul { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:7px; margin:0; padding:0; list-style:none; }
.captcha-health-item { display:flex; flex-direction:column; gap:3px; min-width:0; padding:8px 9px; border:1px solid var(--border); border-radius:calc(var(--radius-sm) - 3px); background:var(--panel); font-size:0.75rem; }
.captcha-health-item strong { font-size:0.75rem; color:var(--text); }
.captcha-health-item span { color:var(--muted); overflow-wrap:anywhere; line-height:1.5; }
.captcha-health-item.is-ok { border-color:rgba(39,174,96,.3); }
.captcha-health-item.is-ok strong { color:var(--success,#278a52); }
.captcha-health-item.is-warning { border-color:rgba(183,121,31,.35); }
.captcha-health-item.is-warning strong { color:var(--warning,#b7791f); }
.captcha-health-item.is-error { border-color:rgba(192,57,43,.4); }
.captcha-health-item.is-error strong { color:var(--danger,#c0392b); }
.captcha-admin-health > .hint { margin:9px 0 0; }
@media (max-width: 640px) {
  .captcha-simulator-head { gap:8px; align-items:stretch; }
  .captcha-simulator-head .layui-btn { width:100%; justify-content:center; }
  .captcha-simulator-fields { grid-template-columns:1fr; }
  .captcha-risk-factor-list { grid-template-columns:1fr; }
  .captcha-simulator-result { padding:11px; font-size:0.75rem; }
  .captcha-admin-stats-filters { display: grid; grid-template-columns: 1fr 1fr; align-items: end; gap: 8px; }
  .captcha-admin-stats-filters label { min-width: 0; }
  .captcha-admin-stats-filters .layui-btn { grid-column: 1 / -1; width: 100%; }
  .captcha-admin-stats-trend ul { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .captcha-admin-stats-breakdown table { min-width: 680px; }
  .captcha-admin-preset { display:grid; grid-template-columns:1fr; align-items:stretch; }
  .captcha-admin-preset label, .captcha-admin-preset .layui-btn { width:100%; min-width:0; }
  .captcha-admin-preset .layui-btn { min-height:42px; }
  .captcha-admin-health ul { grid-template-columns:1fr; }
}

/* 第三方登录 */
.oauth-divider { display: flex; align-items: center; gap: 10px; color: var(--muted); font-size: 0.75rem; margin: 20px 0 12px; }
.oauth-divider::before, .oauth-divider::after { content: ''; flex: 1; height: 1px; background: var(--border); }
.oauth-btns { display: flex; gap: 10px; }
.oauth-btn { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 6px; text-align: center; padding: 10px 0; border-radius: var(--radius-sm); font-size: 0.875rem; text-decoration: none; color: #fff; transition: transform .15s, opacity .15s; }
.oauth-btn svg { width: 17px; height: 17px; fill: currentColor; }
.oauth-btn.wx { background: #07c160; }
.oauth-btn.qq { background: #12b7f5; }
.oauth-btn:hover { color: #fff; transform: translateY(-1px); }

/* 生物识别登录（通行密钥 / 本机指纹） */
.bio-btns { display: flex; gap: 10px; flex-wrap: wrap; }
.bio-btn { min-height: 44px; }
.bio-btn-passkey { background: linear-gradient(135deg, var(--primary), #7c5cff); }
.bio-btn-finger { background: linear-gradient(135deg, #12b7a5, #0891b2); }
.bio-btn svg { stroke: currentColor; stroke-width: 1.8; fill: none; }
.bio-btn:hover { color: #fff; transform: translateY(-1px); opacity: .94; }
.auth-bio-hint { color: var(--muted); font-size: 0.75rem; margin: 10px 0 0; text-align: center; }

/* 生物识别调用中的全屏遮罩 */
.bio-busy-overlay { position: fixed; inset: 0; z-index: 9990; display: flex; align-items: center; justify-content: center; background: rgba(15, 20, 30, .45); backdrop-filter: blur(2px); }
.bio-busy-overlay span { display: inline-flex; align-items: center; gap: 10px; padding: 14px 22px; border-radius: calc(var(--radius) - 2px); background: var(--card, #fff); color: var(--text, #222); font-size: 0.875rem; box-shadow: 0 10px 30px rgba(0, 0, 0, .18); }
.bio-busy-overlay span::before { content: ''; width: 16px; height: 16px; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: bio-spin .8s linear infinite; }
@keyframes bio-spin { to { transform: rotate(360deg); } }

/* 生物识别二次确认弹窗 */
.rjkc-bio-confirm-overlay { position: fixed; inset: 0; z-index: 9991; display: flex; align-items: center; justify-content: center; padding: 20px; background: rgba(15, 20, 30, .5); backdrop-filter: blur(2px); }
.rjkc-bio-confirm { width: min(400px, 100%); background: var(--card, #fff); color: var(--text, #222); border-radius: calc(var(--radius) + 2px); padding: 22px; box-shadow: 0 18px 50px rgba(0, 0, 0, .25); }
.rjkc-bio-confirm h4 { margin: 0 0 8px; font-size: 1rem; }
.rjkc-bio-confirm p { margin: 0 0 14px; font-size: 0.8125rem; color: var(--muted, #666); line-height: 1.6; }
.rjkc-bio-confirm label { display: block; margin: 0 0 12px; font-size: 0.8125rem; color: var(--muted, #666); }
.rjkc-bio-confirm input { display: block; width: 100%; margin-top: 6px; min-height: 44px; box-sizing: border-box; }
.rjkc-bio-confirm-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }
.rjkc-bio-confirm-actions .layui-btn { min-height: 44px; }

/* 个人中心生物识别管理页 */
.user-bio-manage { display: flex; flex-direction: column; gap: 16px; max-width: 860px; }
.user-bio-manage .bio-card { animation: fadeInUp .35s ease both; }
.bio-empty { padding: 8px 0; }
.bio-key-name { font-weight: 600; }
.bio-card-actions { margin-top: 12px; display: flex; justify-content: flex-end; }
.bio-finger-item { display: flex; align-items: center; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--border); flex-wrap: wrap; }
.bio-finger-item:last-child { border-bottom: 0; }
.bio-finger-copy { flex: 1 1 auto; min-width: 200px; display: flex; flex-direction: column; gap: 4px; }
.bio-finger-copy small { color: var(--muted); font-size: 0.75rem; }
.bio-security-tips { margin: 8px 0 0; padding-left: 18px; display: flex; flex-direction: column; gap: 8px; color: var(--text, #333); font-size: 0.8125rem; line-height: 1.7; }
.bio-device-id { font-size: 0.75rem; padding: 1px 6px; border-radius: calc(var(--radius-sm) - 4px); background: var(--border, rgba(0,0,0,.06)); }
.user-bio-admin-panel .stats-row { margin-bottom: 12px; }
.bio-admin-fingers { margin-top: 14px; }

/* 文件查看 */
.share-page { min-height: 100vh; display: flex; flex-direction: column; }
.share-page > main { flex: 1 0 auto; }
.share-shell { width: min(900px, calc(100% - 32px)); margin-left: auto; margin-right: auto; }
.share-meta-line { text-align: center; margin-top: 16px; }
.note-box .action-icon { width: 17px; height: 17px; }
.preview-audio, .preview-video { width: 100%; }
.preview-video { max-height: 560px; }
.preview-pdf { width: 100%; height: 620px; border: none; display: block; }
.skeleton .sk-w64 { width: 64%; }
.skeleton .sk-w92 { width: 92%; }
.skeleton .sk-w85 { width: 85%; }
.skeleton .sk-w90 { width: 90%; }
.skeleton .sk-w52 { width: 52%; }
.file-view { max-width: none; margin: 0; }
.share-stats { display: flex; flex-wrap: wrap; gap: 8px 20px; margin-top: 12px; font-size: 0.8125rem; color: var(--muted); }
.share-stats b { color: var(--text); font-weight: 700; }
@media (max-width: 768px) {
  .share-shell { width: min(100% - 20px, 900px); }
  .share-meta-line { margin-top: 14px; }
  .preview-pdf { height: 70vh; min-height: 360px; }
  .preview-mobile-toolbar .layui-btn { min-height: 44px; }
}
.file-head { display: flex; gap: 16px; align-items: center; margin-bottom: 18px; }
.file-icon { font-size: 2.75rem; }
.file-info h2 { font-size: 1.25rem; word-break: break-all; }
.preview-box { margin-bottom: 18px; text-align: center; }
.preview-box pre { text-align: left; max-height: 480px; overflow: auto; background: var(--bg); padding: 16px; border-radius: calc(var(--radius-sm) - 2px); font-size: 0.8125rem; }
.no-preview { padding: 60px; color: var(--muted); }
.file-actions { display: flex; gap: 12px; justify-content: center; align-items: center; }
.text-share-actions { flex: 1 1 100%; flex-wrap: wrap; justify-content: flex-end; margin: 0; }
.text-toolbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
.plain-text { white-space: pre-wrap; word-break: break-word; font-family: "SF Mono", Consolas, monospace; font-size: 0.875rem; }
.markdown-body { line-height: 1.7; }
.markdown-body pre { background: var(--bg); padding: 12px; border-radius: calc(var(--radius-sm) - 4px); overflow: auto; }
.markdown-body code { background: var(--bg); padding: 2px 6px; border-radius: 4px; }
.markdown-body h1,.markdown-body h2,.markdown-body h3 { margin: 16px 0 8px; }
.markdown-body p { margin: 8px 0; }
.markdown-body table { border-collapse: collapse; }
.markdown-body td,.markdown-body th { border: 1px solid var(--border); padding: 6px 10px; }

/* 页脚 */
.footer { text-align: center; padding: 34px 0 42px; color: var(--muted); font-size: 0.8125rem; border-top: 1px solid var(--border); margin-top: 12px; }
.home-page, .user-page, .auth-page, body:has(> .site-footer) { min-height: 100vh; display: flex; flex-direction: column; }
.home-page > main, .user-page > main, .auth-page > main { flex: 1 0 auto; }
.site-footer {
  position: relative; isolation: isolate; overflow: hidden;
  padding: 22px 0 calc(18px + env(safe-area-inset-bottom)); margin-top: auto;
  border-top: 0;
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--panel) 42%, transparent), transparent 56%);
  backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
}
.site-footer::before {
  content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--primary) 55%, var(--grad-b)) 50%, transparent);
  opacity: 0.95;
}
.site-footer::after {
  content: ''; position: absolute; inset: auto 0 -1px 0; height: 1px;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--primary) 28%, transparent) 50%, transparent);
  pointer-events: none; opacity: 0.75;
}
.site-footer > * { position: relative; z-index: 1; }
.state-shell .site-footer { width: 100%; }
.site-footer-inner {
  display: grid; grid-template-columns: minmax(200px, 1.4fr) repeat(auto-fit, minmax(170px, 1fr));
  gap: 10px 28px; align-items: start; justify-items: stretch; text-align: left;
}
.site-footer-col { display: grid; gap: 6px; align-content: start; min-width: 0; }
.site-footer-col-title {
  margin: 0 0 2px; color: var(--primary); font-size: 0.6875rem; font-weight: 800; letter-spacing: .12em;
  text-transform: uppercase; display: flex; align-items: center; gap: 8px;
}
.site-footer-col-title::after {
  content: ''; flex: 0 0 26px; height: 2px; border-radius: 2px;
  background: linear-gradient(90deg, var(--primary), transparent);
  opacity: 0.7;
}
.site-footer-brand { gap: 4px; }
.site-footer-mark { display: inline-flex; align-items: center; gap: 8px; margin: 0; color: var(--text); }
.site-footer-mark-icon {
  width: 22px; height: 22px; border-radius: calc(var(--radius-sm) - 3px); flex: 0 0 auto;
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
  box-shadow: 0 4px 10px color-mix(in srgb, var(--primary) 24%, transparent);
}
.site-footer-mark strong { font-size: 0.9375rem; font-weight: 800; letter-spacing: .01em; }
.site-footer-slogan { margin: 0; color: var(--muted); font-size: 0.75rem; font-weight: 650; letter-spacing: .02em; line-height: 1.4; }
.site-footer-copy, .site-footer-note { margin: 0; color: var(--muted); font-size: 0.75rem; line-height: 1.45; }
.site-footer-meta { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 2px 0 0; }
.site-footer-meta-dot { color: var(--border); margin: 0 2px; user-select: none; }
.site-footer-link-list, .site-footer-filing-list { display: flex; flex-wrap: wrap; gap: 6px; }
.site-footer-links a {
  min-height: 32px; padding: 4px 13px; border-radius: var(--radius-sm); color: var(--text); font-weight: 650; font-size: 0.8125rem;
  display: inline-flex; align-items: center; justify-content: center;
  background: color-mix(in srgb, var(--panel) 78%, transparent);
  border: 1px solid color-mix(in srgb, var(--border) 65%, transparent);
  box-shadow: 0 1px 2px color-mix(in srgb, var(--text) 4%, transparent);
  transition: color .18s var(--ease-smooth), background .18s var(--ease-smooth), border-color .18s var(--ease-smooth), transform .18s var(--ease-smooth), box-shadow .18s var(--ease-smooth);
}
.site-footer-links a:hover, .site-footer-links a:focus-visible {
  color: var(--primary); background: color-mix(in srgb, var(--primary-soft) 90%, var(--panel));
  border-color: color-mix(in srgb, var(--primary) 45%, var(--border));
  box-shadow: 0 3px 10px color-mix(in srgb, var(--primary) 18%, transparent);
  transform: translateY(-1px);
}
.site-footer-filing-item {
  min-height: 30px; padding: 3px 10px 3px 5px; border-radius: var(--radius-sm); color: var(--muted);
  display: inline-flex; align-items: center; gap: 6px;
  background: color-mix(in srgb, var(--panel) 72%, transparent);
  border: 1px solid color-mix(in srgb, var(--border) 65%, transparent); text-decoration: none;
  box-shadow: 0 1px 2px color-mix(in srgb, var(--text) 4%, transparent);
  transition: color .18s var(--ease-smooth), border-color .18s var(--ease-smooth), transform .18s var(--ease-smooth), box-shadow .18s var(--ease-smooth);
}
.site-footer-filing-chip {
  min-height: 20px; padding: 0 7px; border-radius: 999px; color: var(--primary);
  background: color-mix(in srgb, var(--primary-soft) 90%, transparent); font-size: 0.6875rem; font-weight: 800;
  display: inline-flex; align-items: center; white-space: nowrap;
}
.site-footer-filing-text { font-size: 0.75rem; font-weight: 600; }
a.site-footer-filing-item:hover, a.site-footer-filing-item:focus-visible {
  color: var(--primary); border-color: color-mix(in srgb, var(--primary) 42%, var(--border));
  box-shadow: 0 3px 10px color-mix(in srgb, var(--primary) 16%, transparent);
  transform: translateY(-1px);
}
.auth-footer, .user-footer, .admin-footer { margin-top: auto; }
.admin-main { display: flex; flex-direction: column; min-height: 100vh; min-width: 0; }
.admin-footer { width: 100%; padding-left: 20px; padding-right: 20px; background: transparent; }
.admin-footer .site-footer-inner { max-width: none; padding: 0; }
[data-theme="dark"] .site-footer {
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--panel) 55%, transparent), transparent 58%);
}
[data-theme="dark"] .mobile-bottom-nav {
  background: color-mix(in srgb, var(--bg) 62%, transparent);
  border-color: color-mix(in srgb, var(--border) 55%, transparent);
  box-shadow: none;
}
@media (max-width: 768px) {
  .admin-footer { padding-left: 12px; padding-right: 12px; }
  .site-footer { padding: 18px 0 calc(14px + env(safe-area-inset-bottom)); }
  .site-footer-inner { grid-template-columns: 1fr; gap: 14px; }
  .site-footer-brand { grid-column: 1 / -1; }
  .site-footer-col { gap: 8px; }
  .site-footer-col + .site-footer-col { padding-top: 14px; border-top: 1px solid color-mix(in srgb, var(--border) 55%, transparent); }
  .site-footer-link-list, .site-footer-filing-list { width: 100%; }
  .site-footer-links a, .site-footer-filing-item { flex: 1 1 130px; min-height: 44px; justify-content: center; }
  .home-page:has(.home-mobile-action-bar) .home-footer { padding-bottom: 10px; }
}

/* 隐私提示与隐私中心：桌面端悬浮，手机端自动变为底部单列条 */
.privacy-consent-banner{position:fixed;left:16px;right:16px;bottom:16px;z-index:1200;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow-lg);border-radius:var(--radius-sm)}
.privacy-consent-content{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px;min-width:0;color:var(--muted);font-size:0.8125rem;line-height:1.6}.privacy-consent-content strong{color:var(--text);font-size:0.875rem}.privacy-consent-content a{color:var(--primary);text-decoration:none}.privacy-consent-content a:hover{text-decoration:none}.privacy-consent-banner .layui-btn{flex:0 0 auto;min-height:40px;white-space:normal}.privacy-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}.privacy-contact{margin-top:14px}.privacy-request-status{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:14px;border:1px solid var(--border);border-radius:calc(var(--radius-sm) - 2px);background:var(--bg)}.privacy-request-status b{color:var(--warning,#b7791f)}.privacy-request-status form{margin-left:auto}.privacy-delete-form{max-width:420px}.privacy-delete-form .layui-btn{margin-top:8px}.privacy-request-table{min-width:0}.privacy-request-table table{min-width:860px}.privacy-export-action-form{margin:0}.privacy-export-action-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.privacy-export-action-row input{width:150px;min-width:120px}.privacy-request-pager{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:14px}.privacy-filter-form{align-items:center}

/* ===== 用户协议与隐私政策 ===== */
/* 协议阅读页：宽屏居中单栏，正文限制阅读宽度以提升长文可读性 */
.legal-page .legal-shell{max-width:900px;padding:26px 16px 40px}
.legal-doc{padding:30px 34px 26px}
.legal-doc-head{border-bottom:1px solid var(--border);padding-bottom:16px;margin-bottom:20px}
.legal-doc-head h1{font-size:1.625rem;line-height:1.35;margin:8px 0 12px;letter-spacing:.2px}
.legal-doc-meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px}
.legal-doc-actions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
/* 正文排版：标题层级、段落间距与列表缩进，兼顾深浅色 */
.legal-doc-body{color:var(--text);font-size:0.90625rem;line-height:1.85}
.legal-doc-body h2{font-size:1.125rem;margin:26px 0 12px;padding-left:11px;position:relative;line-height:1.5}
.legal-doc-body h2::before{content:"";position:absolute;left:0;top:.28em;bottom:.28em;width:3px;border-radius:2px;background:linear-gradient(180deg,var(--grad-a),var(--grad-b))}
.legal-doc-body h3{font-size:1rem;margin:20px 0 10px}
.legal-doc-body h4,.legal-doc-body h5,.legal-doc-body h6{font-size:0.90625rem;margin:16px 0 8px}
.legal-doc-body p{margin:0 0 12px}
.legal-doc-body ul{margin:0 0 14px;padding-left:20px}
.legal-doc-body li{margin:0 0 7px}
.legal-doc-body strong{font-weight:700;color:var(--text)}
.legal-doc-body blockquote{margin:0 0 14px;padding:11px 15px;border-left:3px solid var(--primary);background:color-mix(in srgb,var(--primary) 7%,transparent);border-radius:0 calc(var(--radius-sm) - 2px) calc(var(--radius-sm) - 2px) 0;color:var(--muted)}
.legal-doc-body hr{border:0;border-top:1px dashed var(--border);margin:22px 0}
.legal-doc-body code{padding:1px 6px;border-radius:5px;background:color-mix(in srgb,var(--border) 45%,transparent);font-size:0.8125rem}
.legal-doc-foot{margin-top:26px;padding-top:18px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:9px}
.legal-doc-links{display:flex;flex-wrap:wrap;gap:9px}

/* 注册页同意勾选框：整行可点，触控热区满足 44px */
.auth-page .legal-consent-check{display:flex;align-items:flex-start;gap:9px;margin:2px 0 15px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:calc(var(--radius) - 2px);background:color-mix(in srgb,var(--panel) 55%,transparent);cursor:pointer;font-size:0.8125rem;line-height:1.65;transition:border-color .2s ease,background .2s ease}
.auth-page .legal-consent-check:hover{border-color:color-mix(in srgb,var(--primary) 42%,transparent)}
.auth-page .legal-consent-check input[type="checkbox"]{flex:0 0 auto;width:18px;height:18px;margin-top:2px;accent-color:var(--primary);cursor:pointer}
.auth-page .legal-consent-check span{min-width:0}
.auth-page .legal-consent-check a{color:var(--primary);text-decoration:none;font-weight:600}
.auth-page .legal-consent-check a:hover{text-decoration:none}
.auth-page .legal-consent-check:has(input:required:invalid){border-color:color-mix(in srgb,var(--danger,#e5484d) 42%,transparent)}
/* 登录等页面的协议声明小字 */
.auth-page .legal-consent-note{margin:12px 0 0;text-align:center;font-size:0.78125rem;line-height:1.7}
.auth-page .legal-consent-note a{color:var(--primary);text-decoration:none;font-weight:600}
.auth-page .legal-consent-note a:hover{text-decoration:none}

/* 后台协议管理 */
.legal-doc-tabs{display:flex;flex-wrap:wrap;gap:9px;margin:0 0 16px}
.legal-sync-panel{margin-top:16px}
.legal-sync-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:12px 0 0}
.legal-sync-actions .inline-form{margin:0}
.legal-sync-path{word-break:break-all;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:0.75rem}
.legal-section-table td{vertical-align:middle}
.legal-section-excerpt{color:var(--text);opacity:.82;font-size:0.8125rem;line-height:1.6;max-width:420px;word-break:break-word}
.legal-section-ops{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.legal-section-ops .inline-form{margin:0}
.legal-insert-bar{display:flex;flex-wrap:wrap;gap:7px;align-items:center;padding:10px 12px;margin:0 0 9px;border:1px dashed var(--border);border-radius:calc(var(--radius) - 5px);background:color-mix(in srgb,var(--border) 14%,transparent)}
.legal-content-input{width:100%;min-height:230px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:0.8125rem;line-height:1.7}

@media(max-width:760px){
  .legal-page .legal-shell{padding:16px 12px 32px}
  .legal-doc{padding:20px 16px 18px}
  .legal-doc-head h1{font-size:1.3125rem}
  .legal-doc-body{font-size:0.875rem;line-height:1.8}
  .legal-doc-body h2{font-size:1.03125rem;margin:22px 0 10px}
  .legal-doc-body ul{padding-left:17px}
  .legal-doc-actions .layui-btn,.legal-doc-links .layui-btn{flex:1 1 auto;min-height:44px}
  .legal-section-ops .layui-btn{min-height:40px}
  .legal-sync-actions{flex-direction:column;align-items:stretch}
  .legal-sync-actions .inline-form,.legal-sync-actions .layui-btn{width:100%}
  .legal-sync-actions .layui-btn{min-height:44px}
  .legal-sync-actions .hint{text-align:center}
  .legal-section-excerpt{max-width:none}
}
@media(max-width:400px){
  .legal-doc{padding:17px 13px 15px}
  .legal-doc-head h1{font-size:1.1875rem}
  .legal-doc-body{font-size:0.84375rem}
}
@media(max-width:640px){.privacy-consent-banner{left:10px;right:10px;bottom:max(10px,env(safe-area-inset-bottom));align-items:stretch;flex-direction:column;gap:10px;padding:13px}.privacy-consent-banner .layui-btn{width:100%;min-height:44px}.privacy-consent-content{display:block}.privacy-consent-content strong{display:block;margin-bottom:3px}.privacy-consent-content a{display:inline-block;margin-top:3px}.privacy-request-status{align-items:flex-start;flex-direction:column}.privacy-request-status form{margin-left:0;width:100%}.privacy-request-status form .layui-btn{width:100%;min-height:44px}.privacy-actions .layui-btn{width:100%;min-height:44px}}
@media(max-width:768px){.privacy-filter-form{align-items:stretch;flex-direction:column}.privacy-filter-form select,.privacy-filter-form .layui-btn,.privacy-filter-form a{width:100%;min-height:44px}.privacy-request-table table{min-width:760px}.privacy-export-action-row{align-items:stretch;flex-direction:column}.privacy-export-action-row input,.privacy-export-action-row .layui-btn{width:100%;min-width:0;min-height:44px}.privacy-request-pager{justify-content:space-between;flex-wrap:wrap}}

/* 上传者备注 */
.note-box {
  background: linear-gradient(90deg, var(--primary-soft), transparent 70%), var(--bg);
  border: 1px dashed color-mix(in srgb, var(--primary) 55%, transparent);
  border-radius: var(--radius-sm); padding: 12px 16px; margin-bottom: 18px; font-size: 0.875rem; color: var(--text);
}

/* docx / xlsx 在线预览 */
.docx-body { text-align: left; max-height: 560px; overflow: auto; background: var(--bg); padding: 20px 24px; border-radius: calc(var(--radius-sm) - 2px); line-height: 1.7; }
.docx-body img { max-width: 100%; }
.sheet-body { overflow: auto; max-height: 560px; }
.sheet-body table { border-collapse: collapse; font-size: 0.8125rem; margin: 0 auto; background: var(--panel); }
.sheet-body td, .sheet-body th { border: 1px solid var(--border); padding: 4px 10px; white-space: nowrap; }

/* 全格式文件预览组件（2026-08-31 09:54:34）
   解析器只负责输出安全内容，这里统一处理容器、长文本和窄屏布局。 */
.preview-surface {
  position: relative;
  min-width: 0;
  margin: 0 0 18px;
  overflow: hidden;
  text-align: left;
  background: color-mix(in srgb, var(--panel) 92%, var(--bg));
  border: 1px solid var(--border);
  border-radius: calc(var(--radius) - 2px);
  box-shadow: inset 0 1px 0 color-mix(in srgb, #fff 28%, transparent);
}
.preview-surface[data-preview-kind="unknown"] { background: color-mix(in srgb, var(--bg) 82%, var(--panel)); }
.preview-surface.preview-mobile-compact { border-radius: calc(var(--radius) - 5px); }
.preview-surface.preview-mobile-fullscreen { min-height: 220px; }
.preview-surface > audio,
.preview-surface > video { display: block; width: 100%; max-width: 100%; margin: 0; background: #0b0d12; }
.preview-surface > audio { min-height: 48px; padding: 8px; }
.preview-surface > video { max-height: min(72vh, 680px); object-fit: contain; }

.preview-image-frame {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 180px;
  max-height: min(76vh, 760px);
  margin: 0;
  padding: clamp(10px, 2.5vw, 24px);
  overflow: auto;
  background:
    linear-gradient(45deg, color-mix(in srgb, var(--border) 22%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--border) 22%, transparent) 75%),
    linear-gradient(45deg, color-mix(in srgb, var(--border) 22%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--border) 22%, transparent) 75%),
    color-mix(in srgb, var(--bg) 86%, var(--panel));
  background-position: 0 0, 10px 10px;
  background-size: 20px 20px;
}
.preview-img {
  display: block;
  width: auto;
  max-width: 100%;
  height: auto;
  max-height: calc(76vh - 48px);
  border-radius: calc(var(--radius-sm) - 2px);
  object-fit: contain;
  cursor: zoom-in;
  box-shadow: 0 8px 26px rgba(15, 23, 42, .14);
}
.preview-img.preview-image-fit,
.preview-img.preview-image-contain { width: 100%; height: auto; }
.preview-img.preview-image-actual { max-width: none; }
.preview-image-frame:has(.preview-image-actual) { justify-content: flex-start; }

.preview-document-frame {
  min-width: 0;
  padding: 10px;
  background: color-mix(in srgb, var(--bg) 82%, var(--panel));
}
.preview-document-frame iframe {
  display: block;
  width: 100% !important;
  height: min(78vh, 720px) !important;
  min-height: 460px;
  border: 1px solid var(--border) !important;
  border-radius: calc(var(--radius-sm) - 2px);
  background: #fff;
}
.preview-document-hint {
  padding: 9px 4px 1px;
  color: var(--muted);
  font-size: 0.75rem;
  line-height: 1.55;
  overflow-wrap: anywhere;
}

.preview-meta-list {
  display: grid;
  grid-template-columns: minmax(80px, 118px) minmax(0, 1fr);
  gap: 0;
  margin: 12px 0 0;
  border: 1px solid var(--border);
  border-radius: calc(var(--radius) - 5px);
  overflow: hidden;
  background: var(--panel);
}
.preview-meta-list dt,
.preview-meta-list dd {
  min-width: 0;
  margin: 0;
  padding: 9px 11px;
  border-bottom: 1px solid var(--border);
  font-size: 0.8125rem;
  line-height: 1.5;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.preview-meta-list dt {
  color: var(--muted);
  background: color-mix(in srgb, var(--bg) 70%, var(--panel));
  font-weight: 600;
}
.preview-meta-list dd { color: var(--text); font-family: inherit; }
.preview-meta-list dt:nth-last-of-type(1),
.preview-meta-list dd:nth-last-of-type(1) { border-bottom: 0; }
.preview-meta-list dd code,
.preview-meta-list dd strong { overflow-wrap: anywhere; word-break: break-word; }

.preview-entry-table {
  width: 100%;
  min-width: 520px;
  margin-top: 12px;
  border-collapse: collapse;
  table-layout: fixed;
  background: var(--panel);
  font-size: 0.8125rem;
}
.preview-entry-table th,
.preview-entry-table td {
  padding: 9px 11px;
  border: 1px solid var(--border);
  text-align: left;
  vertical-align: top;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.preview-entry-table th {
  color: var(--muted);
  background: color-mix(in srgb, var(--bg) 72%, var(--panel));
  font-weight: 700;
  white-space: nowrap;
}
.preview-entry-table th:first-child,
.preview-entry-table td:first-child { width: 58%; }
.preview-entry-table tbody tr:nth-child(even) td { background: color-mix(in srgb, var(--bg) 35%, var(--panel)); }
.preview-entry-table tbody tr:hover td { background: var(--primary-soft); }

.preview-unknown,
.archive-preview,
.office-preview,
.ebook-preview {
  min-width: 0;
  padding: clamp(15px, 3vw, 24px);
  overflow-x: auto;
}
.preview-unknown h4,
.archive-preview h4,
.office-preview h4,
.ebook-preview h4 {
  margin: 0;
  color: var(--text);
  font-size: 1rem;
  line-height: 1.35;
}
.preview-summary-label {
  margin: 16px 0 6px;
  color: var(--muted);
  font-size: 0.75rem;
  font-weight: 700;
}
.preview-hex,
.preview-strings {
  max-height: 230px;
  margin: 0;
  padding: 11px 12px;
  overflow: auto;
  border: 1px solid var(--border);
  border-radius: calc(var(--radius-sm) - 2px);
  background: color-mix(in srgb, var(--bg) 88%, var(--panel));
  color: var(--text);
  font: 0.75rem/1.6 "SF Mono", Consolas, "Liberation Mono", monospace;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.preview-hex { color: color-mix(in srgb, var(--primary) 76%, var(--text)); letter-spacing: .02em; }
.preview-strings { max-height: 280px; }
.preview-truncated {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 12px 0 0;
  padding: 10px 12px;
  border: 1px dashed color-mix(in srgb, var(--orange) 55%, var(--border));
  border-radius: calc(var(--radius-sm) - 2px);
  background: color-mix(in srgb, var(--orange) 8%, var(--panel));
  color: color-mix(in srgb, var(--orange) 76%, var(--text));
  font-size: 0.75rem;
  line-height: 1.55;
  overflow-wrap: anywhere;
}
.preview-truncated::before { content: '提示'; flex: 0 0 auto; font-weight: 700; }
.preview-policy-message {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  flex-direction: column;
  gap: 5px;
  min-height: 150px;
  margin: 0;
  padding: 28px 22px;
  text-align: center;
  background: color-mix(in srgb, var(--bg) 86%, var(--panel));
}
.preview-policy-message b,
.preview-policy-message span { width: 100%; overflow-wrap: anywhere; }
.preview-policy-message b { color: var(--text); font-size: 0.9375rem; }
.preview-policy-message span { color: var(--muted); font-size: 0.8125rem; }

.archive-preview { max-height: min(72vh, 680px); }
.archive-preview .preview-loading { min-height: 130px; display: grid; place-items: center; }
.archive-preview .preview-entry-table { margin-bottom: 2px; }
.office-preview {
  max-height: min(76vh, 760px);
  line-height: 1.7;
  background: var(--panel);
}
.office-preview > :first-child { margin-top: 0; }
.office-preview h1,
.office-preview h2,
.office-preview h3,
.office-preview h4,
.office-preview h5,
.office-preview h6 { margin: 18px 0 8px; line-height: 1.35; }
.office-preview p { margin: 8px 0; overflow-wrap: anywhere; }
.office-preview ul,
.office-preview ol { margin: 8px 0; padding-left: 24px; }
.office-preview img { display: block; max-width: 100%; height: auto; margin: 10px auto; }
.office-preview table { width: max-content; min-width: 100%; border-collapse: collapse; margin: 10px 0; font-size: 0.8125rem; }
.office-preview th,
.office-preview td { padding: 6px 9px; border: 1px solid var(--border); vertical-align: top; overflow-wrap: anywhere; }
.office-preview th { background: color-mix(in srgb, var(--bg) 72%, var(--panel)); }
.office-preview pre,
.office-preview code { font-family: "SF Mono", Consolas, monospace; }
.office-preview pre { max-width: 100%; overflow: auto; padding: 12px; border-radius: calc(var(--radius-sm) - 2px); background: var(--bg); white-space: pre-wrap; overflow-wrap: anywhere; }
.ebook-preview { max-height: min(70vh, 640px); }
.preview-font {
  min-width: 0;
  padding: clamp(18px, 4vw, 32px);
  background: var(--panel);
  text-align: center;
}
.preview-font-sample {
  min-height: 92px;
  display: grid;
  place-items: center;
  padding: 18px 14px;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: color-mix(in srgb, var(--bg) 84%, var(--panel));
  color: var(--text);
  font-size: clamp(24px, 5vw, 42px);
  line-height: 1.35;
  overflow-wrap: anywhere;
}
.preview-font-meta { margin-top: 14px; text-align: left; }

.preview-text-toolbar {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  min-width: 0;
  margin: 0;
  padding: 10px 12px;
  border-bottom: 1px solid var(--border);
  background: color-mix(in srgb, var(--bg) 72%, var(--panel));
}
.preview-text-toolbar input[type="search"] {
  flex: 1 1 240px;
  min-width: 120px;
  min-height: 38px;
  padding: 7px 11px;
  border: 1px solid var(--border);
  border-radius: calc(var(--radius-sm) - 2px);
  background: var(--panel);
  color: var(--text);
}
.preview-text-toolbar .layui-btn { flex: 0 0 auto; min-height: 38px; }
.preview-text-pre {
  max-height: min(72vh, 680px);
  margin: 0;
  padding: 16px;
  overflow: auto;
  border: 0;
  border-radius: 0;
  background: var(--panel);
  color: var(--text);
  font: 0.8125rem/1.65 "SF Mono", Consolas, "Liberation Mono", monospace;
  tab-size: 2;
  text-align: left;
  white-space: pre;
  overflow-wrap: normal;
}
.preview-text-pre.is-wrapped { white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; }
.preview-text-pre code { display: block; min-width: max-content; color: inherit; font: inherit; }
.preview-text-pre.is-wrapped code { min-width: 0; }
.preview-text-pre .preview-loading { display: block; min-width: 0; padding: 16px 0; }
.preview-text-pre mark {
  padding: 0 2px;
  border-radius: 3px;
  background: color-mix(in srgb, var(--orange) 48%, transparent);
  color: inherit;
}
.preview-search-active .preview-text-pre { scroll-padding: 20px; }

/* 文本分享首屏摘要与展开区：桌面限制高度，手机使用独立高度并允许内部滚动。 */
.text-share-preview { min-width: 0; margin: 0; position: relative; }
/* 分享预览页叠加水印（防截图溯源）：默认斜排平铺，浅色主题深灰字、深色主题浅灰字，不拦截任何交互。
   支持模式变量：--wm-repeat（repeat/no-repeat）、--wm-position（center/right bottom）、--wm-size（瓦片尺寸）。 */
.share-preview-watermark {
  position: absolute; inset: 0; z-index: 5; pointer-events: none; user-select: none; -webkit-user-select: none;
  overflow: hidden; border-radius: inherit;
  background-image: var(--wm-light, none); background-repeat: var(--wm-repeat, repeat); background-position: var(--wm-position, center center); background-size: var(--wm-size, auto);
  opacity: var(--wm-opacity, 0.12);
  mix-blend-mode: var(--wm-blend, normal);
}
[data-theme="dark"] .share-preview-watermark { background-image: var(--wm-dark, var(--wm-light, none)); }
/* 全站水印层：前台所有页面 / 后台管理页整体叠加（fixed 全屏，不拦截交互；低于 toast/弹窗层级） */
.site-watermark-layer {
  position: fixed; inset: 0; z-index: 1050; pointer-events: none; user-select: none; -webkit-user-select: none;
  overflow: hidden;
  background-image: var(--wm-light, none); background-repeat: var(--wm-repeat, repeat); background-position: var(--wm-position, center center); background-size: var(--wm-size, auto);
  opacity: var(--wm-opacity, 0.12);
  mix-blend-mode: var(--wm-blend, normal);
}
[data-theme="dark"] .site-watermark-layer { background-image: var(--wm-dark, var(--wm-light, none)); }
/* 选中文本时暂时隐藏水印层（body.wm-selecting 由渲染端注入的 selectionchange 监听控制） */
body.wm-selecting .share-preview-watermark,
body.wm-selecting .site-watermark-layer { opacity: 0 !important; transition: opacity .12s; }
.text-share-preview-toolbar {
  display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap;
  margin: 0 0 10px; padding: 8px 0;
}
.text-share-preview-toolbar input[type="search"] {
  flex: 1 1 220px; min-width: 140px; min-height: 40px; padding: 8px 11px;
  border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); color: var(--text);
}
.text-share-preview-toolbar .layui-btn { min-height: 40px; }
.text-share-preview-content {
  min-width: 0; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: auto;
  background: var(--panel); color: var(--text);
}
.text-share-preview-content.is-collapsed {
  max-height: var(--text-preview-height, 420px); overflow: auto; position: relative;
}
/* 展开全文后长文本仍在预览框内滚动（页面不被拉长）：限高 + 内部滚动 */
.text-share-preview-content:not(.is-collapsed) {
  max-height: min(72vh, 960px);
}
.text-share-preview-content pre { max-height: none; margin: 0; border: 0; border-radius: 0; }
.text-share-preview-content .preview-truncated { margin: 0; border-radius: 0; border-left: 0; border-right: 0; border-bottom: 0; }
@media (max-width: 768px) {
  .text-share-preview-toolbar { align-items: stretch; justify-content: stretch; }
  .text-share-preview-toolbar input[type="search"], .text-share-preview-toolbar .layui-btn { flex: 1 1 100%; width: 100%; min-height: 44px; }
  .text-share-preview-content.is-collapsed { max-height: var(--text-preview-mobile-height, 320px); }
  .text-share-preview-content:not(.is-collapsed) { max-height: 60vh; }
  .text-share-preview-content pre { font-size: 0.75rem; line-height: 1.6; }
}

/* 预览区域外层工具栏和操作区在窄屏保持可用触控尺寸。 */
.preview-mobile-toolbar { min-width: 0; }
.preview-mobile-toolbar > * { min-width: 0; }
.preview-mobile-toolbar .hint { overflow-wrap: anywhere; word-break: break-word; }

[data-theme="dark"] .preview-surface { background: color-mix(in srgb, var(--panel) 94%, #0b0d12); box-shadow: inset 0 1px 0 rgba(255,255,255,.04); }
[data-theme="dark"] .preview-image-frame { background-color: color-mix(in srgb, var(--bg) 82%, #0b0d12); }
[data-theme="dark"] .preview-document-frame iframe { background: #f7f8fb; }
[data-theme="dark"] .preview-meta-list,
[data-theme="dark"] .preview-entry-table,
[data-theme="dark"] .office-preview,
[data-theme="dark"] .preview-text-pre { background: var(--panel); }
[data-theme="dark"] .preview-meta-list dt,
[data-theme="dark"] .preview-entry-table th,
[data-theme="dark"] .office-preview th { background: color-mix(in srgb, var(--bg) 74%, var(--panel)); }
[data-theme="dark"] .preview-truncated { background: color-mix(in srgb, var(--orange) 12%, var(--panel)); }

@media (max-width: 768px) {
  .preview-surface { margin-bottom: 14px; border-radius: var(--radius-sm); }
  .preview-surface > video { max-height: 58vh; }
  .preview-image-frame { min-height: 140px; max-height: 58vh; padding: 8px; }
  .preview-img { max-height: calc(58vh - 24px); border-radius: calc(var(--radius-sm) - 4px); }
  .preview-img.preview-image-actual { max-width: none; }
  .preview-document-frame { padding: 7px; }
  .preview-document-frame iframe { height: 62vh !important; min-height: 360px; border-radius: calc(var(--radius-sm) - 3px); }
  .preview-document-hint { padding: 8px 2px 1px; font-size: 0.71875rem; }
  .preview-unknown,
  .archive-preview,
  .office-preview,
  .ebook-preview { max-height: none; padding: 14px 12px; }
  .preview-meta-list { grid-template-columns: minmax(72px, 92px) minmax(0, 1fr); margin-top: 10px; }
  .preview-meta-list dt,
  .preview-meta-list dd { padding: 8px 9px; font-size: 0.75rem; }
  .preview-entry-table { min-width: 480px; font-size: 0.75rem; }
  .preview-entry-table th,
  .preview-entry-table td { padding: 8px 8px; }
  .preview-text-toolbar { align-items: stretch; flex-wrap: wrap; justify-content: stretch; padding: 8px; }
  .preview-text-toolbar input[type="search"] { flex: 1 1 100%; width: 100%; min-height: 44px; font-size: 1rem; }
  .preview-text-toolbar .layui-btn { flex: 1 1 120px; min-height: 44px; justify-content: center; }
  .preview-text-pre { max-height: 62vh; padding: 12px; font-size: 0.75rem; line-height: 1.6; }
  .preview-text-pre code { min-width: max-content; }
  .preview-text-pre.is-wrapped code { min-width: 0; }
  .preview-policy-message { min-height: 126px; padding: 22px 14px; }
  .preview-policy-message b { font-size: 0.875rem; }
  .preview-truncated { padding: 9px 10px; font-size: 0.71875rem; }
  .office-preview { font-size: 0.8125rem; }
  .preview-font { padding: 14px 12px; }
  .preview-font-sample { min-height: 78px; font-size: clamp(22px, 8vw, 32px); }
  .office-preview table { min-width: 560px; }
  .office-preview th,
  .office-preview td { padding: 6px 8px; }
  .preview-mobile-toolbar.file-actions { gap: 8px; }
  .preview-mobile-toolbar.file-actions .layui-btn { min-width: 0; }
  .preview-surface.preview-mobile-fullscreen .preview-document-frame iframe { height: 70vh !important; }
}
@media (max-width: 420px) {
  .preview-meta-list { grid-template-columns: 78px minmax(0, 1fr); }
  .preview-entry-table { min-width: 430px; }
  .preview-text-toolbar .layui-btn { flex-basis: 100%; }
  .preview-document-frame iframe { min-height: 300px; }
}
@media (prefers-reduced-motion: reduce) {
  .preview-img,
  .preview-surface,
  .preview-text-pre mark { transition: none !important; animation: none !important; }
}

/* 热门文件排行 */
.hot-list { display: flex; flex-direction: column; }
.hot-item { display: flex; align-items: center; gap: 12px; padding: 11px 4px; border-bottom: 1px dashed var(--border); transition: background .15s; border-radius: calc(var(--radius-sm) - 2px); }
.hot-item:hover { background: var(--bg); }
.hot-item:last-child { border-bottom: none; }
.hot-rank {
  /* ⚠️ 原为固定 `height:26px; line-height:1.625rem` —— 行高是 rem，随「全站字号比例」
     放大（120% 时 1.625rem=31.2px）会超过 26px 盒高，数字被挤出/偏移。
     改用 flex 居中，与字号比例解耦。 */
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; text-align: center; border-radius: calc(var(--radius-sm) - 2px);
  background: var(--border); color: var(--muted); font-size: 0.8125rem; font-weight: 700; flex-shrink: 0;
}
.hot-rank.top { color: #fff; background: linear-gradient(135deg, #ff7d52, #ef5350); box-shadow: 0 2px 6px rgba(239,83,80,.35); }
.hot-name { flex: 1; font-size: 0.875rem; }
.hot-count { color: var(--muted); font-size: 0.8125rem; white-space: nowrap; }

/* 邮箱推送分享 */
.email-share { display: flex; gap: 10px; max-width: 520px; margin: 0 auto; }
.email-share input { flex: 1; }

/* 用户中心存储配额可视化 */
.quota-bar-wrap {
  position: relative; margin-top: 14px; height: 22px; border-radius: 999px;
  background: var(--bg); border: 1px solid var(--border); overflow: hidden;
}
.quota-bar {
  height: 100%; min-width: 6px; border-radius: 999px; transition: width .4s ease;
  background: linear-gradient(90deg, var(--grad-a), var(--grad-b));
}
.quota-bar.quota-warn { background: linear-gradient(90deg, #f59e0b, #f97316); }
.quota-bar.quota-danger { background: linear-gradient(90deg, #ef5350, #e11d48); }
.quota-text {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-size: 0.75rem; color: var(--text); text-shadow: 0 1px 2px rgba(255,255,255,.4); pointer-events: none;
}
[data-theme="dark"] .quota-text { text-shadow: 0 1px 2px rgba(0,0,0,.55); }

/* 剩余下载/查看次数进度条（提取页） */
.limit-meter {
  position: relative; margin-top: 10px; max-width: 420px; height: 22px;
  border-radius: 999px; background: var(--bg); border: 1px solid var(--border); overflow: hidden;
}
.limit-meter-center { margin-left: auto; margin-right: auto; }
.limit-meter-bar {
  height: 100%; min-width: 6px; border-radius: 999px; transition: width .4s ease;
  background: linear-gradient(90deg, var(--grad-a), var(--grad-b));
}
.limit-meter-bar.meter-warn { background: linear-gradient(90deg, #f59e0b, #f97316); }
.limit-meter-bar.meter-danger { background: linear-gradient(90deg, #ef5350, #e11d48); }
.limit-meter span {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-size: 0.75rem; color: var(--text); text-shadow: 0 1px 2px rgba(255,255,255,.4); pointer-events: none;
}
[data-theme="dark"] .limit-meter span { text-shadow: 0 1px 2px rgba(0,0,0,.55); }

/* 预览加载骨架屏 */
.preview-loading { padding: 46px 20px; text-align: center; color: var(--muted); font-size: 0.8125rem; }
.skeleton {
  margin: 0 auto 14px; max-width: 520px;
}
.skeleton i {
  display: block; height: 13px; border-radius: calc(var(--radius-sm) - 3px); margin: 0 auto 9px;
  background: linear-gradient(90deg, var(--border) 25%, color-mix(in srgb, var(--muted) 18%, var(--border)) 37%, var(--border) 63%);
  background-size: 400% 100%; animation: skeletonShimmer 1.3s ease infinite;
}
@keyframes skeletonShimmer { from { background-position: 100% 0; } to { background-position: -100% 0; } }

/* 提取码单元格 */
.code-cell { font-weight: 700; color: var(--primary); letter-spacing: 1px; font-family: "SF Mono", Consolas, monospace; }

/* 提取码链接（短链 /前缀/提取码 或 s.php?code=）：窄屏允许折行避免横向溢出 */
a.code-cell, td a.link { overflow-wrap: anywhere; word-break: break-word; }

/* 分页 */
.pagination { display: flex; gap: 6px; justify-content: center; margin-top: 18px; flex-wrap: wrap; }
.page { padding: 7px 14px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 5px); font-size: 0.8125rem; color: var(--muted); background: var(--panel); transition: all .15s; }
.page:hover { border-color: var(--primary); color: var(--primary); transform: translateY(-1px); }
.page.on { background: linear-gradient(135deg, var(--grad-a), var(--grad-b)); color: #fff; border-color: transparent; box-shadow: 0 3px 8px color-mix(in srgb, var(--primary) 30%, transparent); font-weight: 600; }

/* 顶部主题按钮 + 右侧悬浮返回顶部按钮 */
.theme-toggle {
  min-height: 40px; padding: 0 12px; display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  border: 1px solid var(--border); border-radius: calc(var(--radius) - 5px); background: transparent; color: var(--text);
  cursor: pointer; font: inherit; font-size: 0.8125rem; line-height: 1; transition: color .15s, border-color .15s, background .15s;
  touch-action: manipulation;
}
.theme-toggle:hover { border-color: var(--primary); color: var(--primary); background: color-mix(in srgb, var(--primary) 8%, transparent); }
.theme-toggle:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 35%, transparent); outline-offset: 2px; }
#floatButtons { position: fixed; right: 24px; bottom: calc(24px + env(safe-area-inset-bottom)); z-index: 1100; pointer-events: none; }
#floatButtons.is-custom { pointer-events: auto; }
#floatButtons.is-dragging { z-index: 1300; }
.float-btn {
  position: relative; right: auto; width: 46px; height: 46px; pointer-events: auto;
  border-radius: 50%; border: 1px solid var(--border);
  background: var(--panel); color: var(--text);
  cursor: grab; display: flex; align-items: center; justify-content: center;
  box-shadow: 0 2px 8px rgba(0,0,0,.12); z-index: 1100;
  transition: color .15s, border-color .15s, background .15s, transform .15s, box-shadow .15s;
  padding: 0; touch-action: none; user-select: none;
}
.float-btn:hover { border-color: var(--primary); color: var(--primary); transform: translateY(-1px); }
.float-btn:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 35%, transparent); outline-offset: 2px; }
.float-btn.is-dragging, #floatButtons.is-dragging .float-btn { cursor: grabbing; transform: scale(1.06); box-shadow: 0 10px 24px rgba(15,23,42,.22); }
.back-top { display: none; }
.toast { position:fixed; left:50%; bottom:calc(96px + env(safe-area-inset-bottom)); transform:translate(-50%, 12px); z-index:3000; opacity:0; pointer-events:none; width:max-content; max-width:min(92vw, 480px); padding:12px 18px; border-radius:calc(var(--radius) - 2px); background:color-mix(in srgb, var(--text) 92%, transparent); color:var(--panel); border:1px solid color-mix(in srgb, var(--panel) 18%, transparent); box-shadow:0 12px 32px rgba(0,0,0,.22); -webkit-backdrop-filter:blur(10px); backdrop-filter:blur(10px); transition:opacity .22s var(--ease-smooth), transform .22s var(--ease-smooth); text-align:center; text-wrap:balance; line-height:1.45; }
.toast.show { opacity:1; transform:translate(-50%, 0); }
.toast-success { background:var(--green); color:#fff; }
.toast-error { background:var(--red); color:#fff; }

/* 图片 lightbox（点击放大） */
.lightbox { position: fixed; inset: 0; background: rgba(0,0,0,.88); z-index: 2000; display: flex; align-items: center; justify-content: center; cursor: zoom-out; animation: fadeIn .2s ease; }
.lightbox img { max-width: 92vw; max-height: 92vh; transition: transform .15s; cursor: zoom-in; }
.lightbox-close { position: absolute; top: 18px; right: 28px; font-size: 2.5rem; color: #fff; cursor: pointer; line-height: 1; }
.lightbox-hint { position: absolute; bottom: 18px; left: 50%; transform: translateX(-50%); color: rgba(255,255,255,.7); font-size: 0.75rem; white-space: nowrap; }

/* 上传队列取消按钮 */
.q-cancel { display: inline-flex; align-items: center; justify-content: center; margin-left: 10px; width: 22px; height: 22px; border: none; border-radius: 50%; background: var(--border); color: var(--muted); cursor: pointer; font-size: 0.875rem; flex-shrink: 0; }
.q-cancel:hover { background: var(--red); color: #fff; }
.queue-item.upload-done { border-left: 3px solid var(--green); }
.queue-item .q-copy[hidden] { display: none; }
@media (max-width:768px) {
  .user-create-form .grid2, .user-edit-form .grid2 { grid-template-columns: 1fr; }
  .user-create-form .layui-btn, .user-edit-form .layui-btn, .user-email-actions .layui-btn { width: 100%; min-height: 46px; }
  .user-import-grid { grid-template-columns: 1fr; gap: 10px; }
  .user-import-actions { display: grid; grid-template-columns: 1fr; gap: 8px; }
  .user-import-actions .layui-btn { width: 100%; min-height: 46px; }
  .user-import-preview-table { min-width: 760px; }
  .user-email-actions { flex-direction: column; gap: 8px; }
  .user-email-actions form { width: 100%; }
  .registration-recovery-toggle { margin-bottom: 0; }
  .queue-restore-notice { align-items: stretch; }
  .queue-restore-copy { flex-basis: 100%; flex-direction: column; gap: 3px; }
  .queue-restore-actions { width: 100%; }
  .queue-restore-actions .layui-btn { flex: 1 1 0; min-height: 44px; }
  .queue-item { flex-wrap: wrap; }
  .q-progress-wrap { flex: 1 1 100% !important; order: 5; min-width: 0; }
  .queue-item .qname { flex-basis: calc(100% - 42px); max-width: 100%; white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; word-break: break-word; }
  .queue-item .qinfo { flex: 1 1 100%; min-width: 0; order: 6; text-align: left; }
  .q-edit, .q-copy, .q-retry { min-height: 44px; }
  .upload-queue-toolbar { align-items: stretch; }
  .queue-toolbar-meta { width: 100%; justify-content: space-between; }
  .queue-summary { flex: 1 1 100%; line-height: 1.45; }
  .upload-queue-actions { width: 100%; }
  .upload-queue-actions .layui-btn { flex: 1 1 120px; min-height: 44px; }
  .smtp-test-row { grid-template-columns: 1fr; }
  .smtp-test-action { align-items: stretch; }
  .smtp-test-action .layui-btn { width: 100%; min-height: 44px; }
}
.q-edit { white-space: nowrap; }
.q-retry { min-height: 44px; padding: 8px 12px; border: 1px solid var(--primary); border-radius: calc(var(--radius-sm) - 2px); color: var(--primary); background: transparent; cursor: pointer; touch-action: manipulation; }
.q-retry:hover { background: color-mix(in srgb, var(--primary) 8%, transparent); }
.share-copy-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 7px; }
.share-copy-actions .layui-btn { min-height: 36px; padding: 6px 10px; }
.share-bulk-toolbar button:disabled { opacity: .55; cursor: not-allowed; }
.message-head-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }
.message-export-form { margin: 0; }
@media (max-width:768px) {
  .share-bulk-toolbar { align-items: stretch; gap: 8px; margin-top: 0; }
  .share-bulk-toolbar .checkbox { flex: 1 1 100%; }
  .share-bulk-toolbar .hint { flex: 1 1 auto; margin-right: 0; align-self: center; }
  .share-bulk-toolbar .layui-btn { flex: 1 1 150px; }
  .code-bulk-toolbar { align-items: stretch; gap: 8px; margin-top: 0; }
  .code-bulk-toolbar .checkbox { flex: 1 1 100%; }
  .code-bulk-toolbar .hint { flex: 1 1 auto; margin-right: 0; align-self: center; }
  .code-bulk-toolbar .layui-btn { flex: 1 1 150px; }
  .share-copy-actions { width: 100%; }
  .share-copy-actions .layui-btn { flex: 1 1 110px; min-height: 44px; }
  .message-head-actions { width: 100%; justify-content: stretch; }
  .message-head-actions .hint { flex: 1 1 100%; }
  .message-export-form, .message-export-form .layui-btn { width: 100%; }
  .message-export-form .layui-btn { min-height: 44px; }
}

/* 用户中心导航项目较多，空间不足时提前切换为折叠菜单。 */
@media (max-width:1180px) {
  .topbar-inner { position: relative; height: auto; min-height: 62px; flex-wrap: wrap; padding-top: 6px; padding-bottom: 6px; }
  .topbar-inner .logo { order: 1; margin-right: auto; }
  .topbar-actions { order: 2; margin-left: auto; }
  .topbar-inner > .theme-toggle, .nav-toggle { order: 2; }
  .nav-toggle { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 44px; }
  .topbar-inner .topnav { display: none; flex: 1 1 100%; width: 100%; order: 3; padding: 8px 0 4px; border-top: 1px solid var(--border); overflow: visible; justify-content: flex-start; }
  .topbar-inner .topnav.mobile-open { display: flex; flex-direction: column; align-items: stretch; gap: 2px; max-height: 70vh; overflow-y: auto; overscroll-behavior: contain; }
  .topbar-inner .topnav.mobile-open a { width: 100%; min-width: 0; min-height: 44px; padding: 8px 12px; overflow: visible; }
  .topbar-inner .topnav.mobile-open a.nav-has-unread, .topbar-inner .topnav.mobile-open a:has(.nav-unread-badge) { padding-right: 28px; }
  .topbar-inner .topnav.mobile-open .theme-toggle { width: 100%; min-height: 44px; justify-content: flex-start; }
  .topbar-inner.nav-open .topbar-actions { width: 100%; order: 4; flex-wrap: wrap; padding-top: 4px; }
  .topbar-inner.nav-open .topbar-login,
  .topbar-inner.nav-open .topbar-register,
  .topbar-inner.nav-open .topbar-logout,
  .topbar-inner.nav-open .topbar-user,
  .topbar-inner.nav-open .user-account-chip { width: 100%; justify-content: flex-start; }
  .topbar-inner.nav-open .user-account-toggle { width: 100%; overflow: visible; }
  .topnav-more, .topnav-more.is-visible { display: none !important; }
  .topnav a.is-overflow, .topnav .theme-toggle.is-overflow { display: inline-flex !important; }
}

/* 响应式 */
@media (max-width:768px) {
  .home-page .home-wide-toggle, .user-page .home-wide-toggle { display:none; }
  .container { padding: 0 14px; }
  .topbar-inner { height: auto; min-height: 54px; }
  .logo { font-size: 1.0625rem; }
  .topnav { flex: 1 1 100%; overflow-x: auto; gap: 2px; justify-content: flex-start; -webkit-overflow-scrolling: touch; }
  .topnav a { font-size: 0.8125rem; min-height: 44px; display: inline-flex; align-items: center; white-space: nowrap; }
  .message-toolbar { align-items: stretch; }
  .message-toolbar .checkbox,
  .message-toolbar .layui-btn,
  .message-actions .layui-btn { min-height: 48px; }
  .share-bulk-toolbar .checkbox,
  .share-bulk-toolbar .layui-btn,
  .code-bulk-toolbar .checkbox,
  .code-bulk-toolbar .layui-btn { min-height: 48px; }
  .hero { padding: 34px 0 24px; }
  .hero h1 { font-size: 1.5625rem; }
  .hero .sub { font-size: 0.875rem; }
  /* 普通布局网格单列；带表单控件的网格（如文件筛选）保持两列紧凑排布 */
  .grid { grid-template-columns: 1fr; }
  form.grid2 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  form.grid2 > div { min-width: 0; }
  form.grid2 label { font-size: 0.75rem; margin-bottom: 4px; }
  form.grid2 input, form.grid2 select { min-height: 44px; font-size: 0.875rem; }
  @media (max-width: 360px) {
    form.grid2 { grid-template-columns: 1fr; }
  }
  .stats-row { grid-template-columns: repeat(2, 1fr); gap: 12px; }
  .panel { padding: 16px; border-radius: calc(var(--radius) - 2px); }
  .big-code { font-size: 1.875rem; letter-spacing: 2px; }
  .result-link { flex-direction: column; }
  .email-share { flex-direction: column; }
  .file-head { flex-direction: column; text-align: center; }
  .file-actions { flex-wrap: wrap; }
  .file-info h2 { font-size: 1.0625rem; }
  .batch-bar, .search-bar { flex-wrap: wrap; }
  .batch-bar { position: sticky; bottom: calc(66px + env(safe-area-inset-bottom)); z-index: 10; box-shadow: 0 4px 18px rgba(0,0,0,.08); }
  .batch-bar select { flex: 0 1 auto; width: auto !important; max-width: 48%; }
  .batch-bar input:not([type=checkbox]):not([type=radio]) { flex: 1 1 120px; width: auto !important; min-width: 0; }
  .batch-bar .layui-btn { flex: 1 1 140px; min-width: 0; }
  .batch-bar .layui-btn { display: inline-flex; align-items: center; justify-content: center; }
  .batch-bar .batch-select-all { flex: 1 1 100%; min-height: 48px; }
  .home-page .text-workbench-head { flex-direction: column; align-items: stretch; }
  .home-page .text-workbench-tools { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .home-page .text-workbench-tools .layui-btn,
  .home-page .share-detail-actions .layui-btn { min-height: 48px; width: 100%; }
  .admin-page .admin-batch-toolbar .checkbox,
  .admin-page .admin-batch-toolbar .layui-btn,
  .admin-page .admin-batch-toolbar select,
  .admin-page .batch-bar .checkbox,
  .admin-page .batch-bar .layui-btn,
  .admin-page .batch-bar select { min-height: 48px; }
  .batch-count { flex: 1 1 100%; text-align: center; }
  .batch-option-field { flex: 1 1 100%; align-items: stretch; flex-direction: column; gap: 4px; }
  .batch-option-field input, .batch-option-field select { width: 100% !important; max-width: none; }
  /* 筛选/搜索栏由上方紧凑网格统一控制，此处仅做圆角微调，不再整行拉伸 */
  .search-bar select { border-radius: calc(var(--radius) - 2px); }
  .search-bar > input[type=text]:first-child,
  .search-bar > input[type=search]:first-child { border-radius: calc(var(--radius) - 2px); }
  .search-bar .input-wrap, .filter .input-wrap, .message-filter .input-wrap, .logs-filter .input-wrap { flex: 1 1 100%; min-width: 0; }
  .input-clear { width: 36px; height: 36px; right: 4px; }
  .input-clear.pw-toggle { width: 40px; height: 40px; }
  input[type=file] { padding: 10px; }
  input[type=file]::file-selector-button,
  input[type=file]::-webkit-file-upload-button { display: block; width: 100%; max-width: 100%; margin: 0 0 8px; white-space: nowrap; text-overflow: ellipsis; }
  .logs-filter > input[type=text], .logs-filter > input[type=number], .logs-filter select, .logs-filter .date-field, .logs-filter .layui-btn { flex: 1 1 140px; width: auto; min-width: 0; }
  .logs-filter > input[type=text] { flex-basis: 100%; }
  .logs-filter .date-field input { min-height: 44px; }
  .logs-actions { justify-content: stretch; }
  .logs-actions .layui-btn { width: 100%; }
  .panel-head { flex-direction: column; gap: 10px; align-items: flex-start; }
  .panel-head-actions { width: 100%; justify-content: stretch; }
  .panel-head-actions .layui-btn { flex: 1 1 140px; min-height: 44px; text-align: center; }
  .settings-search-panel { position: static; }
  .code-form { max-width: 100%; }
  .code-form-hint { display: none; }
  .code-form input { font-size: 1rem; } /* 16px 以上可避免 iOS 聚焦自动放大 */
  .dropzone { padding: 24px; }
  .ellipsis { max-width: 140px; }
  .theme-toggle { min-height: 44px; padding: 0 10px; }
  #floatButtons { right: 14px; bottom: calc(16px + env(safe-area-inset-bottom)); }
  .float-btn { width: 46px; height: 46px; }
  .layui-btn, .tab, .page, .chip { min-height: 44px; }
  .admin-reset-form { display: flex !important; flex-wrap: wrap; margin-top: 4px; }
  .admin-reset-form input { flex: 1 1 140px; width: auto; min-width: 0; min-height: 44px; }
  .admin-level-form { display: flex !important; flex-wrap: wrap; margin-top: 4px; }
  .admin-level-form select, .admin-level-form input { flex: 1 1 120px; width: auto; min-width: 0; min-height: 44px; }
  .tab { padding: 10px 14px; }
  .code-form, .search-bar, .result-link, .email-share, .sms-row { gap: 8px; }
  .nav-toggle { display:inline-flex; align-items:center; justify-content:center; order:2; }
  .topbar-inner { position:relative; flex-wrap:wrap; }
  .mobile-auth-actions { display: flex; align-items: center; gap: 2px; margin-left: auto; order: 2; }
  .topnav { display:none; width:100%; order:3; padding:8px 0; border-top:1px solid var(--border); }
  .topnav.mobile-open { display:flex; flex-direction:column; align-items:stretch; gap:0; max-height:70vh; overflow-y:auto; }
  .topnav.mobile-open a { width:100%; padding:8px 4px; }
  .message-actions { width: 100%; }
  .message-actions .layui-btn { flex: 1 1 140px; }
  .message-filter { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .message-category-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .message-category-summary-item { min-height: 44px; }
  .message-filter input[type=search], .message-filter input[type=text] { grid-column: 1 / -1; }
  .message-filter input, .message-filter select, .message-filter .layui-btn { width: 100%; min-width: 0; min-height: 44px; }
  .message-date-field { display: flex; flex-direction: column; align-items: stretch; gap: 3px; font-size: 0.75rem; }
  .message-date-field input { width: 100%; min-height: 44px; }
  .message-filter .layui-btn { white-space: normal; padding-left: 14px; padding-right: 14px; }
  .message-pager { justify-content: stretch; }
  .message-pager .layui-btn { flex: 1 1 130px; text-align: center; }
  .message-pager .hint { width: 100%; text-align: center; }
  .msg-head { gap: 8px; align-items: flex-start; }
  .msg-head time { font-size: 0.6875rem; margin-top: 2px; }
  .msg-selected-count { margin-left: 0; flex: 1 1 100%; }
  .msg-body-actions { flex-wrap: wrap; }
  .msg-body-actions .layui-btn { flex: 1 1 140px; min-height: 40px; text-align: center; }
  .admin-user-pager { justify-content: stretch; }
  .admin-user-pager .layui-btn { flex: 1 1 130px; text-align: center; }
  .admin-user-pager .hint { width: 100%; text-align: center; }
  .admin-share-pager { justify-content: stretch; }
  .admin-share-pager .layui-btn { flex: 1 1 130px; text-align: center; }
  .admin-share-pager .hint { width: 100%; text-align: center; }
  .admin-file-pager { justify-content: stretch; }
  .admin-file-pager .layui-btn { flex: 1 1 130px; text-align: center; }
  .admin-file-pager .hint { width: 100%; text-align: center; }
  .user-share-pager { justify-content: stretch; }
  .user-share-pager .layui-btn { flex: 1 1 130px; text-align: center; }
  .user-share-pager .hint { width: 100%; text-align: center; }
  .user-code-pager { justify-content: stretch; }
  .user-code-pager .layui-btn { flex: 1 1 130px; text-align: center; }
  .user-code-pager .hint { width: 100%; text-align: center; }
  .user-resource-pager { justify-content: stretch; }
  .user-resource-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .user-resource-pager .hint { width: 100%; text-align: center; }
  .admin-announcement-pager { justify-content: stretch; }
  .admin-announcement-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-announcement-pager .hint { width: 100%; text-align: center; }
  .admin-blacklist-pager { justify-content: stretch; }
  .admin-blacklist-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-blacklist-pager .hint { width: 100%; text-align: center; }
  .admin-sensitive-pager { justify-content: stretch; }
  .admin-sensitive-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-sensitive-pager .hint { width: 100%; text-align: center; }
  .user-trash-pager { justify-content: stretch; }
  .user-trash-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .user-trash-pager .hint { width: 100%; text-align: center; }
  .admin-access-frequency-pager { justify-content: stretch; }
  .admin-access-frequency-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-access-frequency-pager .hint { width: 100%; text-align: center; }
  .admin-message-batch-pager { justify-content: stretch; }
  .admin-message-batch-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-message-batch-pager .hint { width: 100%; text-align: center; }
  .admin-api-key-pager { justify-content: stretch; }
  .admin-api-key-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-api-key-pager .hint { width: 100%; text-align: center; }
  .admin-banner-pager { justify-content: stretch; }
  .admin-banner-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-banner-pager .hint { width: 100%; text-align: center; }
  .admin-security-event-pager { justify-content: stretch; }
  .admin-security-event-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-security-event-pager .hint { width: 100%; text-align: center; }
  .admin-login-attempt-pager { justify-content: stretch; }
  .admin-login-attempt-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-login-attempt-pager .hint { width: 100%; text-align: center; }
  .admin-upload-scan-pager, .admin-hotlink-event-pager { justify-content: stretch; }
  .admin-upload-scan-pager .layui-btn, .admin-hotlink-event-pager .layui-btn { flex: 1 1 130px; text-align: center; min-height: 44px; }
  .admin-upload-scan-pager .hint, .admin-hotlink-event-pager .hint { width: 100%; text-align: center; }
  .security-login-filter input, .security-login-filter select, .security-login-filter .layui-btn,
  .security-scan-filter input, .security-scan-filter select, .security-scan-filter .layui-btn,
  .security-hotlink-filter input, .security-hotlink-filter .layui-btn { flex:1 1 150px; min-width:0; }
  .security-blacklist-filter input, .security-blacklist-filter .layui-btn, .folder-search input, .folder-search .layui-btn, .folder-create input, .folder-create select, .folder-create .layui-btn { flex:1 1 150px; min-width:0; width:100%; }
  .apikey-quota-form { width:100%; margin: 4px 0; }
  .apikey-quota-form input { flex: 1 1 120px; width: auto; min-width: 0; min-height: 44px; }
  .apikey-quota-form .link { min-height: 44px; }
  .apikey-filter { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
  .apikey-filter input[type=search] { grid-column:1 / -1; width:100%; min-width:0; }
  .apikey-filter select, .apikey-filter .layui-btn { width:100%; min-width:0; min-height:44px; }
  .apikey-filter .layui-btn { display:flex; align-items:center; justify-content:center; }
  .apikey-batch-toolbar { align-items:stretch; flex-direction:column; }
  .apikey-batch-toolbar .hint { margin-right:0; text-align:center; }
  .apikey-batch-toolbar .layui-btn { width:100%; min-height:44px; justify-content:center; }
  .apikey-usage { min-width:0; width:100%; }
  .apikey-permission-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px; }
  .apikey-permission-grid .checkbox { min-height:44px; }
  .apikey-policy-form { min-width:0; max-width:none; }
  .apikey-policy-form input, .apikey-policy-form select, .apikey-policy-form textarea { min-height:44px; }
  .apikey-policy-form .layui-btn { min-height:44px; width:100%; justify-content:center; }
  .folder-actions, .folder-actions .inline-form { width:100%; flex-direction:column; align-items:stretch; }
  .folder-actions input, .folder-actions select, .folder-actions .layui-btn { width:100%; max-width:none; min-height:44px; }
  .user-folder-pager { justify-content:stretch; }
  .breadcrumb { flex-direction: column; align-items: flex-start; gap: 4px; padding: 10px 12px; }
  .breadcrumb .crumb-view { margin-left: 0; width: 100%; justify-content: center; min-height: 44px; }
  /* 回收站：筛选栏纵向，类型选择与按钮全宽 */
  .trash-filter select, .trash-filter .layui-btn { width: 100%; min-height: 46px; }
  /* 提取码记录：筛选栏纵向全宽 */
  .code-filter { flex-direction: column; align-items: stretch; }
  .code-filter input, .code-filter select, .code-filter .layui-btn { width: 100%; min-height: 46px; }
  .user-folder-pager .layui-btn { flex:1 1 130px; text-align:center; min-height:44px; }
  .user-folder-pager .hint { width:100%; text-align:center; }
  .zip-item { align-items: flex-start; flex-wrap: wrap; }
  .zip-item .checkbox { min-height: 48px; }
  .zip-item .layui-btn { min-height: 48px; }
  .zip-item .zname { flex: 1 1 100%; min-width: 0; }
  /* 本机提取码历史：窄屏纵向堆叠，操作按钮全宽 */
  .history-item { flex-direction: column; align-items: stretch; }
  .history-item .h-info .hint { white-space: normal; overflow-wrap: anywhere; }
  .history-item .h-actions { display: flex; gap: 8px; }
  .history-item .h-actions .layui-btn, .history-item .h-actions a { flex: 1; justify-content: center; text-align: center; min-height: 44px; }
  .home-pin-item { flex-wrap: wrap; align-items: center; }
  .home-pin-item .home-pin-name { flex: 1 1 100%; white-space: normal; overflow-wrap: anywhere; }
  .home-pin-item .layui-btn, .home-pin-item a.layui-btn { min-height: 44px; }
  .text-meta { flex-wrap: wrap; }
  .result-code { flex-direction: column; }
  /* 提取页：次数进度条与骨架屏在窄屏铺满 */
  .limit-meter { max-width: 100%; }
  .skeleton i { height: 12px; }
  .preview-loading { padding: 30px 14px; }
  .mobile-bottom-nav {
    position: fixed;
    display: flex;
    left: 10px;
    right: 10px;
    bottom: max(8px, env(safe-area-inset-bottom));
    z-index: 1200;
    min-height: 56px;
    padding: 4px;
    justify-content: space-around;
    gap: 3px;
    background: color-mix(in srgb, var(--bg) 55%, transparent);
    -webkit-backdrop-filter: blur(18px);
    backdrop-filter: blur(18px);
    border: 1px solid color-mix(in srgb, var(--border) 42%, transparent);
    border-radius: calc(var(--radius-lg) - 2px);
    box-shadow: none;
  }
  .mobile-bottom-nav a {
    position: relative;
    flex: 1 1 0;
    min-width: 0;
    min-height: 48px;
    padding: 5px 3px 4px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 2px;
    border-radius: var(--radius);
    color: var(--muted);
    font-size: 0.6875rem;
    line-height: 1.2;
    touch-action: manipulation;
    font-weight: 600;
    transition: color .2s var(--ease-smooth), background .2s var(--ease-smooth), transform .2s var(--ease-smooth);
  }
  .mobile-bottom-nav a:active { transform: scale(0.96); }
  .mobile-bottom-nav a.active {
    color: var(--primary);
    background: color-mix(in srgb, var(--primary) 14%, transparent);
    font-weight: 750;
  }
  .mobile-bottom-nav a.active::before {
    content: '';
    position: absolute;
    top: 4px;
    width: 12px;
    height: 3px;
    border-radius: 999px;
    background: var(--primary);
  }
  .mobile-nav-icon {
    position: relative;
    display: inline-flex;
    width: 22px;
    height: 22px;
    align-items: center;
    justify-content: center;
  }
  .mobile-nav-label {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .mobile-nav-badge {
    position: absolute;
    top: -5px;
    right: -8px;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    margin: 0;
    pointer-events: none;
    background: var(--red);
    color: #fff;
    font-size: 0.625rem;
    font-weight: 800;
    line-height: 1.125rem;
    border-radius: 999px;
    text-align: center;
    box-shadow: 0 2px 6px rgba(220,38,38,.4);
  }
  .mobile-bottom-nav svg {
    width: 20px;
    height: 20px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
  }
  body.has-mobile-bottom-nav {
    padding-bottom: calc(76px + env(safe-area-inset-bottom));
  }
  body.has-mobile-bottom-nav .site-footer {
    padding-bottom: 8px;
  }
}
@media (max-width: 480px) {
  .topbar-inner > .theme-toggle { width: 44px; padding: 0; }
  .topbar-inner > .theme-toggle span { display: none; }
  .mobile-auth-link { padding: 0 8px; font-size: 0.8125rem; }
  .topnav { gap: 8px; }
  .hero h1 { font-size: 1.375rem; }
  .big-code { font-size: 1.875rem; letter-spacing: 5px; }
  .big-code-btn { padding: 4px 6px; margin: -4px -6px; }
  .result-code { padding: 12px 24px; min-width: 0; gap: 10px; }
  .batch-bar { gap: 8px; padding: 10px; }
  .batch-bar .layui-btn { flex: 1 1 calc(50% - 8px); min-height: 44px; }
  .batch-bar select { max-width: 100%; flex: 0 1 auto; }
  .ops { min-width: 150px; }
  .user-resource-table { display: block; width: 100%; }
  .user-resource-table thead { display: none; }
  .user-resource-table tbody, .user-resource-table tr, .user-resource-table td { display: block; width: 100%; }
  .user-resource-table tbody tr:not(.empty-row) { margin: 0 0 12px; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--panel); box-shadow: 0 3px 12px rgba(31,37,51,.06); animation: fadeIn .25s ease both; }
  .user-resource-table tbody tr:not(.empty-row) td { min-height: 34px; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 7px 0; border: 0; text-align: right; }
  .user-resource-table tbody tr:not(.empty-row) td::before { content: attr(data-label); flex: 0 0 auto; color: var(--muted); font-size: 0.75rem; text-align: left; }
  .user-resource-table tbody tr:not(.empty-row) td:first-child { justify-content: flex-start; min-height: 44px; padding-top: 2px; }
  .user-resource-table tbody tr:not(.empty-row) td:first-child::before { margin-right: 8px; }
  .user-resource-table tbody tr:not(.empty-row) td:nth-child(2) { display: block; text-align: left; padding: 10px 0; border-bottom: 1px solid var(--border); font-weight: 600; }
  .user-resource-table tbody tr:not(.empty-row) td:nth-child(2)::before { display: block; margin-bottom: 3px; }
  .user-resource-table tbody tr.empty-row td { display: block; }
  .user-resource-table .ellipsis { max-width: none; white-space: normal; overflow-wrap: anywhere; }
  .favorite-toggle { min-width: 44px; min-height: 44px; }
  .favorite-cell-tools { flex-direction: row; min-width: 0; }
  .favorite-cell-tools .favorite-group-select { max-width: 44vw; }
  .favorite-group-panel .favorite-group-create { flex-direction: column; align-items: stretch; }
  .favorite-group-create input[type="text"], .favorite-group-create select, .favorite-group-create .layui-btn { width: 100%; }
  .favorite-group-item .layui-btn { flex: 1 1 auto; min-height: 44px; }
  .resource-tag-list { width: 100%; }
  .resource-tag { max-width: 100%; }
  .batch-tag-field, .batch-tag-field input { width: 100%; }
  .duplicate-banner { align-items: stretch; flex-direction: column; padding: 13px; }
  .duplicate-actions, .duplicate-actions form { width: 100%; align-items: stretch; }
  .duplicate-actions .layui-btn, .duplicate-actions form .layui-btn { width: 100%; min-height: 44px; }
  .share-health { display: inline-flex; align-items: center; min-height: 32px; }
  .share-policy-badges { min-width:0; gap:3px; }
  .share-policy-badges .badge { font-size:0.625rem; }
  .dz-icon { font-size: 2rem; }
  .file-icon { font-size: 2.25rem; }
}

/* API 密钥详情与调用摘要：单项信息卡片、调用明细及手机端卡片布局（2026-08-30 16:29:29） */
.apikey-detail{min-width:0}
.apikey-detail-header{align-items:flex-start;gap:16px}
.apikey-detail-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;flex-shrink:0}
.apikey-detail-actions .layui-btn{white-space: normal}
.apikey-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}
.apikey-detail-item{display:flex;flex-direction:column;gap:6px;min-width:0;padding:12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft,#f8fafc)}
.apikey-detail-item>span{color:var(--muted);font-size:0.75rem}
.apikey-detail-item>strong,.apikey-detail-item>code{font-size:0.875rem;overflow-wrap:anywhere;word-break:break-word}
.apikey-detail-wide{grid-column:1/-1}
.apikey-detail-break{white-space:pre-wrap;overflow-wrap:anywhere}
.apikey-detail-pre{margin:0;max-height:180px;overflow:auto;white-space:pre-wrap;word-break:break-word;font:inherit;font-size:0.8125rem;line-height:1.6}
.apikey-detail-tags{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.apikey-detail-usage{min-width:0}
.apikey-detail-usage .panel-head{align-items:flex-start;gap:16px}
.apikey-detail-range{display:flex;align-items:center;gap:8px;margin:0;flex-wrap:wrap}
.apikey-detail-range select{min-height:38px;min-width:150px}
.apikey-detail-stats{grid-template-columns:repeat(5,minmax(0,1fr));margin:14px 0}
.apikey-detail-usage-table{min-width:980px}
.apikey-detail-usage-table td{vertical-align:top;word-break:break-word}
.apikey-detail-usage-table code{overflow-wrap:anywhere}

@media(max-width:720px){
  .apikey-detail-header,.apikey-detail-usage .panel-head{display:block}
  .apikey-detail-actions{margin-top:12px;display:grid;grid-template-columns:1fr}
  .apikey-detail-actions .layui-btn{width:100%;min-height:44px;justify-content:center}
  .apikey-detail-grid{grid-template-columns:1fr;gap:10px}
  .apikey-detail-wide{grid-column:auto}
  .apikey-detail-range{margin-top:12px;display:grid;grid-template-columns:1fr}
  .apikey-detail-range select,.apikey-detail-range .layui-btn{width:100%;min-height:44px}
  .apikey-detail-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .apikey-detail-stats .stat:last-child{grid-column:1/-1}
  .apikey-detail-usage-table{min-width:0;width:100%;display:block}
  .apikey-detail-usage-table thead{display:none}
  .apikey-detail-usage-table tbody,.apikey-detail-usage-table tr,.apikey-detail-usage-table td{display:block;width:100%}
  .apikey-detail-usage-table tr{margin:0 0 10px;padding:10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface,#fff)}
  .apikey-detail-usage-table td{display:grid;grid-template-columns:76px minmax(0,1fr);gap:8px;padding:5px 0;border:0}
  .apikey-detail-usage-table td:before{content:attr(data-label);color:var(--muted);font-size:0.75rem;font-weight:600}
}
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; scroll-behavior:auto !important; } }

/* 公告版本历史与恢复：桌面双栏信息、手机端单列卡片，所有操作保持可触控。 */
.announcement-history { max-width: 1180px; margin: 0 auto; }
.announcement-history-header { margin-bottom: 16px; }
.announcement-history-header .panel-head { align-items: flex-start; gap: 16px; }
.announcement-history-actions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
.announcement-history-summary { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 16px; }
.announcement-history-summary > div { display: flex; flex-direction: column; gap: 5px; min-width: 0; padding: 13px 14px; border: 1px solid var(--border); border-radius: var(--radius-sm, 10px); background: var(--bg); }
.announcement-history-summary strong { overflow-wrap: anywhere; }
.announcement-history-list { display: grid; gap: 14px; }
.announcement-history-card { padding: 18px; }
.announcement-history-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding-bottom: 14px; border-bottom: 1px solid var(--border); }
.announcement-history-card-head > div:first-child { min-width: 0; }
.announcement-history-card-head h3 { display: inline; margin: 0 0 0 8px; overflow-wrap: anywhere; }
.announcement-history-meta { display: flex; flex-wrap: wrap; gap: 6px 12px; justify-content: flex-end; color: var(--muted); font-size: 0.8125rem; text-align: right; }
.announcement-history-content { padding: 14px 0; }
.announcement-history-content h4, .announcement-history-diff h4 { margin: 0 0 6px; font-size: 0.875rem; color: var(--muted); }
.announcement-history-content p { margin: 0 0 14px; font-weight: 600; overflow-wrap: anywhere; }
.announcement-history-text { max-height: 260px; overflow: auto; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius-sm, 10px); background: var(--bg); line-height: 1.75; white-space: normal; overflow-wrap: anywhere; }
.announcement-history-tags { display: flex; flex-wrap: wrap; gap: 6px; padding-bottom: 14px; }
.announcement-history-diff { margin-top: 4px; padding: 13px; border: 1px dashed var(--border); border-radius: var(--radius-sm, 10px); background: color-mix(in srgb, var(--primary) 3%, var(--panel)); }
.announcement-history-diff-title { margin: 0 0 8px; color: var(--muted); font-size: 0.8125rem; overflow-wrap: anywhere; }
.announcement-history-diff-line { display: flex; gap: 8px; align-items: flex-start; padding: 6px 8px; border-radius: calc(var(--radius-sm) - 4px); margin-top: 4px; overflow-wrap: anywhere; }
.announcement-history-diff-line span { flex: 0 0 18px; font-weight: 700; text-align: center; }
.announcement-history-diff-line code { white-space: pre-wrap; overflow-wrap: anywhere; font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 0.75rem; }
.announcement-history-diff-line.is-added { background: color-mix(in srgb, var(--green) 12%, transparent); color: var(--green); }
.announcement-history-diff-line.is-removed { background: color-mix(in srgb, var(--red) 12%, transparent); color: var(--red); }
.announcement-history-restore { display: flex; justify-content: flex-end; margin-top: 14px; }
.announcement-history-restore form, .announcement-history-restore .layui-btn { margin: 0; }

@media (max-width: 768px) {
  .announcement-history-header .panel-head { flex-direction: column; }
  .announcement-history-actions { width: 100%; justify-content: stretch; }
  .announcement-history-actions .layui-btn { flex: 1 1 160px; min-height: 44px; text-align: center; }
  .announcement-history-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .announcement-history-card { padding: 14px; }
  .announcement-history-card-head { flex-direction: column; gap: 10px; }
  .announcement-history-meta { justify-content: flex-start; text-align: left; line-height: 1.6; }
  .announcement-history-restore, .announcement-history-restore form, .announcement-history-restore .layui-btn { width: 100%; }
  .announcement-history-restore .layui-btn { min-height: 44px; }
  .announcement-history-text { max-height: 220px; }
}

@media (max-width: 420px) {
  .announcement-history-summary { grid-template-columns: 1fr; }
  .announcement-history-actions { flex-direction: column; }
  .announcement-history-actions .layui-btn { width: 100%; }
}

/* 访问分析时段与设备统计：桌面双栏、手机端单列，长 User-Agent 自动换行。 */
.analytics-breakdown-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.analytics-breakdown { min-width: 0; }
.analytics-breakdown .panel-head { align-items: flex-start; gap: 12px; }
.analytics-hourly-chart { height: 300px; }
.analytics-device-list { display: grid; gap: 13px; }
.analytics-device-item { min-width: 0; }
.analytics-device-head { display: flex; justify-content: space-between; gap: 12px; line-height: 1.5; font-size: 0.8125rem; }
.analytics-device-head span, .analytics-device-head strong { overflow-wrap: anywhere; }
.analytics-device-head strong { color: var(--text); text-align: right; }
.analytics-device-bar { height: 9px; margin-top: 6px; overflow: hidden; border-radius: 99px; background: color-mix(in srgb, var(--primary) 10%, var(--border)); }
.analytics-device-bar i { display: block; height: 100%; min-width: 2px; border-radius: inherit; background: linear-gradient(90deg, var(--primary), var(--primary-hover, var(--accent, #8b5cf6))); }
.analytics-user-agent-cell { max-width: 760px; white-space: normal; overflow-wrap: anywhere; word-break: break-word; font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 0.75rem; line-height: 1.55; }
@media (max-width: 768px) {
  .analytics-breakdown-grid { grid-template-columns: 1fr; }
  .analytics-hourly-chart { height: 250px; }
  .analytics-device-head { flex-direction: column; gap: 3px; }
  .analytics-device-head strong { text-align: left; }
  .analytics-user-agent-table { min-width: 560px; }
}

/* Webhook 投递与后台安全概览 */
.webhook-delivery-stats { display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.webhook-delivery-filter { margin:12px 0 16px; }
.webhook-delivery-filter select { min-width:150px; }
.webhook-delivery-table code { font-size:0.75rem; }
.webhook-delivery-table .ellipsis { max-width: none; white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; word-break: break-word; }
.webhook-batch-toolbar { display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin:0 0 12px; }
.webhook-batch-toolbar .hint { margin-left:4px; }
.webhook-select-col { width:52px; text-align:center; }
.webhook-select-col input[type="checkbox"] { width:18px; height:18px; vertical-align:middle; }
.security-overview-grid { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:12px; }
.overview-metric { display:flex; flex-wrap:wrap; align-items:baseline; gap:6px; min-height:102px; padding:16px; border:1px solid var(--border); border-radius:calc(var(--radius) - 2px); background:linear-gradient(145deg,var(--panel),color-mix(in srgb,var(--panel) 82%,var(--bg))); text-decoration:none; color:var(--text); transition:transform .2s ease, box-shadow .2s ease, border-color .2s ease; }
.overview-metric:hover { transform:translateY(-2px); box-shadow:var(--shadow-sm); border-color:var(--primary); }
.overview-metric-label { flex:1 1 100%; color:var(--muted); font-size:0.8125rem; }
.overview-metric b { font-size:1.75rem; line-height:1; }
.overview-metric small { color:var(--muted); font-size:0.75rem; }
.metric-ok b { color:#15966c; }
.metric-info b { color:#3973d9; }
.metric-warn b { color:#c37a0a; }
.metric-danger b { color:#d34856; }
@media (max-width:1100px) { .security-overview-grid { grid-template-columns:repeat(3,minmax(0,1fr)); } }
@media (max-width:768px) {
  .security-overview-grid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
  .overview-metric { min-height:88px; padding:12px; }
  .overview-metric b { font-size:1.5rem; }
  .webhook-delivery-stats { width:100%; }
  .webhook-delivery-filter { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
  .webhook-delivery-filter select, .webhook-delivery-filter .layui-btn { width:100%; min-width:0; min-height:44px; }
  .webhook-delivery-filter .layui-btn { display:flex; align-items:center; justify-content:center; }
  .webhook-delivery-table .ellipsis { max-width:none; white-space:normal; overflow-wrap:anywhere; }
  .webhook-batch-toolbar { display:grid; grid-template-columns:1fr 1fr; align-items:stretch; }
  .webhook-batch-toolbar .layui-btn { width:100%; min-height:44px; }
  .webhook-batch-toolbar .hint { grid-column:1/-1; margin:0; }
  .webhook-select-col { width:auto; }
}
@media (max-width:420px) { .security-overview-grid { grid-template-columns:1fr; } }

/* ===== 2026-08-28 10:26:38 全面美化轮次：氛围元素与新增样式的手机端适配 ===== */
@media (max-width:768px) {
  /* Hero 品牌光斑在手机端缩小内收，避免横向溢出 */
  .hero::before { width: 220px; height: 220px; left: -60px; top: -70px; }
  .hero::after { width: 240px; height: 240px; right: -80px; top: -60px; }
  /* 首页标签页胶囊容器窄屏下等宽排列，触控高度保持 44px */
  .tabs { width: 100%; }
  .tab { flex: 1 1 0; display: inline-flex; align-items: center; justify-content: center; }
}
@media (max-width: 480px) {
  /* 窄屏卡片式资源列表不再叠加表格外框 */
  .table-responsive:has(.user-resource-table) { border: 0; background: transparent; }
}

/* ===== 2026-08-28 15:18:42 全站显示优化：全局防溢出护栏与窄屏细节收尾 ===== */

/* 1. 根级横向溢出锁死：overflow-x: clip 不会新建滚动容器、不破坏吸顶定位；老浏览器回落为 hidden */
html, body { max-width: 100%; overflow-x: clip; }
@supports not (overflow-x: clip) {
  html, body { overflow-x: hidden; }
}

/* 2. 移动端文字与点按基础体验：禁用 iOS 自动放大、去除点按高亮、限制最小版面宽度 */
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  -webkit-tap-highlight-color: transparent;
}
body { min-width: 320px; }

/* 3. 通用内容防溢出：媒体元素、长文本、表单控件、代码块 */
body { overflow-wrap: break-word; }
img, picture, video, audio, iframe, embed, object, canvas, svg, figure { max-width: 100%; }
img, video { height: auto; }
input, select, textarea, button { max-width: 100%; }
pre { max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
code, kbd, samp { overflow-wrap: break-word; word-break: break-word; }
.chart-box { width: 100%; }

/* 4. 提取码/分享结果区：超大提取码与超长链接允许折行，不再把胶囊、结果卡撑破 */
.result-code { max-width: 100%; box-sizing: border-box; }
.big-code { word-break: break-all; overflow-wrap: anywhere; }
.hero h1 { overflow-wrap: break-word; }

/* 5. 极窄屏（≤360px）收尾：提取框压缩内距、按钮缩短、标题再收紧 */
@media (max-width: 360px) {
  .code-form { padding-left: 14px; padding-right: 5px; }
  .code-form .layui-btn { padding-left: 16px; padding-right: 16px; letter-spacing: 1px; }
  .result-code { padding-left: 16px; padding-right: 16px; }
  .hero h1 { font-size: 1.3125rem; }
}

/* 后台设置摘要、迁移诊断与运行时显示策略 */
.settings-change-summary { margin: 0 0 16px; padding: 14px 16px; border: 1px solid color-mix(in srgb, var(--primary) 28%, var(--border)); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--primary) 6%, var(--panel)); }
.settings-change-summary[hidden] { display: none; }
.settings-change-summary h4 { margin: 0 0 8px; font-size: 0.875rem; }
.settings-change-summary ul { margin: 0; padding-left: 20px; color: var(--muted); font-size: 0.8125rem; line-height: 1.7; }
.settings-subheading { margin: 18px 0 10px; padding-bottom: 7px; border-bottom: 1px solid var(--border); color: var(--text); font-size: 0.875rem; }
.settings-default-actions { display: flex; justify-content: flex-end; gap: 8px; flex-wrap: wrap; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); }
.settings-default-actions .layui-btn { min-height: 44px; }
.migration-failure { border-color: rgba(231,76,60,.3); background: color-mix(in srgb, #e74c3c 5%, var(--panel)); }
.migration-failure p { overflow-wrap: anywhere; word-break: break-word; }
.database-maintenance-overview { scroll-margin-top: 88px; }
.database-maintenance-overview-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; }
.database-maintenance-overview-head .eyebrow { margin: 0 0 4px; color: var(--primary); font-size: 0.75rem; font-weight: 700; letter-spacing: .08em; }
.database-maintenance-overview-head h2 { margin: 0; }
.database-maintenance-overview-head .hint { margin: 6px 0 0; max-width: 760px; }
.database-maintenance-overview-head .layui-btn { flex: 0 0 auto; min-height: 44px; }
.database-health-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; margin-top: 18px; }
.database-health-card { display: grid; gap: 4px; min-width: 0; padding: 13px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); color: var(--text); text-decoration: none; transition: border-color .18s ease, transform .18s ease, box-shadow .18s ease; }
.database-health-card:hover, .database-health-card:focus-visible { border-color: var(--primary); transform: translateY(-1px); box-shadow: 0 5px 16px rgba(15,23,42,.08); }
.database-health-card span { color: var(--muted); font-size: 0.75rem; }
.database-health-card strong { font-size: 1rem; }
.database-health-card small { min-height: 34px; color: var(--muted); line-height: 1.45; overflow-wrap: anywhere; }
.database-health-success { border-color: color-mix(in srgb, var(--green) 28%, var(--border)); }
.database-health-success strong { color: var(--green); }
.database-health-warning { border-color: color-mix(in srgb, var(--orange, #d97706) 32%, var(--border)); background: color-mix(in srgb, var(--orange, #d97706) 4%, var(--bg)); }
.database-health-warning strong { color: var(--orange, #d97706); }
.database-section-nav { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border); }
.database-section-nav a { min-height: 38px; padding: 8px 11px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); color: var(--muted); font-size: 0.8125rem; text-decoration: none; }
.database-section-nav a:hover, .database-section-nav a:focus-visible { border-color: var(--primary); color: var(--primary); }
.database-capability-panel, .database-integrity-panel, .database-index-panel, .database-size-panel, .migration-plan-panel, #database-status, #database-action { scroll-margin-top: 88px; }
.capability-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.capability-stat { min-width: 0; text-align: left; }
.capability-stat b { font-size: 1rem; }
.capability-stat span { display: block; margin-top: 3px; }
.capability-stat small { display: block; margin-top: 7px; color: var(--muted); font-size: 0.75rem; line-height: 1.55; overflow-wrap: anywhere; }
.capability-ok b { color: var(--green); }
.capability-error b { color: var(--red); }
.capability-skipped b { color: var(--muted); }
.database-integrity-summary { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin: 12px 0 14px; color: var(--muted); font-size: 0.8125rem; }
.database-integrity-summary .is-error { color: var(--red); font-weight: 700; }
.database-integrity-summary .is-skipped { color: var(--muted); }
.database-integrity-summary small { margin-left: auto; overflow-wrap: anywhere; }
.database-integrity-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; }
.database-integrity-actions form { margin: 0; }
.database-integrity-actions .layui-btn { min-height: 44px; }
.database-integrity-enable-form { margin: -2px 0 10px; }
.database-integrity-enable-form .layui-btn { min-height: 44px; }
.database-integrity-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.database-integrity-item { min-width: 0; padding: 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--bg); }
.database-integrity-item b { display: block; margin-bottom: 4px; font-size: 0.8125rem; }
.database-integrity-item strong { display: block; font-size: 0.875rem; overflow-wrap: anywhere; }
.database-integrity-item small { display: block; margin-top: 6px; color: var(--muted); line-height: 1.55; overflow-wrap: anywhere; }
.database-integrity-ok b { color: var(--green); }
.database-integrity-error { border-color: rgba(231,76,60,.35); background: color-mix(in srgb, #e74c3c 5%, var(--panel)); }
.database-integrity-error b { color: var(--red); }
.database-integrity-skipped b { color: var(--muted); }
.migration-plan-panel { scroll-margin-top: 88px; }
.migration-plan-list { display: grid; gap: 8px; }
.migration-plan-item { display: flex; align-items: center; gap: 12px; min-width: 0; padding: 11px 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--bg); }
.migration-plan-item b { flex: 0 0 auto; color: var(--primary); white-space: nowrap; }
.migration-plan-item span { min-width: 0; overflow-wrap: anywhere; }
.database-index-panel { scroll-margin-top: 88px; }
.database-index-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.database-index-item { min-width: 0; padding: 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--bg); }
.database-index-item b { display: block; margin-bottom: 4px; font-size: 0.8125rem; }
.database-index-item strong { display: block; font-size: 0.875rem; overflow-wrap: anywhere; }
.database-index-item small { display: block; margin-top: 6px; color: var(--muted); line-height: 1.55; overflow-wrap: anywhere; }
.database-index-ok b { color: var(--green); }
.database-index-error { border-color: rgba(231,76,60,.35); background: color-mix(in srgb, #e74c3c 5%, var(--panel)); }
.database-index-error b { color: var(--red); }
.database-index-skipped b { color: var(--muted); }
.database-size-panel { scroll-margin-top: 88px; }
.database-size-summary { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin: 12px 0 14px; color: var(--muted); font-size: 0.8125rem; }
.database-size-summary small { margin-left: auto; overflow-wrap: anywhere; }
.database-size-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.database-size-item { display: grid; gap: 5px; min-width: 0; padding: 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--bg); color: var(--muted); font-size: 0.8125rem; }
.database-size-item strong { color: var(--text); font-size: 0.875rem; overflow-wrap: anywhere; }
.database-size-item b { color: var(--primary); font-size: 0.875rem; overflow-wrap: anywhere; }
.database-action-form { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.database-action-confirm { flex: 1 1 280px; }
.database-action-form .layui-btn { min-height: 44px; }
.maintenance-eta { margin-top: 14px; padding: 10px 12px; border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--primary) 8%, var(--panel)); color: var(--primary); font-weight: 600; }
.public-stats-row { grid-template-columns: repeat(4, minmax(0, 1fr)); }
body[data-table-density="compact"] .table th, body[data-table-density="compact"] .table td { padding-top: 7px; padding-bottom: 7px; }

/* 后台任务队列监控：桌面表格与手机横向滚动/卡片信息保持可读。 */
.background-job-stats .stat { text-decoration: none; color: var(--text); }
.background-job-stats .stat:hover { border-color: var(--primary); transform: translateY(-1px); }
.background-job-meta { display:flex; gap:12px; flex-wrap:wrap; margin-top:14px; color:var(--muted); font-size:0.8125rem; }
.background-job-action-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px; }
.background-job-action-grid form, .background-job-action-grid .layui-btn { width:100%; }
.background-job-filter { display:flex; gap:8px; flex-wrap:wrap; align-items:center; }
.background-job-filter select { min-height:40px; }
.background-job-batch-toolbar { display:flex; align-items:center; gap:12px; margin:0 0 12px; }
.background-job-table-wrap { overflow-x:auto; }
.background-job-table { min-width:1120px; }
.background-job-table td small { display:block; color:var(--muted); font-size:0.75rem; margin-top:3px; }
.background-job-table .background-job-error { max-width:260px; color:var(--muted); white-space:normal; word-break:break-word; }
.background-job-pager { display:flex; align-items:center; justify-content:center; gap:12px; flex-wrap:wrap; margin-top:14px; }
.background-job-help code { word-break:break-all; }
.analytics-filter-form { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; align-items:end; }
.analytics-filter-form label { display:block; margin-bottom:6px; }
.analytics-filter-actions { display:flex; gap:8px; flex-wrap:wrap; }
.analytics-filter-actions .layui-btn { flex:1 1 140px; }
.analytics-range-summary { margin-top:16px; grid-template-columns:repeat(4,minmax(0,1fr)); }
.analytics-range-summary .stat { min-width:0; }
@media (max-width:720px) {
  .analytics-filter-form { grid-template-columns:1fr; }
  .analytics-filter-actions { display:grid; grid-template-columns:1fr 1fr; }
  .analytics-filter-actions .layui-btn { width:100%; min-height:44px; }
  .analytics-range-summary { grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
}
@media (max-width:420px) {
  .analytics-filter-actions { grid-template-columns:1fr; }
}
@media (max-width:720px) {
  .background-job-action-grid { grid-template-columns:1fr; }
  .background-job-action-grid .layui-btn { min-height:44px; }
  .background-job-filter { width:100%; display:grid; grid-template-columns:1fr 1fr; }
  .background-job-filter select, .background-job-filter .layui-btn { width:100%; min-height:44px; }
  .background-job-filter .layui-btn { grid-column:1 / -1; }
  .background-job-meta { flex-direction:column; gap:5px; }
  .background-job-batch-toolbar { flex-direction:column; align-items:stretch; }
  .background-job-batch-toolbar .layui-btn { width:100%; min-height:44px; }
  .background-job-table-wrap { margin-left:-4px; margin-right:-4px; }
  .background-job-table-wrap { overflow:visible; }
  .background-job-table { min-width:0; width:100%; display:block; }
  .background-job-table thead{display:none}
  .background-job-table tbody,.background-job-table tr,.background-job-table td { display:block; width:100%; }
  .background-job-table tr { margin:0 0 12px; padding:12px; border:1px solid var(--border); border-radius:var(--radius); background:var(--surface,#fff); box-shadow:0 2px 10px rgba(15,23,42,.05); }
  .background-job-table td { display:grid; grid-template-columns:88px minmax(0,1fr); gap:8px; padding:7px 0; border:0; overflow-wrap:anywhere; word-break:break-word; }
  .background-job-table td:before { content:attr(data-label); color:var(--muted); font-size:0.75rem; font-weight:600; }
  .background-job-table td:first-child:before { content:'编号'; }
  .background-job-table td:first-child input[type=checkbox] { justify-self:start; width:20px; height:20px; }
  .background-job-table .background-job-error { max-width:none; color:var(--red,#dc2626); }
  .background-job-table td:last-child form { margin:0; }
  .background-job-table td:last-child .layui-btn { min-height:40px; }
}
body[data-reduced-motion="1"] *, body[data-reduced-motion="1"] *::before, body[data-reduced-motion="1"] *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
@media (max-width: 768px) {
  .settings-change-summary { padding: 12px; }
  .settings-default-actions { justify-content: stretch; }
  .settings-default-actions .layui-btn { flex: 1 1 180px; }
  .public-stats-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .database-maintenance-overview-head { flex-direction: column; }
  .database-maintenance-overview-head .layui-btn { width: 100%; }
  .database-health-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .capability-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .database-integrity-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .database-integrity-summary small { margin-left: 0; width: 100%; }
  .database-integrity-actions { width: 100%; justify-content: stretch; }
  .database-integrity-actions form { flex: 1 1 180px; }
  .database-integrity-actions form .layui-btn { width: 100%; }
  .database-integrity-enable-form .layui-btn { width: 100%; }
  .database-index-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .database-size-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .database-size-summary small { margin-left: 0; width: 100%; }
  .migration-plan-item { align-items: flex-start; flex-direction: column; gap: 4px; }
  .migration-failure .panel-head { align-items: flex-start; }
}
@media (max-width: 420px) {
  .public-stats-row { grid-template-columns: 1fr 1fr; gap: 8px; }
  .database-health-grid { grid-template-columns: 1fr; }
  .capability-stats { grid-template-columns: 1fr; }
  .database-integrity-grid { grid-template-columns: 1fr; }
  .database-index-grid { grid-template-columns: 1fr; }
  .database-size-grid { grid-template-columns: 1fr; }
  .database-section-nav { display: grid; grid-template-columns: 1fr 1fr; }
  .database-section-nav a { text-align: center; }
  .database-action-form { align-items: stretch; flex-direction: column; }
  .database-action-form .layui-btn { width: 100%; }
}

/* 设置备份与恢复：差异预览、确认操作和手机端触控布局 */
.settings-backup-panel { scroll-margin-top: 88px; }
.settings-backup-actions, .settings-backup-confirm { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.settings-backup-upload { display: flex; align-items: end; gap: 12px; flex-wrap: wrap; }
.settings-backup-upload label { width: 100%; }
.settings-backup-upload input[type=file] { min-height: 44px; max-width: 100%; padding: 10px; border: 1px dashed var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--bg); }
.settings-backup-value { max-width: 260px; word-break: break-word; }
.settings-backup-panel small.muted { display: block; color: var(--muted); font-size: 0.75rem; margin-top: 3px; }
.settings-backup-list { display: flex; flex-direction: column; gap: 6px; margin: 14px 0; padding: 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--primary) 5%, transparent); }
.settings-backup-list-error { border-color: #ef4444; background: color-mix(in srgb, #ef4444 6%, transparent); }
.settings-backup-list span { font-size: 0.8125rem; word-break: break-word; }
.settings-backup-confirm { justify-content: space-between; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border); }
.settings-diagnostics-panel { scroll-margin-top: 88px; }
.settings-diagnostics-summary .panel-head { align-items: center; }
.settings-diagnostics-score { min-width: 108px; display: grid; grid-template-columns: auto auto; gap: 0 4px; align-items: baseline; justify-content: center; padding: 12px 16px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); }
.settings-diagnostics-score strong { font-size: 1.875rem; line-height: 1; }
.settings-diagnostics-score span { color: var(--muted); font-size: 0.8125rem; }
.settings-diagnostics-score small { grid-column: 1 / -1; color: var(--muted); text-align: center; margin-top: 3px; }
.settings-diagnostics-score.is-good strong { color: #15966c; }
.settings-diagnostics-score.is-warn strong { color: #c37a0a; }
.settings-diagnostics-score.is-error strong { color: #d34856; }
.settings-diagnostics-stats { display: flex; flex-wrap: wrap; gap: 8px 16px; margin: 14px 0; color: var(--muted); font-size: 0.8125rem; }
.settings-diagnostics-stats .is-error { color: #d34856; }
.settings-diagnostics-stats .is-warn { color: #c37a0a; }
.settings-diagnostics-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.settings-diagnostic-item { min-width: 0; padding: 15px; border: 1px solid var(--border); border-left: 4px solid #15966c; border-radius: var(--radius-sm); background: var(--panel); }
.settings-diagnostic-item.is-warn { border-left-color: #c37a0a; }
.settings-diagnostic-item.is-error { border-left-color: #d34856; }
.settings-diagnostic-item header { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.settings-diagnostic-item h4 { margin: 0; font-size: 0.875rem; }
.settings-diagnostic-item header span { flex-shrink: 0; color: #15966c; font-size: 0.75rem; font-weight: 700; }
.settings-diagnostic-item.is-warn header span { color: #c37a0a; }
.settings-diagnostic-item.is-error header span { color: #d34856; }
.settings-diagnostic-item p { margin: 9px 0 0; color: var(--muted); font-size: 0.8125rem; overflow-wrap: anywhere; }
.settings-diagnostic-advice { margin-top: 10px; padding: 9px 10px; border-radius: calc(var(--radius-sm) - 3px); background: color-mix(in srgb, #c37a0a 8%, transparent); color: var(--text); font-size: 0.75rem; overflow-wrap: anywhere; }
.settings-diagnostic-item.is-error .settings-diagnostic-advice { background: color-mix(in srgb, #d34856 8%, transparent); }
.settings-diagnostic-link { display: inline-flex; min-height: 36px; align-items: center; margin-top: 10px; color: var(--primary); font-size: 0.8125rem; text-decoration: none; }
.settings-tests-panel { scroll-margin-top: 88px; }
.settings-tests-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.settings-test-card { min-width: 0; padding: 15px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--panel); }
.settings-test-card h4 { margin: 0; font-size: 0.875rem; }
.settings-test-card p { margin: 8px 0; color: var(--muted); font-size: 0.8125rem; }
.settings-test-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.settings-test-actions form { margin: 0; }
.settings-test-actions .layui-btn { min-height: 42px; }
.settings-test-link { display: inline-flex; min-height: 36px; align-items: center; margin-top: 8px; color: var(--primary); font-size: 0.8125rem; text-decoration: none; }
.settings-test-status { color: #15966c; font-size: 0.8125rem; font-weight: 700; }
.settings-test-status.is-warn { color: #c37a0a; }
.settings-test-status.is-error { color: #d34856; }
.settings-test-message { margin-top: 10px; padding: 11px 12px; border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--primary) 7%, var(--panel)); color: var(--text); overflow-wrap: anywhere; }
.settings-history-panel { scroll-margin-top: 88px; }
.settings-history-filter { display: flex; align-items: end; gap: 10px; flex-wrap: wrap; }
.settings-history-filter label { width: 100%; }
.settings-history-filter input { flex: 1 1 260px; min-height: 44px; }
.settings-history-list { display: flex; flex-direction: column; gap: 16px; }
.settings-history-entry { min-width: 0; padding: 15px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--panel); }
.settings-history-entry > header { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
.settings-history-entry h4 { margin: 0 0 4px; font-size: 0.875rem; }
.settings-history-entry .hint { margin: 0; }
.settings-history-action { flex-shrink: 0; color: var(--primary); font-size: 0.75rem; font-weight: 700; }
.settings-history-entry small.muted { display: block; color: var(--muted); font-size: 0.75rem; margin-top: 3px; }
.settings-history-rollback-form { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--border); }
@media (max-width: 768px) {
  .settings-backup-upload, .settings-backup-confirm { align-items: stretch; flex-direction: column; }
  .settings-backup-upload .layui-btn, .settings-backup-confirm .layui-btn { width: 100%; min-height: 44px; }
  .settings-backup-actions .layui-btn { min-height: 44px; flex: 1 1 180px; }
  .settings-backup-value { max-width: 160px; }
  .settings-diagnostics-summary .panel-head { align-items: stretch; flex-direction: column; }
  .settings-diagnostics-score { width: 100%; box-sizing: border-box; }
  .settings-diagnostics-grid { grid-template-columns: 1fr; }
  .settings-diagnostics-stats { gap: 8px 12px; }
  .settings-tests-grid { grid-template-columns: 1fr; }
  .settings-test-actions { flex-direction: column; align-items: stretch; }
  .settings-test-actions form, .settings-test-actions .layui-btn { width: 100%; }
  .settings-history-filter { align-items: stretch; flex-direction: column; }
  .settings-history-filter input, .settings-history-filter .layui-btn { width: 100%; box-sizing: border-box; }
  .settings-history-entry > header, .settings-history-rollback-form { flex-direction: column; align-items: stretch; }
  .settings-history-rollback-form .layui-btn { width: 100%; min-height: 44px; }
}

/* ===== 2026-08-28 23:59:59 后台设置悬浮保存按钮：紧凑图标、直接拖动与位置习惯 ===== */
.settings-content-with-floating-save { position: relative; padding-bottom: 72px; }
.settings-content[data-settings-active-group] { min-width: 0; }
.settings-content[data-settings-active-group] [data-settings-hidden="1"] { display: none !important; }
.settings-floating-save {
  position: fixed;
  right: 22px;
  bottom: calc(22px + env(safe-area-inset-bottom));
  z-index: 1250;
  width: 44px;
  min-width: 44px;
  height: 44px;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 1px solid color-mix(in srgb, var(--primary) 78%, #fff 22%);
  border-radius: 50%;
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
  color: #fff;
  box-shadow: 0 10px 26px color-mix(in srgb, var(--primary) 30%, transparent), inset 0 1px 0 rgba(255,255,255,.28);
  font: inherit;
  font-size: 0;
  font-weight: 700;
  line-height: 1;
  cursor: grab;
  touch-action: none;
  user-select: none;
  -webkit-user-select: none;
  transition: transform .18s var(--ease-smooth), box-shadow .18s var(--ease-smooth), filter .18s var(--ease-smooth);
}
.settings-floating-save svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; pointer-events: none; }
.settings-floating-save-label { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.settings-floating-save:hover { transform: translateY(-2px) scale(1.03); box-shadow: 0 14px 30px color-mix(in srgb, var(--primary) 38%, transparent), inset 0 1px 0 rgba(255,255,255,.30); filter: saturate(1.08); }
.settings-floating-save:active { transform: translateY(0) scale(.98); }
.settings-floating-save.is-dragging { cursor: grabbing; transform: scale(1.08); box-shadow: 0 16px 34px color-mix(in srgb, var(--primary) 44%, transparent), 0 0 0 4px color-mix(in srgb, var(--primary) 16%, transparent), inset 0 1px 0 rgba(255,255,255,.30); }
.settings-floating-save:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 35%, transparent); outline-offset: 3px; }
.settings-floating-save.is-dirty { box-shadow: 0 12px 30px color-mix(in srgb, var(--primary) 44%, transparent), 0 0 0 4px color-mix(in srgb, var(--primary) 13%, transparent), inset 0 1px 0 rgba(255,255,255,.30); }
@media (max-width: 768px) {
  .settings-content-with-floating-save { padding-bottom: 72px; }
  .settings-floating-save {
    right: 16px;
    bottom: 12px;
    width: 44px;
    min-width: 44px;
    height: 44px;
    min-height: 44px;
    display: inline-flex;
  }
}

@supports (bottom: env(safe-area-inset-bottom)) {
  @media (max-width: 768px) {
    .settings-floating-save {
      right: max(16px, env(safe-area-inset-right));
      bottom: calc(12px + env(safe-area-inset-bottom));
    }
  }
}


/* ===== 2026-08-28 23:59:59 设置分组页底部快捷导航：桌面双列与手机单列 ===== */
.settings-group-switcher {
  margin-top: 18px;
  padding: 16px;
  border: 1px solid var(--border);
  border-radius: calc(var(--radius) - 2px);
  background: var(--panel);
  box-shadow: var(--shadow-sm);
}
.settings-group-switcher-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 14px;
}
.settings-group-switcher-caption {
  display: block;
  color: var(--text);
  font-size: 0.9375rem;
  font-weight: 700;
}
.settings-group-switcher-head .hint { margin: 5px 0 0; }
.settings-group-switcher-overview {
  flex-shrink: 0;
  color: var(--primary);
  font-size: 0.8125rem;
  font-weight: 600;
  text-decoration: none;
}
.settings-group-switcher-overview:hover { text-decoration: none; }
.settings-group-switcher-links {
  display: grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap: 12px;
}
.settings-group-switcher-links a,
.settings-group-switcher-link {
  min-height: 64px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 14px;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  color: var(--text);
  background: var(--surface, #fff);
  text-decoration: none;
  transition: border-color .15s, background .15s, transform .15s;
}
.settings-group-switcher-links a:hover,
.settings-group-switcher-links a:focus-visible {
  border-color: var(--primary);
  background: color-mix(in srgb, var(--primary) 7%, var(--surface, #fff));
  transform: translateY(-1px);
  outline: none;
}
.settings-group-switcher-link small,
.settings-group-switcher-link strong {
  display: block;
}
.settings-group-switcher-link small {
  margin-bottom: 4px;
  color: var(--muted);
  font-size: 0.75rem;
}
.settings-group-switcher-link strong {
  color: var(--text);
  font-size: 0.875rem;
}
.settings-group-switcher-arrow {
  flex-shrink: 0;
  color: var(--primary);
  font-size: 1.375rem;
  line-height: 1;
}
.settings-group-switcher-link.is-disabled {
  opacity: .55;
  cursor: default;
}
@media (max-width:768px) {
  .settings-group-switcher { margin-top: 14px; padding: 14px; }
  .settings-group-switcher-head { flex-direction: column; gap: 8px; }
  .settings-group-switcher-overview { min-height: 40px; display: inline-flex; align-items: center; }
  .settings-group-switcher-links { grid-template-columns:1fr; gap: 8px; }
  .settings-group-switcher-links a,
  .settings-group-switcher-link { min-height: 58px; padding: 9px 12px; }
}

/* 发布与升级中心：报告优先可读性，窄屏自动改单列。 */
.release-center { display: grid; gap: 18px; }
.release-summary { display: flex; align-items: center; gap: 22px; }
.release-score { flex: 0 0 132px; width: 132px; height: 132px; display: flex; flex-direction: column; align-items: center; justify-content: center; border: 7px solid var(--border); border-radius: 50%; background: var(--panel); }
.release-score strong { font-size: 2.25rem; line-height: 1; }
.release-score span { margin-top: 3px; color: var(--muted); font-size: 0.75rem; }
.release-score small { margin-top: 8px; color: var(--muted); font-size: 0.75rem; text-align: center; }
.release-score-good { border-color: #22c55e; color: #15803d; }
.release-score-warn { border-color: #f59e0b; color: #b45309; }
.release-score-error { border-color: #ef4444; color: #b91c1c; }
.release-summary-copy { min-width: 0; flex: 1; }
.release-summary-copy h3 { margin: 0 0 8px; font-size: 1.375rem; }
.release-summary-copy p { margin: 0 0 12px; color: var(--muted); line-height: 1.7; }
.release-actions, .release-repair-form, .settings-release-links { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.release-actions .layui-btn, .release-repair-form .layui-btn, .settings-release-links .layui-btn { min-height: 44px; }
.release-disabled-note { padding: 10px 12px; border: 1px dashed #f59e0b; border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, #f59e0b 8%, transparent); color: #92400e !important; font-size: 0.8125rem; }
.release-check-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.release-check-item { min-width: 0; padding: 15px; border: 1px solid var(--border); border-left: 4px solid var(--border); border-radius: calc(var(--radius) - 5px); background: var(--panel); }
.release-check-item header { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.release-check-item h4 { margin: 0; font-size: 0.9375rem; }
.release-check-item header span { flex-shrink: 0; font-size: 0.75rem; font-weight: 700; }
.release-check-item p { margin: 0; color: var(--muted); font-size: 0.8125rem; line-height: 1.65; word-break: break-word; }
.release-status-good { border-left-color: #22c55e; }
.release-status-good header span { color: #15803d; }
.release-status-warn { border-left-color: #f59e0b; }
.release-status-warn header span { color: #b45309; }
.release-status-error { border-left-color: #ef4444; }
.release-status-error header span { color: #b91c1c; }
.release-status-info { border-left-color: var(--muted); }
.release-status-info header span { color: var(--muted); }
.release-advice { margin-top: 10px; padding: 9px 10px; border-radius: calc(var(--radius-sm) - 3px); background: color-mix(in srgb, var(--primary) 7%, transparent); color: var(--text); font-size: 0.75rem; line-height: 1.6; word-break: break-word; }
.release-danger-badge { flex-shrink: 0; padding: 5px 9px; border: 1px solid #f59e0b; border-radius: 999px; color: #b45309; font-size: 0.75rem; font-weight: 700; }
.release-repair-panel { border-color: color-mix(in srgb, #f59e0b 42%, var(--border)); }
.release-manifest-panel, .release-history { min-width: 0; }
.release-manifest-panel .panel-head, .release-history .panel-head { align-items: flex-start; }
.release-manifest-badge { flex-shrink: 0; padding: 6px 10px; border: 1px solid color-mix(in srgb, var(--primary) 35%, var(--border)); border-radius: 999px; color: var(--primary); font-size: 0.75rem; font-weight: 700; }
.release-manifest { margin: 0; padding: 15px; overflow: auto; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--primary) 4%, var(--panel)); color: var(--text); font: 0.8125rem/1.75 ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", monospace; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; }
.release-manifest:focus { outline: 2px solid color-mix(in srgb, var(--primary) 55%, transparent); outline-offset: 2px; }
.release-manifest-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 12px; }
.release-manifest-actions .layui-btn, .release-manifest-actions form { min-height: 44px; }
.release-history-list { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
.release-history-item { min-width: 0; padding: 13px 14px; border: 1px solid var(--border); border-left: 4px solid var(--primary); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); }
.release-history-item-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.release-history-item-head strong { min-width: 0; font-size: 0.875rem; }
.release-history-item-head time { flex-shrink: 0; color: var(--muted); font-size: 0.75rem; white-space: nowrap; }
.release-history-item p, .release-history-empty { margin: 7px 0 0; color: var(--muted); font-size: 0.8125rem; line-height: 1.65; overflow-wrap: anywhere; word-break: break-word; }
.release-history-empty { margin: 0; padding: 14px; border: 1px dashed var(--border); border-radius: calc(var(--radius-sm) - 2px); }
.release-manifest-disabled .layui-btn { min-height: 44px; }
.release-guide-list { margin: 0; padding-left: 22px; color: var(--muted); line-height: 1.9; }
.release-guide-list li { padding-left: 4px; }
.release-report-source { position: fixed; left: -10000px; top: 0; width: 1px; height: 1px; opacity: 0; }
.admin-changelog-page, .admin-changelog-board, .admin-changelog-list-panel, .admin-changelog-detail-panel, .admin-changelog-search, .admin-changelog-search-row, .admin-changelog-list, .admin-changelog-item, .admin-changelog-detail-entry { min-width: 0; max-width: 100%; box-sizing: border-box; }
.admin-changelog-page { overflow-x: hidden; }
.admin-changelog-hero .panel-head { align-items: flex-start; gap: 16px; min-width: 0; max-width: 100%; }
.admin-changelog-actions { min-width: 0; max-width: 100%; }
.admin-changelog-actions .layui-btn { min-height: 40px; }
.admin-changelog-stats { display: flex; flex-wrap: wrap; gap: 8px; color: var(--muted); font-size: 0.8125rem; }
.admin-changelog-stats span { display: inline-flex; align-items: center; min-height: 30px; padding: 4px 10px; border: 1px solid var(--border); border-radius: 999px; background: color-mix(in srgb, var(--primary) 4%, var(--panel)); }
.admin-changelog-board { display: grid; grid-template-columns: minmax(280px, 380px) minmax(0, 1fr); gap: 0; min-height: min(720px, calc(100vh - 230px)); padding: 0; overflow: hidden; }
.admin-changelog-list-panel { min-width: 0; display: flex; flex-direction: column; gap: 12px; padding: 16px; border-right: 1px solid var(--border); background: color-mix(in srgb, var(--bg) 56%, var(--panel)); }
.admin-changelog-search { display: grid; gap: 8px; }
.admin-changelog-search label { color: var(--muted); font-size: 0.75rem; font-weight: 700; }
.admin-changelog-search-row { display: flex; gap: 8px; min-width: 0; }
.admin-changelog-search-row input { width: 100%; min-width: 0; flex: 1 1 auto; min-height: 42px; }
.admin-changelog-search-row .layui-btn { flex: 0 0 auto; min-height: 42px; }
.admin-changelog-clear { justify-self: start; }
.admin-changelog-list { min-height: 0; overflow: auto; display: flex; flex-direction: column; gap: 10px; padding-right: 4px; scrollbar-width: thin; }
.admin-changelog-item { position: relative; display: grid; gap: 8px; min-width: 0; padding: 14px 48px 14px 14px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: var(--panel); color: var(--text); text-decoration: none; box-shadow: 0 1px 0 rgba(15,23,42,.03); transition: border-color .16s, box-shadow .16s, transform .16s, background .16s; }
.admin-changelog-item:hover, .admin-changelog-item:focus-visible, .admin-changelog-item.is-active { border-color: color-mix(in srgb, var(--primary) 65%, var(--border)); background: color-mix(in srgb, var(--primary) 8%, var(--panel)); box-shadow: 0 8px 24px color-mix(in srgb, var(--primary) 12%, transparent); outline: none; }
.admin-changelog-item.is-active { transform: translateY(-1px); }
.admin-changelog-item strong { min-width: 0; font-size: 0.9375rem; line-height: 1.45; overflow-wrap: anywhere; word-break: break-word; }
.admin-changelog-item time { color: var(--muted); font-size: 0.75rem; overflow-wrap: anywhere; word-break: break-word; }
.admin-changelog-index { position: absolute; top: 10px; right: 10px; min-width: 34px; padding: 3px 7px; border: 1px solid var(--border); border-radius: 999px; background: var(--panel); color: var(--muted); font-size: 0.75rem; font-weight: 700; text-align: center; }
.admin-changelog-meta { display: flex; flex-wrap: wrap; gap: 5px; min-width: 0; overflow-wrap: anywhere; word-break: break-word; }
.admin-changelog-meta em, .admin-changelog-meta b { display: inline-flex; align-items: center; min-height: 22px; padding: 2px 7px; border-radius: calc(var(--radius-sm) - 3px); font-size: 0.75rem; font-style: normal; font-weight: 700; }
.admin-changelog-meta em { color: var(--primary); background: var(--primary-soft); }
.admin-changelog-meta b { color: #a16207; background: color-mix(in srgb, var(--orange) 14%, var(--panel)); }
.admin-changelog-source { display: inline-flex; align-items: center; min-height: 24px; max-width: 100%; padding: 3px 9px; border-radius: calc(var(--radius-sm) - 2px); font-size: 0.75rem; font-weight: 800; letter-spacing: 0; overflow-wrap: anywhere; word-break: break-word; white-space: normal; }
.admin-changelog-source-changelog { color: #1d4ed8; background: color-mix(in srgb, #3b82f6 14%, var(--panel)); border: 1px solid color-mix(in srgb, #3b82f6 24%, var(--border)); }
.admin-changelog-source-readme { color: #047857; background: color-mix(in srgb, #10b981 14%, var(--panel)); border: 1px solid color-mix(in srgb, #10b981 24%, var(--border)); }
.admin-changelog-empty { margin: 0; padding: 16px; border: 1px dashed var(--border); border-radius: var(--radius-sm); color: var(--muted); text-align: center; }
.admin-changelog-pager { display: grid; gap: 8px; padding-top: 2px; color: var(--muted); font-size: 0.75rem; }
.admin-changelog-pager > span { text-align: center; }
.admin-changelog-pager > div { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
.list-pager-controls { display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap; min-width: 0; max-width: 100%; }
.admin-changelog-pager .layui-btn { min-width: 0; min-height: 34px; padding: 6px 8px; justify-content: center; font-size: 0.75rem; white-space: normal; }
.admin-changelog-pager .is-disabled { opacity: .5; cursor: not-allowed; pointer-events: none; }
.admin-changelog-detail-panel { min-width: 0; padding: 26px 30px; overflow: auto; }
.admin-changelog-detail-entry header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding-bottom: 16px; border-bottom: 1px solid var(--border); }
.admin-changelog-detail-entry h3 { margin: 5px 0 0; font-size: 1.375rem; line-height: 1.35; overflow-wrap: anywhere; }
.admin-changelog-detail-badges { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; flex: 0 0 auto; }
.admin-changelog-detail-badges span { display: inline-flex; align-items: center; min-height: 28px; max-width: 100%; padding: 4px 10px; border-radius: 999px; border: 1px solid var(--border); background: color-mix(in srgb, var(--bg) 72%, var(--panel)); color: var(--muted); font-size: 0.75rem; font-weight: 800; overflow-wrap: anywhere; word-break: break-word; white-space: normal; }
.admin-changelog-time { display: inline-flex; align-items: center; min-height: 32px; margin: 16px 0 6px; padding: 4px 11px; border-radius: 999px; color: var(--muted); background: color-mix(in srgb, var(--bg) 70%, var(--panel)); font-size: 0.8125rem; }
.admin-changelog-body { color: var(--text); line-height: 1.85; overflow-wrap: anywhere; word-break: break-word; }
.admin-changelog-body ul { margin: 14px 0 0; padding-left: 22px; }
.admin-changelog-body li { margin: 6px 0; overflow-wrap: anywhere; word-break: break-word; }
.admin-changelog-body p { margin: 12px 0 0; color: var(--muted); overflow-wrap: anywhere; word-break: break-word; }
.admin-changelog-body h4 { margin: 18px 0 8px; font-size: 0.9375rem; }
.admin-changelog-body blockquote { margin: 12px 0 0; padding: 10px 12px; border-left: 3px solid var(--primary); border-radius: calc(var(--radius-sm) - 2px); background: var(--primary-soft); color: var(--text); }
.admin-changelog-raw { margin-top: 18px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--bg) 70%, var(--panel)); overflow: hidden; }
.admin-changelog-raw summary { cursor: pointer; padding: 10px 12px; color: var(--text); font-size: 0.8125rem; font-weight: 800; }
.admin-changelog-raw pre { max-height: 320px; max-width: 100%; margin: 0; padding: 12px; overflow: auto; border-top: 1px solid var(--border); color: var(--muted); font: 0.75rem/1.7 ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", monospace; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; box-sizing: border-box; }
.admin-changelog-item strong, .admin-changelog-item time, .admin-changelog-meta, .admin-changelog-summary, .admin-changelog-body, .admin-changelog-body p, .admin-changelog-body li, .admin-changelog-raw pre { overflow-wrap: anywhere; word-break: break-word; }
.admin-changelog-detail-empty { display: grid; place-items: center; min-height: 320px; text-align: center; color: var(--muted); }
@media (max-width:768px) {
  .admin-page .panel, .admin-page .admin-main, .admin-page .grid2 { max-width: 100%; min-width: 0; }
  .admin-changelog-page, .admin-changelog-hero, .admin-changelog-board { width: 100%; max-width: 100%; overflow-x: hidden; box-sizing: border-box; }
  .admin-changelog-page { display: grid; gap: 12px; }
  .admin-changelog-hero .panel-head { flex-direction: column; align-items: stretch; gap: 12px; }
  .admin-changelog-actions { display: flex; width: 100%; max-width: 100%; min-width: 0; gap: 8px; overflow-x: auto; overflow-y: hidden; overscroll-behavior-x: contain; padding: 2px 2px 8px; margin: 0; scrollbar-width: thin; -webkit-overflow-scrolling: touch; box-sizing: border-box; }
  .admin-changelog-actions .layui-btn { flex: 0 0 auto; max-width: calc(100vw - 32px); min-height: 38px; padding: 8px 12px; border-radius: var(--radius-sm); white-space: normal; }
  .admin-changelog-stats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .admin-changelog-stats span { min-height: 34px; justify-content: center; text-align: center; }
  .admin-changelog-board { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0; min-height: 0; }
  .admin-changelog-list-panel { border-right: 0; border-bottom: 1px solid var(--border); padding: 12px; }
  .admin-changelog-search-row { display: grid; grid-template-columns: 1fr; gap: 8px; }
  .admin-changelog-search-row input, .admin-changelog-search-row .layui-btn { width: 100%; min-height: 40px; justify-content: center; }
  .admin-changelog-list { max-height: 52vh; padding: 0 2px 2px 0; gap: 8px; }
  .admin-changelog-item { padding: 12px 44px 12px 12px; border-radius: var(--radius-sm); }
  .admin-changelog-item strong { font-size: 0.875rem; }
  .admin-changelog-index { min-width: 30px; right: 8px; top: 8px; }
  .admin-changelog-detail-panel { padding: 16px 14px 18px; overflow-x: hidden; overflow-y: visible; }
  .admin-changelog-detail-entry header { flex-direction: column; gap: 10px; }
  .admin-changelog-detail-entry h3 { font-size: 1.125rem; }
  .admin-changelog-detail-badges { justify-content: flex-start; max-width: 100%; min-width: 0; }
  .admin-changelog-body { line-height: 1.75; font-size: 0.875rem; }
  .admin-changelog-body ul { padding-left: 18px; }
  .admin-changelog-pager > div { width: 100%; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .admin-changelog-pager .list-pager-controls { width: 100%; }
  .admin-changelog-pager .layui-btn { width: 100%; }
  .admin-changelog-raw pre { max-height: 220px; font-size: 0.6875rem; }
  .admin-changelog-page[data-changelog-mobile-compact="1"] .admin-changelog-list { max-height: 42vh; gap: 6px; }
  .admin-changelog-page[data-changelog-mobile-compact="1"] .admin-changelog-item { gap: 5px; padding-top: 10px; padding-bottom: 10px; }
  .admin-changelog-page[data-changelog-mobile-compact="1"] .admin-changelog-stats span { min-height: 30px; padding: 3px 8px; }
  .admin-changelog-page[data-changelog-mobile-compact="1"] .admin-changelog-detail-panel { padding-top: 12px; }
}
.cleanup-control-panel { min-width: 0; }

/* 后台更新日志桌面端收口（2026-09-08 22:53:48）：固定双栏工作区高度，长正文在详情区内部滚动，避免页面无限变长。 */
@media (min-width: 769px) {
  .admin-changelog-page { min-height: calc(100vh - 32px); }
  .admin-changelog-board { height: min(760px, calc(100vh - 250px)); min-height: 520px; }
  .admin-changelog-list-panel,
  .admin-changelog-detail-panel { min-height: 0; overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; }
  .admin-changelog-list-panel { padding: 12px; gap: 8px; }
  .admin-changelog-list { gap: 7px; padding-right: 3px; }
  .admin-changelog-item { gap: 5px; padding: 11px 44px 11px 12px; border-radius: var(--radius-sm); }
  .admin-changelog-item strong { font-size: 0.875rem; line-height: 1.35; }
  .admin-changelog-detail-panel { padding: 18px 22px; }
  .admin-changelog-detail-entry header { gap: 12px; padding-bottom: 12px; }
  .admin-changelog-detail-entry h3 { font-size: 1.25rem; line-height: 1.25; }
  .admin-changelog-time { min-height: 28px; margin: 10px 0 4px; padding: 3px 9px; font-size: 0.75rem; }
  .admin-changelog-body { line-height: 1.65; font-size: 0.875rem; }
  .admin-changelog-body ul { margin-top: 9px; padding-left: 20px; }
  .admin-changelog-body li { margin: 4px 0; }
  .admin-changelog-body p { margin-top: 8px; }
  .admin-changelog-body h4 { margin: 12px 0 6px; }
  .admin-changelog-raw { margin-top: 12px; }
}

@media (min-width: 769px) and (max-height: 760px) {
  .admin-changelog-board { height: calc(100vh - 220px); min-height: 440px; }
  .admin-changelog-detail-panel { padding: 14px 18px; }
}
.cleanup-target-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.cleanup-control-actions, .cleanup-submit-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cleanup-control-actions .layui-btn, .cleanup-submit-actions .layui-btn { min-height: 44px; }
.cleanup-target-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.cleanup-target-item { min-width: 0; min-height: 74px; align-items: flex-start; padding: 12px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel); }
.cleanup-target-item input { margin-top: 3px; }
.cleanup-target-item span { min-width: 0; display: grid; gap: 4px; }
.cleanup-target-item b { font-size: 0.875rem; }
.cleanup-target-item small { color: var(--muted); font-size: 0.75rem; line-height: 1.55; overflow-wrap: anywhere; word-break: break-word; }
.cleanup-target-disabled { opacity: .6; }
.cleanup-backup-confirm { margin-top: 14px; min-height: 44px; align-items: flex-start; }
.cleanup-submit-actions { justify-content: flex-end; margin-top: 12px; }
.cleanup-selected-summary { margin: 12px 0 0; padding: 9px 11px; border-left: 3px solid var(--primary); background: color-mix(in srgb, var(--primary) 6%, transparent); color: var(--muted); font-size: 0.8125rem; line-height: 1.6; overflow-wrap: anywhere; }
.cleanup-lines { min-width: 0; }
.cleanup-lines p { overflow-wrap: anywhere; word-break: break-word; }
@media (max-width:768px) {
  .release-summary { align-items: flex-start; flex-direction: column; gap: 14px; padding: 16px; }
  .release-score { width: 112px; height: 112px; flex-basis: 112px; }
  .release-score strong { font-size: 1.875rem; }
  .release-summary-copy h3 { font-size: 1.25rem; }
  .release-actions .layui-btn, .release-actions form, .release-actions form .layui-btn, .release-repair-form .layui-btn, .settings-release-links .layui-btn { width: 100%; justify-content: center; }
  .release-manifest-panel .panel-head, .release-history .panel-head { flex-direction: column; gap: 8px; }
  .release-manifest-badge { align-self: flex-start; }
  .release-manifest { padding: 12px; font-size: 0.75rem; line-height: 1.65; }
  .release-manifest-actions { align-items: stretch; flex-direction: column; }
  .release-manifest-actions .layui-btn, .release-manifest-actions form, .release-manifest-actions form .layui-btn, .release-manifest-disabled .layui-btn { width: 100%; justify-content: center; }
  .release-history-item-head { align-items: flex-start; flex-direction: column; gap: 4px; }
  .release-history-item-head time { white-space: normal; }
  .cleanup-target-toolbar { align-items: flex-start; flex-direction: column; }
  .cleanup-control-actions, .cleanup-submit-actions { width: 100%; }
  .cleanup-control-actions .layui-btn, .cleanup-submit-actions .layui-btn { flex: 1 1 100%; width: 100%; justify-content: center; min-height: 48px; }
  .cleanup-target-grid { grid-template-columns: 1fr; }
  .cleanup-target-item { min-height: 68px; padding: 11px; }
  .cleanup-submit-actions { flex-direction: column; }
  .release-check-grid { grid-template-columns: 1fr; }
  .release-check-item { padding: 14px; }
  .release-repair-form { align-items: stretch; flex-direction: column; }
  .release-repair-form .checkbox { min-height: 44px; align-items: flex-start; }
  .release-danger-badge { align-self: flex-start; }
}
/* 邀请码管理：桌面表格与手机端卡片自适应 */
.invite-code-list{display:flex;flex-wrap:wrap;gap:8px}.invite-code-list code{display:inline-block;padding:8px 12px;border-radius:calc(var(--radius-sm) - 2px);background:var(--bg,#f3f4f6);font-size:1rem;letter-spacing:.12em}.invite-list{overflow-x:auto}.invite-list table{min-width:760px}.invite-generated{border-color:var(--primary,#4f7cff)}
@media (max-width:768px){.invite-list table,.invite-list thead,.invite-list tbody,.invite-list th,.invite-list td,.invite-list tr{display:block}.invite-list thead{display:none}.invite-list tr{padding:12px 0;border-bottom:1px solid var(--border);}.invite-list td{display:flex;justify-content:space-between;gap:12px;padding:7px 4px;text-align:right}.invite-list td:before{content:attr(data-label);font-weight:600;color:var(--muted);text-align:left}.invite-list td:last-child{justify-content:flex-end}.invite-list td[colspan]{display:block;text-align:center}.invite-code-list code{font-size:0.875rem}}

/* 后台分享访问记录中心：筛选项在桌面分栏，手机端改为易读的记录卡片。 */
.admin-access-log-intro .panel-head { align-items: flex-start; gap: 16px; }
.admin-access-log-intro .panel-head h3 { margin-bottom: 6px; }
.admin-access-log-actions,
.admin-access-log-filter-actions,
.admin-access-log-actions-cell { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.admin-access-log-actions { flex-shrink: 0; justify-content: flex-end; }
.admin-access-log-stats { margin-bottom: 20px; }
.admin-access-log-filter-panel { min-width: 0; }
.admin-access-log-filter-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.admin-access-log-filter-grid > div { min-width: 0; }
.admin-access-log-filter-grid label { display: block; margin-bottom: 5px; color: var(--muted); font-size: 0.75rem; font-weight: 600; }
.admin-access-log-filter-grid input,
.admin-access-log-filter-grid select { width: 100%; min-width: 0; }
.admin-access-log-filter-grid > div:first-child { grid-column: span 2; }
.admin-access-log-filter-actions { justify-content: flex-start; margin-top: 14px; }
.admin-access-log-filter-actions .hint { margin-left: auto; }
.admin-access-log-table { min-width: 1080px; }
.admin-access-log-table td,
.admin-access-log-table th { vertical-align: middle; }
.admin-access-log-table code { overflow-wrap: anywhere; word-break: break-word; }
.admin-access-log-table .ellipsis { max-width: none; white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; word-break: break-word; }
.admin-access-log-empty { padding: 34px !important; color: var(--muted); text-align: center; }
.admin-access-log-actions-cell { min-width: 92px; }
.admin-access-log-pager { display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: 14px; }
@media (max-width:1100px) {
  .admin-access-log-filter-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width:768px) {
  .admin-access-log-intro .panel-head { flex-direction: column; }
  .admin-access-log-actions { width: 100%; justify-content: flex-start; }
  .admin-access-log-actions .layui-btn { width: 100%; justify-content: center; min-height: 44px; }
  .admin-access-log-filter-grid { grid-template-columns: 1fr; gap: 10px; }
  .admin-access-log-filter-grid > div:first-child { grid-column: auto; }
  .admin-access-log-filter-grid input,
  .admin-access-log-filter-grid select { min-height: 44px; }
  .admin-access-log-filter-actions { align-items: stretch; flex-direction: column; }
  .admin-access-log-filter-actions .layui-btn { width: 100%; justify-content: center; min-height: 44px; }
  .admin-access-log-filter-actions .hint { margin-left: 0; }
  .admin-access-log-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .admin-access-log-pager { flex-wrap: wrap; }
  .admin-access-log-table-wrap, .panel .table-responsive { -webkit-overflow-scrolling: touch; }
}
@media (max-width:768px) {
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table { min-width: 0; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table,
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table thead,
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table tbody,
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table tr,
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table th,
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table td { display: block; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table thead { display: none; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table tbody { display: flex; flex-direction: column; gap: 12px; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table tr { padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); box-shadow: var(--shadow-sm); }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table td { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; min-height: 36px; padding: 8px 0; text-align: right; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table td::before { content: attr(data-label); flex: 0 0 88px; color: var(--muted); font-size: 0.75rem; font-weight: 700; text-align: left; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table td > * { min-width: 0; max-width: calc(100% - 96px); }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table .ellipsis { max-width: calc(100% - 96px); white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; word-break: break-word; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table td[colspan] { display: block; text-align: center; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-table td[colspan]::before { display: none; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-actions-cell { justify-content: flex-end; }
  body.admin-page[data-mobile-table-mode="card"] .admin-access-log-actions-cell::before { margin-right: auto; }
}

/* 通知投递中心：桌面表格、失败摘要与手机端卡片适配（2026-08-30 10:22:29） */
.notification-delivery-page .notification-delivery-summary .panel-head{align-items:flex-start;gap:16px}
.notification-delivery-page .notification-delivery-summary .toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.notification-delivery-stats{grid-template-columns:repeat(5,minmax(0,1fr))}
.notification-delivery-channel-summary{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px;color:var(--muted);font-size:0.8125rem}
.notification-delivery-channel-summary span{padding:5px 10px;border:1px solid var(--border);border-radius:999px;background:var(--surface-soft,#f8fafc)}
.notification-delivery-filter{align-items:end}
.notification-delivery-filter-actions{display:flex;gap:8px;align-items:center}
.notification-delivery-batch-toolbar{display:flex;align-items:center;gap:12px;margin:0 0 12px;padding:10px 14px;border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);background:var(--surface-soft,#f8fafc)}
.notification-delivery-table{min-width:1120px}
.notification-delivery-table td small,.notification-delivery-table td details{display:block;margin-top:4px}
.notification-delivery-table pre{max-width:360px;max-height:180px;overflow:auto;white-space:pre-wrap;word-break:break-word;background:var(--surface-soft,#f8fafc);padding:8px;border-radius:calc(var(--radius-sm) - 2px);font-size:0.75rem}
.notification-delivery-table summary{cursor:pointer;color:var(--muted);font-size:0.75rem}
.notification-delivery-error{max-width:320px;white-space:normal;word-break:break-word}
.notification-delivery-detail{min-width:0}
.notification-delivery-detail-header{align-items:flex-start;gap:16px}
.notification-delivery-detail-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.notification-delivery-detail-actions form{margin:0}
.notification-delivery-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.notification-delivery-detail-item{display:flex;flex-direction:column;gap:6px;min-width:0;padding:12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft,#f8fafc)}
.notification-delivery-detail-item>span{color:var(--muted);font-size:0.75rem}
.notification-delivery-detail-item>strong,.notification-delivery-detail-item>code{font-size:0.875rem;overflow-wrap:anywhere}
.notification-delivery-detail-wide{grid-column:1/-1}
.notification-delivery-detail-item pre{margin:0;max-height:420px;overflow:auto;white-space:pre-wrap;word-break:break-word;font-size:0.75rem;line-height:1.6}
.notification-delivery-detail-payload{background:var(--surface,#fff);padding:10px;border-radius:calc(var(--radius-sm) - 2px)}
.notification-delivery-detail-break{overflow-wrap:anywhere}
.notification-delivery-detail-log-table td{vertical-align:top;word-break:break-word}
/* 通知渠道健康诊断：桌面多列卡片与手机端单列触控布局（2026-08-30 11:05:00） */
.notification-health-page{min-width:0}
.notification-health-intro .panel-head{align-items:flex-start;gap:16px}
.notification-health-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;flex-shrink:0}
.notification-health-actions form{margin:0}
.notification-health-window-form{display:flex;align-items:center;gap:10px;margin-top:16px;max-width:520px}
.notification-health-window-form label{color:var(--muted);font-size:0.8125rem;font-weight:600;white-space:nowrap}
.notification-health-window-form select{min-width:170px}
.notification-health-total-stats{grid-template-columns:repeat(6,minmax(0,1fr))}
.notification-health-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;align-items:stretch}
.notification-health-card{margin:0;position:relative;overflow:hidden}
.notification-health-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--primary,#4f7cff)}
.notification-health-card.is-healthy::before{background:var(--green)}.notification-health-card.is-warning::before{background:#d97706}.notification-health-card.is-critical::before{background:var(--red)}.notification-health-card.is-unconfigured::before,.notification-health-card.is-disabled::before{background:#94a3b8}
.notification-health-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding-left:8px}
.notification-health-card-head h3{margin-bottom:5px}
.notification-health-card-head p{margin:0;color:var(--muted);font-size:0.75rem;line-height:1.6}
.notification-health-status{display:inline-flex;align-items:center;justify-content:center;min-width:72px;padding:5px 9px;border-radius:999px;background:var(--surface-soft,#f8fafc);color:var(--muted);font-size:0.75rem;font-weight:700;white-space:nowrap}
.is-healthy .notification-health-status{background:rgba(22,163,74,.1);color:#15803d}.is-warning .notification-health-status{background:rgba(217,119,6,.12);color:#b45309}.is-critical .notification-health-status{background:rgba(220,38,38,.1);color:#b91c1c}
.notification-health-config{display:flex;flex-direction:column;gap:3px;margin:16px 0 12px;padding:9px 10px;border-radius:calc(var(--radius) - 5px);background:var(--surface-soft,#f8fafc);color:var(--muted);font-size:0.75rem}
.notification-health-config small{color:var(--text);line-height:1.5}
.notification-health-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:14px}
.notification-health-metrics div{padding:9px 7px;border:1px solid var(--border);border-radius:calc(var(--radius) - 5px);text-align:center;background:var(--panel)}
.notification-health-metrics b{display:block;font-size:1.125rem;color:var(--text)}.notification-health-metrics span{display:block;margin-top:3px;color:var(--muted);font-size:0.6875rem}
.notification-health-times{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0 0 16px;padding:10px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.notification-health-times div{min-width:0}.notification-health-times dt{color:var(--muted);font-size:0.75rem}.notification-health-times dd{margin:4px 0 0;overflow-wrap:anywhere;font-size:0.75rem}
.notification-health-card footer{display:flex;justify-content:flex-end}.notification-health-card footer .layui-btn{min-height:36px}
/* 维护页自动排程倒计时与手机端适配（2026-08-30 11:21:43） */
.maintenance-schedule-box{margin-top:16px;padding:14px;border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);background:var(--surface-soft,#f8fafc)}
.maintenance-schedule-box h4{margin:0 0 6px;font-size:0.875rem}.maintenance-schedule-box .hint{margin-bottom:10px}
.maintenance-countdown{display:flex;align-items:center;justify-content:center;gap:10px;margin:18px auto 0;padding:12px 16px;border-radius:calc(var(--radius) - 2px);background:linear-gradient(135deg,color-mix(in srgb, var(--primary) 10%, transparent),rgba(139,92,246,.1));color:var(--muted);font-size:0.8125rem}
.maintenance-countdown strong{color:var(--primary,#4f7cff);font-size:1.125rem;letter-spacing:.02em}
.share-schedule-preview{grid-column:1/-1;margin-top:18px;padding:16px;border:1px solid color-mix(in srgb,var(--primary) 22%,var(--border));border-radius:var(--radius);background:color-mix(in srgb,var(--primary) 5%,var(--panel));}
.share-schedule-preview-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}
.share-schedule-preview-head h3{margin:0 0 4px;font-size:1rem}
.share-schedule-preview-head .hint{margin:0}
.share-schedule-preview-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.share-schedule-preview-grid>div:not(.share-schedule-countdown){display:flex;flex-direction:column;gap:4px;padding:10px 12px;border-radius:var(--radius-sm);background:var(--panel);border:1px solid var(--border)}
.share-schedule-preview-grid>div>span{color:var(--muted);font-size:0.75rem}
.share-schedule-preview-grid>div>strong{font-size:0.875rem;word-break:break-word}
.share-schedule-countdown{grid-column:1/-1;display:flex;align-items:center;justify-content:center;min-height:42px;padding:8px 12px;border-radius:var(--radius-sm);background:color-mix(in srgb,var(--primary) 10%,var(--panel));color:var(--primary);font-weight:700;text-align:center;word-break:break-word}
.share-defaults-panel{margin-top:16px}
.share-defaults-form{margin-top:8px}
.share-defaults-checkbox{display:flex;align-items:center;min-height:44px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--panel)}
.share-defaults-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.share-defaults-actions .hint{margin:0}
@media(max-width:720px){
  .share-schedule-preview{padding:13px;margin-top:14px}
  .share-schedule-preview-head{flex-direction:column;gap:8px}
  .share-schedule-preview-head .badge{align-self:flex-start}
  .share-schedule-preview-grid{grid-template-columns:1fr}
  .share-schedule-countdown{grid-column:auto;min-height:44px}
  .share-defaults-actions{align-items:stretch;flex-direction:column;gap:8px}
  .share-defaults-actions .layui-btn{width:100%}
}
@media(max-width:900px){.notification-health-total-stats{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:720px){
  .notification-delivery-page .notification-delivery-summary .panel-head{display:block}
  .notification-delivery-page .notification-delivery-summary .toolbar{margin-top:12px}
  .notification-delivery-page .notification-delivery-summary .toolbar form,.notification-delivery-page .notification-delivery-summary .toolbar a{width:100%}
  .notification-delivery-page .notification-delivery-summary .toolbar .layui-btn{width:100%;min-height:42px}
  .notification-delivery-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .notification-delivery-stats .stat:last-child{grid-column:1/-1}
  .notification-delivery-filter{grid-template-columns:1fr}
  .notification-delivery-filter-actions{flex-direction:column;align-items:stretch}
  .notification-delivery-filter-actions .layui-btn{width:100%;min-height:42px}
  .notification-delivery-batch-toolbar{position:sticky;bottom:8px;z-index:3;justify-content:space-between;box-shadow:0 6px 20px rgba(15,23,42,.12)}
  .notification-delivery-table-wrap{overflow:visible}
  .notification-delivery-table{min-width:0;width:100%;display:block}
  .notification-delivery-table thead{display:none}
  .notification-delivery-table tbody,.notification-delivery-table tr,.notification-delivery-table td{display:block;width:100%}
  .notification-delivery-table tr{margin:0 0 12px;padding:12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface,#fff);box-shadow:0 2px 10px rgba(15,23,42,.05)}
  .notification-delivery-table td{display:grid;grid-template-columns:92px minmax(0,1fr);gap:8px;padding:7px 0;border:0;word-break:break-word}
  .notification-delivery-table td:before{content:attr(data-label);font-weight:600;color:var(--muted)}
  .notification-delivery-table td:first-child:before{content:'选择'}
  .notification-delivery-table td:nth-child(2):before{content:'创建时间'}
  .notification-delivery-table td:nth-child(3):before{content:'渠道'}
  .notification-delivery-table td:nth-child(4):before{content:'模板 / 来源'}
  .notification-delivery-table td:nth-child(5):before{content:'收件目标'}
  .notification-delivery-table td:nth-child(6):before{content:'状态'}
  .notification-delivery-table td:nth-child(7):before{content:'尝试次数'}
  .notification-delivery-table td:nth-child(8):before{content:'耗时'}
  .notification-delivery-table td:nth-child(9):before{content:'详情'}
  .notification-delivery-table td:nth-child(10):before{content:'操作'}
  .notification-delivery-table pre{max-width:100%}
  .notification-delivery-detail-header{display:block}
  .notification-delivery-detail-actions{margin-top:12px;display:grid;grid-template-columns:1fr}
  .notification-delivery-detail-actions form,.notification-delivery-detail-actions .layui-btn{width:100%}
  .notification-delivery-detail-actions .layui-btn{min-height:44px;justify-content:center}
  .notification-delivery-detail-grid{grid-template-columns:1fr;gap:10px}
  .notification-delivery-detail-wide{grid-column:auto}
  .notification-delivery-detail-log-table{min-width:0;width:100%;display:block}
  .notification-delivery-detail-log-table thead{display:none}
  .notification-delivery-detail-log-table tbody,.notification-delivery-detail-log-table tr,.notification-delivery-detail-log-table td{display:block;width:100%}
  .notification-delivery-detail-log-table tr{margin:0 0 10px;padding:10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface,#fff)}
  .notification-delivery-detail-log-table td{display:grid;grid-template-columns:76px minmax(0,1fr);gap:8px;padding:5px 0;border:0}
  .notification-delivery-detail-log-table td:before{content:attr(data-label);color:var(--muted);font-size:0.75rem;font-weight:600}
  .notification-delivery-detail-log-table .layui-btn{min-height:40px;justify-content:center}
  .notification-health-intro .panel-head{display:block}
  .notification-health-actions{margin-top:12px;display:grid;grid-template-columns:1fr}
  .notification-health-actions form,.notification-health-actions .layui-btn{width:100%}
  .notification-health-actions .layui-btn{min-height:42px}
  .notification-health-window-form{align-items:stretch;flex-direction:column;max-width:none}
  .notification-health-window-form select,.notification-health-window-form .layui-btn{width:100%;min-height:42px}
  .notification-health-total-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .notification-health-grid{grid-template-columns:1fr;gap:12px}
  .notification-health-card-head{display:block}
  .notification-health-status{margin-top:10px}
.notification-health-card footer,.notification-health-card footer .layui-btn{width:100%}
  .maintenance-schedule-box .grid2{grid-template-columns:1fr}
  .maintenance-countdown{align-items:flex-start;flex-direction:column;text-align:center}
  .maintenance-countdown strong{width:100%;font-size:1rem}
}


/* ===== 2026-08-30 12:26:31：后台单个分享详情与访问统计，桌面双列、手机单列卡片 ===== */
.share-detail { display:grid; gap:18px; }
.share-detail .panel { margin-bottom:0; }
.share-detail-header .panel-head { align-items:flex-start; }
.share-detail-header .eyebrow { margin:0 0 4px; color:var(--primary); font-size:0.75rem; font-weight:700; }
.share-detail-actions { display:flex; gap:8px; flex-wrap:wrap; justify-content:flex-end; }
.share-detail-info-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px 18px; }
.share-detail-info-grid > div { min-width:0; display:flex; flex-direction:column; gap:5px; }
.share-detail-info-wide { grid-column:1/-1; }
.share-detail-label { color:var(--muted); font-size:0.75rem; }
.share-detail-url { color:var(--primary); overflow-wrap:anywhere; }
.share-detail-policy-message { color:var(--muted); font-size:0.75rem; overflow-wrap:anywhere; }
.share-detail-policy-text { color:var(--text); line-height:1.7; overflow-wrap:anywhere; }
.share-detail-summary { margin:0; grid-template-columns:repeat(4,minmax(0,1fr)); }
.share-detail-filter form { display:grid; gap:12px; }
.share-detail-filter-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; }
.share-detail-filter-grid > div { min-width:0; }
.share-detail-filter-actions { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.share-detail-filter-actions .hint { margin-left:auto; }
.share-detail-table-panel { min-width:0; }
.share-detail-table td,.share-detail-table th { vertical-align:top; }
.share-detail-device { max-width:320px; overflow-wrap:anywhere; }
.share-detail-request code { overflow-wrap:anywhere; }
.share-detail-empty { padding:28px!important; text-align:center; color:var(--muted); }
.share-detail-text { margin: 8px 0 0; max-height: 280px; overflow: auto; padding: 12px; border-radius: var(--radius-sm); background: var(--bg); border: 1px solid var(--border); white-space: pre-wrap; overflow-wrap: anywhere; font-size: 0.8125rem; line-height: 1.6; }
.share-detail-pager { display:flex; align-items:center; justify-content:center; gap:12px; margin-top:16px; }
.admin-share-actions { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.admin-share-actions form { margin:0; }
@media (max-width:768px) {
  .share-detail-header .panel-head { display:block; }
  .share-detail-actions { margin-top:12px; justify-content:stretch; }
  .share-detail-actions .layui-btn { flex:1 1 140px; min-height:42px; text-align:center; }
  .share-detail-info-grid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
  .share-detail-summary { grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
  .share-detail-summary .card { padding:15px; }
  .share-detail-summary .card .num { font-size:1.4375rem; }
  .share-detail-filter-grid { grid-template-columns:1fr; }
  .share-detail-filter-actions { align-items:stretch; }
  .share-detail-filter-actions .layui-btn { flex:1 1 140px; min-height:42px; text-align:center; }
  .share-detail-filter-actions .hint { width:100%; margin-left:0; }
  .share-detail-table thead { display:none; }
  .share-detail-table,.share-detail-table tbody,.share-detail-table tr,.share-detail-table td { display:block; width:100%; }
  .share-detail-table tr { margin-bottom:12px; padding:12px; border:1px solid var(--border); border-radius:var(--radius-sm); background:var(--bg); }
  .share-detail-table td { display:grid; grid-template-columns:82px minmax(0,1fr); gap:8px; padding:7px 0; border:0; text-align:left; overflow-wrap:anywhere; }
  .share-detail-table td::before { content:attr(data-label); color:var(--muted); font-size:0.75rem; }
  .share-detail-table .share-detail-empty { display:block; text-align:center; }
  .share-detail-device { max-width:none; }
  .admin-share-actions { flex-direction:column; align-items:stretch; }
  .admin-share-actions .layui-btn,.admin-share-actions form,.admin-share-actions form .layui-btn { width:100%; min-height:40px; }
}

/* ===== 2026-08-30 12:43:44：后台操作日志详情，支持长文本换行和手机端卡片 ===== */
.log-detail { min-width:0; }
.log-detail-header { align-items:flex-start; gap:16px; }
.log-detail-header h3 { margin-bottom:6px; }
.log-detail-actions { display:flex; align-items:center; justify-content:flex-end; gap:8px; flex-wrap:wrap; flex-shrink:0; }
.log-detail-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px 18px; }
.log-detail-item { min-width:0; display:flex; flex-direction:column; gap:6px; padding:12px 14px; border:1px solid var(--border); border-radius:var(--radius-sm); background:color-mix(in srgb,var(--primary) 3%,var(--panel)); }
.log-detail-wide { grid-column:1/-1; }
.log-detail-label { color:var(--muted); font-size:0.75rem; font-weight:600; }
.log-detail-value { min-width:0; line-height:1.55; overflow-wrap:anywhere; word-break:break-word; }
.log-detail-code { display:block; padding:7px 9px; border-radius:calc(var(--radius-sm) - 3px); background:var(--bg); font-size:0.75rem; white-space:pre-wrap; }
.log-detail-break { overflow-wrap:anywhere; word-break:break-all; }
.log-detail-content { margin:0; max-height:360px; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere; word-break:break-word; color:var(--text); font:inherit; line-height:1.65; }
.log-detail-timeline .panel-head { align-items:flex-start; }
.log-detail-timeline .audit-timeline li { align-items:flex-start; }
.log-detail-timeline .audit-timeline li > div { min-width:0; flex:1; }
.log-detail-timeline .audit-timeline li > .layui-btn { flex-shrink:0; }
.log-row-actions { min-width:150px; }
.log-row-actions .layui-btn { margin:2px 4px 2px 0; white-space: normal; }
@media (max-width:1100px) {
  .log-detail-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media (max-width:768px) {
  .log-detail-header { display:block; }
  .log-detail-actions { margin-top:12px; justify-content:stretch; }
  .log-detail-actions .layui-btn { flex:1 1 140px; min-height:44px; text-align:center; }
  .log-detail-grid { grid-template-columns:1fr; gap:10px; }
  .log-detail-wide { grid-column:auto; }
  .log-detail-item { padding:11px 12px; }
  .log-detail-content { max-height:300px; }
  .log-detail-timeline .audit-timeline li { padding-right:0; flex-wrap:wrap; }
  .log-detail-timeline .audit-timeline li > .layui-btn { width:100%; min-height:44px; margin-top:4px; }
  .log-row-actions { min-width:0; white-space:normal; }
  .log-row-actions .layui-btn { min-height:40px; margin:2px 0; }
}

/* ===== 2026-08-30 13:29:36：后台安全事件详情与处置中心，桌面网格、长文本换行与手机端卡片 ===== */
.security-event-detail { min-width:0; }
.security-event-detail-header { align-items:flex-start; gap:16px; }
.security-event-detail-header h3 { margin-bottom:6px; }
.security-event-detail-actions { display:flex; align-items:center; justify-content:flex-end; gap:8px; flex-wrap:wrap; flex-shrink:0; }
.security-event-detail-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px 18px; }
.security-event-detail-item { min-width:0; display:flex; flex-direction:column; gap:6px; padding:12px 14px; border:1px solid var(--border); border-radius:var(--radius-sm); background:color-mix(in srgb,var(--primary) 3%,var(--panel)); }
.security-event-detail-item > span { color:var(--muted); font-size:0.75rem; font-weight:600; }
.security-event-detail-item > strong { min-width:0; line-height:1.55; overflow-wrap:anywhere; word-break:break-word; }
.security-event-detail-wide { grid-column:1/-1; }
.security-event-detail-break { min-width:0; overflow-wrap:anywhere; word-break:break-all; }
.security-event-detail-code { display:block; max-width:100%; padding:7px 9px; border-radius:calc(var(--radius-sm) - 3px); background:var(--bg); white-space:pre-wrap; overflow-wrap:anywhere; word-break:break-all; font-size:0.75rem; }
.security-event-detail-item pre { margin:0; max-height:320px; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere; word-break:break-word; color:var(--text); font:inherit; line-height:1.65; }
.security-event-action-panel,.security-event-related-panel { min-width:0; }
.security-event-action-form { display:grid; gap:10px; }
.security-event-action-form label { color:var(--muted); font-size:0.75rem; font-weight:600; }
.security-event-action-form textarea { width:100%; min-height:112px; resize:vertical; }
.security-event-action-buttons { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.security-event-action-buttons .layui-btn { min-height:40px; }
.security-event-related-panel .panel-head { align-items:flex-start; gap:12px; }
.security-event-related-list { display:grid; gap:10px; }
.security-event-related-list article { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; min-width:0; padding:12px 14px; border:1px solid var(--border); border-radius:var(--radius-sm); background:var(--surface-soft,#f8fafc); }
.security-event-related-list article > div { min-width:0; flex:1; }
.security-event-related-list time { display:block; color:var(--muted); font-size:0.75rem; }
.security-event-related-list strong { display:block; margin-top:3px; overflow-wrap:anywhere; }
.security-event-related-list p { margin:5px 0 0; color:var(--muted); line-height:1.55; overflow-wrap:anywhere; word-break:break-word; }
.security-event-related-list article > .layui-btn { flex-shrink:0; min-height:36px; }
.security-event-access-table { min-width:760px; }
.security-event-access-table td,.security-event-access-table th { vertical-align:top; }
.security-event-table { min-width:880px; }
.security-event-table td,.security-event-table th { vertical-align:top; }
.security-event-pending-alert { display:flex; align-items:flex-start; gap:8px; line-height:1.6; }
@media (max-width:1100px) {
  .security-event-detail-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media (max-width:768px) {
  .security-event-detail-header { display:block; }
  .security-event-detail-actions { margin-top:12px; justify-content:stretch; }
  .security-event-detail-actions .layui-btn { flex:1 1 140px; min-height:44px; text-align:center; }
  .security-event-detail-grid { grid-template-columns:1fr; gap:10px; }
  .security-event-detail-wide { grid-column:auto; }
  .security-event-detail-item { padding:11px 12px; }
  .security-event-detail-item pre { max-height:260px; }
  .security-event-action-buttons { align-items:stretch; flex-direction:column; }
  .security-event-action-buttons .layui-btn { width:100%; min-height:44px; }
  .security-event-related-list article { display:block; }
  .security-event-related-list article > .layui-btn { display:block; width:100%; margin-top:10px; min-height:44px; text-align:center; }
  .security-event-access-table { min-width:0; width:100%; display:block; }
  .security-event-access-table thead { display:none; }
  .security-event-access-table tbody,.security-event-access-table tr,.security-event-access-table td { display:block; width:100%; }
  .security-event-access-table tr { margin:0 0 10px; padding:10px 12px; border:1px solid var(--border); border-radius:var(--radius-sm); background:var(--bg); }
  .security-event-access-table td { display:grid; grid-template-columns:88px minmax(0,1fr); gap:8px; padding:6px 0; border:0; overflow-wrap:anywhere; word-break:break-word; }
  .security-event-access-table td::before { content:attr(data-label); color:var(--muted); font-size:0.75rem; }
  .security-event-access-table td:nth-child(1)::before { content:'分享编号'; }
  .security-event-access-table td:nth-child(2)::before { content:'动作'; }
  .security-event-access-table td:nth-child(3)::before { content:'结果'; }
  .security-event-access-table td:nth-child(4)::before { content:'IP'; }
  .security-event-access-table td:nth-child(5)::before { content:'时间'; }
  .security-event-access-table td:nth-child(6)::before { content:'请求编号'; }
  .security-event-table { min-width:0; width:100%; display:block; }
  .security-event-table thead { display:none; }
  .security-event-table tbody,.security-event-table tr,.security-event-table td { display:block; width:100%; }
  .security-event-table tr { margin:0 0 10px; padding:10px 12px; border:1px solid var(--border); border-radius:var(--radius-sm); background:var(--bg); }
  .security-event-table td { display:grid; grid-template-columns:76px minmax(0,1fr); gap:8px; padding:6px 0; border:0; overflow-wrap:anywhere; word-break:break-word; }
  .security-event-table td::before { content:attr(data-label); color:var(--muted); font-size:0.75rem; }
  .security-event-table td:nth-child(1)::before { content:'事件'; }
  .security-event-table td:nth-child(2)::before { content:'目标'; }
  .security-event-table td:nth-child(3)::before { content:'结果'; }
  .security-event-table td:nth-child(4)::before { content:'风险'; }
  .security-event-table td:nth-child(5)::before { content:'处理状态'; }
  .security-event-table td:nth-child(6)::before { content:'IP'; }
  .security-event-table td:nth-child(7)::before { content:'时间'; }
  .security-event-table td:nth-child(8)::before { content:'操作'; }
  .security-event-table td:last-child .layui-btn { min-height:40px; }
  .security-event-pending-alert { display:block; }
}

/* Webhook 订阅详情与投递摘要：安全隐藏密钥、桌面网格与手机端卡片布局（2026-08-30 16:46:53） */
.webhook-detail{min-width:0}
.webhook-detail-header{align-items:flex-start;gap:16px}
.webhook-detail-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;flex-shrink:0}
.webhook-detail-actions .layui-btn{white-space: normal}
.webhook-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}
.webhook-detail-item{display:flex;flex-direction:column;gap:6px;min-width:0;padding:12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft,#f8fafc)}
.webhook-detail-item>span{color:var(--muted);font-size:0.75rem}
.webhook-detail-item>strong,.webhook-detail-item>code{font-size:0.875rem;overflow-wrap:anywhere;word-break:break-word}
.webhook-detail-wide{grid-column:1/-1}
.webhook-detail-break{white-space:pre-wrap;overflow-wrap:anywhere}
.webhook-detail-tags{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.webhook-detail-usage{min-width:0}
.webhook-detail-usage .panel-head{align-items:flex-start;gap:16px}
.webhook-detail-range{display:flex;align-items:center;gap:8px;margin:0;flex-wrap:wrap}
.webhook-detail-range select{min-height:38px;min-width:150px}
.webhook-detail-stats{grid-template-columns:repeat(6,minmax(0,1fr));margin:14px 0}
.webhook-detail-last-summary{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 12px;color:var(--muted);font-size:0.75rem}
.webhook-detail-last-summary span{padding:6px 10px;border:1px solid var(--border);border-radius:999px;background:var(--surface-soft,#f8fafc)}
.webhook-detail-usage-table{min-width:860px}
.webhook-detail-usage-table td{vertical-align:top;word-break:break-word}
.webhook-detail-usage-table code{overflow-wrap:anywhere}
@media(max-width:720px){
  .webhook-detail-header,.webhook-detail-usage .panel-head{display:block}
  .webhook-detail-actions{margin-top:12px;display:grid;grid-template-columns:1fr}
  .webhook-detail-actions .layui-btn{width:100%;min-height:44px;justify-content:center}
  .webhook-detail-grid{grid-template-columns:1fr;gap:10px}
  .webhook-detail-wide{grid-column:auto}
  .webhook-detail-range{margin-top:12px;display:grid;grid-template-columns:1fr}
  .webhook-detail-range select,.webhook-detail-range .layui-btn{width:100%;min-height:44px}
  .webhook-detail-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .webhook-detail-stats .stat:last-child{grid-column:1/-1}
  .webhook-detail-last-summary{display:grid;grid-template-columns:1fr;gap:6px}
  .webhook-detail-last-summary span{border-radius:calc(var(--radius-sm) - 2px)}
  .webhook-detail-usage-table{min-width:0;width:100%;display:block}
  .webhook-detail-usage-table thead{display:none}
  .webhook-detail-usage-table tbody,.webhook-detail-usage-table tr,.webhook-detail-usage-table td{display:block;width:100%}
  .webhook-detail-usage-table tr{margin:0 0 10px;padding:10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface,#fff)}
  .webhook-detail-usage-table td{display:grid;grid-template-columns:76px minmax(0,1fr);gap:8px;padding:5px 0;border:0}
  .webhook-detail-usage-table td:before{content:attr(data-label);color:var(--muted);font-size:0.75rem;font-weight:600}
}

/* 系统健康检查历史与趋势：桌面筛选、趋势摘要和手机端卡片（2026-08-30 17:09:17） */
.health-history-page{min-width:0}
.health-history-header{align-items:flex-start;gap:16px}
.health-history-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;flex-shrink:0}
.health-history-actions .layui-btn{white-space: normal}
.health-history-filter{align-items:flex-end;margin:14px 0 16px}
.health-history-filter label{display:flex;flex-direction:column;gap:5px;min-width:160px;color:var(--muted);font-size:0.75rem}
.health-history-filter select{min-height:40px}
.health-history-stats{grid-template-columns:repeat(4,minmax(0,1fr));margin:0 0 16px}
.health-history-table{min-width:900px}
.health-history-table td{vertical-align:top;word-break:break-word}
.health-history-score{font-size:0.9375rem}
.health-history-score-good{color:var(--green,#16a34a)}
.health-history-score-warn{color:var(--orange,#d97706)}
.health-history-score-error{color:var(--red,#dc2626)}
.health-history-details summary{cursor:pointer;color:var(--accent, var(--link));font-size:0.75rem;white-space:nowrap}
.health-history-details ul{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:8px;min-width:260px}
.health-history-details li{padding:8px;border:1px solid var(--border);border-radius:calc(var(--radius-sm) - 2px);background:var(--surface-soft,#f8fafc)}
.health-history-details li b{margin-right:6px}
.health-history-details li p{margin:5px 0 0;line-height:1.5;overflow-wrap:anywhere}
.health-history-details li small{display:block;margin-top:4px;color:var(--muted);line-height:1.5;overflow-wrap:anywhere}
.health-history-empty{padding:32px 16px;text-align:center}
.health-history-pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:14px}
@media(max-width:720px){
  .health-history-header{display:block}
  .health-history-actions{margin-top:12px;display:grid;grid-template-columns:1fr}
  .health-history-actions .layui-btn{width:100%;min-height:44px;justify-content:center}
  .health-history-filter{display:grid;grid-template-columns:1fr 1fr;gap:8px;align-items:stretch}
  .health-history-filter label{min-width:0}
  .health-history-filter .layui-btn,.health-history-filter a{width:100%;min-height:44px;justify-content:center}
  .health-history-filter .layui-btn{grid-column:1/-1}
  .health-history-filter a{grid-column:1/-1}
  .health-history-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .health-history-table{min-width:0;width:100%;display:block}
  .health-history-table thead{display:none}
  .health-history-table tbody,.health-history-table tr,.health-history-table td{display:block;width:100%}
  .health-history-table tr{margin:0 0 10px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface,#fff)}
  .health-history-table td{display:grid;grid-template-columns:84px minmax(0,1fr);gap:8px;padding:6px 0;border:0;overflow-wrap:anywhere}
  .health-history-table td:before{content:attr(data-label);color:var(--muted);font-size:0.75rem;font-weight:600}
  .health-history-details ul{min-width:0}
  .health-history-pager{justify-content:stretch}
  .health-history-pager .layui-btn{flex:1 1 120px;min-height:44px;justify-content:center}
  .health-history-pager .hint{width:100%;text-align:center}
}

/* 备份记录与校验摘要：桌面表格、表单提示和手机端卡片布局（2026-08-30 17:42:24） */
.backup-history-intro,.backup-history-record-form,.backup-history-list-panel,.backup-history-legacy-confirm{min-width:0}
.backup-history-reminder{margin:14px 0;color:var(--muted);line-height:1.65;overflow-wrap:anywhere}
.backup-history-links{display:flex;gap:8px;flex-wrap:wrap}
.backup-history-record-form form{align-items:end}
.backup-history-record-form textarea{width:100%;min-height:92px;resize:vertical}
.backup-history-record-form input,.backup-history-record-form select,.backup-history-record-form textarea{max-width:100%;box-sizing:border-box}
.backup-history-record-form .checkbox{display:flex;align-items:center;gap:8px;min-height:42px;line-height:1.5}
.backup-history-record-form .checkbox input{width:auto;flex:0 0 auto}
.backup-history-table{min-width:980px}
.backup-history-table td,.backup-history-table th{vertical-align:top}
.backup-history-table td{overflow-wrap:anywhere;word-break:break-word}
.backup-history-table code{display:inline-block;max-width:100%;white-space:normal;overflow-wrap:anywhere;word-break:break-all}
.backup-history-empty{padding:32px 16px;text-align:center}
.backup-history-pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:14px}
.backup-history-legacy-confirm form{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.backup-history-legacy-confirm .checkbox{display:flex;align-items:center;gap:8px;line-height:1.5}
@media(max-width:720px){
  .backup-history-links{display:grid;grid-template-columns:1fr}
  .backup-history-links .layui-btn{width:100%;min-height:44px;justify-content:center}
  .backup-history-record-form form{display:grid;grid-template-columns:1fr;gap:12px}
  .backup-history-record-form form>div{grid-column:auto!important}
  .backup-history-record-form .layui-btn{width:100%;min-height:44px}
  .backup-history-record-form .checkbox{align-items:flex-start}
  .backup-history-table{min-width:0;width:100%;display:block}
  .backup-history-table thead{display:none}
  .backup-history-table tbody,.backup-history-table tr,.backup-history-table td{display:block;width:100%}
  .backup-history-table tr{margin:0 0 10px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface,#fff)}
  .backup-history-table td{display:grid;grid-template-columns:84px minmax(0,1fr);gap:8px;padding:6px 0;border:0;overflow-wrap:anywhere;word-break:break-word}
  .backup-history-table td:before{content:attr(data-label);color:var(--muted);font-size:0.75rem;font-weight:600}
  .backup-history-table td:last-child form{margin:0}
  .backup-history-table td:last-child .link{min-height:40px}
  .backup-history-pager{justify-content:stretch}
  .backup-history-pager .layui-btn{flex:1 1 120px;min-height:44px;justify-content:center}
  .backup-history-pager .hint{width:100%;text-align:center}
  .backup-history-legacy-confirm form{align-items:stretch;flex-direction:column}
  .backup-history-legacy-confirm form .layui-btn{width:100%;min-height:44px}
}

/* =====================================================================
   表单体系统一升级：搜索联想/历史、增强下拉、开关、单选、已选条件等
   ===================================================================== */
:root {
  --field-radius: 11px;
  --field-height: 46px;
  --field-border: var(--border);
  --field-focus: var(--primary);
  --field-hover: color-mix(in srgb, var(--primary) 20%, var(--border));
  --field-disabled: color-mix(in srgb, var(--bg) 78%, var(--panel));
  --field-invalid: var(--red);
  --dropdown-radius: 12px;
  --dropdown-shadow: 0 14px 40px rgba(15,23,42,.18), 0 4px 14px rgba(15,23,42,.10);
  --overlay-bg: color-mix(in srgb, var(--panel) 96%, transparent);
  --control-transition: border-color .16s ease, box-shadow .16s ease, background .16s ease, color .16s ease, transform .14s ease;
}

/* 基础输入态统一增强（保持原有选择器边界，避免影响文件/按钮等特殊控件） */
input:where(:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]):not([type=button]):not([type=submit]):not([type=reset])),
select,
textarea { border-radius: var(--field-radius); transition: var(--control-transition); }

select { padding-right: 42px; }

input:focus, select:focus, textarea:focus {
  border-color: var(--field-focus); box-shadow: 0 0 0 3px color-mix(in srgb,var(--primary) 14%,transparent);
}

input.input-invalid, select.input-invalid, textarea.input-invalid {
  border-color: var(--field-invalid); box-shadow: 0 0 0 3px color-mix(in srgb,var(--red) 12%,transparent); background: color-mix(in srgb,var(--red) 3%,var(--panel));
}

/* 日期/时间控件与选择器共享可点区域与图标反馈 */
input[type=date], input[type=datetime-local], input[type=time], input[type=month], input[type=week] { min-height: var(--field-height); }

/* 单选与复选美化：所有 checkbox/radio 统一品牌勾选与按下反馈 */
input[type=checkbox]:not(.ui-native-check), input[type=radio]:not(.ui-native-radio) { accent-color: var(--primary); }
.checkbox input, .compact-checkbox input, input[type=checkbox] { accent-color: var(--primary); }
label.checkbox { min-height: 20px; }
.checkbox:hover { color: var(--text); }

/* 自定义开关（label.ui-switch） */
.ui-switch { position: relative; display: inline-flex; align-items: center; gap: 10px; cursor: pointer; user-select: none; min-height: 28px; }
.ui-switch input[type=checkbox] { position: absolute; opacity: 0; width: 1px; height: 1px; }
.ui-switch .switch-pill {
  position: relative; width: 46px; height: 26px; flex: 0 0 46px; border-radius: 999px;
  background: color-mix(in srgb, var(--muted) 30%, transparent);
  border: 1px solid color-mix(in srgb, var(--muted) 38%, var(--border));
  transition: background .2s ease, border-color .2s ease;
}
.ui-switch .switch-pill::after {
  content: ''; position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; border-radius: 50%;
  background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.25);
  transition: transform .2s cubic-bezier(.4,0,.2,1);
}
.ui-switch input:checked + .switch-pill { background: linear-gradient(135deg,var(--grad-a),var(--grad-b)); border-color: transparent; }
.ui-switch input:checked + .switch-pill::after { transform: translateX(20px); }
.ui-switch input:focus-visible + .switch-pill { box-shadow: 0 0 0 3px color-mix(in srgb,var(--primary) 22%,transparent); }
.ui-switch input:disabled + .switch-pill { opacity: .5; cursor: not-allowed; }

/* 快捷筛选标签（搜索框下方常用词） */
.quick-filters { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.quick-filter {
  min-height: 34px; padding: 4px 13px; border: 1px solid var(--border); border-radius: 999px;
  background: var(--panel); color: var(--muted); font-size: 0.78125rem; cursor: pointer; white-space: nowrap;
  transition: var(--control-transition);
}
.quick-filter:hover, .quick-filter:focus-visible { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }
.quick-filter.active { background: var(--primary); color: #fff; border-color: var(--primary); }

/* 搜索历史 / 联想下拉弹窗统一外观 */
.search-popover {
  position: absolute; left: 0; right: 0; top: calc(100% + 8px); z-index: 1200;
  min-width: 240px; overflow: hidden; color: var(--text);
  background: var(--overlay-bg); border: 1px solid var(--border); border-radius: var(--dropdown-radius);
  box-shadow: var(--dropdown-shadow); animation: popoverIn .18s var(--ease-smooth);
}
@keyframes popoverIn { from { opacity: 0; transform: translateY(-6px) scale(.99); } to { opacity: 1; transform: translateY(0) scale(1); } }
.search-popover-header { display: flex; align-items: center; justify-content: space-between; padding: 9px 12px; border-bottom: 1px solid var(--border); }
.search-popover-title { font-size: 0.75rem; color: var(--muted); font-weight: 600; }
.search-popover-action { border: 0; background: transparent; color: var(--primary); font-size: 0.75rem; cursor: pointer; padding: 3px 4px; border-radius: calc(var(--radius-sm) - 4px); }
.search-popover-action:hover { background: var(--primary-soft); }
.search-popover-list { max-height: 280px; overflow-y: auto; padding: 4px; margin: 0; list-style: none; }
.search-popover-item {
  display: flex; align-items: center; gap: 8px; width: 100%; padding: 10px 12px; min-height: 40px;
  border: 0; background: transparent; color: var(--text); font-size: 0.875rem; cursor: pointer; text-align: left; line-height: 1.4;
  border-radius: calc(var(--radius-sm) - 2px); transition: background .14s ease, color .14s ease;
}
.search-popover-item:hover, .search-popover-item:focus-visible, .search-popover-item.highlighted { background: var(--primary-soft); color: var(--primary); outline: none; }
.search-popover-item .pop-icon { width: 16px; height: 16px; flex: 0 0 16px; color: var(--muted); }
.search-popover-item:hover .pop-icon, .search-popover-item.highlighted .pop-icon { color: var(--primary); }
.search-popover-empty { padding: 16px; text-align: center; color: var(--muted); font-size: 0.8125rem; }

/* 下拉弹层滚动条 */
.search-popover-list::-webkit-scrollbar, .ui-select-popover-list::-webkit-scrollbar { width: 8px; }
.search-popover-list::-webkit-scrollbar-thumb, .ui-select-popover-list::-webkit-scrollbar-thumb { background: color-mix(in srgb,var(--muted) 28%,transparent); border-radius: 999px; border: 2px solid transparent; background-clip: padding-box; }

/* 已选条件标签区 */
.selected-filters { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; }
.selected-filter {
  display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 3px 10px;
  background: var(--primary-soft); color: var(--primary); border: 1px solid color-mix(in srgb,var(--primary) 24%,transparent); border-radius: 999px; font-size: 0.78125rem;
}
.selected-filter button { border: 0; background: transparent; color: inherit; width: 18px; height: 18px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; cursor: pointer; padding: 0; }
.selected-filter button:hover { background: color-mix(in srgb,var(--primary) 18%,transparent); }

/* 增强下拉：可搜索过滤 */
.ui-select { position: relative; display: inline-block; width: 100%; min-width: 180px; }
.ui-select > select { width: 100%; }
.ui-select-searchbox { position: relative; display: flex; align-items: center; margin-bottom: 6px; }
.ui-select-searchbox input {
  width: 100%; min-height: 40px; padding: 8px 13px 8px 35px; border: 1px solid var(--border);
  border-radius: var(--radius-sm); background: color-mix(in srgb,var(--panel) 92%,var(--bg)); color: var(--text);
  font-size: 0.8125rem; outline: none; transition: var(--control-transition);
}
.ui-select-searchbox input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px color-mix(in srgb,var(--primary) 14%,transparent); }
.ui-select-searchbox::before {
  content: ''; position: absolute; left: 11px; width: 15px; height: 15px; color: var(--muted);
  background: currentColor; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='10.5' cy='10.5' r='5.5' fill='none' stroke='black' stroke-width='2'/%3E%3Cpath d='m15 15 5.5 5.5' fill='none' stroke='black' stroke-width='2'/%3E%3C/svg%3E") center/contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='10.5' cy='10.5' r='5.5' fill='none' stroke='black' stroke-width='2'/%3E%3Cpath d='m15 15 5.5 5.5' fill='none' stroke='black' stroke-width='2'/%3E%3C/svg%3E") center/contain no-repeat; pointer-events: none;
}

/* 高级筛选折叠面板 */
.advanced-filter-toggle { display: inline-flex; align-items: center; gap: 6px; min-height: 40px; padding: 0 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--panel); color: var(--text); cursor: pointer; font: inherit; font-size: 0.8125rem; transition: var(--control-transition); }
.advanced-filter-toggle:hover, .advanced-filter-toggle[aria-expanded="true"] { border-color: var(--primary); color: var(--primary); }
.advanced-filter-toggle svg { width: 16px; height: 16px; transition: transform .18s ease; }
.advanced-filter-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }
.advanced-filter-panel { display: grid; grid-template-columns: repeat(auto-fit,minmax(220px,1fr)); gap: 12px; overflow: hidden; transition: max-height .22s ease, opacity .2s ease, margin .2s ease, padding .2s ease; }
.advanced-filter-panel[hidden] { display: block; max-height: 0; opacity: 0; margin: 0; padding-top: 0; padding-bottom: 0; }
.advanced-filter-body { padding: 14px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb,var(--panel) 72%,var(--bg)); }

/* 空状态/加载/错误提示（通用挂载到 data-empty 容器） */
.form-state { display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 72px; padding: 16px; text-align: center; color: var(--muted); font-size: 0.8125rem; border: 1px dashed var(--border); border-radius: calc(var(--radius) - 2px); }
.form-state.loading::before { content: ''; width: 16px; height: 16px; border: 2px solid color-mix(in srgb,var(--primary) 24%,transparent); border-top-color: var(--primary); border-radius: 50%; animation: spin .8s linear infinite; }
.form-state.error { color: var(--red); border-color: color-mix(in srgb,var(--red) 30%,transparent); background: color-mix(in srgb,var(--red) 4%,var(--panel)); }
@keyframes spin { to { transform: rotate(360deg); } }

/* 查询按钮加载态 */
.layui-btn.is-loading { color: transparent !important; pointer-events: none; position: relative; }
.layui-btn.is-loading::after {
  content: ''; position: absolute; width: 18px; height: 18px; border: 2px solid rgba(255,255,255,.45);
  border-top-color: #fff; border-radius: 50%; animation: spin .7s linear infinite;
}

/* 移动端触控与 hover 抑制 */
@media (max-width:768px) {
  input:where(:not([type=checkbox]):not([type=radio])), select, textarea { min-height: 46px; }
  .quick-filter, .selected-filter { min-height: 40px; }
  .search-popover { position: fixed; left: 12px; right: 12px; max-height: 56vh; }
  .search-popover-list { max-height: 44vh; }
  .search-popover-item { min-height: 46px; font-size: 0.9375rem; }
  .advanced-filter-panel { grid-template-columns: 1fr; }
}
@media (hover:none) {
  .search-bar > .layui-btn:hover, .filter > .layui-btn:hover { transform: none; }
  .layui-btn:hover { transform: none; }
  .search-popover-item:hover { background: transparent; color: inherit; }
}


/* 上传速度预计时间与界面显示控制（2026-08-30 23:59:59） */
.upload-limit-hint{display:inline-flex;align-items:center;gap:6px;margin:4px 8px 0 0;padding:4px 9px;border:1px solid color-mix(in srgb,var(--primary) 18%,var(--border));border-radius:999px;background:color-mix(in srgb,var(--primary-soft) 55%,transparent)}
.upload-settings-head{align-items:center;gap:12px}
.upload-settings-head-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.upload-settings-toggle{display:inline-flex;align-items:center;justify-content:center;min-height:36px;gap:6px}
.upload-settings-toggle[aria-expanded="true"] svg{transform:rotate(180deg)}
.queue-item .qsize,.queue-item .qtype,.queue-item .qmethod,.queue-item .qbatch{flex:0 0 auto;max-width:150px;padding:3px 7px;border:1px solid var(--border);border-radius:999px;color:var(--muted);background:var(--panel);font-size:0.6875rem;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.queue-item .qmethod{color:var(--primary);border-color:color-mix(in srgb,var(--primary) 24%,var(--border));background:color-mix(in srgb,var(--primary-soft) 48%,var(--panel))}
/* 队列项内的“第 X / 共 N 个”批次序号，仅在本次上传包含多个文件时显示 */
.queue-item .qbatch{color:#0f766e;border-color:color-mix(in srgb,#0f766e 26%,var(--border));background:color-mix(in srgb,#0f766e 12%,var(--panel));font-variant-numeric:tabular-nums}
.upload-queue-completed-collapsed .queue-item.upload-done{display:none}
.upload-ui-toggle-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.upload-queue-actions [hidden],.queue-toolbar-meta [hidden],.queue-item [hidden],#queueRestoreNotice[hidden],[data-upload-setting][hidden],#dropzoneHelp[hidden],#fileTypeHint[hidden],#uploadSizeLimitHint[hidden],#chunkRuleHint[hidden],#storageLocation[hidden],#storageUploadHint[hidden],#uploadSettingsToggle[hidden]{display:none!important}
/* 上传设置折叠：桌面与手机端统一生效，标题行内按钮负责展开/收起 */
#uploadSettingsPanel.is-collapsed>:not(.panel-head){display:none!important}
#uploadSettingsPanel.is-collapsed .upload-settings-head{margin-bottom:0}

@media(max-width:768px){
  .upload-storage-picker { grid-column: 1 / -1; }
  .upload-storage-extra { grid-template-columns: 1fr; gap: 10px; }
  .upload-storage-public-hint { grid-column: auto; margin-top: -4px !important; }
  .upload-storage-public-option { min-height: 46px; }
  .upload-ui-toggle-grid{grid-template-columns:1fr}
  .upload-settings-head{align-items:flex-start}
  .upload-settings-head-actions{width:100%;justify-content:space-between}
  .upload-settings-toggle{display:inline-flex;min-height:40px;align-items:center;justify-content:center}
  .upload-mobile-queue-card .queue-item{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px 10px;padding:12px}
  .upload-mobile-queue-card .queue-item .q-select{grid-column:1;grid-row:1}
  .upload-mobile-queue-card .queue-item .qname{grid-column:2;grid-row:1;min-width:0;max-width:100%;white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word;line-height:1.5}
  .upload-mobile-queue-card .queue-item .q-cancel{grid-column:3;grid-row:1;min-width:44px;min-height:44px;justify-self:end}
  .upload-mobile-queue-card .queue-item .qsize,.upload-mobile-queue-card .queue-item .qtype,.upload-mobile-queue-card .queue-item .qmethod{grid-row:3;max-width:100%;font-size:0.65625rem}
  .upload-mobile-queue-card .queue-item .qbatch{grid-row:2;grid-column:1/-1;justify-self:start;max-width:100%;font-size:0.65625rem}
  .upload-mobile-queue-card .queue-item .qsize{grid-column:1/2}
  .upload-mobile-queue-card .queue-item .qtype{grid-column:2/3;justify-self:start}
  .upload-mobile-queue-card .queue-item .qmethod{grid-column:3/4;justify-self:end}
  .upload-mobile-queue-card .queue-item .q-progress-wrap{grid-column:1/-1;grid-row:4;order:initial;min-width:0;width:100%}
  .upload-mobile-queue-card .queue-item .qinfo{grid-column:1/-1;grid-row:5;order:initial;min-width:0;text-align:left;line-height:1.55;overflow-wrap:anywhere}
  .upload-mobile-queue-card.upload-mobile-queue-compact .queue-item .q-edit,.upload-mobile-queue-card.upload-mobile-queue-compact .queue-item .q-copy,.upload-mobile-queue-card.upload-mobile-queue-compact .queue-item .q-retry{grid-row:6;min-width:44px;min-height:44px;justify-content:center}
  .upload-mobile-queue-list.upload-mobile-queue-compact .queue-item .q-edit,.upload-mobile-queue-list.upload-mobile-queue-compact .queue-item .q-copy,.upload-mobile-queue-list.upload-mobile-queue-compact .queue-item .q-retry{min-width:44px;min-height:44px;justify-content:center}
  .upload-mobile-queue-compact .upload-queue-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .upload-mobile-queue-compact .upload-queue-actions .layui-btn,.upload-mobile-queue-compact .upload-queue-actions select{width:100%;min-width:0;min-height:44px;font-size:0.75rem;padding-left:9px;padding-right:9px}
  .upload-mobile-sticky-start body{padding-bottom:calc(82px + env(safe-area-inset-bottom,0px))}
.upload-mobile-sticky-start #btnStartUpload{position:fixed;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));z-index:1150;width:calc(100% - 24px);min-height:50px;justify-content:center;border-radius:var(--radius);box-shadow:0 10px 30px rgba(15,23,42,.24)}
}

/* 手机端上传操作栏与备注编辑器（2026-09-05 23:59:59） */
.upload-note-editor { min-width: 0; padding: 12px; border: 1px solid color-mix(in srgb, var(--border) 88%, var(--primary)); border-radius: calc(var(--radius) - 3px); background: color-mix(in srgb, var(--panel) 94%, var(--primary) 6%); }
.upload-note-editor-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 6px; }
.upload-note-editor-head label { margin: 0; color: var(--text); font-weight: 700; }
.upload-note-count { flex: 0 0 auto; color: var(--muted); font-size: 0.75rem; font-variant-numeric: tabular-nums; }
.upload-note-editor-tools { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 7px; }
.upload-note-editor-tools .layui-btn { min-height: 34px; padding: 5px 10px; font-size: 0.75rem; }
.upload-note-editor textarea { min-height: 0; resize: vertical; line-height: 1.55; }
.upload-note-editor-basic .upload-note-editor-tools { display: none; }
.upload-note-editor-basic textarea { min-height: 44px; }

@media (max-width: 768px) {
  .upload-mobile-action-scroll .upload-queue-actions {
    width: 100%; display: flex; flex-wrap: nowrap; align-items: stretch; gap: 8px; overflow-x: auto; overflow-y: hidden;
    padding: 3px 2px 7px; overscroll-behavior-inline: contain; scrollbar-width: thin; scroll-snap-type: x proximity;
  }
  .upload-mobile-action-scroll .upload-queue-actions > * { flex: 0 0 auto; min-height: var(--upload-mobile-action-height, 44px); scroll-snap-align: start; }
  .upload-mobile-action-scroll .upload-queue-actions .layui-btn,
  .upload-mobile-action-scroll .upload-queue-actions select { width: auto; min-width: 84px; min-height: var(--upload-mobile-action-height, 44px); padding: 8px 13px; border-radius: calc(var(--radius) - 3px); white-space: nowrap; }
  .upload-mobile-action-scroll .upload-queue-actions select { min-width: 132px; }
  .upload-mobile-action-scroll.upload-mobile-action-short .upload-queue-actions .layui-btn { min-width: 72px; padding-left: 11px; padding-right: 11px; font-size: 0.75rem; }
  .upload-mobile-pin-primary #btnStartUpload { position: sticky; left: 0; z-index: 2; box-shadow: 5px 0 10px -8px rgba(15,23,42,.5); }
  .upload-mobile-action-scroll .upload-note-editor { padding: 10px; }
  .upload-mobile-action-scroll .upload-note-editor textarea { font-size: 0.875rem; }
}

/* 首页宽屏与当前分享详情优化（2026-08-31 19:37:38） */
.home-page, .user-page { --home-wide-width: 1440px; }
.user-page.user-wide > main.container { max-width:var(--home-wide-width); }
.user-page.user-wide > .site-footer > .container { max-width:var(--home-wide-width); }
.home-wide-toggle { display:inline-flex; align-items:center; justify-content:center; gap:6px; min-width:82px; min-height:40px; padding:0 11px; border:1px solid var(--border); border-radius:calc(var(--radius) - 5px); background:color-mix(in srgb,var(--panel) 88%,transparent); color:var(--text); cursor:pointer; font:inherit; font-size:0.8125rem; line-height:1; touch-action:manipulation; transition:color .16s var(--ease-smooth),border-color .16s var(--ease-smooth),background .16s var(--ease-smooth),transform .16s var(--ease-smooth); }
.home-wide-toggle:hover,.home-wide-toggle.is-active { color:var(--primary); border-color:color-mix(in srgb,var(--primary) 50%,var(--border)); background:var(--primary-soft); }
.home-wide-toggle:active { transform:scale(.97); }
.home-wide-toggle:focus-visible { outline:3px solid color-mix(in srgb,var(--primary) 28%,transparent); outline-offset:2px; }
.home-wide-toggle svg { width:17px; height:17px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; flex:0 0 auto; }
.home-wide-toggle[hidden] { display:none !important; }

.home-page .share-result-detail { min-width:0; padding:24px; overflow:hidden; }
.home-page .share-detail-header { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; padding-bottom:16px; border-bottom:1px solid var(--border); }
.home-page .share-detail-heading { min-width:0; }
.home-page .share-detail-heading .eyebrow { display:block; margin-bottom:4px; color:var(--primary); font-size:0.75rem; font-weight:750; letter-spacing:.08em; }
.home-page .share-detail-heading h3 { margin:0; color:var(--text); font-size:1.3125rem; line-height:1.35; }
.home-page .share-detail-file-name { max-width:680px; margin:6px 0 0; color:var(--muted); font-size:0.875rem; line-height:1.5; overflow-wrap:anywhere; word-break:break-word; }
.home-page .share-detail-header-actions { display:flex; align-items:center; justify-content:flex-end; gap:8px; flex:0 0 auto; }
.home-page .share-detail-status { display:inline-flex; align-items:center; min-height:28px; padding:4px 10px; border-radius:999px; color:#087e64; background:color-mix(in srgb,var(--green) 14%,transparent); font-size:0.75rem; font-weight:750; white-space:nowrap; }
.home-page .share-detail-status.is-secchuan { color:var(--primary); background:var(--primary-soft); }
.home-page .share-detail-toggle { display:inline-flex; align-items:center; gap:5px; min-height:38px; padding:0 10px; border:1px solid var(--border); border-radius:calc(var(--radius) - 5px); background:transparent; color:var(--muted); cursor:pointer; font:inherit; font-size:0.75rem; touch-action:manipulation; transition:color .16s var(--ease-smooth),border-color .16s var(--ease-smooth),background .16s var(--ease-smooth); }
.home-page .share-detail-toggle:hover,.home-page .share-detail-toggle:focus-visible { color:var(--primary); border-color:var(--primary); background:var(--primary-soft); }
.home-page .share-detail-toggle:focus-visible { outline:3px solid color-mix(in srgb,var(--primary) 24%,transparent); outline-offset:2px; }
.home-page .share-detail-toggle svg { width:15px; height:15px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; transition:transform .18s var(--ease-smooth); }
.home-page .share-detail-toggle[aria-expanded="false"] svg { transform:rotate(-90deg); }
.home-page .share-detail-body { padding-top:16px; }
.home-page .share-detail-body.is-collapsed { display:none; }
.home-page .share-detail-intro { margin:0 0 16px; }
.home-page .share-detail-layout { display:grid; grid-template-columns:minmax(0,1fr) minmax(220px,280px); gap:22px; align-items:stretch; }
.home-page .share-detail-layout-compact .share-detail-layout { grid-template-columns:1fr; }
.home-page .share-detail-main { min-width:0; }
.home-page .share-detail-meta { display:flex; flex-wrap:wrap; gap:7px; margin-bottom:16px; }
.home-page .share-detail-meta-item { display:inline-flex; align-items:center; min-height:28px; max-width:100%; padding:4px 9px; border:1px solid color-mix(in srgb,var(--border) 86%,var(--primary)); border-radius:999px; color:var(--muted); background:color-mix(in srgb,var(--panel) 82%,var(--primary-soft)); font-size:0.75rem; line-height:1.3; overflow-wrap:anywhere; }
.home-page .share-detail-meta-item:first-child { color:var(--primary); border-color:color-mix(in srgb,var(--primary) 30%,var(--border)); background:var(--primary-soft); font-weight:700; }
.home-page .share-detail-label { display:block; margin-bottom:6px; color:var(--muted); font-size:0.75rem; font-weight:700; }
.home-page .share-detail-main .result-code { display:flex; align-items:center; justify-content:space-between; gap:12px; max-width:none; margin:0 0 14px; padding:14px 16px; border-radius:var(--radius); }
.home-page .result-code-copy { display:flex; align-items:center; gap:12px; min-width:0; }
.home-page .result-code-copy .share-detail-label { margin:0; flex:0 0 auto; }
.home-page .result-code-copy .big-code { min-width:0; }
.home-page .share-detail-main .result-expire { margin:0 0 14px; overflow-wrap:anywhere; }
.home-page .share-detail-link-block { min-width:0; }
.home-page .share-detail-link-block > .share-detail-label { margin-bottom:6px; }
.home-page .share-detail-main .result-link { display:flex; width:100%; max-width:none; margin:0; gap:8px; }
.home-page .share-detail-main .result-link input { min-width:0; width:100%; }
.home-page .share-detail-actions { display:flex; flex-wrap:wrap; gap:8px; margin-top:14px; }
.home-page .share-detail-actions .layui-btn { min-height:42px; }
.home-page .share-detail-email { display:block; max-width:none; margin:18px 0 0; padding-top:16px; border-top:1px solid var(--border); }
.home-page .share-detail-email-row { display:flex; gap:8px; min-width:0; }
.home-page .share-detail-email-row input { min-width:0; flex:1 1 auto; }
.home-page .share-detail-email-row .layui-btn { flex:0 0 auto; min-height:44px; }
.home-page .share-detail-qr { min-width:0; display:flex; flex-direction:column; align-items:center; justify-content:center; padding:18px 16px; border:1px solid color-mix(in srgb,var(--primary) 20%,var(--border)); border-radius:calc(var(--radius) + 2px); background:color-mix(in srgb,var(--primary) 4%,var(--panel)); }
.home-page .share-detail-qr-head { display:flex; align-items:center; justify-content:space-between; width:100%; gap:8px; color:var(--text); font-size:0.8125rem; font-weight:750; }
.home-page .share-detail-qr-head .hint { margin:0; font-size:0.6875rem; font-weight:500; }
.home-page .share-detail-qr .qr-wrap { width:100%; min-height:190px; display:grid; place-items:center; margin:12px 0 8px; }
.home-page .share-detail-qr #qrcode { width:180px; height:180px; display:grid; place-items:center; padding:10px; border:1px solid #e5e7eb; border-radius:calc(var(--radius) - 2px); background:#fff; box-shadow:0 8px 24px rgba(31,37,51,.12); }
.home-page .share-detail-qr #qrcode img,.home-page .share-detail-qr #qrcode canvas { display:block; width:160px !important; height:160px !important; max-width:100%; max-height:100%; }
.home-page .share-detail-qr-hint { max-width:210px; margin:0; text-align:center; line-height:1.5; overflow-wrap:anywhere; }
.home-page .share-detail-qr-download { margin-top:10px; min-height:38px; }
.home-page .share-detail-qr[hidden],.home-page .share-detail-email[hidden] { display:none !important; }

@media (min-width:1200px) {
  body.home-page main.home-main { max-width:1120px; }
  body.home-page .home-share-panel { padding-left:30px; padding-right:30px; }
  body.home-page .dropzone { min-height:230px; }
  body.home-page.home-wide .topbar > .container { max-width:var(--home-wide-width); }
  body.home-page.home-wide main.home-main { width: min(var(--home-wide-width), calc(100% - 32px)); max-width:var(--home-wide-width); display:grid; grid-template-columns:minmax(0,1fr) minmax(340px,420px); column-gap:24px; row-gap:24px; align-items:start; }
  body.home-page.home-wide main.home-main > .hero,
  body.home-page.home-wide main.home-main > .announcement-box,
  body.home-page.home-wide main.home-main > .home-share-panel,
  body.home-page.home-wide main.home-main > .public-stats-panel,
  body.home-page.home-wide main.home-main > #historyBox { grid-column:1 / -1; }
  body.home-page.home-wide main.home-main > .share-result-center { grid-column:1; min-width:0; margin-bottom:0; }
  body.home-page.home-wide main.home-main > .share-result-detail { grid-column:2; position:sticky; top:calc(var(--topbar-h) + 18px); margin-bottom:0; }
  body.home-page.home-wide main.home-main > * { min-width:0; }
  body.home-page.home-wide .share-result-table-wrap { max-width:100%; }
}

@media (max-width:1199px) {
  body.home-page main.home-main { max-width:100%; }
}

@media (max-width:768px) {
  .home-page .share-result-detail { padding:18px 14px; }
  .home-page .share-detail-header { flex-direction:column; gap:12px; }
  .home-page .share-detail-header-actions { width:100%; justify-content:space-between; }
  .home-page .share-detail-heading h3 { font-size:1.1875rem; }
  .home-page .share-detail-file-name { font-size:0.8125rem; }
  .home-page .share-detail-body { padding-top:14px; }
  .home-page .share-detail-layout,.home-page .share-detail-layout-compact .share-detail-layout { grid-template-columns:1fr; gap:14px; }
  .home-page .share-detail-main .result-code { align-items:flex-start; flex-wrap:wrap; padding:12px; }
  .home-page .result-code-copy { width:100%; justify-content:space-between; }
  .home-page .share-detail-main .result-code > .layui-btn { width:100%; justify-content:center; }
  .home-page .share-detail-main .result-link { flex-direction:column; }
  .home-page .share-detail-main .result-link .layui-btn { width:100%; justify-content:center; }
  .home-page .share-detail-actions { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); }
  .home-page .share-detail-actions .layui-btn { width:100%; justify-content:center; min-width:0; }
  .home-page .share-detail-email-row { flex-direction:column; }
  .home-page .share-detail-email-row .layui-btn { width:100%; justify-content:center; }
  .home-page .share-detail-qr { padding:14px; }
  .home-page .share-detail-qr .qr-wrap { min-height:166px; margin:10px 0 6px; }
  .home-page .share-detail-qr #qrcode { width:156px; height:156px; padding:8px; }
  .home-page .share-detail-qr #qrcode img,.home-page .share-detail-qr #qrcode canvas { width:140px !important; height:140px !important; }
  .home-page .share-detail-qr-download { width:100%; justify-content:center; }
}

/* 首页电脑端与手机端重构（2026-08-31 23:45:00） */
.home-main { --home-section-gap: 24px; width: min(1120px, calc(100% - 32px)); margin-right: auto; margin-left: auto; }
.home-page.home-density-compact .home-main { --home-section-gap: 16px; }
.home-main > * { min-width: 0; }


.banner-slider.banner-ratio-wide .banner-slide img, .banner-slider.banner-ratio-cinema .banner-slide img { aspect-ratio: 16 / 5; object-fit: cover; }
.banner-slider.banner-ratio-cinema .banner-slide img { aspect-ratio: 21 / 7; }
.banner-slider.banner-ratio-auto .banner-slide img { height: auto; aspect-ratio: auto; object-fit: contain; }



.home-eyebrow-dot { width: 8px; height: 8px; flex: 0 0 auto; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 4px color-mix(in srgb, var(--green) 14%, transparent); }

.hero-copy .hero-slogan { max-width: 650px; margin: 0; color: var(--muted); font-size: 1.0625rem; line-height: 1.65; overflow-wrap: anywhere; }
.hero-trust-line { display: flex; flex-wrap: wrap; gap: 8px 16px; margin-top: 20px; color: var(--muted); font-size: 0.75rem; }
.hero-trust-line span { display: inline-flex; align-items: center; gap: 6px; min-height: 24px; }
.hero-trust-line svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; color: var(--primary); }
.home-quick-links { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 26px; }
.home-quick-link { display: flex; flex-direction: column; align-items: flex-start; min-width: 0; min-height: 88px; padding: 13px 14px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--panel) 86%, transparent); color: var(--text); text-decoration: none; cursor: pointer; font: inherit; text-align: left; transition: border-color .16s var(--ease-smooth), background .16s var(--ease-smooth), transform .16s var(--ease-smooth); }
.home-quick-link:hover, .home-quick-link:focus-visible, .home-quick-link.is-primary { border-color: color-mix(in srgb, var(--primary) 48%, var(--border)); background: var(--primary-soft); }
.home-quick-link:active { transform: translateY(1px); }
.home-quick-link:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 24%, transparent); outline-offset: 2px; }
.home-quick-link svg { width: 19px; height: 19px; flex: 0 0 auto; margin-bottom: 10px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; color: var(--primary); }
.home-quick-link span { max-width: 100%; font-size: 0.8125rem; font-weight: 750; overflow-wrap: anywhere; }
.home-quick-link small { max-width: 100%; margin-top: 4px; color: var(--muted); font-size: 0.6875rem; line-height: 1.35; overflow-wrap: anywhere; }








.hero-command-foot span { display: inline-flex; align-items: center; gap: 5px; }
.hero-command-foot svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; color: var(--green); }
.hero-command-disabled { display: flex; align-items: center; justify-content: center; min-height: 140px; color: var(--muted); text-align: center; line-height: 1.6; }





.home-workspace-status { display: inline-flex; align-items: center; gap: 7px; flex: 0 0 auto; min-height: 30px; padding: 5px 10px; border: 1px solid color-mix(in srgb, var(--green) 28%, var(--border)); border-radius: 999px; color: var(--green); background: color-mix(in srgb, var(--green) 8%, transparent); font-size: 0.75rem; font-weight: 700; white-space: nowrap; }
.home-status-dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.home-insight-strip { margin-top: var(--home-section-gap); }
.home-insight-strip.home-insight-compact { padding-top: 14px; padding-bottom: 14px; }
.home-insight-strip.home-insight-compact .panel-head { margin-bottom: 8px; }
.home-insight-strip.home-insight-compact .stats-row { gap: 8px; }
.home-insight-strip.home-insight-compact .stat { min-height: 58px; padding: 8px 10px; }
.home-insight-strip.home-insight-compact .stat b { font-size: 1.25rem; }
.home-insight-strip.home-insight-cards .stat { border-radius: calc(var(--radius) - 2px); }
.home-page.home-hero-centered .home-hero-grid { grid-template-columns: 1fr; }
.home-page.home-hero-centered .hero-copy { align-items: center; text-align: center; }
.home-page.home-hero-centered .home-eyebrow, .home-page.home-hero-centered .hero-trust-line { justify-content: center; }
.home-page.home-hero-centered .home-quick-links { width: min(100%, 680px); }
.home-page.home-hero-minimal .hero-copy { padding-block: 28px; }
.home-page.home-hero-minimal .hero-copy h1 { margin-top: 8px; font-size: 2.25rem; }
.home-page.home-hero-minimal .hero-trust-line { margin-top: 12px; }
.home-page.home-hero-minimal .home-quick-links { margin-top: 16px; }
.home-page.home-layout-stacked .home-hero-grid { grid-template-columns: 1fr; }
.home-page.home-layout-split .home-hero-grid { grid-template-columns: minmax(0, 1fr) minmax(360px, .75fr); }
.home-mobile-action-bar { display: none; }

@media (max-width: 980px) {
  .home-hero-grid { grid-template-columns: 1fr; }
  .hero-command-card { min-height: auto; }
  .hero-copy h1 { font-size: 2.625rem; }
  .home-page.home-layout-split .home-hero-grid { grid-template-columns: 1fr; }
}

@media (max-width: 768px) {
  .home-page.home-has-mobile-action-bar { padding-bottom: calc(64px + env(safe-area-inset-bottom)); }
  .home-page.home-has-mobile-action-bar .home-footer { padding-bottom: 12px; }
  .home-main { --home-section-gap: 14px; width: calc(100% - 24px); padding-left: 0; padding-right: 0; }
  .home-hero-grid { gap: 14px; }
  .hero-copy { padding: 22px 16px; border-radius: calc(var(--radius) + 1px); }
  .hero-copy h1 { margin-top: 11px; font-size: 2rem; line-height: 1.15; }
  .hero-copy .hero-slogan { font-size: 0.875rem; line-height: 1.55; }
  .hero-trust-line { gap: 6px 12px; margin-top: 15px; }
  .home-quick-links { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 7px; margin-top: 18px; }
  .home-quick-link { min-height: 76px; padding: 10px 9px; border-radius: var(--radius-sm); }
  .home-quick-link svg { width: 17px; height: 17px; margin-bottom: 7px; }
  .home-quick-link span { font-size: 0.75rem; }
  .home-quick-link small { display: none; }
  .hero-command-card { padding: 16px; border-radius: calc(var(--radius) + 1px); }
  .hero-command-head h2 { font-size: 1rem; }
  .home-workspace { margin-top: 14px; }
  .home-workspace-head { flex-direction: column; gap: 9px; margin-bottom: 13px; }
  .home-workspace-head h2 { font-size: 1.1875rem; }
  .home-workspace-status { min-height: 28px; }
  .home-insight-strip { margin-top: 14px; }
  .home-insight-strip .stats-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .home-mobile-action-bar { position: fixed; right: 8px; bottom: max(4px, env(safe-area-inset-bottom)); left: 8px; z-index: 1100; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 2px; padding: 3px; border: 1px solid color-mix(in srgb, var(--border) 36%, transparent); border-radius: calc(var(--radius) + 2px); background: color-mix(in srgb, var(--bg) 42%, transparent); box-shadow: none; -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); }
  .home-mobile-action-bar button, .home-mobile-action-bar a { display: inline-flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; min-width: 0; min-height: 42px; padding: 4px 2px 3px; border: 0; border-radius: calc(var(--radius) - 2px); background: transparent; color: var(--muted); cursor: pointer; font: inherit; font-size: 0.625rem; text-decoration: none; touch-action: manipulation; }
  .home-mobile-action-bar button:hover, .home-mobile-action-bar button:focus-visible, .home-mobile-action-bar a:hover, .home-mobile-action-bar a:focus-visible { color: var(--primary); background: var(--primary-soft); }
  .home-mobile-action-bar svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
  .home-mobile-action-bar span { max-width: 100%; overflow-wrap: anywhere; }
  .home-page.home-hero-centered .home-quick-links { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .home-quick-link, .home-mobile-action-bar button, .home-mobile-action-bar a { transition: none; }
}

@media (max-width:420px) {
  .home-page .share-detail-meta { gap:5px; }
  .home-page .share-detail-meta-item { font-size:0.6875rem; padding-left:7px; padding-right:7px; }
  .home-page .share-detail-actions { grid-template-columns:1fr; }
  .home-page .share-detail-status { max-width:46vw; overflow:hidden; text-overflow:ellipsis; }
}

/* 上传队列分页、筛选与跨页批量操作（2026-08-31 20:54:07） */
.queue-item[hidden] { display:none !important; }
.queue-filter-bar { display:flex; align-items:center; gap:9px; flex-wrap:wrap; margin-top:10px; padding:10px 12px; border:1px solid var(--border); border-radius:var(--radius-sm); background:color-mix(in srgb,var(--panel) 94%,var(--primary) 6%); }
.queue-filter-bar > label:first-child { color:var(--muted); font-size:0.75rem; font-weight:700; }
.queue-filter-bar select,.queue-filter-bar input:not([type=checkbox]):not([type=radio]) { min-height:40px; }
.queue-filter-bar .input-wrap { flex:1 1 220px; min-width:160px; }
.queue-filter-bar .input-wrap input { width:100%; min-height:40px; padding-left:40px; }
.queue-filter-bar input { flex:1 1 220px; min-width:160px; }
.queue-selection-scope-wrap { display:inline-flex; align-items:center; gap:6px; color:var(--muted); font-size:0.75rem; white-space:nowrap; }
.queue-selection-scope-wrap select { min-width:132px; }
.queue-filter-bar.queue-filter-empty { border-style:dashed; }
.upload-queue-pagination { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-top:10px; padding:9px 11px; border:1px solid var(--border); border-radius:var(--radius-sm); background:color-mix(in srgb,var(--panel) 96%,var(--primary) 4%); }
.queue-pagination-main,.queue-pagination-tools { display:flex; align-items:center; gap:7px; flex-wrap:wrap; min-width:0; }
.queue-pagination-main .layui-btn,.queue-pagination-tools .layui-btn { min-height:38px; }
.queue-page-numbers { display:flex; align-items:center; gap:5px; }
.queue-page-number { min-width:38px; padding-left:8px; padding-right:8px; }
.queue-page-number.is-active { color:#fff; border-color:var(--primary); background:var(--primary); }
.queue-page-ellipsis { display:inline-flex; align-items:center; justify-content:center; min-width:18px; color:var(--muted); }
.queue-pagination-range { color:var(--muted); font-size:0.75rem; white-space:normal; overflow-wrap:anywhere; }
.queue-page-size-wrap,.queue-page-jump-wrap { display:inline-flex; align-items:center; gap:6px; color:var(--muted); font-size:0.75rem; white-space:nowrap; }
.queue-page-size,.queue-page-jump { min-height:38px; }
.queue-page-size { min-width:86px; }
.queue-page-jump { width:64px; padding-left:8px; padding-right:8px; }
.queue-pagination-compact .queue-page-first,.queue-pagination-compact .queue-page-last,.queue-pagination-compact .queue-page-numbers { display:none; }
.queue-pagination-mobile-compact .queue-page-first,.queue-pagination-mobile-compact .queue-page-last,.queue-pagination-mobile-compact .queue-page-numbers { display:none; }
@media (max-width:768px) {
  .queue-filter-bar { align-items:stretch; padding:10px; }
  .queue-filter-bar > label:first-child,.queue-selection-scope-wrap { width:100%; }
  .queue-filter-bar select,.queue-filter-bar input:not([type=checkbox]):not([type=radio]),.queue-filter-bar .input-wrap,#btnResetQueueFilter { width:100%; min-height:44px; }
  .queue-selection-scope-wrap select { flex:1; }
  .upload-queue-pagination { align-items:stretch; padding:9px; }
  .queue-pagination-main,.queue-pagination-tools { width:100%; justify-content:center; }
  .queue-pagination-main .layui-btn { min-width:82px; min-height:44px; }
  .queue-pagination-tools { justify-content:space-between; }
  .queue-pagination-tools .queue-pagination-range { flex:1 1 100%; text-align:center; }
  .queue-page-size-wrap,.queue-page-jump-wrap { min-height:44px; }
  .queue-page-size,.queue-page-jump,.queue-page-jump-submit { min-height:44px; }
  .queue-pagination-mobile-compact .queue-pagination-main { justify-content:space-between; }
  .queue-pagination-mobile-compact .queue-page-prev,.queue-pagination-mobile-compact .queue-page-next { flex:1 1 0; }
}

@media (prefers-reduced-motion: reduce) {
  .home-page .home-wide-toggle,.home-page .share-detail-toggle,.home-page .share-detail-toggle svg { transition:none; }
}

/* 文件夹上传与混合队列（2026-08-31 20:17:36） */
.folder-upload-actions { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:12px 0 2px; }
.folder-upload-button { min-height:42px; }
.folder-upload-hint { margin:0; }
.queue-item .qpath { grid-column:2 / -1; min-width:0; color:var(--muted); font-size:0.75rem; line-height:1.35; overflow-wrap:anywhere; word-break:break-word; }
@media (max-width:768px) {
  .folder-upload-actions { align-items:stretch; }
  .folder-upload-button { width:100%; justify-content:center; }
  .folder-upload-hint { width:100%; }
  .queue-item .qpath { grid-column:1 / -1; padding-left:30px; }
}

/* 首页视觉精修（2026-09-01 00:31:31）：保持现有结构与功能不变，统一玻璃质感、渐变细节、提取码工作台与统计卡视觉，并增强手机端呼吸感。 */
.home-page { --home-polish-gap: 22px; }
.home-page.home-density-compact { --home-polish-gap: 16px; }
.home-main { --home-section-gap: var(--home-polish-gap); }
.topbar { box-shadow: 0 8px 28px rgba(23,31,56,.07), 0 1px 0 rgba(255,255,255,.25) inset; }
.logo { font-weight: 850; }
.home-hero { margin-top: 2px; }
.hero-copy { position: relative; overflow: hidden; background: linear-gradient(145deg, color-mix(in srgb, var(--panel) 96%, var(--primary-soft)), color-mix(in srgb, var(--panel) 90%, transparent)); border-color: color-mix(in srgb, var(--primary) 22%, var(--border)); box-shadow: 0 18px 46px rgba(15,23,42,.08), inset 0 1px 0 rgba(255,255,255,.32); }
.hero-copy::after { content: ''; position: absolute; width: 230px; height: 230px; right: -76px; top: -112px; border-radius: 50%; background: radial-gradient(circle, color-mix(in srgb, var(--grad-b) 20%, transparent), transparent 70%); pointer-events: none; }
.hero-copy > * { position: relative; z-index: 1; }
.home-eyebrow { padding: 7px 11px; border: 1px solid color-mix(in srgb, var(--primary) 20%, var(--border)); border-radius: 999px; background: color-mix(in srgb, var(--panel) 60%, var(--primary-soft)); }
.home-eyebrow-dot { background: var(--green); box-shadow: 0 0 0 4px color-mix(in srgb, var(--green) 16%, transparent); }
.hero-copy h1 { font-size: clamp(38px, 4.4vw, 54px); font-weight: 850; letter-spacing: 0; background: linear-gradient(115deg, var(--grad-a), var(--grad-b) 58%, var(--grad-c)); background-size: 180% auto; -webkit-background-clip: text; background-clip: text; color: transparent; animation: heroTitleShift 9s var(--ease-smooth) infinite; }
.hero-copy .sub { max-width: 620px; color: var(--muted); font-size: clamp(15px, 1.6vw, 17px); line-height: 1.75; }
.hero-trust-line { gap: 9px 18px; }
.hero-trust-line span { min-height: 30px; padding: 6px 11px; border: 1px solid color-mix(in srgb, var(--border) 84%, var(--primary)); border-radius: 999px; background: color-mix(in srgb, var(--panel) 72%, transparent); }
.hero-trust-line svg { color: var(--green); }
.home-quick-links { gap: 12px; }
.home-quick-link { min-height: 92px; padding: 15px 16px; border-radius: var(--radius); background: color-mix(in srgb, var(--panel) 72%, transparent); }
.home-quick-link svg { width: 22px; height: 22px; margin-bottom: 11px; }
.home-quick-link:hover, .home-quick-link:focus-visible, .home-quick-link.is-primary { transform: translateY(-2px); border-color: color-mix(in srgb, var(--primary) 54%, var(--border)); box-shadow: 0 12px 26px color-mix(in srgb, var(--primary) 12%, transparent); }
.hero-command-card { position: relative; overflow: hidden; padding: 24px; border-color: color-mix(in srgb, var(--primary) 16%, var(--border)); border-radius: var(--radius-lg); background: linear-gradient(160deg, color-mix(in srgb, var(--panel) 98%, white), color-mix(in srgb, var(--panel) 88%, var(--primary-soft))); box-shadow: 0 18px 48px rgba(15,23,42,.11), inset 0 1px 0 rgba(255,255,255,.36); }
.hero-command-card::before { content: ''; position: absolute; width: 210px; height: 210px; left: -100px; bottom: -140px; border-radius: 50%; background: radial-gradient(circle, color-mix(in srgb, var(--grad-a) 15%, transparent), transparent 70%); pointer-events: none; }
.hero-command-card > * { position: relative; z-index: 1; }
.hero-command-head h2 { font-weight: 800; }
.hero-command-mark { display: inline-grid; place-items: center; width: 42px; height: 42px; flex: 0 0 auto; border: 1px solid color-mix(in srgb, var(--primary) 30%, var(--border)); border-radius: calc(var(--radius) - 2px); color: var(--primary); background: var(--primary-soft); font-size: 0.8125rem; font-weight: 800; letter-spacing: .06em; }
.hero-command-card form { gap: 13px; margin-top: 20px; }
.hero-command-card .code-form { display: flex; flex-direction: row; gap: 7px; max-width: none; margin: 0; background: var(--panel); border-radius: var(--radius); padding: 5px 5px 5px 16px; border-color: color-mix(in srgb, var(--primary) 22%, var(--border)); box-shadow: 0 8px 22px rgba(23,31,56,.07), inset 0 1px 0 rgba(255,255,255,.25); }
.code-form input { letter-spacing: .12em; }
.code-form .layui-btn { padding: 10px 22px; letter-spacing: 1px; box-shadow: 0 8px 20px color-mix(in srgb, var(--primary) 28%, transparent); }
.code-form-hint { margin-top: 12px; color: var(--muted); }
.code-form-hint b { color: var(--primary); }
.hero-command-foot { padding-top: 17px; }
.hero-command-foot svg { color: var(--green); }
.hero-command-disabled { min-height: 150px; padding: 18px; border: 1px dashed var(--border); border-radius: var(--radius); background: color-mix(in srgb, var(--bg) 60%, var(--panel)); flex-direction: column; }
.hero-command-disabled-icon { width: 46px; height: 46px; display: grid; place-items: center; margin-bottom: 10px; border-radius: calc(var(--radius) - 1px); color: var(--muted); background: color-mix(in srgb, var(--muted) 12%, transparent); }
.hero-command-disabled-icon svg { width: 23px; height: 23px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.hero-command-disabled strong { color: var(--text); font-size: 0.875rem; }
.hero-command-disabled .hint { margin-top: 4px; }
.home-workspace { border-color: color-mix(in srgb, var(--primary) 11%, var(--border)); }
.home-workspace-head { padding-bottom: 16px; border-bottom: 1px solid color-mix(in srgb, var(--border) 72%, transparent); }
.section-kicker { letter-spacing: .12em; }
.home-workspace-status { min-height: 32px; padding: 6px 12px; color: var(--green); background: color-mix(in srgb, var(--green) 9%, transparent); }
.home-insight-strip .panel-head { margin-bottom: 8px; }
.home-insight-cards .public-stats-row { gap: 12px; }
.home-insight-strip .stat { border-radius: var(--radius); background: color-mix(in srgb, var(--bg) 54%, var(--panel)); }
.home-insight-strip .stat b { font-size: 1.75rem; background: linear-gradient(120deg, var(--grad-a), var(--grad-b)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.announcement-box.home-announcement { border-left-color: color-mix(in srgb, var(--primary) 66%, var(--grad-b)); background: linear-gradient(90deg, color-mix(in srgb, var(--primary-soft) 82%, transparent), var(--panel) 48%); }
.footer { position: relative; }

@media (max-width: 768px) {
  .home-page { --home-polish-gap: 14px; }
  .hero-copy { padding: 24px 18px; border-radius: calc(var(--radius-lg) - 2px); }
  .hero-copy h1 { font-size: 2.125rem; line-height: 1.16; }
  .hero-copy .sub { font-size: 0.875rem; line-height: 1.7; }
  .home-eyebrow { padding: 6px 10px; font-size: 0.6875rem; }
  .hero-trust-line span { min-height: 28px; padding: 5px 10px; }
  .home-quick-links { gap: 10px; }
  .home-quick-link { min-height: 82px; padding: 12px 10px; border-radius: calc(var(--radius) - 2px); }
  .home-quick-link svg { width: 20px; height: 20px; margin-bottom: 9px; }
  .hero-command-card { padding: 18px; border-radius: calc(var(--radius-lg) - 2px); }
  .hero-command-head { padding-bottom: 14px; }
  .hero-command-card form { margin-top: 16px; }
  .hero-command-card .code-form { gap: 6px; padding-left: 13px; }
  .hero-command-disabled { min-height: 132px; }
  .home-workspace-head { padding-bottom: 13px; }
  .home-insight-strip .stat b { font-size: 1.5rem; }
}
@media (prefers-reduced-motion: reduce) {
  .hero-copy h1 { animation: none; }
  .home-quick-link { transition: none; }
}

.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; }





/* UI/UX Pro Max: Glassmorphism Hero Update */
.home-main { width: min(1120px, calc(100% - 32px)); padding-top: 24px; padding-bottom: 40px; }
.home-hero { padding: 0; background: transparent; border: 0; box-shadow: none; margin-bottom: 24px; }
.home-hero-grid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(360px, 0.8fr); gap: 24px; align-items: stretch; max-width: 1400px; margin: 0 auto; }
.hero-copy {
    display: flex; flex-direction: column; justify-content: flex-start; min-width: 0; 
    padding: clamp(26px, 3.8vw, 52px) clamp(22px, 4vw, 48px); 
    border: 1px solid color-mix(in srgb, var(--primary) 15%, var(--border)); 
    border-radius: var(--radius-lg); 
    background: radial-gradient(120% 120% at 80% 0%, color-mix(in srgb, var(--primary) 12%, transparent) 0%, transparent 40%),
                radial-gradient(100% 100% at 20% 100%, color-mix(in srgb, #c084fc 12%, transparent) 0%, transparent 50%),
                var(--panel);
    box-shadow: 0 12px 34px rgba(15,23,42,.05); text-align: left;
    position: relative; overflow: hidden;
}
.hero-copy::before {
    content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%;
    background: radial-gradient(circle at center, color-mix(in srgb, var(--primary) 10%, transparent) 0%, transparent 60%);
    pointer-events: none; z-index: 0;
}
.home-eyebrow, .hero-copy h1, .hero-copy .sub, .hero-trust-line, .home-quick-links { position: relative; z-index: 1; }

.home-eyebrow { 
    display: inline-flex; align-items: center; gap: 8px; width: fit-content; 
    color: var(--primary); font-size: 0.8125rem; font-weight: 700; letter-spacing: .05em; 
    background: var(--panel); padding: 6px 14px; border-radius: var(--radius-lg);
    box-shadow: 0 2px 10px rgba(0,0,0,0.03); border: 1px solid color-mix(in srgb, var(--primary) 10%, transparent);
}
.home-eyebrow-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--green); }

.hero-copy h1 { 
    max-width: 760px; margin: 22px 0 14px; color: var(--text); font-size: clamp(38px, 4.4vw, 54px); 
    line-height: 1.1; letter-spacing: 0; font-weight: 800; 
    background: linear-gradient(120deg, var(--primary), var(--grad-b));
    -webkit-background-clip: text; background-clip: text; color: transparent;
}
.hero-copy .sub { max-width: 520px; margin: 0; color: var(--muted); font-size: clamp(15px, 1.5vw, 17px); line-height: 1.7; }

.hero-trust-line { display: flex; flex-wrap: wrap; gap: 12px 20px; margin-top: 24px; color: var(--muted); font-size: 0.8125rem; }
.hero-trust-line span { 
    display: inline-flex; align-items: center; gap: 8px; min-height: 32px; 
    background: var(--panel); padding: 4px 16px; border-radius: var(--radius-lg); border: 1px solid var(--border);
}
.hero-trust-line svg { width: 16px; height: 16px; color: var(--green); }

.home-quick-links { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-top: 40px; }
.home-quick-link { 
    display: flex; flex-direction: column; align-items: flex-start; min-width: 0; min-height: 100px; 
    padding: 16px; border: 1px solid var(--border); border-radius: calc(var(--radius) + 2px); 
    background: color-mix(in srgb, var(--panel) 80%, transparent); color: var(--text); text-decoration: none; cursor: pointer; 
    transition: all .2s var(--ease-smooth); 
    backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
}
.home-quick-link:hover { transform: translateY(-3px); box-shadow: 0 10px 24px rgba(0,0,0,.06); border-color: color-mix(in srgb, var(--primary) 30%, var(--border)); }
.home-quick-link.is-primary { background: color-mix(in srgb, var(--primary) 8%, transparent); border-color: color-mix(in srgb, var(--primary) 20%, transparent); }
.home-quick-link svg { width: 22px; height: 22px; margin-bottom: 12px; color: var(--muted); transition: color .2s; }
.home-quick-link.is-primary svg { color: var(--primary); }
.home-quick-link:hover svg { color: var(--primary); }
.home-quick-link span { font-size: 0.9375rem; font-weight: 700; margin-bottom: 4px; }
.home-quick-link small { color: var(--muted); font-size: 0.75rem; line-height: 1.4; }

.hero-command-card { 
    display: flex; flex-direction: column; min-width: 0; min-height: 100%; padding: clamp(22px, 2.6vw, 40px); 
    border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--panel); 
    box-shadow: 0 12px 34px rgba(15,23,42,.06);
}
.hero-command-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding-bottom: 18px; border-bottom: 1px solid var(--border); margin-bottom: 20px;}
.hero-command-head h2 { margin: 5px 0 0; color: var(--text); font-size: 1.3125rem; font-weight: 750; letter-spacing: 0; }
.section-kicker { color: var(--primary); font-size: 0.75rem; font-weight: 750; letter-spacing: .06em; text-transform: uppercase; }
.hero-command-mark { 
    display: inline-grid; place-items: center; width: 42px; height: 42px; flex: 0 0 auto;
    background: var(--primary-soft); color: var(--primary); font-size: 0.875rem; font-weight: 800; 
    border: 1px solid color-mix(in srgb, var(--primary) 24%, var(--border)); padding: 0; border-radius: calc(var(--radius) - 2px); letter-spacing: .04em;
}

/* Modern input layout */
.hero-command-card form.code-form-hero {
    display: flex; flex-direction: column; gap: 12px; margin: 0; padding: 0; background: transparent; border: none; box-shadow: none; max-width: 100%;
}
.code-form-inner-wrapper { 
    display: flex; width: 100%; align-items: center; gap: 10px; 
    background: var(--bg); padding: 7px; border-radius: calc(var(--radius) + 2px); border: 1px solid var(--border);
}
.code-input-group { 
    display: flex; align-items: center; flex: 1; min-width: 0; padding-left: 13px; 
}
.code-label { 
    display: flex; flex-direction: column; align-items: flex-start; justify-content: center;
    color: var(--muted); font-size: 0.75rem; font-weight: 700;
    margin-right: 10px; white-space: nowrap; line-height: 1.25; 
    border-right: 1px solid var(--border); padding-right: 10px; gap: 1px;
}
.code-label span { display: inline-flex; align-items: center; gap: 5px; color: var(--text); font-size: 0.75rem; font-weight: 700; }
.code-label span::before { content: ''; width: 6px; height: 6px; flex: 0 0 auto; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 3px color-mix(in srgb, var(--green) 14%, transparent); }
.code-form-hero input { 
    min-height: 46px; font-size: 0.9375rem; letter-spacing: 0; font-weight: 600; 
    text-transform: uppercase; background: transparent; border: none; flex: 1; 
    padding: 0 8px; width: 100%; outline: none; box-shadow: none; min-width: 0;
}
.code-form-hero input::placeholder { color: color-mix(in srgb, var(--muted) 72%, transparent); letter-spacing: .01em; font-weight: 500; }
.hero-command-card .layui-btn.layui-btn-normal { 
    min-height: 46px; padding: 0 22px; font-size: 0.875rem; border-radius: calc(var(--radius) - 2px); flex: 0 0 auto; gap: 6px;
    background: linear-gradient(135deg, var(--primary), var(--grad-b)); box-shadow: 0 6px 16px color-mix(in srgb, var(--primary) 24%, transparent); border: none;
}
.hero-command-card .layui-btn.layui-btn-normal svg.action-icon { width: 17px; height: 17px; margin-right: 1px; }

.hero-command-card .code-form-hint { text-align: center; margin-top: 16px; }

.hero-command-foot { display: flex; justify-content: center; gap: 24px; margin-top: auto; padding-top: 32px; color: var(--muted); font-size: 0.8125rem; }
.hero-command-foot span { display: inline-flex; align-items: center; gap: 6px; }
.hero-command-foot svg { width: 16px; height: 16px; color: var(--green); }

/* Workspace UI update */
.home-workspace { border: 1px solid var(--border); border-radius: var(--radius-lg); box-shadow: 0 4px 20px rgba(0,0,0,0.03); padding: 40px; margin-top: 40px; background: var(--panel); }
.home-workspace-head { border-bottom: 1px solid var(--border); padding-bottom: 24px; margin-bottom: 32px; display: flex; align-items: flex-start; justify-content: space-between; }
.home-workspace-head h2 { margin: 8px 0 0; color: var(--text); font-size: 1.5rem; font-weight: 700; }
.home-status-dot { background: var(--green); width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.home-workspace-status { background: color-mix(in srgb, var(--green) 10%, transparent); color: var(--green); padding: 6px 16px; border-radius: var(--radius-lg); border: 1px solid color-mix(in srgb, var(--green) 20%, transparent); font-weight: 600; display: inline-flex; align-items: center; gap: 8px; font-size: 0.8125rem; }
.home-workspace .tabs { display: flex; gap: 12px; margin-bottom: 32px; background: var(--bg); padding: 6px; border-radius: calc(var(--radius) + 2px); width: fit-content; }
.home-workspace .tab { padding: 12px 24px; border-radius: calc(var(--radius) - 2px); font-weight: 600; color: var(--muted); border: none; background: transparent; cursor: pointer; transition: all .2s ease; display: inline-flex; align-items: center; gap: 8px; font-size: 0.9375rem; }
.home-workspace .tab:hover { color: var(--text); background: color-mix(in srgb, var(--panel) 50%, transparent); }
.home-workspace .tab.active { background: var(--panel); color: var(--primary); box-shadow: 0 2px 8px rgba(0,0,0,0.05); }

@media (max-width: 1024px) {
    .home-hero-grid { grid-template-columns: 1fr; }
    .hero-copy { padding: 40px 32px; }
    .hero-copy h1 { font-size: 2.625rem; }
    .home-quick-links { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); }
}
@media (max-width: 768px) {
    .hero-copy { padding: 28px 20px; }
    .hero-copy h1 { font-size: 2rem; }
    .hero-command-card { padding: 20px 16px; }
    .code-form-inner-wrapper { flex-wrap: wrap; padding: 8px; gap: 8px; }
    .code-input-group { flex: 1 1 100%; border-bottom: 1px solid var(--border); padding: 2px 4px 8px 4px; margin-bottom: 2px; }
    .code-label { margin-right: 8px; padding-right: 8px; }
    .hero-command-card .layui-btn.layui-btn-normal { flex: 1 1 100%; min-width: 0; }
    .home-workspace { padding: 24px 20px; }
    .home-workspace-head { flex-direction: column; gap: 16px; }
    .home-workspace .tabs { width: 100%; flex-wrap: wrap; }
    .home-workspace .tab { flex: 1 1 100%; justify-content: center; }
}

.hero-command-card .layui-btn.layui-btn-normal svg.action-icon { width: 18px; height: 18px; margin-right: 6px; }

/* 首页紧凑模式（2026-08-31 23:59:59）：保留核心操作，收紧首屏和分享工作区留白。 */
.home-compact .home-main { --home-section-gap: 16px; padding-top: 16px; padding-bottom: 28px; }
.home-compact .home-hero { margin-bottom: 16px; }
.home-compact .home-hero-grid { gap: 16px; }
.home-compact .hero-copy { padding: 34px 32px; border-radius: calc(var(--radius) + 2px); box-shadow: 0 8px 26px rgba(15,23,42,.06); }
.home-compact .hero-copy h1 { margin: 16px 0 10px; font-size: 2.625rem; line-height: 1.16; }
.home-compact .hero-copy .sub { font-size: 0.9375rem; line-height: 1.55; }
.home-compact .hero-trust-line { gap: 6px 12px; margin-top: 12px; }
.home-compact .home-quick-links { gap: 8px; margin-top: 16px; }
.home-compact .home-quick-link { min-height: 72px; padding: 11px 12px; border-radius: var(--radius-sm); }
.home-compact .home-quick-link svg { margin-bottom: 7px; }
.home-compact .home-quick-link small { margin-top: 2px; }
.home-quick-links.home-quick-links-detail .home-quick-link small { display: block; }
.home-compact .hero-command-card { padding: 24px; border-radius: calc(var(--radius) + 2px); box-shadow: 0 8px 26px rgba(15,23,42,.07); }
.home-compact .hero-command-head { padding-bottom: 14px; margin-bottom: 16px; }
.home-compact .hero-command-head h2 { font-size: 1.25rem; }
.home-compact .hero-command-card form { gap: 10px; margin-top: 0; }
.home-compact .hero-command-foot { gap: 14px; padding-top: 12px; font-size: 0.75rem; }
.home-compact .home-workspace { margin-top: 16px; padding: 24px; border-radius: calc(var(--radius) + 2px); box-shadow: 0 6px 20px rgba(15,23,42,.05); }
.home-compact .home-workspace-head { padding-bottom: 14px; margin-bottom: 18px; }
.home-compact .home-workspace-head h2 { font-size: 1.3125rem; }
.home-compact .home-workspace .tabs { gap: 6px; margin-bottom: 18px; padding: 4px; border-radius: calc(var(--radius) - 2px); }
.home-compact .home-workspace .tab { min-height: 44px; padding: 10px 18px; border-radius: calc(var(--radius) - 5px); }
.home-compact .home-insight-strip { margin-top: 16px; }
.home-compact .home-insight-strip .stat { min-height: 64px; padding: 10px 12px; }

@media (max-width: 768px) {
  .home-compact .home-main { padding-top: 12px; padding-bottom: 24px; }
  .home-compact .home-hero { margin-bottom: 12px; }
  .home-compact .home-hero-grid { gap: 12px; }
  .home-compact .hero-copy { padding: 18px 14px; border-radius: calc(var(--radius) - 1px); }
  .home-compact .hero-copy h1 { margin: 10px 0 8px; font-size: 1.875rem; line-height: 1.17; }
  .home-compact .hero-copy .sub { font-size: 0.8125rem; line-height: 1.5; }
  .home-compact .hero-trust-line { gap: 5px 9px; margin-top: 10px; }
  .home-compact .home-quick-links { gap: 6px; margin-top: 12px; }
  .home-compact .home-quick-link { min-height: 64px; padding: 9px 8px; border-radius: calc(var(--radius) - 5px); }
  .home-compact .home-quick-link svg { width: 17px; height: 17px; margin-bottom: 5px; }
  .home-compact .home-quick-link span { font-size: 0.6875rem; }
  .home-compact .home-quick-link small { font-size: 0.625rem; }
  .home-compact .hero-command-card { padding: 14px; border-radius: calc(var(--radius) - 1px); }
  .home-compact .hero-command-head { padding-bottom: 11px; margin-bottom: 12px; }
  .home-compact .hero-command-head h2 { font-size: 1.0625rem; }
  .home-compact .hero-command-foot { gap: 10px; padding-top: 10px; flex-wrap: wrap; }
  .home-compact .home-workspace { margin-top: 12px; padding: 16px 14px; border-radius: calc(var(--radius) - 1px); }
  .home-compact .home-workspace-head { gap: 8px; padding-bottom: 11px; margin-bottom: 11px; }
  .home-compact .home-workspace-head h2 { font-size: 1.125rem; }
  .home-compact .home-workspace .tabs { margin-bottom: 12px; }
  .home-compact .home-workspace .tab { min-height: 44px; padding: 9px 12px; }
}

/* 提取码工作台高度修复（2026-08-31 23:59:59）：按内容收缩，避免首屏网格制造大块空白。 */
.home-page .hero-command-card {
  min-height: 0;
  align-self: start;
}
.home-page .hero-command-card .code-form-inner-wrapper {
  min-height: 58px;
  box-sizing: border-box;
  align-items: stretch;
}
.home-page .hero-command-card .code-input-group {
  min-height: 48px;
}
.home-page .hero-command-foot {
  margin-top: 20px;
}

@media (max-width: 768px) {
  .home-page .hero-command-card .code-form-inner-wrapper {
    min-height: 0;
  }
  .home-page .hero-command-foot {
    margin-top: 14px;
  }
}

/* 提取码输入区窄屏排版（2026-08-31 23:59:59）：输入框独占一行，按钮保持同排可触控。 */
@media (max-width: 560px) {
  .home-page .hero-command-card .code-form-inner-wrapper {
    flex-wrap: wrap;
    gap: 8px;
    padding: 8px;
  }
  .home-page .hero-command-card .code-input-group {
    flex: 1 1 100%;
    width: 100%;
    padding-left: 8px;
  }
  .home-page .hero-command-card .code-label {
    margin-right: 8px;
    padding-right: 8px;
  }
  .home-page .hero-command-card .layui-btn.layui-btn-normal {
    flex: 1 1 100%;
    min-width: 0;
  }
}

/* 首页提取码输入与宽屏收口（2026-09-01 02:15:30）：宽屏首屏同步变宽，提取按钮与输入区更易点击，手机端语音和提取按钮固定分列。 */
@media (min-width:1200px) {
  body.home-page.home-wide .home-hero-grid { grid-template-columns:minmax(0,1.32fr) minmax(420px,.68fr); max-width:100%; }
}
.home-page .hero-command-card .layui-btn.layui-btn-normal { min-height: 52px; }
.home-page .hero-command-card .layui-btn.layui-btn-normal svg.action-icon { width:18px; height:18px; }
@media (max-width: 560px) {
  .home-page .hero-command-card .code-form-inner-wrapper { display: flex; flex-wrap: wrap; }
  .home-page .hero-command-card .code-input-group { flex: 1 1 100%; }
  .home-page .hero-command-card .layui-btn.layui-btn-normal { flex:1 1 100%; min-width:0; width:100%; justify-content:center; }
}

/* 首页全面美化（2026-09-01 03:42:52）：提取码工作台改为运单式视觉，补齐分享流程、轮播控制、拖拽区和统计卡层次，并继续适配手机端。 */
.skip-link {
  position: absolute; left: 16px; top: -64px; z-index: 2400;
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 14px;
  border-radius: var(--radius-sm); background: var(--primary); color: #fff; font-weight: 700;
  box-shadow: var(--shadow-md); text-decoration: none;
}
.skip-link:focus, .skip-link:focus-visible { top: 12px; color: #fff; outline: 3px solid color-mix(in srgb, #fff 55%, var(--primary)); outline-offset: 2px; }

.home-banner-wrap { margin-top: 12px; }
.home-notice-wrap { margin-top: 12px; display: grid; gap: 10px; }
.home-notice { margin: 0; }
.home-verify-banner { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; margin: 0; }
.home-verify-copy { min-width: 0; flex: 1 1 220px; }
.home-verify-copy strong { display: block; margin-bottom: 4px; font-size: 0.9375rem; }
.home-verify-copy p { margin: 0; font-size: 0.8125rem; line-height: 1.6; }
.home-verify-form { display: flex; align-items: center; }
.home-verify-form .layui-btn { min-height: 40px; white-space: normal; }
@media (max-width: 640px) {
  .home-verify-banner { align-items: stretch; flex-direction: column; }
  .home-verify-form .layui-btn { width: 100%; min-height: 44px; }
}
.home-page .banner-slider { border-radius: calc(var(--radius-lg) - 2px); box-shadow: 0 14px 36px rgba(15,23,42,.10); }
.home-page .banner-nav,
.home-page .banner-pause {
  position: absolute; z-index: 4; display: inline-flex; align-items: center; justify-content: center;
  min-width: 44px; min-height: 44px; padding: 0; border: 1px solid color-mix(in srgb, var(--panel) 40%, transparent);
  border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--panel) 82%, transparent); color: var(--text);
  cursor: pointer; touch-action: manipulation; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
}
.home-page .banner-nav:hover, .home-page .banner-nav:focus-visible,
.home-page .banner-pause:hover, .home-page .banner-pause:focus-visible { color: var(--primary); border-color: var(--primary); background: var(--panel); }
.home-page .banner-nav:focus-visible, .home-page .banner-pause:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 28%, transparent); outline-offset: 2px; }
.home-page .banner-prev { left: 12px; top: 50%; transform: translateY(-50%); }
.home-page .banner-next { right: 12px; top: 50%; transform: translateY(-50%); }
.home-page .banner-pause { right: 12px; bottom: 14px; min-width: 64px; padding: 0 12px; font: inherit; font-size: 0.75rem; font-weight: 750; }
.home-page .banner-pause[aria-pressed="true"] { color: var(--primary); }
.home-page .banner-nav svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.home-page .banner-dots { gap: 8px; }
.home-page .banner-dot {
  width: 10px; height: 10px; min-width: 24px; min-height: 24px; padding: 0; border: 0;
  background: rgba(255,255,255,.55); box-shadow: 0 0 0 7px transparent; cursor: pointer; appearance: none; -webkit-appearance: none;
}
.home-page .banner-dot.active { background: #fff; box-shadow: 0 0 0 4px color-mix(in srgb, #fff 28%, transparent); }

.home-flow {
  display: flex; flex-wrap: wrap; gap: 8px; margin: 18px 0 0; padding: 0; list-style: none; position: relative; z-index: 1;
}
.home-flow li {
  display: inline-flex; align-items: center; gap: 8px; min-height: 36px; padding: 6px 12px;
  border: 1px dashed color-mix(in srgb, var(--primary) 28%, var(--border)); border-radius: 999px;
  background: color-mix(in srgb, var(--panel) 76%, transparent); color: var(--muted); font-size: 0.8125rem;
}
.home-flow b { color: var(--primary); font-variant-numeric: tabular-nums; letter-spacing: .08em; }

.hero-command-card.hero-waybill {
  background-image:
    linear-gradient(180deg, color-mix(in srgb, var(--panel) 98%, white), var(--panel)),
    repeating-linear-gradient(90deg, color-mix(in srgb, var(--primary) 22%, transparent) 0 10px, transparent 10px 18px);
  background-size: 100% calc(100% - 11px), 100% 11px;
  background-position: 0 0, 0 100%;
  background-repeat: no-repeat;
}
.hero-command-card.hero-waybill::after {
  content: ''; position: absolute; top: 22px; bottom: 22px; left: 0; width: 7px;
  border-radius: 0 calc(var(--radius-sm) - 2px) calc(var(--radius-sm) - 2px) 0; background: linear-gradient(180deg, var(--grad-a), var(--grad-b)); pointer-events: none;
}
.hero-command-card.hero-waybill .hero-command-head { padding-left: 8px; }
.hero-command-card.hero-waybill .code-form-inner-wrapper {
  border-color: color-mix(in srgb, var(--primary) 26%, var(--border));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.28);
}
.hero-command-card.hero-waybill .code-form-hero input { font-variant-numeric: tabular-nums; letter-spacing: .16em; }

.home-page .dropzone {
  min-height: 220px; border-width: 2px; border-style: dashed;
  background:
    radial-gradient(120% 90% at 50% 0%, color-mix(in srgb, var(--primary) 9%, transparent), transparent 58%),
    var(--panel);
}
.home-page .dropzone:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 28%, transparent); outline-offset: 3px; }
.home-page .dz-actions { display: flex; justify-content: center; margin-top: 16px; }
.home-page .dz-pick-btn { min-width: 148px; min-height: 44px; justify-content: center; cursor: pointer; }

.home-insight-strip .stat { padding-top: 16px; }
.home-insight-strip .stat-kicker {
  display: block; margin-bottom: 4px; color: var(--primary); font-size: 0.6875rem; font-weight: 800; letter-spacing: .14em;
}
.home-announcement .announce-item { padding: 13px 0; }
/* 首页公告折叠行数：手机端使用独立变量，避免长公告占满屏幕 */
.home-announcement .announce-content.is-collapsed { max-height: calc(var(--announce-clamp, 3) * 1.75em); }
@media (max-width: 760px) {
  .home-announcement .announce-item.is-top { padding-left: 10px; padding-right: 10px; }
  .home-announcement .announce-content.is-collapsed { max-height: calc(var(--announce-clamp-mobile, 3) * 1.75em); }
  .announce-toggle { width: 100%; min-height: 44px; }
  .announce-attachment-image { width: 82px; height: 82px; }
  .announce-attachment-files li { align-items: flex-start; }
  .home-announcement .announce-title { font-size: 0.90625rem; line-height: 1.5; }
}
@media (max-width: 400px) {
  .announce-attachment-image { width: 72px; height: 72px; }
}
.home-footer .site-footer-copy { letter-spacing: .02em; }

[data-theme="dark"] .hero-command-card.hero-waybill {
  background-image:
    linear-gradient(180deg, color-mix(in srgb, var(--panel) 96%, #000), var(--panel)),
    repeating-linear-gradient(90deg, color-mix(in srgb, var(--primary) 28%, transparent) 0 10px, transparent 10px 18px);
}
[data-theme="dark"] .home-page .banner-nav,
[data-theme="dark"] .home-page .banner-pause { background: color-mix(in srgb, var(--panel) 78%, transparent); }

@media (max-width: 768px) {
  .home-flow { gap: 6px; margin-top: 14px; }
  .home-flow li { min-height: 32px; padding: 5px 10px; font-size: 0.75rem; }
  .home-page .banner-nav { left: 8px; }
  .home-page .banner-next { right: 8px; left: auto; }
  .home-page .banner-pause { right: 8px; bottom: 10px; min-height: 36px; }
  .home-page .dropzone { min-height: 196px; padding: 22px 14px; }
  .home-page .dz-pick-btn { width: 100%; min-height: 48px; }
  .home-mobile-action-bar button, .home-mobile-action-bar a { min-height: 42px; }
  .hero-command-card.hero-waybill { padding-bottom: 22px; }
}

@media (max-width: 420px) {
  .home-flow li { flex: 1 1 calc(50% - 6px); justify-content: center; }
  .home-page .banner-pause { min-width: 56px; font-size: 0.6875rem; }
}

@media (prefers-reduced-motion: reduce) {
  .home-page .banner-nav, .home-page .banner-pause, .home-page .dropzone, .home-page .dz-pick-btn { transition: none; }
}


/* 首页工作区继续美化（2026-09-01 07:17:10）：最近提取码快捷填入、工作区待发出签、文本工作台标签、历史卡片与公告秒级时间。 */
.recent-codes { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 14px; }
.recent-codes[hidden] { display: none !important; }
.recent-codes-label { color: var(--muted); font-size: 0.75rem; font-weight: 700; letter-spacing: .08em; }
.recent-codes-list { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }
.recent-code-chip {
  display: inline-flex; align-items: center; justify-content: center; min-height: 36px; padding: 0 12px;
  border: 1px dashed color-mix(in srgb, var(--primary) 30%, var(--border)); border-radius: 999px;
  background: color-mix(in srgb, var(--panel) 86%, transparent); color: var(--primary);
  cursor: pointer; font: inherit; font-size: 0.8125rem; font-weight: 750; letter-spacing: .12em;
  font-variant-numeric: tabular-nums; touch-action: manipulation;
}
.recent-code-chip:hover, .recent-code-chip:focus-visible {
  color: #fff; border-style: solid; border-color: var(--primary);
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b));
}
.recent-code-chip:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary) 28%, transparent); outline-offset: 2px; }

.home-workspace-waybill { position: relative; overflow: hidden; }
.workspace-stamp {
  position: absolute; top: 18px; right: 22px; z-index: 2; transform: rotate(-12deg);
  min-width: 72px; padding: 5px 10px; border: 2px solid color-mix(in srgb, var(--orange) 72%, var(--primary));
  border-radius: calc(var(--radius-sm) - 4px); color: color-mix(in srgb, var(--orange) 78%, var(--primary));
  background: color-mix(in srgb, var(--orange) 10%, transparent); font-size: 0.75rem; font-weight: 800; letter-spacing: .18em;
  pointer-events: none;
}
.home-workspace-waybill .home-workspace-head { padding-right: 92px; }
.text-workbench-label { display: block; margin-bottom: 8px; color: var(--muted); font-size: 0.75rem; font-weight: 700; letter-spacing: .08em; }
.home-page #pane-text .text-area { min-height: 180px; border-radius: var(--radius); }
.home-page .tab-pane.is-hidden,
.home-page .tab-pane[hidden] { display: none !important; }
.home-page .text-workbench { display: grid; gap: 12px; min-width: 0; max-width: 100%; }
.home-page .text-workbench-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; flex-wrap: wrap; min-width: 0; max-width: 100%; }
.home-page .text-workbench-head .section-kicker { display: block; margin-bottom: 4px; }
.home-page .text-workbench-tools { display: flex; flex-wrap: wrap; align-items: stretch; gap: 10px; min-width: 0; max-width: 100%; }
.home-page .text-workbench-tools .layui-btn { min-height: 40px; }
.home-page .text-workbench-tool-group { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 4px; border: 1px solid color-mix(in srgb, var(--border) 86%, var(--primary)); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--panel) 94%, var(--primary-soft)); }
.text-workbench-group-label { display: none; }
.admin-page .admin-batch-toolbar,
.admin-page .batch-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.admin-page .admin-batch-toolbar .checkbox,
.admin-page .batch-bar .checkbox { margin: 0; min-height: 40px; }
.admin-page .admin-batch-toolbar .layui-btn,
.admin-page .admin-batch-toolbar select,
.admin-page .batch-bar .layui-btn,
.admin-page .batch-bar select { min-height: 40px; }
.home-page .text-meta { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.home-page .share-detail-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.home-page .share-detail-actions .layui-btn { min-height: 40px; }
.batch-bar .batch-select-all,
.user-trash-page .trash-select-all { display: inline-flex; align-items: center; gap: 8px; margin: 0; min-height: 44px; }
.batch-bar .batch-select-all input,
.user-trash-page .trash-select-all input { width: 18px; height: 18px; margin: 0; accent-color: var(--primary); }

.home-history-panel { border-color: color-mix(in srgb, var(--primary) 14%, var(--border)); }
.home-history-panel .history-item {
  align-items: flex-start; padding: 12px 14px 12px 16px;
  border: 1px solid color-mix(in srgb, var(--border) 88%, var(--primary));
  border-left: 4px solid color-mix(in srgb, var(--primary) 70%, var(--grad-b));
  background: color-mix(in srgb, var(--panel) 92%, var(--bg));
}
.home-history-panel .history-item .code-cell { font-variant-numeric: tabular-nums; letter-spacing: .08em; }
.home-history-panel .history-item .h-actions { flex-wrap: wrap; justify-content: flex-end; }
.home-history-panel .history-item .layui-btn { min-height: 36px; }
.home-announcement .announce-title .hint { font-variant-numeric: tabular-nums; }

@media (max-width: 768px) {
  .recent-code-chip { min-height: 40px; padding: 0 14px; }
  .workspace-stamp { top: 12px; right: 12px; min-width: 64px; padding: 4px 8px; font-size: 0.6875rem; }
  .home-workspace-waybill .home-workspace-head { padding-right: 0; padding-top: 18px; }
  .home-history-panel .history-item { flex-direction: column; gap: 10px; }
  .home-history-panel .history-item .h-info .hint { white-space: normal; overflow: visible; text-overflow: clip; }
  .home-history-panel .history-item .h-actions { width: 100%; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
  .home-history-panel .history-item .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
}

@media (max-width: 420px) {
  .home-history-panel .history-item .h-actions { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  .recent-code-chip, .home-history-panel .history-item { transition: none; }
}

/* 登录与后台界面美化（2026-09-01 07:23:19）：登录页改为通行证式工作台，后台控制台统一看板层次并适配手机端。 */
.auth-page { min-height: 100vh; }
.auth-shell {
  width: min(920px, calc(100% - 32px));
  margin: 28px auto 48px;
  padding-bottom: env(safe-area-inset-bottom, 0px);
}
.auth-panel.auth-waybill {
  position: relative; overflow: hidden; max-width: none; margin: 0;
  display: grid; grid-template-columns: minmax(0, .92fr) minmax(280px, 1fr);
  gap: 0; padding: 0; border-radius: calc(var(--radius-lg) + 2px);
  background-image:
    linear-gradient(180deg, color-mix(in srgb, var(--panel) 98%, white), var(--panel)),
    repeating-linear-gradient(90deg, color-mix(in srgb, var(--primary) 22%, transparent) 0 10px, transparent 10px 18px);
  background-size: 100% calc(100% - 11px), 100% 11px;
  background-position: 0 0, 0 100%;
  background-repeat: no-repeat;
}
.auth-panel.auth-waybill::after {
  content: ''; position: absolute; top: 22px; bottom: 22px; left: 0; width: 7px;
  border-radius: 0 calc(var(--radius-sm) - 2px) calc(var(--radius-sm) - 2px) 0; background: linear-gradient(180deg, var(--grad-a), var(--grad-b)); pointer-events: none;
}
.auth-copy { padding: 36px 28px 32px 34px; border-right: 1px dashed color-mix(in srgb, var(--primary) 22%, var(--border)); }
.auth-copy h1 { margin: 8px 0 10px; font-size: clamp(26px, 4vw, 34px); line-height: 1.2; letter-spacing: -.03em; }
.auth-card { padding: 32px 28px 30px; min-width: 0; }
.auth-links { text-align: center; margin-top: 14px; }
.auth-flow { margin-top: 18px; }
.auth-panel.auth-waybill label { display: block; }
.auth-panel.auth-waybill input { min-height: 46px; }
.auth-panel.auth-waybill .layui-btn.layui-btn-normal { min-height: 48px; }
.auth-admin-page .auth-copy { background: color-mix(in srgb, var(--primary) 6%, transparent); }

.admin-page .admin-main { padding-bottom: calc(28px + env(safe-area-inset-bottom, 0px)); }
.admin-console-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin: 0 0 16px; }
.admin-console-head h3 { margin: 6px 0 4px; font-size: 1.375rem; }
.admin-live-stamp { position: static; transform: rotate(-8deg); }
.admin-page .cards .card { padding-top: 18px; }
.admin-page .cards .stat-kicker { display: block; margin-bottom: 6px; color: var(--primary); font-size: 0.6875rem; font-weight: 800; letter-spacing: .14em; }
.admin-page .card-link { text-decoration: none; color: inherit; }
.admin-rank-panel, .admin-log-panel { border-color: color-mix(in srgb, var(--primary) 12%, var(--border)); }

/* 后台统计卡片右上角装饰图标：淡色大图标强化视觉层级，不干扰数字阅读，移动端缩小 */
.admin-page .cards .card { position: relative; }
.admin-page .cards .card .card-icon { position: absolute; top: 12px; right: 12px; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; color: var(--primary); opacity: .5; pointer-events: none; }
.admin-page .cards .card .card-icon svg { width: 32px; height: 32px; fill: none; stroke: currentColor; stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round; }
.admin-page .cards .card:hover .card-icon { opacity: .8; transform: translateY(-1px); }
.admin-page .cards .card .num { position: relative; z-index: 1; }
.admin-page .cards .card .stat-kicker { position: relative; z-index: 1; }
@media (max-width: 768px) {
  .admin-page .cards .card .card-icon { top: 8px; right: 8px; width: 30px; height: 30px; }
  .admin-page .cards .card .card-icon svg { width: 24px; height: 24px; }
  .admin-page .cards .card .num { padding-right: 16px; }
}

[data-theme="dark"] .auth-panel.auth-waybill {
  background-image:
    linear-gradient(180deg, color-mix(in srgb, var(--panel) 96%, #000), var(--panel)),
    repeating-linear-gradient(90deg, color-mix(in srgb, var(--primary) 28%, transparent) 0 10px, transparent 10px 18px);
}

@media (max-width: 768px) {
  .auth-shell { width: min(100% - 20px, 560px); margin-top: 16px; }
  .auth-panel.auth-waybill { grid-template-columns: 1fr; border-radius: calc(var(--radius-lg) - 2px); }
  .auth-copy { padding: 22px 18px 8px 22px; border-right: 0; border-bottom: 1px dashed color-mix(in srgb, var(--primary) 22%, var(--border)); }
  .auth-card { padding: 18px 16px 20px; }
  .auth-panel.auth-waybill input, .auth-panel.auth-waybill .layui-btn.layui-btn-normal, .sms-row .layui-btn { min-height: 48px; }
  .sms-row { flex-wrap: wrap; }
  .sms-row .layui-btn { width: 100%; justify-content: center; }
  .admin-console-head { flex-direction: column; gap: 10px; }
  .admin-live-stamp { align-self: flex-start; }
}

@media (prefers-reduced-motion: reduce) {
  .auth-panel.auth-waybill, .admin-page .card { transition: none; }
}

/* 后台控制台继续美化与显示修复（2026-09-01 07:30:30）：仪表盘动作中文、过期资源筛选、侧栏状态和顶部栏层次。 */
/* 2026-09-17：后台字段全部完整显示（用户诉求「后台应该把字段全部显示出来」）——
   桌面端不再用省略号截断 IP/请求编号/详情/设备信息/邮箱/链接/对象 Key/ETag 等字段，
   统一改为自动换行完整展示（与手机端 7217 行行为一致）。 */
.admin-page .admin-main { min-width: 0; }
.admin-page .table-responsive { min-width: 0; }
.admin-page .ellipsis { max-width: none; white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; word-break: break-word; }
.admin-page .file-name-cell { min-width: 0; overflow-wrap: anywhere; }
.admin-page .admin-title-wrap .section-kicker { letter-spacing: .12em; }
.admin-page .cards .card-link { min-height: 112px; }
.admin-page .admin-rank-panel .panel-head,
.admin-page .admin-log-panel .panel-head { margin-bottom: 12px; }
.admin-page .admin-user-chip { max-width: 100%; }
.admin-page .admin-logout { min-height: 32px; display: inline-flex; align-items: center; }

@media (max-width: 768px) {
  .admin-page .admin-top { align-items: center; }
  .admin-page .admin-title-wrap h2 { font-size: 1rem; }
  .admin-page .admin-user-chip { min-height: 36px; }
  .admin-page .ellipsis { max-width: none; white-space: normal; overflow: visible; }
  .admin-page .cards .card-link { min-height: 96px; }
}

@media (prefers-reduced-motion: reduce) {
  .admin-page .admin-user-chip, .admin-page .card-link { transition: none; }
}

/* 后台控制台继续收口（2026-09-01 07:47:28）：过期资源统计对齐、仪表盘卡片标签补齐、手机端表格与顶部栏更易读。 */
.admin-page .cards .card-link { display: flex; flex-direction: column; justify-content: flex-start; }
.admin-page .cards .stat-kicker { margin-bottom: 8px; }
.admin-page .admin-log-panel td.ellipsis { overflow-wrap: anywhere; }
.admin-page .admin-top { gap: 12px; }
.admin-page .admin-title-wrap { min-width: max-content; }
.admin-page .admin-title-wrap h2 { overflow-wrap: anywhere; white-space: nowrap; }

@media (max-width: 768px) {
  .admin-page .admin-top { flex-wrap: nowrap; }
  .admin-page .top-left { min-width: max-content; flex: 1 1 auto; }
  .admin-page .admin-top-actions { width: auto; justify-content: flex-end; min-width: 0; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .admin-page .admin-top-actions::-webkit-scrollbar { display: none; }
  .admin-page .admin-user-chip { max-width: none; overflow: visible; }
  .admin-page .table-responsive { -webkit-overflow-scrolling: touch; }
  .admin-page .admin-log-panel td.ellipsis { white-space: normal; overflow: visible; }
}

@media (prefers-reduced-motion: reduce) {
  .admin-page .cards .card-link { transform: none; }
}

/* 后台指标口径与入口收口（2026-09-01 07:55:28）：生效数量排除已到期资源，访问卡片进入访问记录，过期数字预警。 */
.admin-page .cards .warning-text { color: var(--orange); }
.admin-page .cards .card-link:hover .warning-text { color: var(--orange); }
.admin-page .admin-log-panel td:nth-child(3) { font-variant-numeric: tabular-nums; white-space: nowrap; }
.admin-page .admin-log-panel .empty { padding: 18px 8px; }

@media (max-width: 768px) {
  .admin-page .cards .card-link { min-height: 104px; }
  .admin-page .admin-log-panel td:nth-child(3) { white-space: normal; }
}

@media (prefers-reduced-motion: reduce) {
  .admin-page .cards .warning-text { transition: none; }
}

/* 后台列表页继续美化与手机端卡片表格（2026-09-01 08:12:04）：统计卡可点、筛选栏单列、窄屏表格按设置切卡片。 */
.admin-page .admin-page-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin: 0 0 16px; }
.admin-page .admin-page-head h3 { margin: 6px 0 4px; font-size: 1.375rem; }
.admin-page .admin-page-head .hint { margin: 0; }
.admin-page .stats-row .stat { text-decoration: none; color: inherit; min-height: 88px; }
.admin-page .stats-row a.stat { display: flex; flex-direction: column; justify-content: center; }
.admin-page .stats-row a.stat:hover, .admin-page .stats-row a.stat:focus-visible { border-color: color-mix(in srgb, var(--primary) 40%, var(--border)); box-shadow: var(--shadow-md); outline: none; }
.admin-page .stats-row .warning-text { color: var(--orange); }
.admin-page .stats-row .error-text { color: var(--danger, #dc2626); }
.admin-page .search-bar { align-items: center; }
.admin-page .search-bar input[type="text"],
.admin-page .search-bar input[type="search"],
.admin-page .search-bar input[type="number"],
.admin-page .search-bar input[type="date"],
.admin-page .search-bar select,
.admin-page .search-bar .layui-btn { min-height: 44px; }
.admin-page .admin-list-table { width: 100%; }
.admin-page .admin-list-table .ops,
.admin-page .admin-list-table .admin-share-actions,
.admin-page .admin-list-table .log-row-actions { min-width: 0; }

/* ================= 用户中心：生物识别（通行密钥 / 指纹）表格 =================
   用户中心的 body 是 .user-page，默认拿不到 .admin-page 下的表格样式与手机端卡片布局，
   导致手机上表格横向挤压、操作按钮难以点到。这里补一套用户中心专用的表格与手机端卡片样式。 */
.user-page .admin-list-table { width: 100%; border-collapse: collapse; }
.user-page .admin-list-table th,
.user-page .admin-list-table td { padding: 10px 12px; border-bottom: 1px solid var(--border, #eef0f3); text-align: left; vertical-align: middle; }
.user-page .admin-list-table th { font-size: 0.78125rem; font-weight: 600; color: var(--muted, #6b7280); background: var(--bg-soft, #fafbfc); white-space: nowrap; }
.user-page .admin-list-table td { font-size: 0.84375rem; }
.user-page .admin-list-table tbody tr:last-child td { border-bottom: 0; }
.user-page .admin-list-table .bio-device-id { font-size: 0.71875rem; padding: 1px 5px; border-radius: 4px; background: var(--bg-soft, #f1f3f5); }
.user-page .admin-list-table td[data-label="操作"] { white-space: nowrap; }
.user-page .admin-list-table td[data-label="操作"] .layui-btn { margin: 0 6px 6px 0; }

@media (max-width: 760px) {
  /* 手机端改为卡片布局：每个字段一行，左侧为字段名，右侧为值，操作按钮整行铺满 */
  .user-page .table-responsive:has(.admin-list-table) { border: 0; background: transparent; overflow: visible; }
  .user-page .admin-list-table { min-width: 0; border: 0; }
  .user-page .admin-list-table thead { display: none; }
  .user-page .admin-list-table tbody { display: flex; flex-direction: column; gap: 12px; }
  .user-page .admin-list-table tr {
    display: block; padding: 12px 14px;
    border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius) - 2px);
    background: var(--bg, #fff);
  }
  .user-page .admin-list-table td {
    display: flex; align-items: flex-start; gap: 10px;
    padding: 6px 0; border-bottom: 0; font-size: 0.84375rem;
  }
  .user-page .admin-list-table td::before {
    content: attr(data-label);
    flex: 0 0 78px;
    color: var(--muted, #6b7280);
    font-size: 0.78125rem; font-weight: 600;
  }
  .user-page .admin-list-table td[data-label="操作"] {
    flex-wrap: wrap; padding-top: 10px; margin-top: 4px;
    border-top: 1px dashed var(--border, #e5e7eb);
  }
  .user-page .admin-list-table td[data-label="操作"]::before { flex: 0 0 78px; }
  /* 操作按钮整行铺满，保证触控目标足够大 */
  .user-page .admin-list-table td[data-label="操作"] .layui-btn {
    flex: 1 1 auto; min-height: 44px; min-width: 96px;
    margin: 0; justify-content: center;
  }
  /* 名称作为卡片标题突出显示 */
  .user-page .admin-list-table td[data-label="名称"] .bio-key-name { font-size: 0.9375rem; }
}

@media (max-width: 768px) {
  .admin-page .admin-page-head { flex-direction: column; gap: 10px; }
  .admin-page .admin-page-head h3 { font-size: 1.125rem; }
  .admin-page .stats-row { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .admin-page .stats-row .stat { min-height: 80px; padding: 12px; }
  .admin-page .stats-row .stat b { font-size: 1.25rem; overflow-wrap: anywhere; }
  .admin-page .search-bar { display: grid; grid-template-columns: 1fr; gap: 8px; }
  .admin-page .search-bar > *,
  .admin-page .search-bar .layui-btn { width: 100%; min-width: 0; }
  .admin-page .batch-bar,
  .admin-page .search-bar[style] { display: grid; grid-template-columns: 1fr; gap: 8px; }
  .admin-page .admin-top-actions .admin-action-label { display: none; }
}

@media (max-width: 768px) {
  body.admin-page[data-mobile-table-mode="card"] .table-responsive,
  body.admin-page[data-mobile-table-mode="card"] .table-wrap { overflow: visible; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table { min-width: 0; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table thead,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table tbody,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table tr,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table th,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td { display: block; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table thead { display: none; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table tbody { display: flex; flex-direction: column; gap: 12px; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table tbody tr { padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); box-shadow: var(--shadow-sm); }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; min-height: 36px; padding: 8px 0; text-align: right; border: 0; border-bottom: 1px dashed color-mix(in srgb, var(--border) 80%, transparent); }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td:last-child { border-bottom: 0; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td::before { content: attr(data-label); flex: 0 0 88px; color: var(--muted); font-size: 0.75rem; font-weight: 700; text-align: left; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td:not([data-label])::before { content: none; flex: 0; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[data-label="提取码"] code,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[data-label="提取码"] .link { font-size: 0.9375rem; font-weight: 700; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[data-label="详情"],
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[data-label="内容摘要"] { text-align: left; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[data-label="详情"]::before,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[data-label="内容摘要"]::before,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[data-label="内容"]::before { display: block; margin-bottom: 4px; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[data-label="内容"] { text-align: left; }
  body.admin-page[data-mobile-table-mode="scroll"] .table-responsive,
  body.admin-page[data-mobile-table-mode="scroll"] .table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  body.admin-page[data-mobile-table-mode="scroll"] .admin-main table.table { min-width: 720px; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table .code-cell { font-weight: 700; }
  body.admin-page[data-mobile-table-mode="card"] .extract-code-cell { justify-content: flex-end; width: 100%; }
  body.admin-page[data-mobile-table-mode="card"] .extract-copy-btn,
  body.admin-page[data-mobile-table-mode="card"] .extract-code-cell .layui-btn { min-height: 36px; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[colspan] { display: block; text-align: center; padding: 18px 8px; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table td[colspan]::before { display: none; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table .ops,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table .admin-share-actions,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table .log-row-actions { width: 100%; justify-content: flex-end; flex-wrap: wrap; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table .ops form,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table .admin-share-actions form { width: auto; }
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table .file-name-cell,
  body.admin-page[data-mobile-table-mode="card"] .admin-main table.table .ellipsis { max-width: calc(100% - 96px); white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; }
}

@media (prefers-reduced-motion: reduce) {
  .admin-page .stats-row a.stat { transition: none; }
}

/* 后台审计工作台继续美化（2026-09-01 08:39:53）：访问记录、资源审核、登录设备、系统健康和数据报表统一工作台页头，统计卡别名与手机端卡片表格设置对齐。 */
.admin-page .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 14px; }
.admin-page .stats-grid .stat { text-decoration: none; color: inherit; min-height: 88px; }
.admin-page .admin-page-head .badge { align-self: flex-start; min-height: 32px; display: inline-flex; align-items: center; }
.admin-page .admin-page-head .admin-access-log-actions { flex-shrink: 0; }
.admin-page .chart-box { min-width: 0; }
.admin-page .health-dashboard { margin-top: 4px; }
.admin-page .apikey-filter input[type="date"] { min-height: 44px; }

/* 数据报表：图表卡片双列网格 */
.admin-page .stats-chart-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; margin-bottom: 20px; }
.admin-page .stats-chart-grid .chart-panel { margin-bottom: 0; display: flex; flex-direction: column; min-width: 0; }
.admin-page .stats-chart-grid .chart-panel .panel-head { margin-bottom: 10px; }
.admin-page .stats-chart-grid .chart-panel h3 svg { width: 18px; height: 18px; flex: 0 0 auto; color: var(--primary); opacity: .9; }
.admin-page .stats-chart-grid .chart-panel h3 svg path, .admin-page .stats-chart-grid .chart-panel h3 svg circle, .admin-page .stats-chart-grid .chart-panel h3 svg rect { stroke: currentColor; }

/* 访问分析页：面板标题图标统一风格（限定作用域，不影响其他页面） */
body[data-admin-page="analytics"] .panel-head h3 svg { width: 18px; height: 18px; flex: 0 0 auto; color: var(--primary); opacity: .9; }
body[data-admin-page="analytics"] .panel-head h3 svg path, body[data-admin-page="analytics"] .panel-head h3 svg circle, body[data-admin-page="analytics"] .panel-head h3 svg rect { stroke: currentColor; }
body[data-admin-page="analytics"] .analytics-breakdown-grid .chart-box { height: 300px; }
body[data-admin-page="analytics"] .analytics-breakdown-grid .chart-box canvas { max-height: 300px; }
.admin-page .stats-chart-grid .chart-panel .chart-box { flex: 1; position: relative; height: 280px; min-width: 0; }
.admin-page .stats-chart-grid .chart-panel .chart-box canvas { max-height: 280px; width: 100% !important; }
.admin-page .stats-chart-grid .chart-panel-wide { grid-column: 1 / -1; }
.admin-page .stats-chart-grid .chart-panel-wide .chart-box { height: 300px; }
.admin-page .stats-chart-grid .chart-panel-wide .chart-box canvas { max-height: 300px; }

@media (max-width: 768px) {
  .admin-page .stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .admin-page .stats-grid .stat { min-height: 80px; padding: 12px; }
  .admin-page .admin-page-head .admin-access-log-actions,
  .admin-page .admin-page-head form { width: 100%; }
  .admin-page .admin-page-head .layui-btn { width: 100%; justify-content: center; min-height: 44px; }
  .admin-page .health-score-panel { width: 100%; }
  .admin-page .chart-box { height: 220px; }
  .admin-page .stats-chart-grid { grid-template-columns: 1fr; gap: 12px; }
  .admin-page .stats-chart-grid .chart-panel-wide { grid-column: auto; }
  .admin-page .stats-chart-grid .chart-panel .chart-box { height: 220px; }
  .admin-page .stats-chart-grid .chart-panel .chart-box canvas { max-height: 220px; }
  .admin-page .stats-chart-grid .chart-panel-wide .chart-box { height: 220px; }
  .admin-page .stats-chart-grid .chart-panel-wide .chart-box canvas { max-height: 220px; }
}

@media (prefers-reduced-motion: reduce) {
  .admin-page .health-score, .admin-page .stats-grid .stat { transition: none; }
}

.app-dialog-overlay {
  position: fixed; inset: 0; z-index: 2800;
  display: flex; align-items: center; justify-content: center;
  padding: max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(16px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));
  background: rgba(17, 24, 39, .46);
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
}
.app-dialog {
  width: min(100%, 420px); max-height: calc(100dvh - 32px);
  overflow: auto; padding: 20px 18px 16px;
  border: 1px solid var(--border); border-radius: calc(var(--radius) + 2px);
  background: var(--panel); color: var(--text);
  box-shadow: 0 18px 48px rgba(17, 24, 39, .22);
  animation: fadeIn .18s ease both;
}
.app-dialog.is-danger { border-color: color-mix(in srgb, var(--red) 35%, var(--border)); }
.app-dialog h3 { margin: 0 0 10px; font-size: 1.125rem; line-height: 1.4; }
.app-dialog p { margin: 0; color: var(--muted); font-size: 0.875rem; line-height: 1.7; overflow-wrap: anywhere; }
.app-dialog-actions { display: flex; justify-content: flex-end; gap: 10px; flex-wrap: wrap; margin-top: 18px; }
.app-dialog-actions .layui-btn { min-height: 44px; min-width: 96px; touch-action: manipulation; }
@media (max-width: 768px) {
  .app-dialog { width: min(100%, 520px); padding: 18px 16px 14px; border-radius: var(--radius); }
  .app-dialog-actions { flex-direction: column-reverse; }
  .app-dialog-actions .layui-btn { width: 100%; }
}

/* 文件夹打包分享弹层 */
.folder-zip-share-form { display: grid; gap: 12px; margin-top: 12px; }
.folder-zip-share-form .form-field { display: grid; gap: 6px; }
.folder-zip-share-form label { font-size: 0.875rem; font-weight: 600; }
.folder-zip-share-form select,
.folder-zip-share-form input[type="password"] { width: 100%; min-height: 44px; font-size: 0.9375rem; }
.folder-zip-share-result { margin-top: 12px; padding: 10px 12px; border: 1px solid rgba(34,197,94,.35); border-radius: calc(var(--radius-sm) - 2px); background: rgba(34,197,94,.06); }
.folder-zip-share-result p { color: inherit; }
.folder-zip-share-link-row { display: flex; gap: 8px; align-items: center; margin-top: 8px; }
.folder-zip-share-link-row input { flex: 1 1 auto; min-width: 0; font-size: 0.8125rem; }
.folder-zip-share-link-row .layui-btn { min-height: 40px; white-space: normal; }
.folder-zip-share-dialog .is-done { border-color: rgba(34,197,94,.5); color: #16a34a; }
@media (max-width: 640px) {
  .folder-zip-share-link-row { flex-direction: column; align-items: stretch; }
  .folder-zip-share-link-row .layui-btn { min-height: 44px; }
}

/* 仪表盘操作日志分页与完整显示（2026-09-01 09:12:57）：电脑端和手机端详情换行，分页按钮保持可点击。 */
.admin-page .admin-log-panel .panel-head { align-items: flex-start; gap: 12px; }
.admin-page .admin-log-panel .panel-head h3 { margin: 0 0 4px; }
.admin-page .admin-log-detail { max-width: none; white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; word-break: break-word; line-height: 1.6; }
.admin-page .admin-log-detail .timeline-link { display: inline; overflow-wrap: anywhere; word-break: break-word; }
.admin-page .admin-dashboard-log-pager { display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap; margin-top: 14px; }
.admin-page .admin-dashboard-log-pager .layui-btn { min-height: 44px; min-width: 44px; }
.admin-page .admin-dashboard-log-page-current { pointer-events: none; background: color-mix(in srgb, var(--primary) 12%, var(--panel)); border-color: color-mix(in srgb, var(--primary) 35%, var(--border)); }
.list-pager, .pager.list-pager, .admin-page .list-pager { display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap; margin-top: 14px; }
.admin-changelog-pager.list-pager { width: 100%; }
.list-pager-controls { flex: 1 1 100%; }
.list-pager .layui-btn, .pager.list-pager .layui-btn { min-height: 44px; min-width: 44px; }
.list-pager-current { pointer-events: none; background: color-mix(in srgb, var(--primary) 12%, var(--panel)); border-color: color-mix(in srgb, var(--primary) 35%, var(--border)); }
.list-pager-summary { width: 100%; text-align: center; margin: 0; }
.list-pager.list-pager-summary-layout-block .list-pager-summary { width: 100%; text-align: center; }
.list-pager.list-pager-summary-layout-inline .list-pager-summary { width: auto; text-align: left; margin-right: 4px; }
.list-pager-ellipsis { color: var(--muted); min-width: 24px; text-align: center; }
.list-pager .layui-btn.is-disabled { opacity: .45; pointer-events: none; }
.list-pager-goto { display: inline-flex; align-items: center; gap: 6px; margin-left: 4px; }
.list-pager-goto label { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: 0.8125rem; }
.list-pager-goto input { width: 72px; min-height: 40px; padding: 0 8px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--panel); color: var(--text); }
.list-pager-goto .layui-btn { min-height: 40px; }
.list-pager.list-pager-style-compact { gap: 4px; }
.list-pager.list-pager-style-compact .layui-btn { padding-left: 10px; padding-right: 10px; }
.list-pager.list-pager-position-left { justify-content: flex-start; }
.list-pager.list-pager-position-center { justify-content: center; }
.list-pager.list-pager-position-right { justify-content: flex-end; }
.list-pager-page-number { white-space: nowrap; }
.log-clear-form { margin-top: 12px; }
.log-clear-card { display: grid; gap: 8px; min-width: 0; padding: 14px 16px; border: 1px solid color-mix(in srgb, var(--danger, #c0392b) 28%, var(--border)); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--danger, #c0392b) 6%, var(--panel)); }
.log-clear-label { font-weight: 600; }
.log-clear-password-wrap .danger-confirm-input { width: 100%; min-height: 44px; }
.log-clear-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.log-clear-actions .layui-btn { min-height: 44px; }

@media (max-width: 768px) {
  .admin-page .admin-log-panel .panel-head { flex-direction: column; }
  .admin-page .admin-log-panel .panel-head .layui-btn { width: 100%; justify-content: center; min-height: 44px; }
  .admin-page .admin-log-detail, .admin-page .admin-log-panel td.ellipsis { max-width: none; white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; }
  .admin-page .admin-dashboard-log-pager { width: 100%; gap: 8px; }
  .admin-page .admin-dashboard-log-pager .layui-btn { flex: 1 1 72px; min-width: 72px; }
  .list-pager, .pager.list-pager { width: 100%; gap: 8px; }
  .admin-changelog-pager.list-pager { width: 100%; }
  .list-pager-controls { width: 100%; gap: 8px; }
  .list-pager .layui-btn, .pager.list-pager .layui-btn { flex: 1 1 72px; min-width: 72px; }
  .list-pager-goto { width: 100%; justify-content: center; flex-wrap: wrap; }
  .list-pager-goto .layui-btn, .list-pager-goto input { min-height: 44px; }
  .list-pager.list-pager-style-compact .layui-btn { padding-left: 12px; padding-right: 12px; }
  .list-pager.list-pager-summary-layout-inline .list-pager-summary { width: 100%; text-align: center; margin-right: 0; }
  .list-pager.list-pager-mobile-compact .list-pager-page-number:not(.list-pager-mobile-keep) { display: none; }
  .log-clear-actions { flex-direction: column; }
  .log-clear-actions .layui-btn { width: 100%; justify-content: center; }
}

@media (prefers-reduced-motion: reduce) {
  .admin-page .admin-dashboard-log-pager .layui-btn { transition: none; }
}

/* 前台回收站工作台美化（2026-09-01 11:01:05）：页头、统计、筛选和批量操作分区，电脑端和手机端都保持可点高度。 */
.user-trash-page .user-trash-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin: 0 0 16px; }
.user-trash-page .user-trash-head h2 { margin: 6px 0 4px; font-size: 1.5rem; }
.user-trash-page .user-trash-head .hint { margin: 0; max-width: 46em; }
.user-trash-page .trash-summary .stat { text-decoration: none; color: inherit; min-height: 88px; }
.user-trash-page .trash-summary a.stat { display: flex; flex-direction: column; justify-content: center; }
.user-trash-page .trash-summary a.stat:hover, .user-trash-page .trash-summary a.stat:focus-visible { border-color: color-mix(in srgb, var(--primary) 40%, var(--border)); box-shadow: var(--shadow-md); outline: none; }
.user-trash-page .warning-text { color: var(--orange); }
.user-trash-page .trash-filter { margin: 0; }
.user-trash-page .trash-filter input[type="search"],
.user-trash-page .trash-filter select,
.user-trash-page .trash-filter .layui-btn { min-height: 44px; }
.user-trash-page .trash-danger-panel { border-color: color-mix(in srgb, var(--danger, #dc2626) 22%, var(--border)); }
.user-trash-page .trash-empty-form { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px 16px; align-items: end; }
.user-trash-page .trash-password-card { display: grid; gap: 8px; min-width: 0; padding: 14px 16px; border: 1px solid color-mix(in srgb, var(--danger, #dc2626) 18%, var(--border)); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--danger, #dc2626) 6%, var(--panel)); }
.user-trash-page .trash-password-label { display: block; margin: 0; font-weight: 700; color: #c0392b; }
.user-trash-page .trash-password-wrap { display: flex; width: 100%; min-width: 0; }
.user-trash-page .trash-password-wrap .danger-confirm-input { flex: 1 1 auto; width: 100%; min-width: 0; min-height: 48px; padding: 10px 44px 10px 14px; border-radius: var(--radius-sm); font-size: 1rem; letter-spacing: 2px; }
.user-trash-page .trash-password-wrap .pw-toggle { right: 8px; width: 36px; height: 36px; min-width: 36px; min-height: 36px; }
.user-trash-page .trash-password-card .hint { margin: 0; line-height: 1.5; overflow-wrap: anywhere; }
.user-trash-page .trash-empty-submit { min-height: 48px; padding: 0 18px; align-self: end; }
.user-trash-page .trash-list-panel .danger-confirm-row { display: grid; gap: 8px; margin: 0 0 14px; padding: 14px 16px; align-items: stretch; }
.user-trash-page .trash-list-panel .danger-confirm-row label { margin: 0; }
.user-trash-page .trash-bulk-toolbar { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; margin: 0 0 12px; }
.user-trash-page .trash-bulk-toolbar .hint { margin-right: auto; }
.user-trash-page .user-trash-table .ops { white-space: nowrap; }
.user-trash-page .trash-row-soon { background: color-mix(in srgb, var(--orange) 8%, var(--panel)); }
.user-trash-page .empty-row .empty { padding: 22px 8px; overflow-wrap: anywhere; }
@media (max-width: 768px) {
  .user-trash-page .user-trash-head { flex-direction: column; gap: 10px; }
  .user-trash-page .user-trash-head h2 { font-size: 1.25rem; }
  .user-trash-page .user-trash-head .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .user-trash-page .trash-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .user-trash-page .trash-filter { display: grid; grid-template-columns: 1fr; gap: 8px; }
  .user-trash-page .trash-filter > *, .user-trash-page .trash-filter .layui-btn { width: 100%; min-width: 0; }
  .user-trash-page .trash-empty-form { grid-template-columns: 1fr; }
  .user-trash-page .trash-empty-submit { width: 100%; min-height: 48px; justify-content: center; }
  .user-trash-page .trash-password-wrap .danger-confirm-input { min-height: 48px; }
  .user-trash-page .trash-bulk-toolbar { width: 100%; }
  .user-trash-page .trash-bulk-toolbar .hint { width: 100%; margin-right: 0; }
  .user-trash-page .trash-bulk-toolbar .layui-btn { flex: 1 1 140px; min-height: 48px; }
  .user-trash-page .trash-select-all { width: 100%; min-height: 48px; }
  .user-trash-page .user-trash-table { display: block; width: 100%; }
  .user-trash-page .user-trash-table thead { display: none; }
  .user-trash-page .user-trash-table tbody, .user-trash-page .user-trash-table tr, .user-trash-page .user-trash-table td { display: block; }
  .user-trash-page .user-trash-table tbody tr:not(.empty-row) { margin: 0 0 12px; padding: 12px; border: 1px solid var(--border); border-radius: calc(var(--radius) - 2px); background: var(--panel); }
  .user-trash-page .user-trash-table tbody tr:not(.empty-row) td { min-height: 40px; padding: 6px 0; }
  .user-trash-page .user-trash-table tbody tr:not(.empty-row) td::before { content: attr(data-label); display: block; color: var(--muted); font-size: 0.75rem; margin-bottom: 4px; }
  .user-trash-page .user-trash-table tbody tr:not(.empty-row) td:first-child::before { display: none; }
  .user-trash-page .user-trash-table tbody tr:not(.empty-row) td.ops { display: flex; flex-wrap: wrap; gap: 8px; }
  .user-trash-page .user-trash-table tbody tr:not(.empty-row) td.ops .layui-btn { flex: 1 1 120px; min-height: 44px; }
  .user-trash-page .user-trash-table tbody tr.empty-row td { display: block; }
}

/* 后台返回前台入口上移到顶部栏（2026-09-01 10:52:06）：电脑端和手机端都能直接点到，不再藏在侧栏底部。 */
.admin-front-action {
  min-height: 40px; min-width: 40px; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 0 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: transparent;
  color: var(--text); text-decoration: none; font: inherit; font-size: 0.8125rem; font-weight: 700; line-height: 1;
  touch-action: manipulation; white-space: nowrap;
}
.admin-front-action:hover, .admin-front-action:focus-visible {
  border-color: var(--primary); color: var(--primary); background: color-mix(in srgb, var(--primary) 8%, transparent); outline: none;
}
.admin-front-action svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
@media (max-width: 768px) {
  .admin-front-action { min-height: 44px; min-width: 44px; padding: 0 10px; }
}

/* 后台界面全面美化（2026-09-01 12:00:34）：统一侧栏、顶栏、卡片、面板、表格、表单和手机端交互，不改业务逻辑。 */
.admin-page { --admin-sidebar-w: 248px; }
.admin-page .admin-layout { background:
  radial-gradient(900px circle at 8% -12%, color-mix(in srgb, var(--primary) 12%, transparent), transparent 58%),
  radial-gradient(760px circle at 96% -8%, color-mix(in srgb, var(--grad-b) 10%, transparent), transparent 56%),
  var(--bg);
}
.admin-page .sidebar {
  width: var(--admin-sidebar-w);
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--sb-strong, #fff) 4%, transparent), transparent 18%),
    var(--sb-bg, linear-gradient(180deg, #f4f7fc 0%, #eef2f9 100%));
  border-right: 1px solid var(--sb-border, color-mix(in srgb, var(--primary) 18%, transparent));
  box-shadow: inset -1px 0 0 color-mix(in srgb, var(--primary) 8%, transparent);
  isolation: isolate;
}
.admin-page .admin-layout.collapsed .sidebar { width: 64px; }
.admin-page .sidebar .brand { padding: 18px 16px 16px; gap: 12px; border-bottom-color: var(--sb-brand-border, color-mix(in srgb, var(--primary) 16%, transparent)); }
.admin-page .sidebar .brand-icon {
  width: 38px; height: 38px; border-radius: calc(var(--radius) - 2px);
  box-shadow: 0 8px 18px color-mix(in srgb, var(--primary) 28%, transparent), inset 0 1px 0 rgba(255,255,255,.35);
}
.admin-page .sidebar .brand-mark { min-width: 42px; min-height: 42px; }
.admin-page .sidebar .brand-icon-img { width: auto; min-width: 42px; height: calc(42px * var(--site-logo-scale, 1)); max-width: min(var(--site-logo-max-width, 240px), 86px); object-fit: contain; object-position: center; background: transparent; border-radius: var(--radius-sm); box-shadow: none; }
.admin-page .sidebar .brand-text { display: flex; flex-direction: column; gap: 2px; line-height: 1.2; }
.admin-page .sidebar .brand-sub { display: block; font-size: 0.6875rem; font-weight: 500; color: var(--sb-brand-sub, #6b78a0); letter-spacing: .08em; }
.admin-page .sidebar nav { padding: 12px 0 8px; }
.admin-page .sidebar .nav-search { min-height: 46px; border-radius: calc(var(--radius) - 1px); background: var(--sb-chip, #eef2fa); }
.admin-page .sidebar .nav-group { margin: 0 10px 10px; padding: 6px; border-radius: var(--radius); background: color-mix(in srgb, var(--sb-strong, #1b2333) 3%, transparent); }
.admin-page .sidebar .nav-group.is-active { background: color-mix(in srgb, var(--primary) 8%, transparent); border-color: rgba(99,126,255,.2); }
.admin-page .sidebar .nav-group-toggle { padding: 6px 10px; color: var(--sb-muted, #65718a); }
.admin-page .sidebar nav a { border-radius: calc(var(--radius) - 3px); }
.admin-page .sidebar nav a.on { box-shadow: 0 8px 18px color-mix(in srgb, var(--primary) 28%, transparent); }
.admin-page .sidebar-foot {
  margin-top: auto; padding: 14px 16px 18px; border-top: 1px solid var(--sb-brand-border, color-mix(in srgb, var(--primary) 16%, transparent));
  display: grid; gap: 2px;
}
.admin-page .sidebar-foot-kicker { color: #8ea0ff; font-size: 0.6875rem; font-weight: 800; letter-spacing: .12em; }
.admin-page .sidebar-foot-text { color: var(--sb-muted, #65718a); font-size: 0.75rem; }
.admin-page.admin-layout.collapsed .sidebar-foot, .admin-page .admin-layout.collapsed .sidebar-foot { display: none; }
.admin-layout.collapsed .sidebar-foot { display: none; }
.admin-page .admin-main { padding: 20px 22px 32px; background: transparent; }
.admin-page .admin-top {
  padding: 12px 16px; margin-bottom: 18px; border-radius: calc(var(--radius-lg) - 2px);
  background: color-mix(in srgb, var(--panel) 86%, transparent);
  border: 1px solid color-mix(in srgb, var(--primary) 14%, var(--border));
  box-shadow: var(--shadow-sm);
}
.admin-page .admin-title-wrap .section-kicker { color: var(--primary); font-size: 0.6875rem; font-weight: 800; letter-spacing: .14em; }
.admin-page .admin-title-wrap h2 { font-size: 1.25rem; font-weight: 800; letter-spacing: -.02em; }
.admin-page .admin-front-action {
  min-height: 40px; padding: 0 12px; border-radius: calc(var(--radius) - 2px);
  background: color-mix(in srgb, var(--primary) 8%, var(--panel));
  border-color: color-mix(in srgb, var(--primary) 22%, var(--border));
  color: var(--primary);
}
.admin-page .admin-user-chip {
  min-height: 40px; padding: 0; gap: 0;
  background: transparent; border: 0; box-shadow: none; overflow: visible;
}
.admin-page .admin-user-avatar {
  width: 28px; height: 28px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b)); color: #fff; font-size: 0.8125rem; font-weight: 800; overflow: hidden;
}
.admin-page .admin-user-avatar.has-image { background: transparent; padding: 0; }
.admin-page .admin-user-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.admin-page .admin-user-name { max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.admin-page .admin-logout { min-height: 28px; padding: 0 8px; border-radius: 999px; }
.admin-page .admin-page-head, .admin-page .admin-console-head {
  padding: 16px 18px; border: 1px solid color-mix(in srgb, var(--primary) 12%, var(--border));
  border-radius: calc(var(--radius) + 2px); background: color-mix(in srgb, var(--panel) 88%, transparent);
  box-shadow: var(--shadow-sm);
}
.admin-page .admin-page-head h3, .admin-page .admin-console-head h3 { font-size: 1.375rem; letter-spacing: -.02em; }
.admin-page .admin-page-head-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: flex-end; }
.admin-page .panel {
  padding: 20px 20px 18px; border-radius: calc(var(--radius) + 2px);
  border-color: color-mix(in srgb, var(--primary) 8%, var(--border));
}
.admin-page .panel-head { gap: 10px; margin-bottom: 16px; }
.admin-page .panel-head h3 { margin: 0; }
.admin-page .cards { gap: 14px; }
.admin-page .cards .card {
  border-radius: calc(var(--radius) + 2px); padding: 18px 16px 16px;
  background:
    linear-gradient(180deg, color-mix(in srgb, var(--primary) 6%, var(--panel)), var(--panel));
}
.admin-page .cards .card::before { height: 4px; }
.admin-page .cards .card .num { font-size: 1.625rem; letter-spacing: -.04em; }
.admin-page .stats-row .stat, .admin-page .stats-grid .stat {
  border-radius: var(--radius); background: color-mix(in srgb, var(--panel) 80%, var(--bg));
}
.admin-page .search-bar, .admin-page .filter, .admin-page .batch-bar {
  padding: 12px; border: 1px solid var(--border); border-radius: var(--radius);
  background: color-mix(in srgb, var(--bg) 72%, var(--panel));
}
.admin-page .search-bar input:not([type=checkbox]):not([type=radio]), .admin-page .search-bar select,
.admin-page .filter input:not([type=checkbox]):not([type=radio]), .admin-page .filter select,
.admin-page .batch-bar input:not([type=checkbox]):not([type=radio]), .admin-page .batch-bar select {
  border-radius: calc(var(--radius) - 3px);
}
.admin-page .table-responsive, .admin-page .table-wrap {
  border-radius: var(--radius); overflow: hidden; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--border) 80%, transparent);
}
.admin-page .table th {
  background: color-mix(in srgb, var(--bg) 78%, var(--panel));
  font-size: 0.75rem; letter-spacing: .04em; text-transform: none;
}
.admin-page .table td { padding: 12px; }
.admin-page .table tbody tr:hover td { background: color-mix(in srgb, var(--primary) 7%, var(--panel)); }
.admin-page .empty { padding: 28px 12px; color: var(--muted); }
.admin-page .layui-btn { border-radius: calc(var(--radius) - 3px); }
.admin-page .ops .layui-btn, .admin-page .ops button.link { border-radius: calc(var(--radius) - 5px); }
.admin-page label { font-weight: 650; }
.admin-page input[type="text"], .admin-page input[type="search"], .admin-page input[type="number"],
.admin-page input[type="date"], .admin-page input[type="datetime-local"], .admin-page input[type="url"],
.admin-page input[type="email"], .admin-page input[type="password"], .admin-page select, .admin-page textarea {
  min-height: 44px; border-radius: calc(var(--radius) - 3px);
}
.admin-page textarea { min-height: 96px; }
.admin-page .list-pager { margin-top: 16px; }
.admin-page .alert { border-radius: calc(var(--radius) - 2px); }
@media (max-width: 768px) {
  .admin-page .sidebar { width: min(92vw, 320px); max-width: calc(100vw - 24px); }
  .admin-page .admin-main { margin-left: 0; }
  .admin-page .admin-layout.collapsed .admin-main { margin-left: 0; }
  .admin-page .admin-main { padding: 12px 12px 28px; }
  .admin-page .admin-top { border-radius: var(--radius); padding: 10px 12px; }
  .admin-page .admin-title-wrap h2 { font-size: 1.0625rem; }
  .admin-page .admin-front-action .admin-front-label { display: none; }
  .admin-page .admin-front-action { width: 44px; min-width: 44px; padding: 0; }
  .admin-page .admin-user-name { max-width: 72px; }
  .admin-page .sidebar-foot { display: none; }
  .admin-page .admin-page-head, .admin-page .admin-console-head { padding: 14px; }
  .admin-page .admin-page-head-actions { width: 100%; }
  .admin-page .admin-page-head-actions .layui-btn { flex: 1 1 140px; min-height: 44px; justify-content: center; }
  .admin-page .panel { padding: 16px 14px; border-radius: var(--radius); }
  .admin-page .search-bar, .admin-page .filter, .admin-page .batch-bar { padding: 10px; }
  .admin-page .ops .layui-btn, .admin-page .ops button.link { min-height: 44px; }
}

/* 备案链接与推荐填入（2026-09-01 16:39:57）：页脚备案可点击，后台推荐链接一点即填。 */
.footer-filing-link { color: inherit; text-decoration: none; }
.footer-filing-link:hover, .footer-filing-link:focus-visible { color: var(--primary); }
.settings-fill-links { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 8px; color: var(--muted); font-size: 0.75rem; }
.settings-fill-links .layui-btn { min-height: 36px; }
@media (max-width: 768px) {
  .settings-fill-links .layui-btn { min-height: 44px; flex: 1 1 160px; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
  .admin-page .cards .card, .admin-page .stats-row .stat, .admin-page .sidebar nav a { transition: none; }
}

/* 顶栏真实头像（2026-09-01 14:08:45）：有头像时前台和后台都显示图片，没有则继续用用户名首字。 */

/* 首页顶栏全面美化（2026-09-01 13:54:23）：品牌、菜单、操作区三段排版，菜单按宽收口，手机端仍用汉堡菜单。 */
.home-page .topbar { background: color-mix(in srgb, var(--panel) 86%, transparent); }
.home-page .topbar-inner { gap: 18px; }
.home-page .logo { font-size: 1.1875rem; letter-spacing: .01em; }
.home-page .logo::before { width: 32px; height: 32px; border-radius: var(--radius-sm); }
.home-page .topnav { padding: 4px; border-radius: var(--radius); background: color-mix(in srgb, var(--bg) 72%, transparent); }
.home-page .topnav.is-empty, .home-page .topnav:empty { display: none; padding: 0; background: transparent; box-shadow: none; }
.home-page .topnav a {
  min-height: 40px; padding: 0 12px; border-radius: var(--radius-sm); color: var(--text);
  font-weight: 600;
}
.home-page .topnav a:hover { color: var(--primary); background: color-mix(in srgb, var(--primary) 10%, transparent); }
.home-page .topnav-more-toggle, .home-page .theme-toggle, .home-page .home-wide-toggle {
  min-height: 40px; border-radius: calc(var(--radius) - 3px); background: var(--panel);
}
.home-page .topbar-user, .home-page .topbar-login, .home-page .topbar-register, .home-page .topbar-logout {
  min-height: 40px; padding: 0 12px; border-radius: calc(var(--radius) - 3px); display: inline-flex; align-items: center; gap: 8px;
  font-size: 0.8125rem; font-weight: 700; white-space: nowrap; touch-action: manipulation;
}
.home-page .topbar-user { max-width: 168px; border: 0; background: transparent; color: var(--text); }
.home-page .topbar-user-avatar {
  width: 24px; height: 24px; border-radius: calc(var(--radius-sm) - 2px); display: inline-flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b)); color: #fff; font-size: 0.75rem; overflow: hidden;
}
.home-page .topbar-user-avatar.has-image { background: transparent; padding: 0; }
.home-page .topbar-user-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.home-page .topbar-user-name { overflow: hidden; text-overflow: ellipsis; }
.home-page .topbar-login, .home-page .topbar-logout { border: 1px solid var(--border); color: var(--text); background: var(--panel); }
.home-page .topbar-register {
  border: 0; color: #fff;
  background: linear-gradient(135deg, var(--primary), var(--grad-b));
  box-shadow: 0 8px 16px color-mix(in srgb, var(--primary) 22%, transparent);
}
.home-page .nav-unread-badge { margin-left: 0; }
.user-account-chip { position: relative; display: inline-flex; overflow: visible; z-index: 40; }
.user-account-chip.is-open { z-index: 90; }
.user-account-toggle {
  min-height: 42px; padding: 0 9px; border: 0; border-radius: calc(var(--radius) - 3px);
  background: transparent; color: var(--text); display: inline-flex; align-items: center; gap: 8px;
  font: inherit; font-size: 0.8125rem; font-weight: 700; cursor: pointer; touch-action: manipulation; white-space: nowrap;
  overflow: visible;
}
.user-account-chip.is-avatar .topbar-user-name,
.user-account-chip.is-avatar .admin-user-name { display: none; }
.user-account-chip.is-name .user-account-avatar-wrap { display: none; }
.user-account-unread.is-inline { position: static; margin-left: 2px; }
.user-account-avatar-wrap { position: relative; display: inline-flex; flex: 0 0 auto; }
.user-account-caret { width: 14px; height: 14px; color: var(--muted); }
.user-account-chip.is-open .user-account-toggle, .user-account-toggle:hover { color: var(--primary); background: var(--primary-soft); }
.user-account-menu {
  position: absolute; right: 0; top: calc(100% + 10px); min-width: min(var(--account-menu-width, 228px), calc(100vw - 24px)); max-width: calc(100vw - 24px); padding: 8px;
  border: 1px solid var(--border); border-radius: calc(var(--radius) + 1px);
  background: color-mix(in srgb, var(--panel) 96%, var(--bg)); box-shadow: 0 14px 34px rgba(23,31,56,.16);
  z-index: 120; display: none; grid-template-columns: 1fr; gap: 4px;
}
.user-account-chip.is-open .user-account-menu { display: grid; }
.user-account-summary { display: grid; grid-template-columns: 36px 1fr; grid-template-rows: auto auto; column-gap: 10px; align-items: center; padding: 8px 8px 10px; border-bottom: 0; margin-bottom: 4px; }
.user-account-summary .topbar-user-avatar, .user-account-summary .admin-user-avatar { grid-row: 1 / span 2; width: 36px; height: 36px; border-radius: calc(var(--radius) - 2px); }
.user-account-summary strong { font-size: 0.875rem; }
.user-account-summary span { color: var(--muted); font-size: 0.75rem; }
.user-account-menu a { min-height: 42px; padding: 0 11px; border-radius: var(--radius-sm); color: var(--text); display: flex; align-items: center; font-size: 0.8125rem; font-weight: 650; }
.user-account-menu a:hover { background: var(--primary-soft); color: var(--primary); }
.user-account-menu a.is-danger { color: #c0392b; }
.user-account-unread { position: absolute; top: -6px; right: -7px; margin: 0; z-index: 2; pointer-events: none; }
.user-account-menu a { position: relative; }
.user-account-menu a .nav-unread-badge { position: static; margin-left: auto; box-shadow: none; }
.admin-page .user-account-toggle { min-height: 42px; padding: 0 9px; border-radius: calc(var(--radius) - 3px); }
.topbar-inner .topnav { overflow: hidden; }
.topnav.has-overflow { overflow: visible; }
.topnav a.is-overflow, .topnav .theme-toggle.is-overflow { display: none; }
.topnav-more.is-visible .topnav-more-toggle { min-height: 40px; }
@media (max-width: 1180px) {
  .home-page .topnav { background: transparent; padding: 0; }
  .topbar-inner .topnav { overflow: visible; }
  .topnav a.is-overflow, .topnav .theme-toggle.is-overflow { display: inline-flex; }
  .home-page .topbar-login, .home-page .topbar-register { display: none; }
  .home-page .topbar-inner.nav-open .topbar-login,
  .home-page .topbar-inner.nav-open .topbar-register,
  .home-page .topbar-inner.nav-open .topbar-logout { display: inline-flex; min-height: 44px; }
}
@media (max-width: 768px) {
  .topnav-more, .topnav-more.is-visible { display: none !important; }
  .topnav-more-toggle { min-height: 44px; }
  .topnav a.is-overflow, .topnav .theme-toggle.is-overflow { display: inline-flex !important; }
  .home-page .topbar-user-name, .home-page .user-account-caret { display: none; }
  .home-page .topbar-user, .home-page .user-account-toggle { width: 40px; min-width: 40px; padding: 0; justify-content: center; }
  .home-page .topbar-logout { display: none; }
  .home-page .topbar-inner.nav-open .topbar-logout { display: inline-flex; min-height: 44px; }
  .home-page .theme-toggle span, .home-page .home-wide-toggle span { display: none; }
  .home-page .theme-toggle, .home-page .home-wide-toggle { width: 44px; min-width: 44px; padding: 0; }
}

/* 用户中心统一顶栏：与首页同一套操作区、更多菜单和无边框头像菜单。 */
.user-page .logo::before { width: 32px; height: 32px; border-radius: var(--radius-sm); }
.user-page .topnav { padding: 4px; border-radius: var(--radius); background: color-mix(in srgb, var(--bg) 72%, transparent); }
.user-page .topnav a {
  min-height: 40px; padding: 0 12px; border-radius: var(--radius-sm); color: var(--text);
  font-weight: 600;
}
.user-page .topnav a:hover, .user-page .topnav a[aria-current="page"] { color: var(--primary); background: color-mix(in srgb, var(--primary) 10%, transparent); }
.user-page .topnav-more-toggle, .user-page .theme-toggle {
  min-height: 40px; border-radius: calc(var(--radius) - 3px); background: var(--panel);
}
.user-page .topbar-user {
  min-height: 40px; padding: 0 12px; border-radius: calc(var(--radius) - 3px); display: inline-flex; align-items: center; gap: 8px;
  font-size: 0.8125rem; font-weight: 700; white-space: nowrap; touch-action: manipulation;
  max-width: 168px; border: 0; background: transparent; color: var(--text);
}
.user-page .topbar-user-avatar {
  width: 24px; height: 24px; border-radius: calc(var(--radius-sm) - 2px); display: inline-flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--grad-a), var(--grad-b)); color: #fff; font-size: 0.75rem; overflow: hidden;
}
.user-page .topbar-user-avatar.has-image { background: transparent; padding: 0; }
.user-page .topbar-user-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.user-page .topbar-user-name { overflow: hidden; text-overflow: ellipsis; }
.user-page .nav-unread-badge { margin-left: 0; }
@media (max-width: 1180px) {
  .user-page .topnav { background: transparent; padding: 0; }
}
@media (max-width: 768px) {
  .user-page .topbar-user-name, .user-page .user-account-caret { display: none; }
  .user-page .topbar-user, .user-page .user-account-toggle { width: 40px; min-width: 40px; padding: 0; justify-content: center; }
  .user-page .theme-toggle span { display: none; }
  .user-page .theme-toggle { width: 44px; min-width: 44px; padding: 0; }
  .user-page .panel-head-actions .inline-form, .user-page .panel-head-actions .layui-btn { width: 100%; }
}

/* 首页提取码输入与宽屏收口（2026-09-01 17:40:25）：宽屏首屏跟随后台宽度收口，提取码输入与按钮更适合点击，手机端单列铺满。 */
@media (min-width:1200px) {
  body.home-page.home-wide .home-hero-grid { max-width:var(--home-wide-width); grid-template-columns:minmax(0,1.32fr) minmax(420px,.68fr); }
}
.home-page .hero-command-card .code-input-group,
.home-page .hero-command-card .layui-btn.layui-btn-normal { min-height:52px; }
@media (max-width: 560px) {
  .home-page .hero-command-card .code-input-group { flex: 1 1 100%; }
  .home-page .hero-command-card .layui-btn.layui-btn-normal { width:100%; justify-content:center; }
}

@media (max-width: 760px) {
  .user-page .table-responsive { overflow: visible; }
  .user-page table.table { min-width: 0; }
  .user-page table.table thead { display: none; }
  .user-page table.table tbody { display: flex; flex-direction: column; gap: 12px; }
  .user-page table.table tr { display: block; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); }
  .user-page table.table td { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; min-height: 36px; padding: 8px 0; text-align: right; }
  .user-page table.table td::before { content: attr(data-label); flex: 0 0 88px; color: var(--muted); font-size: 0.75rem; font-weight: 700; text-align: left; }
  .user-page table.table td[colspan] { display: block; text-align: center; }
  .user-page table.table td[colspan]::before { display: none; }
  .user-page .extract-code-cell { justify-content: flex-end; width: 100%; }
  .user-page .extract-copy-btn,
  .user-page .extract-code-cell .layui-btn { min-height: 36px; }
}
.security-event-extract { margin-top: 8px; }

/* 电脑端与手机端布局美化（2026-09-01 20:05:00）：首页页脚左右分列并适配安全区，后台去掉多余分隔符与遮挡。 */
.footer.home-footer { padding: 48px 0; background: transparent; border-top: 1px solid var(--border); margin-top: 64px; }
.footer.home-footer .container { display: flex; justify-content: space-between; align-items: flex-start; flex-wrap: wrap; gap: 32px; }
.footer.home-footer .footer-kicker { font-size: 0.75rem; font-weight: 700; color: var(--primary); letter-spacing: 0.12em; text-transform: uppercase; margin-bottom: 12px; display: inline-block; }
.footer.home-footer .footer-links { display: flex; flex-direction: column; gap: 6px; }
.footer.home-footer .footer-links b { font-size: 1rem; color: var(--text); }
.footer.home-footer .footer-links span { font-size: 0.8125rem; color: var(--muted); }
.footer.home-footer .icp-link { display: inline-flex; align-items: center; gap: 8px; padding: 6px 16px 6px 6px; border: 1px solid var(--border); border-radius: 99px; background: var(--panel); color: var(--muted); text-decoration: none; font-size: 0.8125rem; transition: color 0.15s, border-color 0.15s; }
.footer.home-footer .icp-link:hover { color: var(--primary); border-color: var(--primary); }
.footer.home-footer .icp-badge { background: var(--primary-soft); color: var(--primary); padding: 4px 8px; border-radius: 99px; font-weight: 600; font-size: 0.75rem; }

.sidebar-foot { border-top: none; padding-top: 0; }
.admin-page .sidebar-foot { border-top: none; }

@media (max-width: 768px) {
  .footer.home-footer .container { flex-direction: column; gap: 24px; }
  .home-page:has(.home-mobile-action-bar) .footer.home-footer { padding-bottom: calc(56px + env(safe-area-inset-bottom, 12px)); }
  .admin-page .admin-main { padding-bottom: calc(48px + env(safe-area-inset-bottom, 16px)); }
}

/* 电脑端与手机端布局全面美化（2026-09-01 20:15:00）：首页页脚左右排版优化，手机端导航栏安全区与后台遮挡治理。 */
.site-footer-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 40px 24px;
  display: flex !important;
  justify-content: space-between !important;
  align-items: flex-start !important;
  gap: 40px;
}
.site-footer-brand { flex: 1 1 360px; }
.site-footer-cols {
  display: flex !important;
  flex-direction: row !important;
  gap: 48px !important;
  align-items: flex-start !important;
}
.site-footer-col { margin-bottom: 0 !important; }
.site-footer-col-title { font-size: 0.8125rem !important; font-weight: 700 !important; color: var(--primary) !important; letter-spacing: 0.1em; text-transform: uppercase; margin-bottom: 12px !important; }

.sidebar-foot { border-top: none !important; padding-top: 0 !important; margin-top: 0 !important; }
.admin-page .sidebar-foot { border-top: none !important; margin-top: 0 !important; }
.admin-page .sidebar-foot-kicker { display: none !important; }

@media (max-width: 768px) {
  .site-footer-inner { flex-direction: column !important; gap: 32px !important; padding: 32px 20px !important; }
  .site-footer-cols { flex-direction: column !important; gap: 24px !important; width: 100% !important; }
  
  /* 手机端底部导航与安全区下边距，防止盖住页脚和操作按钮 */
  .home-mobile-action-bar {
    padding-bottom: 3px !important;
  }
  .home-page:has(.home-mobile-action-bar) .site-footer {
    padding-bottom: calc(56px + env(safe-area-inset-bottom, 12px)) !important;
  }
  .home-page:has(.home-mobile-action-bar) .home-main {
    padding-bottom: calc(56px + env(safe-area-inset-bottom, 12px)) !important;
  }
  .admin-page .admin-main {
    padding-bottom: calc(64px + env(safe-area-inset-bottom, 16px)) !important;
  }
}

/* 网站页脚短栏紧凑化（2026-09-02 19:00:52）：关于本站、相关链接、备案信息在电脑端压成短三栏，手机端保留双列并降低高度。 */
.site-footer { padding: 10px 0 calc(10px + env(safe-area-inset-bottom)); margin-top: 18px; }
.site-footer::after { width: 120px; height: 120px; opacity: .55; }
.site-footer-inner { display: grid !important; grid-template-columns: minmax(220px, 1.15fr) minmax(140px, .72fr) minmax(220px, 1fr); gap: 10px 18px; padding: 14px 20px !important; align-items: start !important; max-width: 1120px; }
.site-footer-col { gap: 5px !important; }
.site-footer-col-title { margin-bottom: 4px !important; font-size: 0.6875rem !important; line-height: 1.2; letter-spacing: .08em !important; }
.site-footer-mark { gap: 7px; line-height: 1.25; }
.site-footer-mark-icon { width: 18px; height: 18px; border-radius: calc(var(--radius-sm) - 4px); }
.site-footer-mark-img { height: calc(18px * var(--site-logo-scale, 1)); max-width: min(var(--site-logo-max-width, 240px), 108px); }
.site-footer-mark strong { font-size: 0.875rem; }
.site-footer-slogan { font-size: 0.6875rem; line-height: 1.35; }
.site-footer-copy, .site-footer-note { font-size: 0.6875rem; line-height: 1.35; }
.site-footer-link-list, .site-footer-filing-list { gap: 5px; }
.site-footer-links a { min-height: 28px; padding: 3px 10px; font-size: 0.75rem; }
.site-footer-filing-item { min-height: 28px; padding: 3px 9px 3px 4px; gap: 5px; font-size: 0.75rem; }
.site-footer-filing-chip { min-height: 18px; padding: 0 6px; font-size: 0.625rem; }
.site-footer-filing-text { font-size: 0.6875rem; line-height: 1.35; }
.auth-footer, .user-footer, .admin-footer { margin-top: 18px; }
.footer.home-footer { margin-top: 24px; padding-top: 10px; padding-bottom: calc(10px + env(safe-area-inset-bottom)); }
@media (max-width: 900px) {
  .site-footer-inner { grid-template-columns: minmax(180px, 1fr) minmax(220px, 1fr) !important; gap: 10px 14px; }
  .site-footer-brand { grid-column: 1 / -1; }
}
@media (max-width: 768px) {
  .site-footer { padding: 8px 0 calc(8px + env(safe-area-inset-bottom)); margin-top: 14px; }
  .site-footer-inner { grid-template-columns: 1fr 1fr !important; gap: 10px !important; padding: 12px 14px !important; }
  .site-footer-brand { grid-column: 1 / -1; }
  .site-footer-col-title { margin-bottom: 3px !important; }
  .site-footer-mark strong { font-size: 0.8125rem; }
  .site-footer-slogan, .site-footer-copy, .site-footer-note { font-size: 0.6875rem; }
  .site-footer-link-list, .site-footer-filing-list { gap: 6px; }
  .site-footer-links a, .site-footer-filing-item { min-height: 36px; flex: 1 1 100%; padding-top: 4px; padding-bottom: 4px; justify-content: center; text-align: center; }
  .site-footer-filing-item { flex-direction: column; gap: 3px; padding-left: 7px; padding-right: 7px; border-radius: calc(var(--radius) - 2px); }
  .site-footer-filing-chip { min-height: 17px; }
  .home-page:has(.home-mobile-action-bar) .site-footer { padding-bottom: calc(48px + env(safe-area-inset-bottom, 10px)) !important; }
  .home-page:has(.home-mobile-action-bar) .home-main { padding-bottom: calc(48px + env(safe-area-inset-bottom, 10px)) !important; }
}
@media (max-width: 420px) {
  .site-footer-inner { grid-template-columns: 1fr !important; }
  .site-footer-brand { grid-column: auto; }
  .site-footer-links a, .site-footer-filing-item { flex-basis: auto; }
}

/* 前台导航与用户中心统一视觉（2026-09-04 19:25:43）：桌面端分区更清晰，手机端收紧高度并保留大触控区域。 */
.topbar-front,
.topbar-user-center {
  --nav-surface: color-mix(in srgb, var(--panel) 86%, var(--bg));
  --nav-icon-surface: color-mix(in srgb, var(--primary) 9%, var(--panel));
}
.topbar-front .topbar-inner,
.topbar-user-center .topbar-inner {
  min-height: 66px;
  height: auto;
  gap: 14px;
}
.topbar-front .front-topnav,
.topbar-user-center .user-center-topnav {
  flex: 1 1 auto;
  min-width: 0;
  max-width: 860px;
  padding: 4px;
  gap: 4px;
  border: 1px solid color-mix(in srgb, var(--border) 78%, var(--primary));
  border-radius: calc(var(--radius) + 1px);
  background: var(--nav-surface);
  box-shadow: 0 4px 14px rgba(23,31,56,.05);
}
.topbar-front .topnav-link,
.topbar-user-center .topnav-link {
  position: relative;
  min-height: 42px;
  padding: 0 12px;
  border-radius: calc(var(--radius) - 3px);
  color: var(--muted);
  font-weight: 650;
  gap: 8px;
  transition: color .16s var(--ease-smooth), background .16s var(--ease-smooth), transform .16s var(--ease-smooth), box-shadow .16s var(--ease-smooth);
}
.topbar-front .topnav-link:hover,
.topbar-user-center .topnav-link:hover {
  color: var(--text);
  background: color-mix(in srgb, var(--primary) 8%, transparent);
  transform: translateY(-1px);
}
.topbar-front .topnav-link[aria-current="page"],
.topbar-front .topnav-link.is-current,
.topbar-user-center .topnav-link[aria-current="page"],
.topbar-user-center .topnav-link.is-current {
  color: var(--primary);
  background: var(--panel);
  box-shadow: 0 3px 10px rgba(23,31,56,.08);
}
.topbar-front .topnav-link[aria-current="page"]::after,
.topbar-front .topnav-link.is-current::after,
.topbar-user-center .topnav-link[aria-current="page"]::after,
.topbar-user-center .topnav-link.is-current::after {
  content: '';
  position: absolute;
  right: 12px;
  bottom: 4px;
  left: 12px;
  height: 2px;
  border-radius: 99px;
  background: var(--primary);
}
.topnav-icon {
  display: inline-flex;
  flex: 0 0 28px;
  width: 28px;
  height: 28px;
  align-items: center;
  justify-content: center;
  border-radius: calc(var(--radius) - 5px);
  color: var(--muted);
  background: var(--nav-icon-surface, color-mix(in srgb, var(--primary) 9%, var(--panel)));
  transition: color .16s var(--ease-smooth), background .16s var(--ease-smooth), transform .16s var(--ease-smooth);
}
.topnav-icon svg {
  width: 16px;
  height: 16px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.topbar-front .topnav-link:hover .topnav-icon,
.topbar-front .topnav-link[aria-current="page"] .topnav-icon,
.topbar-front .topnav-link.is-current .topnav-icon,
.topbar-user-center .topnav-link:hover .topnav-icon,
.topbar-user-center .topnav-link[aria-current="page"] .topnav-icon,
.topbar-user-center .topnav-link.is-current .topnav-icon {
  color: var(--primary);
  background: color-mix(in srgb, var(--primary) 15%, var(--panel));
  transform: scale(1.04);
}
.topbar-front .topbar-actions,
.topbar-user-center .topbar-actions {
  gap: 6px;
}
.topbar-front .theme-toggle,
.topbar-user-center .theme-toggle {
  min-height: 42px;
  border-radius: calc(var(--radius) - 3px);
}
.topbar-front .user-account-toggle,
.topbar-user-center .user-account-toggle {
  padding-inline: 9px;
}
.topbar-front .user-account-toggle:hover,
.topbar-user-center .user-account-toggle:hover,
.topbar-front .user-account-chip.is-open .user-account-toggle,
.topbar-user-center .user-account-chip.is-open .user-account-toggle {
  box-shadow: 0 3px 10px rgba(23,31,56,.08);
}
.user-page > main.container {
  width: min(1280px, 100%);
  padding-top: 24px;
  padding-bottom: 48px;
}
.user-page > main.container > .panel {
  border-radius: calc(var(--radius) + 2px);
  box-shadow: 0 8px 26px rgba(23,31,56,.06);
}
.user-page > main.container .panel-head {
  gap: 14px;
}
.user-page > main.container .panel-head h2,
.user-page > main.container .panel-head h3 {
  letter-spacing: 0;
}
.user-workbench {
  overflow: hidden;
  border-color: color-mix(in srgb, var(--primary) 22%, var(--border));
  background:
    linear-gradient(135deg, color-mix(in srgb, var(--primary) 8%, var(--panel)) 0%, var(--panel) 42%, color-mix(in srgb, var(--grad-b) 7%, var(--panel)) 100%);
}
.user-workbench-hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: start;
  gap: 18px;
}
.user-workbench-copy h2 {
  margin: 6px 0 8px;
  font-size: 2rem;
  line-height: 1.15;
  letter-spacing: 0;
}
.user-workbench-copy p {
  max-width: 720px;
  margin: 0;
  color: var(--muted);
  line-height: 1.7;
}
.user-workbench-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 12px;
}
.user-workbench-meta span {
  display: inline-flex;
  align-items: center;
  min-height: 28px;
  padding: 4px 10px;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: color-mix(in srgb, var(--panel) 78%, var(--bg));
  color: var(--muted);
  font-size: 0.75rem;
}
.user-workbench-primary {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 8px;
  min-width: 240px;
}
/* ⚠️ 第 44 轮：原为 `white-space: nowrap`，配合移动端 `flex: 1 1 150px`（8468 行）
   的 flex-shrink，按钮在窄容器里被**水平硬裁**。实测（Chrome --dump-dom）：
     140px 容器 → 「查看全部资源列表」溢出 5px 被裁；
      90px 容器 → 「立即上传文件」溢 16px、「复制分享链接」溢 16px、
                   「查看全部资源列表」溢 30px、「生成提取码」溢 9px 全部被裁。
   改为 normal 与全局 `body .layui-btn` 一致：窄处自动换行、多行自动增高。 */
.user-workbench-primary .layui-btn {
  min-height: 42px;
  white-space: normal;
}
.user-quick-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
  margin-top: 18px;
}
.user-quick-card {
  display: grid;
  grid-template-columns: 42px minmax(0, 1fr);
  grid-template-areas: "icon title" "icon desc";
  align-items: center;
  gap: 3px 10px;
  min-height: 86px;
  padding: 14px;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: color-mix(in srgb, var(--panel) 82%, var(--bg));
  color: var(--text);
  text-decoration: none;
  transition: transform .18s var(--ease-smooth), border-color .18s var(--ease-smooth), background .18s var(--ease-smooth);
}
.user-quick-card:hover,
.user-quick-card:focus-visible {
  transform: translateY(-2px);
  border-color: color-mix(in srgb, var(--primary) 42%, var(--border));
  background: color-mix(in srgb, var(--primary-soft) 42%, var(--panel));
}
.user-quick-icon {
  grid-area: icon;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  border-radius: calc(var(--radius) - 2px);
  background: color-mix(in srgb, var(--primary) 13%, var(--bg));
  color: var(--primary);
  font-weight: 800;
}
.user-quick-card b {
  grid-area: title;
  min-width: 0;
  overflow: hidden;
  color: var(--text);
  font-size: 0.9375rem;
  line-height: 1.3;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.user-quick-card small {
  grid-area: desc;
  min-width: 0;
  color: var(--muted);
  font-size: 0.75rem;
  line-height: 1.45;
  overflow-wrap: anywhere;
}
.user-reminder-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px;
  margin-top: 12px;
}
.user-reminder-card {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  min-height: 92px;
  padding: 13px 14px;
  border: 1px solid var(--border);
  border-radius: calc(var(--radius) - 1px);
  background: color-mix(in srgb, var(--panel) 86%, var(--bg));
  color: var(--text);
  text-decoration: none;
}
.user-reminder-card span,
.user-reminder-card small {
  color: var(--muted);
  font-size: 0.75rem;
  line-height: 1.45;
}
.user-reminder-card b {
  margin: 5px 0 4px;
  font-size: 1.625rem;
  line-height: 1;
  letter-spacing: 0;
}
.user-reminder-card.is-info b { color: var(--primary); }
.user-reminder-card.is-warning b { color: var(--orange); }
.user-reminder-card.is-danger b { color: var(--red); }
.user-reminder-card.is-soft b { color: color-mix(in srgb, var(--grad-b) 70%, var(--text)); }
.user-dashboard-panel {
  margin-top: 16px;
}
.user-quick-filters {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 16px;
  padding-top: 14px;
  border-top: 1px solid color-mix(in srgb, var(--primary) 16%, var(--border));
}
.user-quick-filters-label {
  margin-right: 2px;
  color: var(--muted);
  font-size: 0.75rem;
  font-weight: 700;
}
.user-quick-filters a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 32px;
  padding: 5px 11px;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: color-mix(in srgb, var(--panel) 76%, var(--bg));
  color: var(--muted);
  font-size: 0.75rem;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
  transition: color .16s ease, border-color .16s ease, background .16s ease;
}
.user-quick-filters a:hover,
.user-quick-filters a:focus-visible,
.user-quick-filters a.is-current {
  border-color: color-mix(in srgb, var(--primary) 46%, var(--border));
  background: var(--primary-soft);
  color: var(--primary);
}
.user-dashboard-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(280px, .75fr);
  gap: 18px;
  align-items: stretch;
}
.user-dashboard-overview {
  min-width: 0;
}
.user-dashboard-overview .stat {
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-height: 82px;
  color: inherit;
  text-decoration: none;
}
.user-recent-panel {
  min-width: 0;
  padding-left: 18px;
  border-left: 1px solid var(--border);
}
.user-recent-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 8px;
}
.user-recent-head h3 {
  margin: 0;
  font-size: 1rem;
}
.user-recent-list {
  display: flex;
  flex-direction: column;
}
.user-recent-item {
  display: grid;
  grid-template-columns: 30px minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  min-width: 0;
  padding: 9px 0;
  border-bottom: 1px dashed var(--border);
  color: var(--text);
  text-decoration: none;
}
.user-recent-item:last-child {
  border-bottom: 0;
}
.user-recent-item:hover .user-recent-name,
.user-recent-item:focus-visible .user-recent-name {
  color: var(--primary);
}
.user-recent-kind {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  border-radius: calc(var(--radius) - 5px);
  background: color-mix(in srgb, var(--primary) 12%, var(--bg));
  color: var(--primary);
  font-size: 0.75rem;
  font-weight: 800;
}
.user-recent-kind.is-text {
  background: color-mix(in srgb, var(--grad-b) 14%, var(--bg));
  color: var(--grad-b);
}
.user-recent-name {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 0.8125rem;
}
.user-recent-item time {
  color: var(--muted);
  font-size: 0.6875rem;
  white-space: nowrap;
}

@media (max-width: 1180px) {
  .topbar-front .front-topnav,
  .topbar-user-center .user-center-topnav {
    max-width: none;
  }
}
@media (max-width: 980px) {
  .user-workbench-hero {
    grid-template-columns: 1fr;
  }
  .user-workbench-primary {
    justify-content: flex-start;
    min-width: 0;
  }
  .user-quick-grid,
  .user-reminder-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .user-dashboard-grid {
    grid-template-columns: 1fr;
  }
  .user-recent-panel {
    padding-top: 16px;
    padding-left: 0;
    border-top: 1px solid var(--border);
    border-left: 0;
  }
}
@media (max-width: 768px) {
  .topbar-front .topbar-inner,
  .topbar-user-center .topbar-inner {
    min-height: 56px;
    padding-top: 5px;
    padding-bottom: 5px;
    gap: 8px;
  }
  .topbar-front .front-topnav,
  .topbar-user-center .user-center-topnav {
    padding: 8px 4px 10px;
    border: 0;
    border-top: 1px solid var(--border);
    border-radius: 0;
    background: transparent;
    box-shadow: none;
  }
  .topbar-front .topnav.mobile-open .topnav-link,
  .topbar-user-center .topnav.mobile-open .topnav-link {
    min-height: 48px;
    padding: 8px 10px;
    justify-content: flex-start;
    border-radius: calc(var(--radius) - 2px);
  }
  .topbar-front .topnav.mobile-open .topnav-link[aria-current="page"],
  .topbar-front .topnav.mobile-open .topnav-link.is-current,
  .topbar-user-center .topnav.mobile-open .topnav-link[aria-current="page"],
  .topbar-user-center .topnav.mobile-open .topnav-link.is-current {
    box-shadow: none;
  }
  .topbar-front .topnav-link[aria-current="page"]::after,
  .topbar-front .topnav-link.is-current::after,
  .topbar-user-center .topnav-link[aria-current="page"]::after,
  .topbar-user-center .topnav-link.is-current::after {
    right: auto;
    bottom: 10px;
    left: 0;
    width: 3px;
    height: 28px;
  }
  .topnav-icon {
    flex-basis: 32px;
    width: 32px;
    height: 32px;
    border-radius: var(--radius-sm);
  }
  .topnav-icon svg { width: 17px; height: 17px; }
  .topbar-front .theme-toggle,
  .topbar-user-center .theme-toggle,
  .topbar-front .user-account-toggle,
  .topbar-user-center .user-account-toggle,
  .topbar-front .nav-toggle,
  .topbar-user-center .nav-toggle { min-width: 42px; min-height: 42px; }
  .user-page > main.container {
    padding: 18px 12px 88px;
  }
  .user-page > main.container > .panel {
    border-radius: var(--radius);
  }
  .user-workbench {
    padding: 16px;
  }
  .user-workbench-copy h2 {
    font-size: 1.5rem;
  }
  .user-workbench-primary .layui-btn {
    flex: 1 1 150px;
    justify-content: center;
  }
  .user-quick-grid {
    gap: 10px;
  }
  .user-quick-card {
    min-height: 82px;
    padding: 12px;
  }
  .user-reminder-card {
    min-height: 86px;
    padding: 12px;
  }
  .user-page > main.container .panel-head {
    align-items: flex-start;
  }
  .mobile-bottom-nav {
    left: 10px;
    right: 10px;
    min-height: 52px;
    padding: 4px;
    border-radius: var(--radius);
  }
  .mobile-bottom-nav a {
    min-height: 44px;
    gap: 2px;
    font-size: 0.6875rem;
  }
  body.has-mobile-bottom-nav { padding-bottom: calc(58px + env(safe-area-inset-bottom)); }
}
@media (max-width: 640px) {
  .topbar-front .topbar-inner .logo,
  .topbar-user-center .topbar-inner .logo {
    max-width: 54vw;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .topbar-front .topbar-actions,
  .topbar-user-center .topbar-actions { gap: 4px; }
  .user-page > main.container { padding-inline: 10px; }
  .user-page > main.container .panel-head h2,
  .user-page > main.container .panel-head h3 { font-size: 1.125rem; }
}
@media (max-width: 560px) {
  .user-workbench-meta {
    gap: 6px;
  }
  .user-workbench-meta span {
    width: 100%;
    justify-content: center;
  }
  .user-workbench-primary {
    width: 100%;
  }
  .user-workbench-primary .layui-btn {
    width: 100%;
  }
  .user-quick-grid,
  .user-reminder-grid {
    grid-template-columns: 1fr;
  }
  .user-quick-card {
    grid-template-columns: 40px minmax(0, 1fr);
    min-height: 78px;
  }
  .user-quick-icon {
    width: 40px;
    height: 40px;
  }
  .user-reminder-card b {
    font-size: 1.5rem;
  }
  .user-quick-filters {
    align-items: stretch;
  }
  .user-quick-filters-label {
    flex: 0 0 100%;
    margin-bottom: 1px;
  }
  .user-quick-filters a {
    flex: 1 1 auto;
    min-height: 36px;
    padding-inline: 10px;
  }
  .user-recent-item time {
    font-size: 0.625rem;
  }
}

/* 账号菜单浮层定位：后台顶栏 .admin-top-actions 设了 overflow-x:auto，按 CSS 规则
   另一轴会被强制计算为 auto，绝对定位的菜单会被该容器整体裁掉，表现就是「后台点
   头像展不开」。改用固定定位脱离该裁剪上下文，坐标由 common.js 注入
   --account-menu-left/top/width；前台顶栏同样走这条路径，观感保持不变。 */
.user-account-menu.is-floating {
  position: fixed;
  top: var(--account-menu-top, 58px);
  left: var(--account-menu-left, 12px);
  right: auto;
  width: var(--account-menu-width, auto);
  min-width: 0;
  max-width: calc(100vw - 24px);
  max-height: calc(100vh - 110px);
  overflow-y: auto;
  overscroll-behavior: contain;
  z-index: 1800;
}
.user-account-menu.is-floating .user-account-summary {
  position: sticky;
  top: 0;
  z-index: 1;
  margin: -2px -2px 4px;
  padding: 10px;
  border-radius: calc(var(--radius) - 2px);
  background: color-mix(in srgb, var(--panel) 96%, var(--bg));
}

@media (max-width: 768px) {
  .user-account-menu.is-floating {
    width: var(--account-menu-width, min(300px, calc(100vw - 24px)));
    max-height: calc(100dvh - 88px - env(safe-area-inset-bottom, 0px));
    -webkit-overflow-scrolling: touch;
  }
}

/* 电脑端与手机端页脚布局美化（2026-09-02 19:27:08）：左侧品牌、右侧链接与备案成组，手机端改为卡片分栏。 */
.site-footer {
  padding: 18px 16px calc(16px + env(safe-area-inset-bottom));
  margin-top: auto;
}
.site-footer-inner {
  display: flex !important;
  flex-direction: row !important;
  justify-content: space-between !important;
  align-items: flex-start !important;
  gap: 28px !important;
  max-width: 1120px;
  margin: 0 auto;
  padding: 20px 24px !important;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
.site-footer-brand {
  flex: 1 1 280px;
  max-width: 420px;
  position: relative;
  padding-left: 14px;
}
.site-footer-brand::before {
  content: '';
  position: absolute;
  left: 0;
  top: 4px;
  bottom: 4px;
  width: 3px;
  border-radius: 99px;
  background: linear-gradient(180deg, var(--grad-a), var(--grad-b));
}
.site-footer-cols {
  display: flex !important;
  flex-direction: row !important;
  gap: 36px !important;
  align-items: flex-start !important;
  flex: 0 1 auto;
  min-width: 0;
}
.site-footer-col { gap: 8px !important; min-width: 0; }
.site-footer-col-title {
  margin: 0 0 2px !important;
  font-size: 0.6875rem !important;
  font-weight: 800 !important;
  letter-spacing: .12em !important;
  line-height: 1.2;
}
.site-footer-mark { gap: 8px; line-height: 1.3; }
.site-footer-mark-icon { width: 22px; height: 22px; border-radius: calc(var(--radius-sm) - 3px); }
.site-footer-mark-img { height: calc(22px * var(--site-logo-scale, 1)); max-width: min(var(--site-logo-max-width, 240px), 140px); }
.site-footer-mark strong { font-size: 1rem; }
.site-footer-slogan { font-size: 0.75rem; line-height: 1.5; }
.site-footer-copy, .site-footer-note { font-size: 0.75rem; line-height: 1.5; }
.site-footer-link-list, .site-footer-filing-list { gap: 8px; }
.site-footer-links a {
  min-height: 34px;
  padding: 4px 12px;
  font-size: 0.8125rem;
  transition: color .15s, border-color .15s, background .15s, transform .15s;
}
.site-footer-links a:hover, .site-footer-links a:focus-visible { transform: translateY(-1px); }
.site-footer-filing-item {
  min-height: 34px;
  padding: 4px 12px 4px 5px;
  gap: 8px;
  flex-direction: row;
}
.site-footer-filing-chip { min-height: 20px; padding: 0 8px; font-size: 0.6875rem; }
.site-footer-filing-text { font-size: 0.75rem; line-height: 1.4; }
.captcha-scene-experience-grid { align-items: start; }
.captcha-scene-experience-grid > div { min-width: 0; }
.captcha-scene-experience-grid select { min-width: 0; width: 100%; }
@media (max-width: 640px) {
  .captcha-scene-experience-grid { grid-template-columns: 1fr; gap: 10px; }
  .captcha-scene-experience-grid .hint { line-height: 1.45; }
}
.auth-footer, .user-footer, .admin-footer { margin-top: auto; }
.admin-footer .site-footer-inner {
  border: 0;
  box-shadow: none;
  background: transparent;
  border-radius: 0;
  padding: 12px 0 !important;
}
.footer.home-footer { margin-top: auto; padding: 18px 16px calc(16px + env(safe-area-inset-bottom)); }
@media (max-width: 900px) {
  .site-footer-inner { flex-wrap: wrap !important; gap: 16px !important; padding: 16px 18px !important; }
  .site-footer-brand { flex: 1 1 100%; max-width: none; }
  .site-footer-cols { width: 100%; justify-content: space-between; gap: 18px !important; }
}
@media (max-width: 768px) {
  .site-footer { padding: 8px 10px calc(8px + env(safe-area-inset-bottom)); }
  .site-footer-inner {
    flex-direction: column !important;
    gap: 10px !important;
    padding: 12px !important;
    border-radius: calc(var(--radius) + 2px);
  }
  .site-footer-brand { padding-left: 12px; }
  .site-footer-cols { width: 100% !important; gap: 8px !important; }
  .site-footer-col {
    flex: 1 1 0;
    min-width: 0;
    padding: 10px;
    border: 0;
    border-radius: 0;
    background: transparent;
  }
  .site-footer-brand { grid-column: auto; }
  .site-footer-col-title { margin-bottom: 6px !important; }
  .site-footer-mark strong { font-size: 0.9375rem; }
  .site-footer-slogan, .site-footer-copy, .site-footer-note { font-size: 0.75rem; }
  .site-footer-link-list, .site-footer-filing-list { gap: 6px; }
  .site-footer-links a, .site-footer-filing-item {
    min-height: 40px;
    flex: 1 1 100%;
    justify-content: flex-start;
    text-align: left;
    padding-top: 6px;
    padding-bottom: 6px;
  }
  .site-footer-filing-item { flex-direction: row; gap: 6px; padding-left: 5px; padding-right: 10px; border-radius: 999px; }
  .home-page:has(.home-mobile-action-bar) .site-footer,
  .home-page:has(.home-mobile-action-bar) .footer.home-footer { padding-bottom: calc(58px + env(safe-area-inset-bottom, 10px)) !important; }
  .home-page:has(.home-mobile-action-bar) .home-main { padding-bottom: calc(56px + env(safe-area-inset-bottom, 10px)) !important; }
  .admin-footer .site-footer-inner { padding: 8px 0 !important; }
}
@media (max-width: 420px) {
  .site-footer-cols { flex-direction: column !important; }
  .site-footer-col { flex: 1 1 auto; width: 100%; }
}

/* 手机端关于本站宽卡片并去掉页脚上下空白（2026-09-02 19:35:59）。 */
@media (max-width: 768px) {
  .site-footer,
  .footer.home-footer,
  .auth-footer,
  .user-footer {
    padding: 0 10px 0 !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
  }
  .site-footer-inner {
    flex-direction: column !important;
    gap: 8px !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
  }
  .site-footer-brand {
    flex: 1 1 100% !important;
    width: 100% !important;
    max-width: none !important;
    grid-column: 1 / -1 !important;
    padding: 12px 14px 12px 16px !important;
    border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
    border-radius: var(--radius);
    background: color-mix(in srgb, var(--panel) 94%, transparent);
    box-shadow: 0 8px 18px rgba(15, 23, 42, .05);
  }
  .site-footer-cols {
    width: 100% !important;
    gap: 8px !important;
  }
  .site-footer-col {
    flex: 1 1 0;
    min-width: 0;
    padding: 10px;
    border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
    border-radius: calc(var(--radius) - 2px);
    background: color-mix(in srgb, var(--bg) 55%, var(--panel));
  }
  body.has-mobile-bottom-nav .site-footer,
  .home-page:has(.home-mobile-action-bar) .site-footer,
  .home-page:has(.home-mobile-action-bar) .footer.home-footer {
    padding-bottom: calc(54px + env(safe-area-inset-bottom, 0px)) !important;
  }
  .home-page:has(.home-mobile-action-bar) .home-main {
    padding-bottom: 8px !important;
  }
  body.has-mobile-bottom-nav { padding-bottom: calc(54px + env(safe-area-inset-bottom)) !important; }
  .admin-footer { padding-top: 0 !important; padding-bottom: 0 !important; }
  .admin-footer .site-footer-inner { padding: 0 !important; }
}
@media (max-width: 420px) {
  .site-footer-cols { flex-direction: column !important; }
  .site-footer-col { flex: 1 1 auto; width: 100%; }
}

/* 页脚版权与补充说明排版（2026-09-02 19:44:52）：电脑端并排，手机端独立成行。 */
.site-footer-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 6px 10px;
  margin: 6px 0 0;
  color: var(--muted);
  font-size: 0.75rem;
  line-height: 1.55;
}
.site-footer-meta-dot { color: color-mix(in srgb, var(--muted) 70%, var(--primary)); font-weight: 700; }
.site-footer-copy, .site-footer-note { margin: 0; color: inherit; font-size: inherit; line-height: inherit; }
@media (max-width: 768px) {
  .site-footer-meta {
    display: grid;
    gap: 4px;
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px dashed color-mix(in srgb, var(--border) 80%, transparent);
  }
  .site-footer-meta-dot { display: none; }
  .site-footer-copy, .site-footer-note { display: block; }
}

/* 全站手机端表格卡片化（2026-09-02 22:35:35）：前台、用户中心和后台窄屏默认按字段名分行展示，操作按钮保持可点。 */
@media (max-width: 768px) {
  body[data-mobile-table-mode="card"] .table-responsive,
  body[data-mobile-table-mode="card"] .table-wrap,
  body[data-mobile-table-mode="card"] .type-summary,
  body[data-mobile-table-mode="card"] .invite-list {
    overflow: visible;
    border: 0;
    background: transparent;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) {
    display: block;
    width: 100%;
    min-width: 0 !important;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) thead {
    display: none;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) tbody {
    display: flex;
    flex-direction: column;
    gap: 10px;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) tbody tr {
    display: block;
    width: 100%;
    margin: 0;
    padding: 12px;
    border: 1px solid var(--border);
    border-radius: var(--radius);
    background: var(--panel);
    box-shadow: var(--shadow-sm);
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) tbody tr:hover td {
    background: transparent;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    width: 100%;
    min-height: 36px;
    padding: 8px 0;
    text-align: right;
    border: 0;
    border-bottom: 1px dashed color-mix(in srgb, var(--border) 80%, transparent);
    overflow-wrap: anywhere;
    word-break: break-word;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td:last-child {
    border-bottom: 0;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td::before {
    content: attr(data-label);
    flex: 0 0 88px;
    max-width: 42%;
    color: var(--muted);
    font-size: 0.75rem;
    font-weight: 700;
    text-align: left;
    line-height: 1.45;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td:not([data-label])::before {
    content: none;
    flex: 0;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td[colspan],
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td.empty {
    display: block;
    text-align: center;
    padding: 18px 8px;
    border-bottom: 0;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td[colspan]::before,
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td.empty::before {
    display: none;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td > * {
    min-width: 0;
    max-width: calc(100% - 96px);
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) .ellipsis,
  body[data-mobile-table-mode="card"] table:not(.share-result-table) .file-name-cell {
    max-width: calc(100% - 96px);
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
    overflow-wrap: anywhere;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td:has(> input[type="checkbox"]) {
    justify-content: flex-start;
    min-height: 44px;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td[data-label="操作"],
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td[data-label="动作"] {
    flex-wrap: wrap;
    justify-content: flex-end;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) .ops,
  body[data-mobile-table-mode="card"] table:not(.share-result-table) .admin-share-actions,
  body[data-mobile-table-mode="card"] table:not(.share-result-table) .log-row-actions,
  body[data-mobile-table-mode="card"] table:not(.share-result-table) .extract-code-cell {
    width: 100%;
    max-width: 100%;
    justify-content: flex-end;
    flex-wrap: wrap;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) .layui-btn,
  body[data-mobile-table-mode="card"] table:not(.share-result-table) .extract-copy-btn {
    min-height: 40px;
  }
  body[data-mobile-table-mode="scroll"] .table-responsive,
  body[data-mobile-table-mode="scroll"] .table-wrap,
  body[data-mobile-table-mode="scroll"] .type-summary,
  body[data-mobile-table-mode="scroll"] .invite-list {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
  body[data-mobile-table-mode="scroll"] .user-page .table-responsive {
    overflow-x: auto;
  }
  body[data-mobile-table-mode="scroll"] .user-page table.table {
    display: table;
    min-width: 720px;
  }
  body[data-mobile-table-mode="scroll"] .user-page table.table thead {
    display: table-header-group;
  }
  body[data-mobile-table-mode="scroll"] .user-page table.table tbody {
    display: table-row-group;
  }
  body[data-mobile-table-mode="scroll"] .user-page table.table tr {
    display: table-row;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
    box-shadow: none;
  }
  body[data-mobile-table-mode="scroll"] .user-page table.table td {
    display: table-cell;
    min-height: 0;
    padding: 11px 12px;
    text-align: left;
    border-bottom: 1px solid var(--border);
  }
  body[data-mobile-table-mode="scroll"] .user-page table.table td::before {
    content: none;
  }
  body[data-mobile-table-mode="scroll"] .user-resource-table,
  body[data-mobile-table-mode="scroll"] .user-resource-table thead,
  body[data-mobile-table-mode="scroll"] .user-resource-table tbody,
  body[data-mobile-table-mode="scroll"] .user-resource-table tr,
  body[data-mobile-table-mode="scroll"] .user-resource-table td {
    display: revert;
  }
  body[data-mobile-table-mode="scroll"] .user-resource-table {
    display: table;
    min-width: 720px;
  }
  body[data-mobile-table-mode="scroll"] .user-resource-table thead { display: table-header-group; }
  body[data-mobile-table-mode="scroll"] .user-resource-table tbody { display: table-row-group; }
  body[data-mobile-table-mode="scroll"] .user-resource-table tr { display: table-row; margin: 0; padding: 0; border: 0; background: transparent; box-shadow: none; }
  body[data-mobile-table-mode="scroll"] .user-resource-table td { display: table-cell; min-height: 0; padding: 11px 12px; text-align: left; border-bottom: 1px solid var(--border); }
  body[data-mobile-table-mode="scroll"] .user-resource-table td::before { content: none; }
}

/* 底栏与页脚继续收口（2026-09-02 22:49:30）：压掉上下空白，底栏贴底，页脚内容横向更紧凑。 */
.site-footer {
  padding: 8px 12px 8px;
  margin-top: auto;
}
.site-footer-inner {
  gap: 16px 20px !important;
  padding: 10px 16px !important;
  border-radius: var(--radius);
}
.site-footer-cols { gap: 16px !important; }
.site-footer-col { gap: 4px !important; }
.site-footer-col-title { margin: 0 !important; }
.site-footer-meta { margin: 4px 0 0; }
.admin-footer { padding-top: 0; padding-bottom: 0; }
.admin-footer .site-footer-inner { padding: 8px 0 !important; border: 0; box-shadow: none; background: transparent; }
.footer.home-footer { padding: 8px 12px 8px; }
@media (max-width: 768px) {
  .site-footer,
  .footer.home-footer {
    padding: 0 8px 0 !important;
    margin-top: 8px;
  }
  .site-footer-inner {
    gap: 8px !important;
    padding: 8px 10px !important;
    border-radius: calc(var(--radius) - 2px);
  }
  .site-footer-brand {
    padding: 8px 10px 8px 12px;
  }
  .site-footer-cols { gap: 6px !important; }
  .site-footer-col { padding: 8px; }
  .site-footer-col-title { margin-bottom: 2px !important; }
  .site-footer-meta { margin-top: 4px; padding-top: 4px; }
  .site-footer-links a,
  .site-footer-filing-item {
    min-height: 32px;
    padding-top: 3px;
    padding-bottom: 3px;
  }
  .mobile-bottom-nav,
  .home-mobile-action-bar {
    left: 6px;
    right: 6px;
    bottom: max(2px, env(safe-area-inset-bottom));
    min-height: 44px;
    padding: 2px;
    gap: 1px;
    border-radius: var(--radius);
  }
  .mobile-bottom-nav a,
  .home-mobile-action-bar button,
  .home-mobile-action-bar a {
    min-height: 40px;
    padding: 2px 1px 1px;
    gap: 0;
    border-radius: var(--radius-sm);
    font-size: 0.625rem;
    line-height: 1.05;
  }
  .mobile-bottom-nav a.active::before { top: 2px; width: 8px; height: 2px; }
  .mobile-nav-icon { width: 18px; height: 18px; }
  .mobile-bottom-nav svg,
  .home-mobile-action-bar svg { width: 16px; height: 16px; }
  body.has-mobile-bottom-nav { padding-bottom: calc(48px + env(safe-area-inset-bottom)) !important; }
  body.has-mobile-bottom-nav .site-footer { padding-bottom: 0 !important; }
  .home-page:has(.home-mobile-action-bar) .site-footer,
  .home-page:has(.home-mobile-action-bar) .footer.home-footer {
    padding-bottom: 0 !important;
  }
  .home-page:has(.home-mobile-action-bar) .home-main {
    padding-bottom: 4px !important;
  }
  .home-page.home-has-mobile-action-bar { padding-bottom: calc(48px + env(safe-area-inset-bottom)); }
  .admin-page .admin-main { padding-bottom: 12px !important; }
  .admin-footer { padding: 0 10px !important; }
  .admin-footer .site-footer-inner { padding: 0 !important; }
}

/* 后台顶栏：左侧标题两行显示（分组名一行、页面标题一行），右侧按钮区可横向滑动（2026-09-14 07:49 定稿） */
.admin-page .admin-top {
  flex-wrap: nowrap;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
  overflow: visible;
}
.admin-page .admin-top .top-left {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: max-content;
  flex: 0 1 auto;
  flex-wrap: nowrap;
}
.admin-page .admin-title-wrap {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1px;
  min-width: max-content;
  white-space: nowrap;
}
.admin-page .admin-title-wrap .section-kicker {
  flex: 0 0 auto;
  line-height: 1.2;
}
.admin-page .admin-title-wrap h2 {
  margin: 0;
  white-space: nowrap;
}
.admin-page .admin-top-actions {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  width: auto;
  flex: 0 1 auto;
  min-width: 0;
  gap: 6px;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.admin-page .admin-top-actions::-webkit-scrollbar { display: none; }
.admin-page .admin-top-actions > * { flex: 0 0 auto; }
.admin-page .admin-top-actions .theme-toggle,
.admin-page .admin-top-actions .admin-front-action,
.admin-page .admin-top-actions .admin-user-chip,
.admin-page .admin-top-actions .user-account-chip {
  flex: 0 0 auto;
  white-space: nowrap;
}
@media (max-width: 768px) {
  .admin-page .admin-top {
    flex-wrap: nowrap;
    align-items: center;
    padding: 8px 10px;
    margin-bottom: 12px;
  }
  .admin-page .admin-top .top-left { min-width: max-content; flex: 0 1 auto; }
  .admin-page .admin-title-wrap { min-width: max-content; }
  .admin-page .admin-top-actions { width: auto; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .admin-page .admin-top-actions::-webkit-scrollbar { display: none; }
  .admin-page .admin-title-wrap h2 { font-size: 1rem; }
}

/* 移动端排版与按钮最终收口（2026-09-05 23:59:59）：重复文件提示、文本工具栏、页脚和底部导航统一紧凑布局。 */
.duplicate-banner {
  min-width: 0;
  align-items: flex-start;
}
.duplicate-info {
  flex: 1 1 auto;
  min-width: 0;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.duplicate-info b,
.duplicate-info span,
.duplicate-info .duplicate-result {
  min-width: 0;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.duplicate-info b { line-height: 1.35; }
.duplicate-info span,
.duplicate-info .duplicate-result { display: block; }
.duplicate-actions,
.duplicate-actions form {
  min-width: 0;
}

/* 桌面端页脚保持三栏，内容较多时允许第三栏自然压缩。 */
.site-footer {
  padding: 12px 16px calc(10px + env(safe-area-inset-bottom));
}
.site-footer-inner {
  display: grid !important;
  grid-template-columns: minmax(240px, 1.2fr) repeat(2, minmax(180px, 1fr));
  gap: 16px 24px !important;
  padding: 14px 20px !important;
  border-radius: var(--radius);
}
.site-footer-brand { min-width: 0; }
.site-footer-cols {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px !important;
  min-width: 0;
}
.site-footer-col { min-width: 0; }
.site-footer-links a,
.site-footer-filing-item {
  max-width: 100%;
  overflow-wrap: anywhere;
  word-break: break-word;
}

@media (max-width: 768px) {
  .home-page .text-workbench-head { gap: 8px; }
  .home-page .text-workbench-tools {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 6px;
    width: 100%;
    min-width: 0;
  }
  .home-page .text-workbench-tools .layui-btn {
    width: 100%;
    min-width: 0;
    min-height: 40px !important;
    padding: 6px 8px;
    border-radius: calc(var(--radius) - 5px);
    font-size: 0.75rem;
    line-height: 1.25;
    white-space: normal;
    overflow-wrap: anywhere;
    word-break: break-word;
  }
  .text-mobile-toolbar-scroll .home-page .text-workbench-tools {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    grid-auto-rows: minmax(var(--text-mobile-toolbar-height, 44px), auto);
    align-items: stretch;
    flex: 1 1 auto;
    width: 100%;
    min-width: 0;
    max-width: 100%;
    gap: 8px;
    overflow: visible;
    padding: 0;
  }
  .text-mobile-toolbar-scroll .home-page .text-workbench-tool-group {
    display: flex;
    flex: 0 0 auto;
    flex-wrap: nowrap;
    align-items: stretch;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    min-height: var(--text-mobile-toolbar-height, 44px);
    overflow-x: auto;
    overflow-y: hidden;
    padding: 4px 4px 8px;
    overscroll-behavior-inline: contain;
    scrollbar-width: thin;
    scroll-snap-type: x proximity;
    scroll-snap-align: start;
  }
  .text-mobile-toolbar-group-labels .home-page .text-workbench-group-label {
    display: inline-flex;
    position: sticky;
    left: 0;
    z-index: 2;
    flex: 0 0 auto;
    align-items: center;
    min-height: calc(var(--text-mobile-toolbar-height, 44px) - 8px);
    margin: 0 2px 0 -1px;
    padding: 0 9px;
    border-right: 1px solid color-mix(in srgb, var(--primary) 25%, var(--border));
    border-radius: calc(var(--radius-sm) - 3px);
    color: var(--primary);
    background: color-mix(in srgb, var(--panel) 96%, var(--primary-soft));
    font-size: 0.6875rem;
    font-weight: 800;
    letter-spacing: .04em;
    white-space: nowrap;
    box-shadow: 5px 0 10px -9px rgba(15,23,42,.55);
  }
  .text-mobile-toolbar-scroll .home-page .text-workbench-tools .layui-btn {
    flex: 0 0 auto;
    width: auto;
    min-width: 76px;
    min-height: var(--text-mobile-toolbar-height, 44px) !important;
    padding: 8px 12px;
    border-radius: var(--radius-sm);
    white-space: nowrap;
    overflow-wrap: normal;
    word-break: keep-all;
  }
  .text-mobile-toolbar-scroll.text-mobile-toolbar-short .home-page .text-workbench-tools .layui-btn { min-width: 64px; padding-left: 10px; padding-right: 10px; font-size: 0.75rem; }
  .text-mobile-toolbar-pin-primary .home-page .text-workbench-tool-group[data-text-tool-group="basic"] #btnPasteText { position: sticky; left: 0; z-index: 2; box-shadow: 5px 0 10px -8px rgba(15,23,42,.5); }
  .home-page .text-workbench-tools #btnCopyText,
  .home-page .text-workbench-tools #btnDownloadText {
    color: var(--primary);
    border-color: color-mix(in srgb, var(--primary) 55%, var(--border));
    background: color-mix(in srgb, var(--primary-soft) 75%, var(--panel));
    font-weight: 700;
  }
  .home-page .text-workbench-tools #btnClearText {
    color: var(--red);
    border-color: color-mix(in srgb, var(--red) 42%, var(--border));
    background: color-mix(in srgb, var(--red) 7%, var(--panel));
  }
  .home-page .text-workbench-tools .layui-btn:disabled {
    opacity: .48;
    background: color-mix(in srgb, var(--border) 45%, transparent);
  }

  .duplicate-banner {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    align-items: stretch;
    gap: 12px;
    padding: 14px;
  }
  .duplicate-actions {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    width: 100%;
    gap: 8px;
    align-items: stretch;
    justify-content: stretch;
  }
  .duplicate-actions form { display: contents; }
  .duplicate-actions .layui-btn,
  .duplicate-actions form .layui-btn {
    width: 100%;
    min-width: 0;
    min-height: 40px;
    padding: 6px 9px;
    border-radius: calc(var(--radius) - 5px);
    font-size: 0.75rem;
    line-height: 1.3;
    white-space: normal;
    overflow-wrap: anywhere;
    word-break: break-word;
  }

  .site-footer {
    padding: 4px 8px calc(4px + env(safe-area-inset-bottom)) !important;
    margin-top: 8px;
  }
  .site-footer-inner {
    grid-template-columns: minmax(0, 1.2fr) repeat(2, minmax(0, 1fr)) !important;
    gap: 8px !important;
    padding: 10px !important;
    border-radius: var(--radius);
  }
  .site-footer-brand {
    grid-column: 1 / -1 !important;
    padding: 10px 12px !important;
  }
  .site-footer-cols {
    grid-column: 1 / -1;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px !important;
    width: 100% !important;
  }
  .site-footer-col {
    padding: 8px !important;
    border-radius: var(--radius-sm);
  }
  .site-footer-col-title { margin-bottom: 3px !important; }
  .site-footer-links a,
  .site-footer-filing-item {
    min-height: 34px;
    flex: 1 1 100%;
    justify-content: flex-start;
    text-align: left;
    padding: 4px 8px;
    font-size: 0.75rem;
    line-height: 1.25;
  }
  .site-footer-filing-item { gap: 5px; }

  .mobile-bottom-nav,
  .home-mobile-action-bar {
    min-height: 44px;
    height: auto;
    padding: 2px;
    gap: 2px;
    border-radius: calc(var(--radius) - 1px);
  }
  .mobile-bottom-nav { min-height: 44px; }
  .mobile-bottom-nav a,
  .home-mobile-action-bar button,
  .home-mobile-action-bar a {
    min-width: 0;
    min-height: 38px;
    padding: 2px 3px;
    gap: 0;
    border-radius: var(--radius-sm);
    font-size: 0.625rem;
    line-height: 1.05;
  }
  .mobile-nav-icon { width: 18px; height: 18px; }
  .mobile-bottom-nav svg,
  .home-mobile-action-bar svg { width: 16px; height: 16px; }
  body.has-mobile-bottom-nav { padding-bottom: calc(58px + env(safe-area-inset-bottom)) !important; }
  body.has-mobile-bottom-nav .site-footer { padding-bottom: 0 !important; }
}

@media (max-width: 420px) {
  .duplicate-actions { grid-template-columns: 1fr; }
  .site-footer-inner { grid-template-columns: 1fr !important; }
  .site-footer-cols { grid-template-columns: 1fr; }
}

/* 全站选择框与操作图标尺寸（2026-09-06 19:20:49）：勾选框保持 18px，触控热区放在标签和单元格上，避免被工具栏 input 规则拉高。 */
input[type="checkbox"]:not(.ui-native-check),
input[type="radio"]:not(.ui-native-radio) {
  width: 18px;
  height: 18px;
  min-width: 18px;
  min-height: 18px;
  max-width: 18px;
  max-height: 18px;
  margin: 0;
  padding: 0;
  flex: 0 0 18px;
  vertical-align: middle;
  accent-color: var(--primary);
  box-shadow: none;
  background-image: none;
}
.ui-switch input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  width: 1px !important;
  height: 1px !important;
  min-width: 0 !important;
  min-height: 0 !important;
  max-width: 1px !important;
  max-height: 1px !important;
  flex: none !important;
}
.checkbox input,
.compact-checkbox input,
.table input[type="checkbox"],
.table input[type="radio"],
.batch-bar input[type="checkbox"],
.admin-batch-toolbar input[type="checkbox"],
.trash-select-all input,
.trash-bulk-toolbar input[type="checkbox"],
.queue-select-all input,
.q-select,
.share-result-select-all input,
.share-result-check-cell input,
.share-bulk-toolbar input[type="checkbox"],
.code-bulk-toolbar input[type="checkbox"],
.zip-item .checkbox input,
.media-batch-form input[type="checkbox"],
.user-resource-table input[type="checkbox"],
.user-trash-table input[type="checkbox"] {
  width: 18px;
  height: 18px;
  min-width: 18px;
  min-height: 18px;
  max-width: 18px;
  max-height: 18px;
  margin: 0;
  flex: 0 0 18px;
  accent-color: var(--primary);
}
.checkbox,
.compact-checkbox,
.batch-select-all,
.trash-select-all,
.queue-select-all,
.share-result-select-all {
  align-items: center;
}
.layui-btn .action-icon,
h2 .action-icon,
h3 .action-icon,
.panel-head .action-icon {
  width: 16px;
  height: 16px;
  min-width: 16px;
  min-height: 16px;
  flex: 0 0 16px;
  overflow: visible;
  display: inline-block;
}
.extract-copy-btn {
  min-height: 32px;
  min-width: 44px;
  padding: 0 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.favorite-toggle {
  width: 40px;
  height: 40px;
  min-width: 40px;
  min-height: 40px;
  font-size: 1.125rem;
  line-height: 1;
}
.favorite-toggle span {
  display: block;
  line-height: 1;
}
@media (max-width: 768px) {
  .batch-bar input[type="checkbox"],
  .trash-select-all input,
  .user-resource-table input[type="checkbox"],
  .user-trash-table input[type="checkbox"],
  .user-page table.table input[type="checkbox"] {
    width: 18px;
    height: 18px;
    min-width: 18px;
    min-height: 18px;
    max-width: 18px;
    max-height: 18px;
    flex: 0 0 18px;
  }
  .batch-select-all,
  .trash-select-all,
  .share-bulk-toolbar .checkbox,
  .code-bulk-toolbar .checkbox {
    min-height: 48px;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td:has(> input[type="checkbox"]) {
    align-items: center;
    justify-content: flex-start;
  }
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td > input[type="checkbox"],
  body[data-mobile-table-mode="card"] table:not(.share-result-table) td:has(> input[type="checkbox"]) > * {
    max-width: none;
  }
  .extract-copy-btn,
  .user-page .extract-copy-btn {
    min-height: 40px;
    min-width: 48px;
  }
}

/* 全站搜索图标固定在输入框内（2026-09-06 19:27:09）：不再挂到整条筛选栏，避免换行或网格布局把放大镜拉满。 */
.search-bar > .search-icon,
.filter > .search-icon,
.message-filter > .search-icon,
.logs-filter > .search-icon {
  display: none !important;
}
.input-wrap .search-icon {
  position: absolute;
  left: 12px;
  top: 50%;
  width: 18px;
  height: 18px;
  min-width: 18px;
  min-height: 18px;
  max-width: 18px;
  max-height: 18px;
  transform: translateY(-50%);
  pointer-events: none;
  overflow: visible;
}
.input-clear svg,
.pw-toggle svg {
  width: 16px;
  height: 16px;
  min-width: 16px;
  min-height: 16px;
  display: block;
}
.pw-toggle svg {
  width: 19px;
  height: 19px;
}
.title-icon,
.panel h2 > .action-icon,
.panel h3 > .action-icon {
  width: 18px;
  height: 18px;
  min-width: 18px;
  min-height: 18px;
  flex: 0 0 18px;
  overflow: visible;
}
.admin-page .search-bar > svg,
.admin-page .search-bar > .search-icon {
  width: 18px !important;
  height: 18px !important;
  max-width: 18px;
  justify-self: start;
}
@media (max-width: 768px) {
  .search-bar .input-wrap,
  .filter .input-wrap,
  .message-filter .input-wrap,
  .logs-filter .input-wrap,
  .queue-filter-bar .input-wrap,
  .settings-search-panel .input-wrap {
    width: 100%;
    min-width: 0;
  }
  .input-wrap .search-icon {
    width: 18px;
    height: 18px;
  }
}

/* 电脑端搜索图标与按钮图标对齐（2026-09-06 19:34:42）：输入框容器不再被筛选栏拉高，放大镜贴在搜索框左侧。 */
.search-bar,
.filter,
.message-filter,
.logs-filter,
.queue-filter-bar {
  align-items: center;
}
.search-bar .input-wrap,
.filter .input-wrap,
.message-filter .input-wrap,
.logs-filter .input-wrap,
.queue-filter-bar .input-wrap,
.settings-search-panel .input-wrap {
  position: relative;
  align-self: center;
  min-height: 46px;
  height: auto;
  overflow: visible;
}
.input-wrap.has-search-icon > input[type=text],
.input-wrap.has-search-icon > input[type=search] {
  padding-left: 40px;
}
.input-wrap .search-icon {
  top: 50%;
  left: 12px;
  margin: 0;
  transform: translateY(-50%);
}
.layui-btn .action-icon,
.topnav a .action-icon,
.topnav-icon svg,
.theme-toggle svg,
.nav-toggle svg,
.sidebar-toggle svg,
.admin-cache-action svg,
.admin-refresh-action svg,
.admin-fullscreen-action svg {
  width: 16px;
  height: 16px;
  min-width: 16px;
  min-height: 16px;
  max-width: 16px;
  max-height: 16px;
  flex: 0 0 16px;
  overflow: visible;
  display: inline-block;
  vertical-align: middle;
}
.topnav-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.topnav-icon svg {
  display: block;
}
.sidebar .nav-search-icon svg,
.sidebar .nav-icon svg,
.sidebar .brand-icon svg {
  width: 18px;
  height: 18px;
  min-width: 18px;
  min-height: 18px;
  max-width: 18px;
  max-height: 18px;
  display: block;
}
.sidebar .nav-search input {
  padding-left: 0;
}
@media (min-width: 769px) {
  .search-bar .input-wrap,
  .filter .input-wrap,
  .admin-page .search-bar .input-wrap {
    min-height: 46px;
    max-height: 52px;
  }
  .layui-btn .action-icon {
    width: 16px;
    height: 16px;
  }
}

/* 全站图标与按钮统一（2026-09-06 19:38:47）：描边 SVG 不再出现空白方块，搜索图标可点，电脑端和手机端对齐。 */
.action-icon,
.search-icon,
.title-icon,
.topnav-icon svg,
.mobile-nav-icon svg,
.nav-toggle svg,
.theme-toggle svg,
.input-clear svg,
.pw-toggle svg,
.sidebar .nav-icon svg,
.sidebar .nav-search-icon svg,
.sidebar .brand-icon svg,
.sidebar-toggle svg,
.admin-cache-action svg,
.admin-refresh-action svg,
.admin-fullscreen-action svg,
.state-icon svg,
.float-btn svg {
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  overflow: visible;
  flex-shrink: 0;
  pointer-events: none;
}
.oauth-btn svg { fill: currentColor; stroke: none; }
.action-icon:not(:has(*)),
.search-icon:not(:has(*)) {
  box-sizing: border-box;
  border: 1.8px solid currentColor;
  border-radius: 50%;
  background: radial-gradient(circle, currentColor 0 2px, transparent 3px);
}
.search-icon-btn {
  position: absolute;
  left: 4px;
  top: 50%;
  z-index: 3;
  width: 36px;
  height: 36px;
  min-width: 36px;
  min-height: 36px;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: calc(var(--radius) - 5px);
  background: transparent;
  color: var(--muted);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  touch-action: manipulation;
  transform: translateY(-50%);
}
.search-icon-btn:hover,
.search-icon-btn:focus-visible,
.input-wrap:focus-within .search-icon-btn {
  color: var(--primary);
  background: color-mix(in srgb, var(--primary) 12%, transparent);
  outline: none;
}
.search-icon-btn:focus-visible { box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 22%, transparent); }
.search-icon-btn:active { transform: translateY(-50%) scale(.94); }
.search-icon-btn .search-icon,
.search-icon-btn svg {
  position: static;
  left: auto;
  top: auto;
  width: 18px;
  height: 18px;
  min-width: 18px;
  min-height: 18px;
  max-width: 18px;
  max-height: 18px;
  margin: 0;
  transform: none;
  pointer-events: none;
}
.input-wrap.has-search-icon > input[type=text],
.input-wrap.has-search-icon > input[type=search] { padding-left: 44px; }
.layui-btn > .action-icon,
.layui-btn > svg { position: relative; z-index: 1; }
.layui-btn:hover .action-icon,
.layui-btn:focus-visible .action-icon { color: inherit; }
.layui-btn:active .action-icon { transform: none; }
.layui-btn:disabled .action-icon,
.layui-btn[aria-disabled="true"] .action-icon,
.layui-btn:disabled svg,
.layui-btn[aria-disabled="true"] svg { opacity: .72; }
.layui-btn-sm { display: inline-flex; align-items: center; justify-content: center; min-height: 36px; }
.layui-btn-sm .action-icon { width: 15px; height: 15px; min-width: 15px; min-height: 15px; }
.topnav-icon svg,
.mobile-nav-icon svg { display: block; }
@media (max-width: 768px) {
  .search-icon-btn {
    width: 44px;
    height: 44px;
    min-width: 44px;
    min-height: 44px;
    left: 2px;
  }
  .input-wrap.has-search-icon > input[type=text],
  .input-wrap.has-search-icon > input[type=search] { padding-left: 50px; }
  .layui-btn .action-icon { width: 18px; height: 18px; min-width: 18px; min-height: 18px; }
}

/* 分页、提示、业务按钮图标补齐（2026-09-06 19:46:36） */
.toast {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  text-align: left;
}
.toast-icon {
  width: 22px;
  height: 22px;
  min-width: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 22px;
}
.toast-icon svg {
  width: 18px;
  height: 18px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  display: block;
}
.toast-text { min-width: 0; overflow-wrap: anywhere; }
.list-pager .layui-btn,
.pager.list-pager .layui-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}
.list-pager .action-icon {
  width: 16px;
  height: 16px;
  min-width: 16px;
  min-height: 16px;
  margin: 0;
}
.q-cancel {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 32px;
  min-height: 32px;
  font-size: 0;
}
.q-cancel::before {
  content: '';
  width: 12px;
  height: 12px;
  background:
    linear-gradient(currentColor, currentColor) center / 12px 2px no-repeat,
    linear-gradient(currentColor, currentColor) center / 2px 12px no-repeat;
  transform: rotate(45deg);
}
.home-page .banner-nav {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.home-page .tab svg,
.home-quick-link svg,
.home-wide-toggle svg,
.share-detail-toggle svg,
.banner-nav svg,
.user-account-caret {
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  overflow: visible;
  flex-shrink: 0;
}
.topnav-icon svg {
  width: 16px;
  height: 16px;
  display: block;
}
@media (max-width: 768px) {
  .list-pager .layui-btn {
    min-height: 48px;
  }
  .toast {
    max-width: min(94vw, 480px);
    bottom: calc(88px + env(safe-area-inset-bottom));
  }
  .q-cancel {
    min-width: 44px;
    min-height: 44px;
  }
}

/* 缓存更新提示与后台开关（2026-09-07 07:58:18） */
.asset-refresh-notice {
  position: fixed;
  left: 50%;
  bottom: calc(96px + env(safe-area-inset-bottom));
  z-index: 3100;
  width: max-content;
  max-width: min(92vw, 520px);
  padding: 12px 18px;
  border-radius: calc(var(--radius) - 2px);
  background: color-mix(in srgb, var(--text) 92%, transparent);
  color: var(--panel);
  border: 1px solid color-mix(in srgb, var(--panel) 18%, transparent);
  box-shadow: 0 12px 32px rgba(0,0,0,.22);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
  opacity: 0;
  transform: translate(-50%, 12px);
  transition: opacity .22s var(--ease-smooth), transform .22s var(--ease-smooth);
  pointer-events: none;
  text-align: center;
  line-height: 1.45;
}
.asset-refresh-notice.show {
  opacity: 1;
  transform: translate(-50%, 0);
}
@media (max-width: 768px) {
  .asset-refresh-notice {
    max-width: min(94vw, 520px);
    bottom: calc(88px + env(safe-area-inset-bottom));
  }
}

/* 后台菜单与业务按钮图标描边（2026-09-06 19:53:00）：复制/打开/编辑等按钮补图标，24×24 SVG 统一描边。 */
.sidebar svg[viewBox="0 0 24 24"],
.nav-group-chevron,
.nav-icon svg,
.topnav-icon svg,
.auth-title-icon svg,
.announce-heading-icon,
.note-box .action-icon,
.home-quick-link svg,
.home-page .tab svg,
.share-detail-toggle svg,
.banner-nav svg,
.state-icon svg,
.mobile-nav-icon svg,
button:not(.oauth-btn) > svg[viewBox="0 0 24 24"],
a:not(.oauth-btn) > svg[viewBox="0 0 24 24"],
.layui-btn > svg[viewBox="0 0 24 24"] {
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  overflow: visible;
  flex-shrink: 0;
}
.auth-title-icon svg { stroke: #fff; }
.oauth-btn svg { fill: currentColor; stroke: none; }
.nav-group-chevron {
  width: 14px;
  height: 14px;
  display: block;
}
.sidebar .nav-icon,
.sidebar .nav-icon svg {
  width: 18px;
  height: 18px;
  min-width: 18px;
  min-height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.extract-copy-btn,
.link-btn,
.ops button.link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}
@media (max-width: 768px) {
  .sidebar .nav-icon svg,
  .topnav-icon svg,
  .home-quick-link svg {
    width: 18px;
    height: 18px;
  }
  .extract-copy-btn,
  .ops button.link {
    min-height: 44px;
  }
}

/* 全站手机端防溢出兜底（2026-09-07 05:14:50） */
@media (max-width: 768px) {
  html,
  body,
  .page,
  .container,
  .admin-layout,
  .admin-main,
  .admin-content,
  .admin-page,
  .panel,
  .box,
  .grid2,
  .form-grid,
  .settings-toggle-grid,
  .toolbar,
  .filters,
  .ops,
  .topbar-inner,
  .auth-shell,
  .share-shell,
  .user-shell,
  .site-footer,
  .site-footer-inner,
  .site-footer-cols,
  .site-footer-col {
    min-width: 0;
    max-width: 100%;
    box-sizing: border-box;
  }
  html,
  body,
  .page,
  .admin-layout,
  .admin-main,
  .admin-content,
  .admin-page,
  .auth-shell,
  .share-shell,
  .user-shell {
    overflow-x: clip;
  }
  @supports not (overflow: clip) {
    html,
    body,
    .page,
    .admin-layout,
    .admin-main,
    .admin-content,
    .admin-page,
    .auth-shell,
    .share-shell,
    .user-shell {
      overflow-x: hidden;
    }
  }
  .page,
  .container,
  .admin-content,
  .admin-page,
  .panel,
  .box,
  .toolbar,
  .filters,
  .ops,
  .topbar-inner,
  .auth-shell,
  .share-shell,
  .user-shell,
  .site-footer,
  .site-footer-inner,
  .site-footer-col,
  .site-footer a,
  .site-footer-col a,
  .hint,
  .muted,
  .desc,
  .notice,
  .alert,
  .note,
  p,
  label,
  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    overflow-wrap: anywhere;
    word-break: break-word;
  }
  button,
  .layui-btn,
  input,
  select,
  textarea {
    max-width: 100%;
    box-sizing: border-box;
  }
  .table-wrap,
  .table-responsive {
    overflow-x: auto;
  }
}

/* 手机端操作栏与表单触控收口（2026-09-07 05:36:39） */
@media (max-width: 768px) {
  .toolbar,
  .filters,
  .ops,
  .form-actions,
  .settings-default-actions,
  .file-actions,
  .share-actions,
  .duplicate-actions,
  .release-actions,
  .release-manifest-actions,
  .admin-changelog-actions {
    width: 100%;
    min-width: 0;
    max-width: 100%;
    box-sizing: border-box;
  }
  .toolbar,
  .filters,
  .ops,
  .form-actions,
  .settings-default-actions,
  .file-actions,
  .share-actions,
  .duplicate-actions,
  .release-actions,
  .release-manifest-actions {
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
  }
  .toolbar .layui-btn,
  .toolbar button,
  .toolbar a.layui-btn,
  .filters .layui-btn,
  .filters button,
  .filters a.layui-btn,
  .ops .layui-btn,
  .ops button,
  .ops a.layui-btn,
  .form-actions .layui-btn,
  .form-actions button,
  .form-actions a.layui-btn,
  .settings-default-actions .layui-btn,
  .settings-default-actions button,
  .settings-default-actions a.layui-btn,
  .file-actions .layui-btn,
  .file-actions button,
  .file-actions a.layui-btn,
  .share-actions .layui-btn,
  .share-actions button,
  .share-actions a.layui-btn,
  .duplicate-actions .layui-btn,
  .duplicate-actions button,
  .duplicate-actions a.layui-btn,
  .release-actions .layui-btn,
  .release-actions button,
  .release-actions a.layui-btn,
  .release-manifest-actions .layui-btn,
  .release-manifest-actions button,
  .release-manifest-actions a.layui-btn,
  .admin-changelog-actions .layui-btn,
  .admin-changelog-actions button,
  .admin-changelog-actions a.layui-btn {
    min-width: 0;
    max-width: 100%;
    min-height: 42px;
    justify-content: center;
    text-align: center;
    overflow-wrap: anywhere;
    word-break: break-word;
  }
  .filters input,
  .filters select,
  .filters textarea,
  .toolbar input,
  .toolbar select,
  .toolbar textarea,
  .form-grid input,
  .form-grid select,
  .form-grid textarea {
    width: 100%;
    min-width: 0;
    max-width: 100%;
    min-height: 42px;
  }
  .panel-head,
  .panel-head > * {
    min-width: 0;
    max-width: 100%;
  }
}
@media (max-width: 420px) {
  .toolbar .layui-btn,
  .filters .layui-btn,
  .ops .layui-btn,
  .form-actions .layui-btn,
  .file-actions .layui-btn,
  .share-actions .layui-btn {
    flex: 1 1 100%;
  }
}

/* 手机端显示密度与按钮布局设置（2026-09-07 06:59:51） */
@media (max-width: 768px) {
  body[data-mobile-density="compact"] .panel,
  body[data-mobile-density="compact"] .box,
  body[data-mobile-density="compact"] .table td,
  body[data-mobile-density="compact"] .table th,
  body[data-mobile-density="compact"] .form-grid,
  body[data-mobile-density="compact"] .settings-toggle-grid {
    padding-top: 8px;
    padding-bottom: 8px;
    gap: 8px;
  }
  body[data-mobile-density="compact"] .layui-btn,
  body[data-mobile-density="compact"] button,
  body[data-mobile-density="compact"] input,
  body[data-mobile-density="compact"] select,
  body[data-mobile-density="compact"] textarea {
    min-height: 38px;
  }
  body[data-mobile-density="relaxed"] .panel,
  body[data-mobile-density="relaxed"] .box,
  body[data-mobile-density="relaxed"] .table td,
  body[data-mobile-density="relaxed"] .table th,
  body[data-mobile-density="relaxed"] .form-grid,
  body[data-mobile-density="relaxed"] .settings-toggle-grid {
    padding-top: 14px;
    padding-bottom: 14px;
    gap: 14px;
  }
  body[data-mobile-density="relaxed"] .layui-btn,
  body[data-mobile-density="relaxed"] button,
  body[data-mobile-density="relaxed"] input,
  body[data-mobile-density="relaxed"] select,
  body[data-mobile-density="relaxed"] textarea {
    min-height: 46px;
  }
  body[data-mobile-button-mode="full"] .toolbar .layui-btn,
  body[data-mobile-button-mode="full"] .toolbar button,
  body[data-mobile-button-mode="full"] .toolbar a.layui-btn,
  body[data-mobile-button-mode="full"] .filters .layui-btn,
  body[data-mobile-button-mode="full"] .filters button,
  body[data-mobile-button-mode="full"] .filters a.layui-btn,
  body[data-mobile-button-mode="full"] .ops .layui-btn,
  body[data-mobile-button-mode="full"] .ops button,
  body[data-mobile-button-mode="full"] .ops a.layui-btn,
  body[data-mobile-button-mode="full"] .form-actions .layui-btn,
  body[data-mobile-button-mode="full"] .form-actions button,
  body[data-mobile-button-mode="full"] .form-actions a.layui-btn,
  body[data-mobile-button-mode="full"] .settings-default-actions .layui-btn,
  body[data-mobile-button-mode="full"] .settings-default-actions button,
  body[data-mobile-button-mode="full"] .settings-default-actions a.layui-btn,
  body[data-mobile-button-mode="full"] .file-actions .layui-btn,
  body[data-mobile-button-mode="full"] .file-actions button,
  body[data-mobile-button-mode="full"] .file-actions a.layui-btn,
  body[data-mobile-button-mode="full"] .share-actions .layui-btn,
  body[data-mobile-button-mode="full"] .share-actions button,
  body[data-mobile-button-mode="full"] .share-actions a.layui-btn,
  body[data-mobile-button-mode="full"] .duplicate-actions .layui-btn,
  body[data-mobile-button-mode="full"] .duplicate-actions button,
  body[data-mobile-button-mode="full"] .duplicate-actions a.layui-btn,
  body[data-mobile-button-mode="full"] .release-actions .layui-btn,
  body[data-mobile-button-mode="full"] .release-actions button,
  body[data-mobile-button-mode="full"] .release-actions a.layui-btn,
  body[data-mobile-button-mode="full"] .release-manifest-actions .layui-btn,
  body[data-mobile-button-mode="full"] .release-manifest-actions button,
  body[data-mobile-button-mode="full"] .release-manifest-actions a.layui-btn {
    flex: 1 1 100%;
    width: 100%;
  }
  body[data-mobile-button-mode="scroll"] .toolbar,
  body[data-mobile-button-mode="scroll"] .filters,
  body[data-mobile-button-mode="scroll"] .ops,
  body[data-mobile-button-mode="scroll"] .form-actions,
  body[data-mobile-button-mode="scroll"] .settings-default-actions,
  body[data-mobile-button-mode="scroll"] .file-actions,
  body[data-mobile-button-mode="scroll"] .share-actions,
  body[data-mobile-button-mode="scroll"] .duplicate-actions,
  body[data-mobile-button-mode="scroll"] .release-actions,
  body[data-mobile-button-mode="scroll"] .release-manifest-actions {
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
  }
  body[data-mobile-button-mode="scroll"] .toolbar .layui-btn,
  body[data-mobile-button-mode="scroll"] .toolbar button,
  body[data-mobile-button-mode="scroll"] .toolbar a.layui-btn,
  body[data-mobile-button-mode="scroll"] .filters .layui-btn,
  body[data-mobile-button-mode="scroll"] .filters button,
  body[data-mobile-button-mode="scroll"] .filters a.layui-btn,
  body[data-mobile-button-mode="scroll"] .ops .layui-btn,
  body[data-mobile-button-mode="scroll"] .ops button,
  body[data-mobile-button-mode="scroll"] .ops a.layui-btn,
  body[data-mobile-button-mode="scroll"] .form-actions .layui-btn,
  body[data-mobile-button-mode="scroll"] .form-actions button,
  body[data-mobile-button-mode="scroll"] .form-actions a.layui-btn,
  body[data-mobile-button-mode="scroll"] .settings-default-actions .layui-btn,
  body[data-mobile-button-mode="scroll"] .settings-default-actions button,
  body[data-mobile-button-mode="scroll"] .settings-default-actions a.layui-btn,
  body[data-mobile-button-mode="scroll"] .file-actions .layui-btn,
  body[data-mobile-button-mode="scroll"] .file-actions button,
  body[data-mobile-button-mode="scroll"] .file-actions a.layui-btn,
  body[data-mobile-button-mode="scroll"] .share-actions .layui-btn,
  body[data-mobile-button-mode="scroll"] .share-actions button,
  body[data-mobile-button-mode="scroll"] .share-actions a.layui-btn,
  body[data-mobile-button-mode="scroll"] .duplicate-actions .layui-btn,
  body[data-mobile-button-mode="scroll"] .duplicate-actions button,
  body[data-mobile-button-mode="scroll"] .duplicate-actions a.layui-btn,
  body[data-mobile-button-mode="scroll"] .release-actions .layui-btn,
  body[data-mobile-button-mode="scroll"] .release-actions button,
  body[data-mobile-button-mode="scroll"] .release-actions a.layui-btn,
  body[data-mobile-button-mode="scroll"] .release-manifest-actions .layui-btn,
  body[data-mobile-button-mode="scroll"] .release-manifest-actions button,
  body[data-mobile-button-mode="scroll"] .release-manifest-actions a.layui-btn {
    flex: 0 0 auto;
    white-space: nowrap;
  }
  body[data-mobile-card-spacing="compact"] .panel,
  body[data-mobile-card-spacing="compact"] .box,
  body[data-mobile-card-spacing="compact"] .card,
  body[data-mobile-card-spacing="compact"] .stat-card,
  body[data-mobile-card-spacing="compact"] .settings-subsection,
  body[data-mobile-card-spacing="compact"][data-mobile-table-mode="card"] .table tbody tr {
    margin-bottom: 8px;
  }
  body[data-mobile-card-spacing="loose"] .panel,
  body[data-mobile-card-spacing="loose"] .box,
  body[data-mobile-card-spacing="loose"] .card,
  body[data-mobile-card-spacing="loose"] .stat-card,
  body[data-mobile-card-spacing="loose"] .settings-subsection,
  body[data-mobile-card-spacing="loose"][data-mobile-table-mode="card"] .table tbody tr {
    margin-bottom: 18px;
  }
  body[data-mobile-safe-area="1"] {
    padding-bottom: env(safe-area-inset-bottom);
  }
  body[data-mobile-safe-area="1"] .mobile-action-bar,
  body[data-mobile-safe-area="1"] .share-mobile-actions,
  body[data-mobile-safe-area="1"] .bottom-action-bar,
  body[data-mobile-safe-area="1"] .sticky-actions,
  body[data-mobile-safe-area="1"] .form-actions.sticky {
    padding-bottom: calc(10px + env(safe-area-inset-bottom));
  }
}

/* 第 367 版页脚低高度与双端布局（2026-09-07 10:34:49）：收口历史覆盖，桌面端三段式，手机端双列/单列自适应。 */
.site-footer,
.footer.site-footer.home-footer {
  margin-top: auto !important;
  padding: 8px 0 calc(8px + env(safe-area-inset-bottom, 0px)) !important;
  border-top: 0;
  background: transparent !important;
  box-shadow: none !important;
}
.site-footer::before {
  left: 0;
  right: 0;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--primary) 42%, var(--border)) 50%, transparent);
}
.site-footer::after { display: none; }
.site-footer-inner {
  width: min(calc(100% - 32px), 1180px);
  max-width: none !important;
  margin: 0 auto;
  padding: 10px 0 !important;
  display: grid !important;
  grid-template-columns: minmax(230px, .9fr) minmax(0, 1.6fr);
  gap: 12px 28px !important;
  align-items: start !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}
.site-footer-brand {
  min-width: 0;
  max-width: none !important;
  padding: 4px 0 4px 12px !important;
  border-left: 3px solid color-mix(in srgb, var(--primary) 74%, var(--grad-b));
}
.site-footer-brand::before { display: none; }
.site-footer-cols {
  min-width: 0;
  display: grid !important;
  grid-template-columns: minmax(130px, .7fr) minmax(240px, 1.3fr);
  gap: 18px !important;
  align-items: start !important;
}
.site-footer-col { min-width: 0; gap: 6px !important; }
.site-footer-col-title {
  margin: 0 0 2px !important;
  font-size: 0.6875rem !important;
  line-height: 1.25;
  letter-spacing: .1em !important;
}
.site-footer-mark { gap: 7px; line-height: 1.2; }
.site-footer-mark strong { font-size: 0.9375rem; }
.site-footer-mark-icon { width: 20px; height: 20px; border-radius: calc(var(--radius-sm) - 4px); }
.site-footer-mark-img { height: calc(20px * var(--site-logo-scale, 1)); max-width: min(var(--site-logo-max-width, 240px), 132px); }
.site-footer-slogan { font-size: 0.6875rem; line-height: 1.35; }
.site-footer-meta { margin-top: 4px; font-size: 0.6875rem; line-height: 1.4; }
.site-footer-link-list,
.site-footer-filing-list { gap: 6px; min-width: 0; }
.site-footer-links a,
.site-footer-filing-item {
  min-width: 0;
  min-height: 30px;
  padding: 3px 9px;
  border-radius: calc(var(--radius-sm) - 2px);
  font-size: 0.75rem;
  line-height: 1.3;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.site-footer-links a { flex: 0 1 auto; }
.site-footer-filing-item { gap: 6px; }
.site-footer-filing-chip { min-height: 18px; padding: 0 6px; font-size: 0.625rem; }
.site-footer-filing-text { min-width: 0; font-size: 0.6875rem; line-height: 1.35; }
.admin-footer { padding-left: 16px !important; padding-right: 16px !important; }
.admin-footer .site-footer-inner { width: 100%; padding: 8px 0 !important; }
@media (max-width: 900px) {
  .site-footer-inner { grid-template-columns: 1fr; gap: 10px !important; }
  .site-footer-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px !important; }
}
@media (max-width: 640px) {
  .site-footer,
  .footer.site-footer.home-footer,
  .auth-footer,
  .user-footer { padding: 6px 10px calc(6px + env(safe-area-inset-bottom, 0px)) !important; }
  .site-footer-inner { width: 100%; padding: 6px 0 !important; gap: 8px !important; }
  .site-footer-brand { padding: 4px 0 4px 12px !important; border: 0; border-left: 3px solid color-mix(in srgb, var(--primary) 74%, var(--grad-b)); border-radius: 0; background: transparent; }
  .site-footer-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px !important; }
  .site-footer-col { padding: 4px 0 !important; border: 0; border-radius: 0; background: transparent; }
  .site-footer-links a,
  .site-footer-filing-item { width: 100%; min-height: 32px; justify-content: flex-start; padding: 4px 7px; }
  .site-footer-filing-item { align-items: flex-start; }
  .site-footer-meta { gap: 3px 8px; }
  body.has-mobile-bottom-nav .site-footer { padding-bottom: 6px !important; }
  .home-page:has(.home-mobile-action-bar) .site-footer,
  .home-page:has(.home-mobile-action-bar) .footer.home-footer { padding-bottom: 6px !important; }
  .admin-footer { padding-left: 10px !important; padding-right: 10px !important; }
}
@media (max-width: 420px) {
  .site-footer-cols { grid-template-columns: 1fr; }
  .site-footer-col { padding: 7px !important; }
}

body[data-footer-density="normal"] .site-footer,
body[data-footer-density="normal"] .footer.site-footer.home-footer {
  padding-top: 10px !important;
  padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px)) !important;
}
body[data-footer-density="normal"] .site-footer-inner { padding-top: 12px !important; padding-bottom: 12px !important; }
body[data-footer-density="comfortable"] .site-footer,
body[data-footer-density="comfortable"] .footer.site-footer.home-footer {
  padding-top: 14px !important;
  padding-bottom: calc(14px + env(safe-area-inset-bottom, 0px)) !important;
}
body[data-footer-density="comfortable"] .site-footer-inner { padding-top: 14px !important; padding-bottom: 14px !important; }
@media (max-width: 640px) {
  body[data-footer-density="normal"] .site-footer,
  body[data-footer-density="normal"] .footer.site-footer.home-footer { padding-top: 8px !important; padding-bottom: calc(8px + env(safe-area-inset-bottom, 0px)) !important; }
  body[data-footer-density="comfortable"] .site-footer,
  body[data-footer-density="comfortable"] .footer.site-footer.home-footer { padding-top: 10px !important; padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px)) !important; }
  body[data-footer-mobile-layout="stacked"] .site-footer-cols { grid-template-columns: 1fr !important; }
  body[data-footer-mobile-layout="columns"] .site-footer-cols { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}
@media (max-width: 420px) {
  body[data-footer-mobile-layout="columns"] .site-footer-cols { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}

/* 第 368 版底栏双端优化（2026-09-07 12:00:28）：电脑端保持低高度，手机端底栏抬高避开安全区。 */
.site-footer-links a:focus-visible,
.site-footer-filing-item:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--primary) 28%, transparent);
  outline-offset: 2px;
}
@media (min-width: 769px) {
  .mobile-bottom-nav { display: none !important; }
  body.has-mobile-bottom-nav { padding-bottom: 0; }
}
@media (max-width: 768px) {
  .mobile-bottom-nav {
    padding-bottom: max(4px, env(safe-area-inset-bottom));
  }
  body.has-mobile-bottom-nav .privacy-consent-banner {
    bottom: calc(78px + env(safe-area-inset-bottom));
  }
  body.has-mobile-bottom-nav #floatButtons {
    bottom: calc(84px + env(safe-area-inset-bottom));
  }
  .site-footer-links a:hover,
  a.site-footer-filing-item:hover { transform: none; }
}

/* 第 369 版底部区域与网页融合（2026-09-07 12:44:00）：页脚、卡片和手机底栏去掉白色底板。 */
.site-footer,
.footer.site-footer,
.footer.site-footer.home-footer,
.auth-footer,
.user-footer,
.admin-footer,
.site-footer-inner,
.site-footer-brand,
.site-footer-col,
.site-footer-links a,
.site-footer-filing-item {
  background: transparent !important;
  box-shadow: none !important;
}
.site-footer,
.footer.site-footer,
.footer.site-footer.home-footer {
  border-top-color: transparent !important;
}
.site-footer-inner,
.site-footer-col {
  border-color: transparent !important;
}
.mobile-bottom-nav,
.home-mobile-action-bar {
  background: color-mix(in srgb, var(--bg) 38%, transparent) !important;
  border-color: color-mix(in srgb, var(--border) 32%, transparent) !important;
  box-shadow: none !important;
}
.site-footer-filing-chip {
  background: color-mix(in srgb, var(--primary) 12%, transparent);
}

/* 第 371 版底栏层次与触控收口（2026-09-07 18:45:41）：保持透明融合，增强三栏分组、悬停聚焦与手机端触控卡片；间距与列数继续由后台“页脚布局密度/手机端页脚布局”设置控制。 */
.site-footer::before {
  height: 2px;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--primary) 26%, transparent) 16%, color-mix(in srgb, var(--primary) 52%, var(--grad-b)) 50%, color-mix(in srgb, var(--primary) 26%, transparent) 84%, transparent);
  opacity: .55;
}
.site-footer-brand { border-left-color: color-mix(in srgb, var(--primary) 68%, var(--grad-b)); }
.site-footer-brand.site-footer-col { gap: 4px 0 !important; }
.site-footer-brand .site-footer-mark { margin-bottom: 1px; }
.site-footer-brand .site-footer-slogan { color: color-mix(in srgb, var(--text) 76%, var(--muted)); }
.site-footer-meta { column-gap: 4px; row-gap: 3px; }
.site-footer-meta .site-footer-copy,
.site-footer-meta .site-footer-note { min-width: 0; overflow-wrap: anywhere; }
.site-footer-meta-dot { margin: 0 1px; }
.site-footer-cols .site-footer-col-title { line-height: 1.3; }
@media (min-width: 769px) {
  .site-footer-links a {
    border: 1px solid transparent;
    background: color-mix(in srgb, var(--panel) 52%, transparent) !important;
    box-shadow: none !important;
    transition: color .16s var(--ease-smooth), background .16s var(--ease-smooth), border-color .16s var(--ease-smooth), transform .16s var(--ease-smooth);
  }
  .site-footer-links a:hover,
  .site-footer-links a:focus-visible {
    color: var(--primary);
    background: color-mix(in srgb, var(--primary-soft) 92%, var(--panel)) !important;
    border-color: color-mix(in srgb, var(--primary) 45%, var(--border));
    transform: translateY(-1px);
  }
  .site-footer-filing-item {
    border: 1px solid transparent;
    background: color-mix(in srgb, var(--panel) 46%, transparent) !important;
    transition: color .16s var(--ease-smooth), background .16s var(--ease-smooth), border-color .16s var(--ease-smooth), transform .16s var(--ease-smooth);
  }
  a.site-footer-filing-item:hover,
  a.site-footer-filing-item:focus-visible {
    color: var(--primary);
    background: color-mix(in srgb, var(--primary-soft) 88%, var(--panel)) !important;
    border-color: color-mix(in srgb, var(--primary) 40%, var(--border));
    transform: translateY(-1px);
  }
}
@media (max-width: 768px) {
  .site-footer-links a,
  .site-footer-filing-item {
    min-height: 40px;
    padding: 6px 10px;
    border-radius: var(--radius-sm);
    border: 1px solid color-mix(in srgb, var(--border) 46%, transparent);
    background: color-mix(in srgb, var(--panel) 55%, transparent) !important;
    box-shadow: none !important;
  }
  .site-footer-links a:active,
  a.site-footer-filing-item:active {
    background: color-mix(in srgb, var(--primary-soft) 86%, var(--panel)) !important;
    border-color: color-mix(in srgb, var(--primary) 38%, var(--border));
  }
  .site-footer-filing-chip { background: color-mix(in srgb, var(--primary) 14%, transparent); }
  .site-footer-col-title { margin-bottom: 6px !important; }
}

/* 第 373 版底栏后台设置驱动（2026-09-07 19:10:24）：页脚专属 Logo、分隔线、背景、微卡片、对齐、悬停与最大宽度全部由后台开关控制。 */
.site-footer[data-footer-logo-height="16"] .site-footer-mark-img { height: 16px; max-width: min(var(--site-logo-max-width, 240px), 132px); }
.site-footer[data-footer-logo-height="16"] .site-footer-mark-icon { width: 16px; height: 16px; border-radius: 5px; }
.site-footer[data-footer-logo-height="18"] .site-footer-mark-img { height: 18px; max-width: min(var(--site-logo-max-width, 240px), 132px); }
.site-footer[data-footer-logo-height="18"] .site-footer-mark-icon { width: 18px; height: 18px; border-radius: calc(var(--radius-sm) - 4px); }
.site-footer[data-footer-logo-height="20"] .site-footer-mark-img { height: 20px; max-width: min(var(--site-logo-max-width, 240px), 132px); }
.site-footer[data-footer-logo-height="20"] .site-footer-mark-icon { width: 20px; height: 20px; border-radius: calc(var(--radius-sm) - 4px); }
.site-footer[data-footer-logo-height="22"] .site-footer-mark-img { height: 22px; max-width: min(var(--site-logo-max-width, 240px), 132px); }
.site-footer[data-footer-logo-height="22"] .site-footer-mark-icon { width: 22px; height: 22px; border-radius: calc(var(--radius-sm) - 3px); }
.site-footer[data-footer-logo-height="24"] .site-footer-mark-img { height: 24px; max-width: min(var(--site-logo-max-width, 240px), 132px); }
.site-footer[data-footer-logo-height="24"] .site-footer-mark-icon { width: 24px; height: 24px; border-radius: calc(var(--radius-sm) - 3px); }
.site-footer[data-footer-logo-height="28"] .site-footer-mark-img { height: 28px; max-width: min(var(--site-logo-max-width, 240px), 132px); }
.site-footer[data-footer-logo-height="28"] .site-footer-mark-icon { width: 28px; height: 28px; border-radius: calc(var(--radius-sm) - 2px); }
.site-footer[data-footer-top-line="soft"]::before {
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--border) 88%, transparent) 50%, transparent);
  opacity: .85;
}
.site-footer[data-footer-top-line="none"]::before { display: none; }
.site-footer[data-footer-bg-mode="glass"] {
  background: linear-gradient(180deg, color-mix(in srgb, var(--panel) 58%, transparent), transparent 62%) !important;
}
[data-theme="dark"] .site-footer[data-footer-bg-mode="glass"] {
  background: linear-gradient(180deg, color-mix(in srgb, var(--panel) 66%, transparent), transparent 64%) !important;
}
.site-footer[data-footer-meta-align="center"] .site-footer-meta { justify-content: center; }
.site-footer[data-footer-cols-bottom="1"] .site-footer-inner { align-items: end; }
.site-footer[data-footer-hover-effect="0"] .site-footer-links a:hover,
.site-footer[data-footer-hover-effect="0"] .site-footer-links a:focus-visible,
.site-footer[data-footer-hover-effect="0"] a.site-footer-filing-item:hover,
.site-footer[data-footer-hover-effect="0"] a.site-footer-filing-item:focus-visible {
  transform: none;
  box-shadow: none;
  background: color-mix(in srgb, var(--primary-soft) 60%, transparent) !important;
  border-color: color-mix(in srgb, var(--primary) 22%, var(--border));
}
.site-footer[data-footer-max-width="1000"] .site-footer-inner { width: min(calc(100% - 32px), 1000px); }
.site-footer[data-footer-max-width="1120"] .site-footer-inner { width: min(calc(100% - 32px), 1120px); }
.site-footer[data-footer-max-width="1180"] .site-footer-inner { width: min(calc(100% - 32px), 1180px); }
.site-footer[data-footer-max-width="1280"] .site-footer-inner { width: min(calc(100% - 32px), 1280px); }
.site-footer[data-footer-max-width="1400"] .site-footer-inner { width: min(calc(100% - 32px), 1400px); }
@media (max-width: 768px) {
  .site-footer[data-footer-mobile-card="0"] .site-footer-links a,
  .site-footer[data-footer-mobile-card="0"] .site-footer-filing-item {
    min-height: 30px;
    padding: 4px 7px;
    border-radius: calc(var(--radius-sm) - 4px);
    background: transparent !important;
    border-color: transparent !important;
    box-shadow: none !important;
  }
  .site-footer[data-footer-mobile-card="0"] .site-footer-filing-chip { background: color-mix(in srgb, var(--primary) 12%, transparent); }
}

/* 第 377 版数据库维护列表排列与显示类型（2026-09-08 02:09:35）：巡检结果支持自动/双列/三列/四列/单列，以及卡片、列表、紧凑三种显示。 */
/* 第 378 版后台总览排列与显示类型（2026-09-08 02:15:46）：同类总览页共用排列方式和显示类型，并支持全局默认与分页面覆盖。 */
/* 第 379 版前后台卡片总览扩展（2026-09-08 02:58:44）：内容管理、用户中心和首页公开统计接入同一套排列方式与显示类型。 */
.database-view-toolbar {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-top: 16px;
  padding-top: 14px;
  border-top: 1px solid var(--border);
}
.database-view-group { display: grid; gap: 8px; min-width: 0; }
.database-view-label { color: var(--muted); font-size: 0.75rem; font-weight: 700; letter-spacing: .06em; }
.database-view-buttons { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.database-view-buttons .layui-btn { min-height: 36px; }
.admin-card-view[data-card-layout="auto"] .admin-card-view-list.user-quick-grid,
.admin-card-view[data-card-layout="auto"] .admin-card-view-list.user-reminder-grid { display: grid; }
.admin-card-view[data-card-layout="columns2"] .admin-card-view-list,
.database-maintenance-page[data-database-layout="columns2"] .database-view-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
.admin-card-view[data-card-layout="columns3"] .admin-card-view-list,
.database-maintenance-page[data-database-layout="columns3"] .database-view-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
.admin-card-view[data-card-layout="columns4"] .admin-card-view-list,
.database-maintenance-page[data-database-layout="columns4"] .database-view-list { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
.admin-card-view[data-card-layout="stacked"] .admin-card-view-list,
.database-maintenance-page[data-database-layout="stacked"] .database-view-list { display: grid; grid-template-columns: 1fr !important; }
.admin-card-view[data-card-display="list"] .admin-card-view-list,
.database-maintenance-page[data-database-display="list"] .database-view-list {
  grid-template-columns: 1fr !important;
}
.admin-card-view[data-card-display="list"] .admin-card-view-list > *,
.database-maintenance-page[data-database-display="list"] .database-health-card,
.database-maintenance-page[data-database-display="list"] .capability-stat,
.database-maintenance-page[data-database-display="list"] .database-integrity-item,
.database-maintenance-page[data-database-display="list"] .database-index-item,
.database-maintenance-page[data-database-display="list"] .database-size-item,
.database-maintenance-page[data-database-display="list"] .migration-plan-item,
.database-maintenance-page[data-database-display="list"] .cards .card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px 16px;
  flex-wrap: wrap;
}
.admin-card-view[data-card-display="list"] .admin-card-view-list > * small,
.database-maintenance-page[data-database-display="list"] .database-health-card small,
.database-maintenance-page[data-database-display="list"] .capability-stat small,
.database-maintenance-page[data-database-display="list"] .database-integrity-item small,
.database-maintenance-page[data-database-display="list"] .database-index-item small {
  min-height: 0;
  margin: 0;
  flex: 1 1 220px;
}
.admin-card-view[data-card-display="compact"] .admin-card-view-list > *,
.database-maintenance-page[data-database-display="compact"] .database-health-card,
.database-maintenance-page[data-database-display="compact"] .capability-stat,
.database-maintenance-page[data-database-display="compact"] .database-integrity-item,
.database-maintenance-page[data-database-display="compact"] .database-index-item,
.database-maintenance-page[data-database-display="compact"] .database-size-item,
.database-maintenance-page[data-database-display="compact"] .migration-plan-item,
.database-maintenance-page[data-database-display="compact"] .cards .card {
  padding: 8px 10px;
  gap: 2px;
}
.admin-card-view[data-card-display="compact"] .admin-card-view-list > * small,
.database-maintenance-page[data-database-display="compact"] .database-health-card small,
.database-maintenance-page[data-database-display="compact"] .capability-stat small,
.database-maintenance-page[data-database-display="compact"] .database-integrity-item small,
.database-maintenance-page[data-database-display="compact"] .database-index-item small {
  min-height: 0;
  font-size: 0.75rem;
}
@media (max-width: 768px) {
  .database-view-toolbar,
  .admin-card-view-toolbar { flex-direction: column; }
  .database-view-buttons,
  .admin-card-view-buttons { width: 100%; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .database-view-buttons .layui-btn,
  .admin-card-view-buttons .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .admin-card-view[data-card-layout="columns3"] .admin-card-view-list,
  .admin-card-view[data-card-layout="columns4"] .admin-card-view-list,
  .database-maintenance-page[data-database-layout="columns3"] .database-view-list,
  .database-maintenance-page[data-database-layout="columns4"] .database-view-list { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}
@media (max-width: 420px) {
  .database-view-buttons,
  .admin-card-view-buttons { grid-template-columns: 1fr; }
  .admin-card-view[data-card-layout="columns2"] .admin-card-view-list,
  .admin-card-view[data-card-layout="columns3"] .admin-card-view-list,
  .admin-card-view[data-card-layout="columns4"] .admin-card-view-list,
  .database-maintenance-page[data-database-layout="columns2"] .database-view-list,
  .database-maintenance-page[data-database-layout="columns3"] .database-view-list,
  .database-maintenance-page[data-database-layout="columns4"] .database-view-list { grid-template-columns: 1fr !important; }
}

.storage-profile-stat-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin: 0 0 20px; }
.storage-profile-stat-grid .card { min-height: 102px; padding: 16px; }
.storage-profile-stat-grid b { display: block; color: var(--text); font-size: 1.5625rem; line-height: 1.1; }
.storage-profile-stat-grid span { display: block; margin-top: 7px; color: var(--muted); font-size: 0.8125rem; }
.storage-profile-readonly { margin: -4px 0 16px; padding: 12px 14px; border: 1px solid color-mix(in srgb, var(--primary) 22%, var(--border)); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--primary-soft) 52%, var(--panel)); }
.storage-profile-management-tools { display: grid; gap: 18px; }
.storage-profile-management-tools .panel-head { margin-bottom: 0; }
.storage-profile-management-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.storage-profile-tool-card,
.storage-profile-template-card { min-width: 0; padding: 15px; border: 1px solid var(--border); border-radius: var(--radius); background: color-mix(in srgb, var(--bg) 38%, var(--panel)); }
.storage-profile-tool-card h4,
.storage-profile-template-heading h4 { margin: 0 0 5px; color: var(--text); }
.storage-profile-tool-card > .hint,
.storage-profile-template-heading .hint { margin: 0; }
.storage-profile-tool-form { display: grid; gap: 10px; margin-top: 13px; }
.storage-profile-tool-form .checkbox { min-height: 44px; margin: 0; }
.storage-profile-tool-form input[type="file"] { min-height: 44px; }
.storage-profile-template-area { display: grid; gap: 12px; padding-top: 17px; border-top: 1px solid var(--border); }
.storage-profile-template-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.storage-profile-template-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
.storage-profile-template-card { display: grid; gap: 8px; }
.storage-profile-template-card > div:first-child { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; }
.storage-profile-template-card strong { color: var(--text); overflow-wrap: anywhere; }
.storage-profile-template-card .hint { margin: 0; overflow-wrap: anywhere; }
.storage-profile-template-card > small { color: var(--muted); line-height: 1.45; }
.storage-profile-template-actions,
.storage-profile-batch-form { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.storage-profile-template-actions form,
.storage-profile-batch-form { margin: 0; }
.storage-profile-batch-form .checkbox { min-height: 38px; margin: 0 2px 0 0; }
.storage-profile-select { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 32px; width: 32px; height: 32px; margin: 0; border: 1px solid var(--border); border-radius: calc(var(--radius) - 5px); background: var(--panel); cursor: pointer; }
.storage-profile-select input { width: 18px; height: 18px; margin: 0; }
.storage-profile-select:focus-within { outline: 3px solid color-mix(in srgb, var(--primary) 28%, transparent); outline-offset: 2px; }
.storage-profile-editor .panel-head { align-items: flex-start; gap: 14px; }
.storage-profile-editor .panel-head h3 { margin-bottom: 5px; }
.storage-profile-form { display: flex; flex-direction: column; gap: 18px; }
.storage-profile-form h4 { margin: 0 0 10px; color: var(--text); font-size: 0.875rem; }
.storage-profile-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 16px; }
.storage-profile-grid > div { min-width: 0; }
.storage-profile-grid label:not(.checkbox) { font-weight: 700; }
.storage-profile-switches { display: flex; flex-wrap: wrap; align-content: center; gap: 8px 16px; padding: 4px 0; }
.storage-profile-switches .checkbox { min-height: 44px; margin: 0; }
.storage-profile-driver-fields,
.storage-profile-section { padding: 16px; border: 1px solid var(--border); border-radius: var(--radius); background: color-mix(in srgb, var(--bg) 44%, var(--panel)); }
.storage-profile-driver-fields[hidden] { display: none; }
.storage-profile-section > .hint { margin: -4px 0 12px; }
.storage-profile-groups { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.storage-profile-group-option { display: grid; grid-template-columns: 20px minmax(0, 1fr); min-width: 0; min-height: 64px; margin: 0; padding: 10px; align-items: flex-start; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--panel); }
.storage-profile-group-option input { margin-top: 1px; }
.storage-profile-group-option span { min-width: 0; font-weight: 700; overflow-wrap: anywhere; }
.storage-profile-group-option small { grid-column: 2; color: var(--muted); font-size: 0.75rem; line-height: 1.35; overflow-wrap: anywhere; }
.storage-profile-form-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.storage-profile-form-actions .layui-btn { min-height: 44px; }
.storage-profile-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 14px; }
.storage-profile-card { min-width: 0; padding: 17px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); box-shadow: var(--shadow-sm); }
.storage-profile-card.is-disabled { opacity: .78; }
.storage-profile-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding-bottom: 13px; border-bottom: 1px solid var(--border); }
.storage-profile-title-row { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.storage-profile-title-row h4 { margin: 0; color: var(--text); font-size: 1rem; overflow-wrap: anywhere; }
.storage-profile-card-head .hint { margin: 6px 0 0; overflow-wrap: anywhere; }
.storage-profile-statuses { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; flex: 0 0 auto; }
.storage-profile-meta { display: grid; gap: 10px; margin: 14px 0; }
.storage-profile-meta > div { display: grid; grid-template-columns: 86px minmax(0, 1fr); gap: 10px; }
.storage-profile-meta dt { color: var(--muted); font-size: 0.75rem; font-weight: 700; }
.storage-profile-meta dd { min-width: 0; margin: 0; color: var(--text); font-size: 0.8125rem; overflow-wrap: anywhere; }
.storage-profile-meta code { display: block; max-width: 100%; overflow-wrap: anywhere; white-space: normal; }
.storage-profile-meta small { display: block; margin-top: 4px; color: var(--muted); font-size: 0.75rem; line-height: 1.45; overflow-wrap: anywhere; }
.storage-profile-card-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.storage-profile-card-actions form { display: inline-flex; align-items: center; gap: 7px; margin: 0; }
.storage-profile-card-actions .layui-btn { min-height: 38px; }
.storage-profile-sort-form label { display: inline-flex; align-items: center; gap: 5px; margin: 0; color: var(--muted); font-size: 0.75rem; }
.storage-profile-sort-form input { width: 76px; min-height: 38px; padding: 6px 8px; }
.storage-profile-save-template-form input { width: 150px; min-height: 38px; padding: 6px 9px; }
@media (max-width: 768px) {
  .storage-profile-stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .storage-profile-management-grid,
  .storage-profile-template-list { grid-template-columns: 1fr; }
  .storage-profile-tool-form .layui-btn,
  .storage-profile-template-actions .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .storage-profile-template-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .storage-profile-template-actions form { width: 100%; }
  .storage-profile-list-panel .panel-head { align-items: stretch; flex-direction: column; }
  .storage-profile-batch-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; }
  .storage-profile-batch-form .checkbox { grid-column: 1 / -1; min-height: 44px; }
  .storage-profile-batch-form .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .storage-profile-editor .panel-head { flex-direction: column; }
  .storage-profile-editor .panel-head .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .storage-profile-grid,
  .storage-profile-groups { grid-template-columns: 1fr; }
  .storage-profile-switches { display: grid; grid-template-columns: 1fr; }
  .storage-profile-switches .checkbox { width: 100%; }
  .storage-profile-group-option { min-height: 60px; }
  .storage-profile-form-actions { display: grid; grid-template-columns: 1fr; }
  .storage-profile-form-actions .layui-btn { width: 100%; justify-content: center; }
  .storage-profile-list { grid-template-columns: 1fr; }
  .storage-profile-card { padding: 14px; }
  .storage-profile-card-head { flex-direction: column; }
  .storage-profile-statuses { justify-content: flex-start; }
  .storage-profile-card-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .storage-profile-card-actions > .layui-btn,
  .storage-profile-card-actions > form { width: 100%; }
  .storage-profile-card-actions .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .storage-profile-sort-form { grid-column: 1 / -1; display: grid !important; grid-template-columns: minmax(0, 1fr) 96px; }
  .storage-profile-sort-form label { display: grid; grid-template-columns: 42px minmax(0, 1fr); align-items: center; }
  .storage-profile-sort-form input { width: 100%; min-height: 44px; }
  .storage-profile-save-template-form { grid-column: 1 / -1; display: grid !important; grid-template-columns: minmax(0, 1fr) 108px; }
  .storage-profile-save-template-form label,
  .storage-profile-save-template-form input { width: 100%; }
}
@media (max-width: 420px) {
  .storage-profile-stat-grid,
  .storage-profile-card-actions,
  .storage-profile-template-actions,
  .storage-profile-batch-form { grid-template-columns: 1fr; }
  .storage-profile-batch-form .checkbox { grid-column: auto; }
  .storage-profile-template-heading { flex-direction: column; }
  .storage-profile-sort-form,
  .storage-profile-save-template-form { grid-template-columns: 1fr; }
  .storage-profile-sort-form label { grid-template-columns: 1fr; gap: 4px; }
}

.file-migration-target { display: inline-flex; flex: 1 1 220px; min-width: 180px; }
.file-migration-target select { width: 100%; min-width: 0; }
.storage-migration-page { display: grid; gap: 16px; min-width: 0; }
.storage-migration-head { margin: 0; }
.storage-migration-head .hint { max-width: 760px; }
.storage-migration-filter { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 8px; min-width: 0; }
.storage-migration-filter select { min-width: 150px; min-height: 40px; }
.storage-migration-table-wrap,
.storage-migration-item-wrap { -webkit-overflow-scrolling: touch; }
.storage-migration-table,
.storage-migration-item-table { min-width: 820px; }
.storage-migration-table tr.is-selected { background: color-mix(in srgb, var(--primary-soft) 46%, var(--panel)); }
.storage-migration-table td,
.storage-migration-item-table td { vertical-align: top; }
.storage-migration-table td small,
.storage-migration-item-table td small { display: block; margin-top: 4px; color: var(--muted); font-size: 0.75rem; line-height: 1.45; overflow-wrap: anywhere; }
.storage-migration-stats { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 10px; }
.storage-migration-stats .stat { min-width: 0; }
.storage-migration-item-error { min-width: 160px; max-width: 300px; overflow-wrap: anywhere; }
.storage-migration-item-actions form { margin: 0; }
.storage-migration-pager,
.storage-migration-item-pager { display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; margin: 14px 0 4px; }

@media (max-width: 980px) {
  .storage-migration-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (max-width: 768px) {
  .admin-page .admin-batch-toolbar .file-migration-target { flex-basis: 100%; width: 100%; min-width: 0; }
  .admin-page .admin-batch-toolbar .file-migration-target select { min-height: 48px; }
  .storage-migration-head,
  .storage-migration-list > .panel-head,
  .storage-migration-detail > .panel-head { flex-direction: column; align-items: stretch; }
  .storage-migration-head .admin-page-head-actions,
  .storage-migration-head .admin-page-head-actions .layui-btn { width: 100%; }
  .storage-migration-head .admin-page-head-actions { display: grid; grid-template-columns: 1fr; }
  .storage-migration-head .admin-page-head-actions .layui-btn { min-height: 44px; justify-content: center; }
  .storage-migration-filter { display: grid; grid-template-columns: 1fr; width: 100%; }
  .storage-migration-filter select,
  .storage-migration-filter .layui-btn { width: 100%; min-width: 0; min-height: 44px; justify-content: center; }
  .storage-migration-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .storage-migration-pager,
  .storage-migration-item-pager { justify-content: stretch; }
  .storage-migration-pager .layui-btn,
  .storage-migration-item-pager .layui-btn { flex: 1 1 130px; justify-content: center; }
  .storage-migration-pager .hint,
  .storage-migration-item-pager .hint { width: 100%; text-align: center; }
}

@media (max-width: 768px) {
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table thead,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table tbody,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table tr,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table th,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table td,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table thead,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table tbody,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table tr,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table th,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table td { display: block; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table { min-width: 0; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table thead,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table thead { display: none; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table tbody,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table tbody { display: flex; flex-direction: column; gap: 12px; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table tr,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table tr { padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); box-shadow: var(--shadow-sm); }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table td,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table td { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; min-height: 36px; padding: 8px 0; text-align: right; overflow-wrap: anywhere; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table td::before,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table td::before { content: attr(data-label); flex: 0 0 78px; color: var(--muted); font-size: 0.75rem; font-weight: 700; text-align: left; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table td > *,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table td > * { min-width: 0; max-width: calc(100% - 88px); overflow-wrap: anywhere; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-actions { align-items: center; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-actions form,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-actions .layui-btn { width: 100%; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table td[colspan],
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table td[colspan] { display: block; text-align: center; }
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-table td[colspan]::before,
  body.admin-page[data-mobile-table-mode="card"] .storage-migration-item-table td[colspan]::before { display: none; }
}

@media (max-width: 420px) {
  .storage-migration-stats { grid-template-columns: 1fr; }
}

/* 用户自助跨存储迁移工作台（2026-09-07 07:24:31）：文件选择、任务进度和窄屏卡片化阅读。 */
.user-storage-migration-page .user-storage-migration-workbench { display: grid; gap: 16px; min-width: 0; padding: 18px 0 26px; }
.user-storage-migration-page .user-storage-migration-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; }
.user-storage-migration-page .user-storage-migration-head h1 { margin: 6px 0 6px; font-size: 1.625rem; line-height: 1.3; }
.user-storage-migration-page .user-storage-migration-head .hint { max-width: 760px; margin: 0; line-height: 1.65; }
.user-storage-migration-page .user-storage-migration-head-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; flex: 0 0 auto; }
.user-storage-migration-page .user-storage-migration-head-actions .layui-btn { min-height: 40px; }
.user-storage-migration-page .user-storage-migration-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.user-storage-migration-page .user-storage-migration-stats .stat,
.user-storage-migration-page .user-storage-migration-detail-stats .stat { min-width: 0; }
.user-storage-migration-page .user-storage-migration-create .panel-head,
.user-storage-migration-page .user-storage-migration-batches .panel-head,
.user-storage-migration-page .user-storage-migration-detail .panel-head { align-items: flex-start; gap: 14px; }
.user-storage-migration-page .user-storage-migration-form { display: grid; gap: 14px; }
.user-storage-migration-page .user-storage-migration-target-row { display: grid; grid-template-columns: minmax(130px, 190px) minmax(0, 1fr); align-items: center; gap: 10px 14px; padding: 13px 14px; border: 1px solid color-mix(in srgb, var(--primary) 22%, var(--border)); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--panel) 93%, var(--primary) 7%); }
.user-storage-migration-page .user-storage-migration-target-row label { font-weight: 700; }
.user-storage-migration-page .user-storage-migration-target-row select { width: 100%; min-width: 0; min-height: 42px; }
.user-storage-migration-page .user-storage-migration-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.user-storage-migration-page .user-storage-migration-toolbar .checkbox { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; margin: 0; }
.user-storage-migration-page .user-storage-migration-toolbar .checkbox input { width: 18px; height: 18px; margin: 0; accent-color: var(--primary); }
.user-storage-migration-page .user-storage-migration-toolbar .hint { margin-right: auto; }
.user-storage-migration-page .user-storage-migration-toolbar .layui-btn { min-height: 42px; }
.user-storage-migration-page .user-storage-migration-empty { display: grid; gap: 6px; padding: 22px; border: 1px dashed color-mix(in srgb, var(--primary) 35%, var(--border)); border-radius: calc(var(--radius) - 1px); background: color-mix(in srgb, var(--panel) 95%, var(--primary) 5%); }
.user-storage-migration-page .user-storage-migration-empty strong { color: var(--text); }
.user-storage-migration-page .user-storage-migration-empty p { margin: 0; color: var(--muted); line-height: 1.65; overflow-wrap: anywhere; }
.user-storage-migration-page .user-storage-migration-file-wrap,
.user-storage-migration-page .user-storage-migration-batch-wrap,
.user-storage-migration-page .user-storage-migration-item-wrap { -webkit-overflow-scrolling: touch; }
.user-storage-migration-page .user-storage-migration-file-table { min-width: 860px; }
.user-storage-migration-page .user-storage-migration-batch-table { min-width: 780px; }
.user-storage-migration-page .user-storage-migration-item-table { min-width: 860px; }
.user-storage-migration-page .user-storage-migration-file-table td,
.user-storage-migration-page .user-storage-migration-batch-table td,
.user-storage-migration-page .user-storage-migration-item-table td { vertical-align: top; }
.user-storage-migration-page .user-storage-migration-file-table td small,
.user-storage-migration-page .user-storage-migration-batch-table td small,
.user-storage-migration-page .user-storage-migration-item-table td small { display: block; margin-top: 4px; color: var(--muted); font-size: 0.75rem; line-height: 1.45; overflow-wrap: anywhere; }
.user-storage-migration-page .user-storage-migration-file-table input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--primary); }
.user-storage-migration-page .user-storage-migration-batch-table tr.is-selected { background: color-mix(in srgb, var(--primary-soft) 52%, var(--panel)); }
.user-storage-migration-page .user-storage-migration-item-error { min-width: 170px; max-width: 300px; overflow-wrap: anywhere; }
.user-storage-migration-page .user-storage-migration-detail-stats { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 10px; }
.user-storage-migration-page .user-storage-migration-file-pager,
.user-storage-migration-page .user-storage-migration-batch-pager,
.user-storage-migration-page .user-storage-migration-item-pager { margin: 14px 0 2px; }

@media (max-width: 980px) {
  .user-storage-migration-page .user-storage-migration-detail-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (max-width: 768px) {
  .user-storage-migration-page .user-storage-migration-workbench { gap: 13px; padding-top: 13px; }
  .user-storage-migration-page .user-storage-migration-head,
  .user-storage-migration-page .user-storage-migration-create .panel-head,
  .user-storage-migration-page .user-storage-migration-batches .panel-head,
  .user-storage-migration-page .user-storage-migration-detail .panel-head { flex-direction: column; align-items: stretch; }
  .user-storage-migration-page .user-storage-migration-head h1 { font-size: 1.4375rem; }
  .user-storage-migration-page .user-storage-migration-head-actions { display: grid; grid-template-columns: 1fr; width: 100%; }
  .user-storage-migration-page .user-storage-migration-head-actions .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .user-storage-migration-page .user-storage-migration-target-row { grid-template-columns: 1fr; padding: 12px; }
  .user-storage-migration-page .user-storage-migration-target-row select { min-height: 46px; }
  .user-storage-migration-page .user-storage-migration-toolbar { display: grid; grid-template-columns: 1fr; align-items: stretch; }
  .user-storage-migration-page .user-storage-migration-toolbar .checkbox,
  .user-storage-migration-page .user-storage-migration-toolbar .hint { min-height: 42px; margin-right: 0; }
  .user-storage-migration-page .user-storage-migration-toolbar .layui-btn { width: 100%; min-height: 46px; justify-content: center; }
  .user-storage-migration-page .user-storage-migration-detail-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .user-storage-migration-page .user-storage-migration-file-pager,
  .user-storage-migration-page .user-storage-migration-batch-pager,
  .user-storage-migration-page .user-storage-migration-item-pager { justify-content: stretch; }
  .user-storage-migration-page .user-storage-migration-file-pager .layui-btn,
  .user-storage-migration-page .user-storage-migration-batch-pager .layui-btn,
  .user-storage-migration-page .user-storage-migration-item-pager .layui-btn { flex: 1 1 120px; justify-content: center; }
  .user-storage-migration-page .user-storage-migration-file-pager .hint,
  .user-storage-migration-page .user-storage-migration-batch-pager .hint,
  .user-storage-migration-page .user-storage-migration-item-pager .hint { width: 100%; text-align: center; }
}

@media (max-width: 768px) {
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table thead,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table tbody,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table tr,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table th,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table td,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table thead,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table tbody,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table tr,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table th,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table td,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table thead,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table tbody,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table tr,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table th,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table td { display: block; }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table { min-width: 0; }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table thead,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table thead,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table thead { display: none; }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table tbody,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table tbody,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table tbody { display: flex; flex-direction: column; gap: 12px; }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table tr,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table tr,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table tr { padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel); box-shadow: var(--shadow-sm); }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table td,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table td,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table td { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; min-height: 36px; padding: 8px 0; text-align: right; overflow-wrap: anywhere; }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table td::before,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table td::before,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table td::before { content: attr(data-label); flex: 0 0 78px; color: var(--muted); font-size: 0.75rem; font-weight: 700; text-align: left; }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table td > *,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table td > *,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table td > * { min-width: 0; max-width: calc(100% - 88px); overflow-wrap: anywhere; }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table td[data-label="选择"] { align-items: center; }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table td[colspan],
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table td[colspan],
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table td[colspan] { display: block; text-align: center; }
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-file-table td[colspan]::before,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-batch-table td[colspan]::before,
  body.user-storage-migration-page[data-mobile-table-mode="card"] .user-storage-migration-item-table td[colspan]::before { display: none; }
}

@media (max-width: 420px) {
  .user-storage-migration-page .user-storage-migration-stats,
  .user-storage-migration-page .user-storage-migration-detail-stats { grid-template-columns: 1fr; }
}

/* 首页手机端排版收紧（2026-09-08 20:49:29）：减少上传分页与折叠设置留白，公开统计工具栏保持紧凑且不影响后台页面。 */
@media (max-width: 768px) {
  .home-page .upload-queue-pagination { gap: 8px; margin-top: 8px; padding: 8px; }
  .home-page .queue-pagination-tools { gap: 6px; }
  .home-page .queue-pagination-tools .queue-page-size-wrap,
  .home-page .queue-pagination-tools .queue-page-jump-wrap { min-height: 44px; }
  .home-page #uploadSettingsPanel.is-collapsed { margin-top: 8px; }
  .home-page #uploadSettingsPanel.is-collapsed .upload-settings-head { margin-bottom: 0; }
  .home-page #uploadSettingsPanel.is-collapsed .upload-settings-toggle { min-height: 44px; }
  .home-page .upload-settings-head { gap: 8px; }
  .home-page .upload-settings-head-actions { gap: 6px; }
  .home-page .storage-upload-hint { margin: 4px 0 8px; }
  .home-page .upload-storage-picker .hint { margin-top: 4px; }
  .home-page .upload-storage-extra { gap: 8px; padding: 10px 12px; }
  .home-page .home-insight-strip { margin-top: 10px; padding: 14px; }
  .home-page .home-insight-strip .panel-head { margin-bottom: 6px; }
  .home-page .admin-card-view-toolbar { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, .75fr); align-items: start; gap: 10px; margin-top: 8px; padding-top: 10px; }
  .home-page .admin-card-view-group { width: 100%; gap: 6px; }
  .home-page .admin-card-view-buttons { width: 100%; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
  .home-page .admin-card-view-buttons .layui-btn { width: 100%; min-width: 0; min-height: 44px; padding-right: 6px; padding-left: 6px; font-size: 0.8125rem; white-space: normal; }
  .home-page .home-insight-strip .public-stats-row { gap: 8px; }
  .home-page .home-insight-strip .stat { min-height: 86px; padding: 12px 8px 10px; border-radius: calc(var(--radius) - 2px); }
  .home-page .home-insight-strip .stat b { font-size: 1.4375rem; }
}

@media (max-width: 420px) {
  .home-page .home-insight-strip { padding: 12px; }
  .home-page .admin-card-view-toolbar { margin-top: 6px; padding-top: 8px; }
  .home-page .admin-card-view-buttons .layui-btn { padding-right: 4px; padding-left: 4px; font-size: 0.75rem; }
  .home-page .home-insight-strip .stat { min-height: 82px; }
}


/* 首页首屏两卡大力压缩（2026-09-08 22:35:41）：收紧标语卡与提取码卡，桌面与手机同步变紧凑，保留触控安全高度。 */
.home-page .home-main { padding-top: 14px; }
.home-page .home-hero { margin-bottom: 14px; }
.home-page .home-hero-grid { gap: 14px; }
.home-page .hero-copy { padding: clamp(16px, 2vw, 30px) clamp(18px, 2.6vw, 34px); border-radius: calc(var(--radius) + 2px); }
.home-page .home-eyebrow { padding: 3px 12px; font-size: 0.75rem; }
.home-page .hero-copy h1 { margin: 14px 0 8px; font-size: clamp(30px, 3.4vw, 44px); line-height: 1.08; }
.home-page .hero-copy .sub { font-size: clamp(14px, 1.3vw, 16px); line-height: 1.5; }
.home-page .hero-trust-line { gap: 6px 12px; margin-top: 10px; }
.home-page .hero-trust-line span { min-height: 26px; padding: 2px 11px; font-size: 0.75rem; }
.home-page .hero-trust-line svg { width: 14px; height: 14px; }
.home-page .home-flow { gap: 6px; margin: 10px 0 0; }
.home-page .home-flow li { min-height: 30px; padding: 4px 10px; font-size: 0.75rem; gap: 6px; }
.home-page .home-quick-links { gap: 10px; margin-top: 14px; }
.home-page .home-quick-link { min-height: 66px; padding: 10px 12px; border-radius: calc(var(--radius) - 2px); }
.home-page .home-quick-link svg { width: 20px; height: 20px; margin-bottom: 6px; }
.home-page .home-quick-link span { font-size: 0.8125rem; margin-bottom: 0; }
.home-page .home-quick-link small { margin-top: 3px; font-size: 0.6875rem; }
.home-page .hero-command-card { padding: clamp(14px, 1.6vw, 24px); border-radius: calc(var(--radius) + 2px); }
.home-page .hero-command-card.hero-waybill::after { top: 14px; bottom: 14px; }
.home-page .hero-command-head { gap: 10px; padding-bottom: 10px; margin-bottom: 12px; }
.home-page .hero-command-head h2 { font-size: 1.125rem; margin-top: 2px; }
.home-page .hero-command-mark { width: 34px; height: 34px; border-radius: var(--radius-sm); font-size: 0.8125rem; }
.home-page .hero-command-card form.code-form-hero { gap: 8px; }
.home-page .hero-command-card .code-form-inner-wrapper { padding: 5px; border-radius: var(--radius); min-height: 52px; }
.home-page .hero-command-card .code-form-hero input { min-height: 44px; }
.home-page .hero-command-card .layui-btn.layui-btn-normal { min-height: 48px; padding: 0 16px; }
.home-page .hero-command-card .code-form-hint { margin-top: 10px; }
.home-page .hero-command-foot { padding-top: 10px; }
.home-page .hero-command-disabled { min-height: 110px; padding: 14px; }
.home-page .recent-codes { margin-top: 10px; }

@media (max-width: 1024px) {
  .home-page .hero-copy { padding: 24px 22px; }
  .home-page .hero-copy h1 { font-size: 2.25rem; }
}

@media (max-width: 768px) {
  .home-page .home-main { padding-top: 10px; }
  .home-page .home-hero { margin-bottom: 10px; }
  .home-page .home-hero-grid { gap: 10px; }
  .home-page .hero-copy { padding: 12px 12px; border-radius: var(--radius); }
  .home-page .home-eyebrow { padding: 3px 9px; font-size: 0.6875rem; }
  .home-page .hero-copy h1 { margin: 10px 0 6px; font-size: 1.5625rem; line-height: 1.14; }
  .home-page .hero-copy .sub { font-size: 0.8125rem; line-height: 1.5; }
  .home-page .hero-trust-line { gap: 5px 8px; margin-top: 8px; }
  .home-page .hero-trust-line span { min-height: 24px; padding: 2px 9px; font-size: 0.6875rem; }
  .home-page .home-flow { gap: 6px; margin-top: 10px; }
  .home-page .home-flow li { min-height: 28px; padding: 4px 9px; font-size: 0.6875rem; }
  .home-page .home-quick-links { gap: 6px; margin-top: 10px; }
  .home-page .home-quick-link { min-height: 58px; padding: 8px 8px; border-radius: var(--radius-sm); }
  .home-page .home-quick-link svg { width: 18px; height: 18px; margin-bottom: 5px; }
  .home-page .home-quick-link span { font-size: 0.75rem; }
  .home-page .home-quick-link small { display: none; }
  .home-page .hero-command-card { padding: 12px 12px 14px; border-radius: var(--radius); }
  .home-page .hero-command-head { padding-bottom: 8px; margin-bottom: 10px; }
  .home-page .hero-command-head h2 { font-size: 1rem; }
  .home-page .hero-command-mark { width: 30px; height: 30px; font-size: 0.75rem; }
  .home-page .hero-command-card .code-form-inner-wrapper { min-height: 0; }
  .home-page .hero-command-card .layui-btn.layui-btn-normal { min-height: 46px; }
  .home-page .hero-command-foot { padding-top: 8px; }
  .home-page .hero-command-disabled { min-height: 96px; }
}

/* 提取码批量查询弹窗：桌面居中、手机贴边，结果状态保持可扫描。 */
.code-batch-trigger { margin-top: 8px; }
.code-batch-modal[hidden] { display: none !important; }
.code-batch-modal { position: fixed; inset: 0; z-index: 3200; display: grid; place-items: center; padding: 20px; background: rgba(15,23,42,.42); backdrop-filter: blur(8px); }
.code-batch-open { overflow: hidden; height: 100%; }
.code-batch-dialog { width: min(750px, 100%); max-height: min(760px, 92vh); overflow: hidden; display: flex; flex-direction: column; padding: 0; border: 1px solid var(--border); border-radius: var(--radius); background: var(--panel, #fff); box-shadow: 0 24px 70px rgba(15,23,42,.24); }
.code-batch-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 18px; border-bottom: 1px solid var(--border); background: color-mix(in srgb, var(--panel, #fff) 94%, var(--primary) 6%); }
.code-batch-head h3 { margin: 0; font-size: 1.125rem; }
.code-batch-head button { width: 36px; height: 36px; min-height: 36px; padding: 0; font-size: 1.5rem; line-height: 1; }
.code-batch-dialog > #codeBatchInput { box-sizing: border-box; width: auto; height: 220px; min-height: 150px; max-height: min(44vh, 420px); flex: 0 1 auto; margin: 16px 18px 8px; resize: vertical; overflow: auto; }
.code-batch-dialog > .code-batch-meta { margin: 0 18px 10px; }
.code-batch-dialog > .code-batch-progress { margin: 0 18px; }
.code-batch-dialog > .code-batch-status { margin: 8px 18px; }
.code-batch-dialog > .code-batch-results { min-height: 0; flex: 1 1 auto; max-height: none; margin: 0 18px 12px; padding-right: 2px; overflow: auto; }
.code-batch-dialog > .code-batch-actions { flex: 0 0 auto; max-height: min(24vh, 220px); overflow: auto; padding: 12px 18px; border-top: 1px solid var(--border); background: color-mix(in srgb, var(--panel, #fff) 96%, var(--primary) 4%); }
.code-batch-actions, .code-batch-meta { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
#codeBatchInput { width: 100%; min-height: 180px; resize: vertical; }
#codeBatchInput.is-over { border-color: #dc3545; box-shadow: 0 0 0 3px rgba(220,53,69,.12); }
.code-batch-meta { margin: 8px 0; font-size: 0.75rem; color: var(--muted); }
.code-batch-meta .is-over { color: #dc3545; font-weight: 700; }
.code-batch-meta-actions { display: inline-flex; gap: 6px; align-items: center; }
.code-batch-meta-actions .layui-btn { min-height: 30px; padding: 4px 10px; }
.code-batch-progress { height: 8px; overflow: hidden; border-radius: 99px; background: color-mix(in srgb, var(--primary) 12%, transparent); }
.code-batch-progress-bar { width: 42%; height: 100%; background: linear-gradient(90deg, var(--primary), #8b5cf6, var(--primary)); animation: codeBatchFlow 1.1s linear infinite; }
@keyframes codeBatchFlow { from { transform: translateX(-110%); } to { transform: translateX(250%); } }
.code-batch-status { min-height: 22px; margin: 10px 0; color: var(--muted); }
.code-batch-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 18px 8px; }
.code-batch-filters { display: flex; gap: 4px; flex-wrap: wrap; }
.code-batch-filters .layui-btn { min-height: 30px; padding: 4px 9px; }
.code-batch-filters .layui-btn.is-active { color: var(--primary, #4f7cff); border-color: currentColor; background: color-mix(in srgb, var(--primary) 8%, transparent); }
.code-batch-filters .layui-btn span { opacity: .72; font-variant-numeric: tabular-nums; }
.code-batch-results { display: grid; gap: 6px; max-height: 300px; overflow: auto; margin-bottom: 12px; }
.code-batch-result { display: grid; grid-template-columns: 10px minmax(90px, auto) 1fr auto auto; align-items: center; gap: 8px; padding: 8px 10px; border: 1px solid var(--border); border-radius: calc(var(--radius-sm) - 2px); }
.code-batch-result.is-success { background: rgba(34,197,94,.07); } .code-batch-result.is-failure { background: rgba(220,53,69,.07); } .code-batch-result.is-stopped { opacity: .7; }
.code-batch-dot { width: 8px; height: 8px; border-radius: 50%; background: #94a3b8; } .is-success .code-batch-dot { background: #22c55e; } .is-failure .code-batch-dot { background: #dc3545; }
.code-batch-result-name { font-weight: 600; }
.code-batch-result-meta { color: var(--muted); font-size: 0.6875rem; grid-column: 3 / -1; margin-top: -4px; }
.code-batch-result-message { color: var(--muted); font-size: 0.75rem; }
.code-batch-save { min-height: 32px; }
.code-batch-save.is-done { border-color: rgba(34,197,94,.5); color: #16a34a; }
@media (max-width: 768px) { .code-batch-modal { align-items: end; padding: 12px; } .code-batch-dialog { width: 100%; max-height: 94vh; max-height: 94dvh; padding: 0; border-radius: calc(var(--radius) - 2px); overflow: auto; -webkit-overflow-scrolling: touch; } .code-batch-head { padding: 12px 14px; } .code-batch-head button { min-width: 44px; min-height: 44px; } .code-batch-dialog > #codeBatchInput { height: 200px; min-height: 180px; max-height: 38dvh; margin: 12px 14px 8px; } .code-batch-dialog > .code-batch-meta, .code-batch-dialog > .code-batch-progress, .code-batch-dialog > .code-batch-status { margin-left: 14px; margin-right: 14px; } .code-batch-dialog > .code-batch-results, .code-batch-dialog > .code-batch-toolbar { margin-left: 14px; margin-right: 14px; } .code-batch-dialog > .code-batch-actions { max-height: 30dvh; padding: 10px 14px; } .code-batch-result { grid-template-columns: 10px 1fr auto; } .code-batch-result-name, .code-batch-result-message { grid-column: 2 / -1; } .code-batch-result .code-batch-copy { grid-column: 2 / -1; justify-self: start; } .code-batch-result .code-batch-save { grid-column: 2 / -1; justify-self: start; min-height: 44px; } .code-batch-actions { flex-wrap: wrap; } .code-batch-actions .layui-btn { flex: 1 1 45%; min-height: 44px; } }

/* 首页首屏工作台重排（2026-09-08 22:46:02）：减少装饰层级，突出内容入口，桌面双栏、手机单栏保持紧凑。 */
.home-page .home-hero-grid { gap: 12px; }
.home-page .hero-copy {
  display: grid;
  align-content: start;
  gap: 0;
  padding: 20px 24px;
  border-radius: var(--radius);
  box-shadow: 0 8px 24px rgba(15,23,42,.06);
}
.home-page .home-eyebrow { padding: 3px 10px; font-size: 0.6875rem; }
.home-page .hero-copy h1 { max-width: 620px; margin: 10px 0 6px; font-size: clamp(28px, 3.2vw, 42px); line-height: 1.08; }
.home-page .hero-copy .sub { max-width: 560px; font-size: 0.875rem; line-height: 1.45; }
.home-page .home-flow { gap: 5px; margin-top: 10px; }
.home-page .home-flow li { min-height: 28px; padding: 3px 9px; border-style: solid; font-size: 0.6875rem; }
.home-page .hero-trust-line { gap: 5px 8px; margin-top: 8px; }
.home-page .hero-trust-line span { min-height: 24px; padding: 2px 8px; font-size: 0.6875rem; }
.home-page .home-quick-links { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; margin-top: 12px; }
.home-page .home-quick-link { min-height: 52px; padding: 7px 8px; border-radius: calc(var(--radius) - 5px); justify-content: center; }
.home-page .home-quick-link svg { width: 17px; height: 17px; margin-bottom: 3px; }
.home-page .home-quick-link span { font-size: 0.75rem; }
.home-page .hero-command-card {
  align-self: start;
  padding: 16px;
  border-radius: var(--radius);
  box-shadow: 0 8px 24px rgba(15,23,42,.06);
}
.home-page .hero-command-head { gap: 8px; padding-bottom: 8px; margin-bottom: 10px; }
.home-page .hero-command-head h2 { margin-top: 1px; font-size: 1.0625rem; }
.home-page .hero-command-mark { width: 32px; height: 32px; border-radius: calc(var(--radius) - 5px); font-size: 0.75rem; }
.home-page .hero-command-card .code-form-inner-wrapper { padding: 4px; border-radius: calc(var(--radius) - 3px); }
.home-page .hero-command-card .code-label { margin-right: 7px; padding-right: 7px; }
.home-page .hero-command-card .layui-btn.layui-btn-normal { min-height: 46px; padding: 0 14px; border-radius: var(--radius-sm); }
.home-page .hero-command-card .code-form-hint { margin-top: 7px; }
.home-page .hero-command-foot { gap: 12px; padding-top: 10px; font-size: 0.75rem; }

@media (max-width: 768px) {
  .home-page .home-hero-grid { gap: 8px; }
  .home-page .hero-copy { padding: 12px; border-radius: calc(var(--radius) - 2px); }
  .home-page .home-eyebrow { padding: 2px 8px; }
  .home-page .hero-copy h1 { margin: 8px 0 5px; font-size: 1.5rem; line-height: 1.12; }
  .home-page .hero-copy .sub { font-size: 0.75rem; line-height: 1.45; }
  .home-page .home-flow { margin-top: 7px; }
  .home-page .home-flow li { min-height: 26px; padding: 3px 7px; font-size: 0.625rem; }
  .home-page .hero-trust-line { margin-top: 6px; }
  .home-page .hero-trust-line span { min-height: 22px; padding: 1px 7px; font-size: 0.625rem; }
  .home-page .home-quick-links { gap: 5px; margin-top: 8px; }
  .home-page .home-quick-link { min-height: 50px; padding: 6px 5px; }
  .home-page .home-quick-link svg { width: 16px; height: 16px; }
  .home-page .home-quick-link span { font-size: 0.6875rem; }
  .home-page .hero-command-card { padding: 11px; border-radius: calc(var(--radius) - 2px); }
  .home-page .hero-command-head { padding-bottom: 7px; margin-bottom: 8px; }
  .home-page .hero-command-head h2 { font-size: 0.9375rem; }
  .home-page .hero-command-mark { width: 28px; height: 28px; }
  .home-page .hero-command-card .code-form-inner-wrapper { padding: 4px; }
  .home-page .hero-command-foot { gap: 8px; padding-top: 7px; font-size: 0.6875rem; }
}

/* 首页分享工作区重排（2026-09-08 23:01:48）：将内容切换移入标题栏，压缩下方上传与文本界面。 */
.home-page .home-workspace {
  margin-top: 16px;
  padding: 22px 24px 24px;
  border-radius: var(--radius);
}
.home-page .home-workspace-head {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 14px;
  padding-bottom: 12px;
}
.home-page .home-workspace-head > div:first-child { min-width: 0; }
.home-page .home-workspace-head h2 { margin-top: 4px; font-size: 1.3125rem; }
.home-page .home-workspace-head .hint { margin-top: 4px; font-size: 0.75rem; }
.home-page .home-workspace-head-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  min-width: 0;
  margin-left: auto;
}
.home-page .home-workspace-head-actions .home-workspace-status { min-height: 30px; padding: 5px 9px; font-size: 0.75rem; }
.home-page .home-workspace-head-actions .tabs {
  display: flex;
  flex: 0 0 auto;
  gap: 3px;
  width: auto;
  margin: 0;
  padding: 3px;
  border-radius: calc(var(--radius) - 5px);
}
.home-page .home-workspace-head-actions .tab {
  min-height: 40px;
  padding: 7px 12px;
  border-radius: calc(var(--radius-sm) - 3px);
  gap: 5px;
  font-size: 0.8125rem;
  white-space: nowrap;
}
.home-page .home-workspace-head-actions .tab .action-icon { width: 16px; height: 16px; }
.home-page .home-upload-captcha { margin: 8px 0 10px; padding: 8px 10px; }
.home-page .tab-pane { min-width: 0; }
.home-page .dropzone { min-height: 168px; padding: 18px 14px; border-radius: calc(var(--radius) - 2px); }
.home-page .dropzone .dz-icon svg { width: 38px; height: 38px; }
.home-page .dropzone p { margin-top: 6px; }
.home-page .dropzone .hint { margin-top: 3px; }
.home-page .home-page .dz-actions, .home-page .dz-actions { margin-top: 10px; gap: 8px; }
.home-page .dz-pick-btn { min-height: 44px; }
.home-page .folder-upload-actions { margin-top: 8px; gap: 8px; }
.home-page .upload-queue-toolbar { margin-top: 8px; padding: 8px 10px; gap: 7px; }
.home-page .upload-queue-actions { gap: 6px; }
.home-page .upload-queue-actions .layui-btn { min-height: 42px; }
.home-page .queue-filter-bar { margin-top: 8px; padding: 8px 10px; gap: 7px; }
.home-page .upload-queue-pagination { margin-top: 8px; padding: 7px 9px; gap: 7px; }
.home-page #uploadSettingsPanel { margin-top: 8px; padding: 0 12px 12px; border-radius: calc(var(--radius) - 3px); }
.home-page #uploadSettingsPanel .upload-settings-head { margin: 0 -12px; padding: 9px 12px; }
.home-page #uploadSettingsPanel .storage-upload-hint { margin: 4px 0 8px; font-size: 0.75rem; }
.home-page #uploadSettingsPanel .grid { gap: 8px; }
.home-page #uploadSettingsPanel .upload-storage-extra { gap: 7px; padding: 8px 10px; }
.home-page #uploadSettingsPanel .upload-note-editor { margin-top: 8px; }
.home-page #uploadSettingsPanel textarea { min-height: 82px; }
.home-page .text-workbench { gap: 8px; }
.home-page .text-workbench-head { gap: 8px; }
.home-page .text-workbench-label { margin-bottom: 4px; }
.home-page .text-workbench-tools { gap: 6px; }
.home-page .text-workbench-tools .layui-btn { min-height: 40px; padding: 7px 10px; }
.home-page .text-workbench textarea { min-height: 220px; }
.home-page .text-workbench-footer { gap: 8px; margin-top: 8px; }

@media (max-width: 768px) {
  .home-page .home-workspace { margin-top: 10px; padding: 14px 12px 16px; border-radius: calc(var(--radius) - 2px); }
  .home-page .home-workspace-head { align-items: stretch; flex-direction: column; gap: 8px; margin-bottom: 10px; padding-bottom: 10px; }
  .home-page .home-workspace-head h2 { font-size: 1.125rem; }
  .home-page .home-workspace-head-actions { width: 100%; margin-left: 0; justify-content: stretch; }
  .home-page .home-workspace-head-actions .home-workspace-status { display: none; }
  .home-page .home-workspace-head-actions .tabs { flex: 1 1 auto; width: 100%; }
  .home-page .home-workspace-head-actions .tab { flex: 1 1 0; justify-content: center; min-height: 44px; padding: 8px 6px; font-size: 0.75rem; }
  .home-page .home-upload-captcha { margin: 6px 0 8px; padding: 7px 8px; }
  .home-page .dropzone { min-height: 148px; padding: 14px 10px; }
  .home-page .dropzone .dz-icon svg { width: 34px; height: 34px; }
  .home-page .dropzone p { font-size: 0.8125rem; }
  .home-page .dz-pick-btn { min-height: 46px; }
  .home-page #uploadSettingsPanel { padding: 0 9px 10px; }
  .home-page #uploadSettingsPanel .upload-settings-head { margin: 0 -9px; padding: 8px 9px; }
  .home-page #uploadSettingsPanel .grid { gap: 7px; }
  .home-page .text-workbench-tools {
    max-height: none;
    height: auto;
    overflow: visible;
  }
  .home-page .text-workbench textarea { min-height: 180px; }
}

@media (max-width: 420px) {
  .home-page .hero-copy h1 { font-size: 1.375rem; }
  .home-page .home-flow li { flex: 1 1 calc(50% - 5px); justify-content: center; }
  .home-page .hero-command-card .code-label { font-size: 0.6875rem; }
}

/* 生物识别登录移动端适配（2026-09-09 10:03:57）：按钮纵向堆叠，满足 44px 触控热区 */
@media (max-width: 560px) {
  .bio-btns { flex-direction: column; }
  .bio-btn { width: 100%; min-height: 46px; }
  .rjkc-bio-confirm { padding: 18px 16px; }
  .rjkc-bio-confirm-actions { flex-direction: column-reverse; }
  .rjkc-bio-confirm-actions .layui-btn { width: 100%; }
}

@media (max-width: 768px) {
  .layui-btn,
  .link-btn,
  .ops button.link {
    max-width: 100%;
    min-width: 0;
    overflow-wrap: anywhere;
    white-space: normal;
    text-align: center;
  }

  .panel-head-actions,
  .admin-page-head-actions,
  .message-head-actions,
  .home-workspace-head-actions,
  .storage-profile-card-actions,
  .storage-profile-form-actions,
  .file-actions,
  .message-actions,
  .toolbar {
    width: 100%;
    min-width: 0;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: stretch;
    gap: 8px;
  }

  .panel-head-actions > *,
  .admin-page-head-actions > *,
  .message-head-actions > *,
  .home-workspace-head-actions > *,
  .storage-profile-card-actions > *,
  .storage-profile-form-actions > *,
  .file-actions > *,
  .message-actions > *,
  .toolbar > * {
    min-width: 0;
    width: 100%;
  }

  .panel-head-actions .hint,
  .message-head-actions .hint,
  .home-workspace-head-actions .home-workspace-status {
    grid-column: 1 / -1;
  }

  .panel-head-actions .layui-btn,
  .admin-page-head-actions .layui-btn,
  .message-head-actions .layui-btn,
  .home-workspace-head-actions .layui-btn,
  .storage-profile-card-actions .layui-btn,
  .storage-profile-form-actions .layui-btn,
  .file-actions .layui-btn,
  .message-actions .layui-btn,
  .toolbar .layui-btn {
    min-height: 46px;
    justify-content: center;
  }

  .search-bar,
  .filter,
  .admin-page .search-bar,
  .admin-page .filter {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: stretch;
    gap: 8px;
  }

  .search-bar > input[type="text"]:first-child,
  .search-bar > input[type="search"]:first-child,
  .search-bar > .input-wrap,
  .filter > .input-wrap,
  .search-bar > .layui-btn,
  .filter > .layui-btn,
  .admin-page .search-bar > .layui-btn,
  .admin-page .filter > .layui-btn {
    grid-column: 1 / -1;
    width: 100%;
    min-width: 0;
  }

  .search-bar > select,
  .filter > select,
  .admin-page .search-bar > select,
  .admin-page .filter > select {
    width: 100%;
    min-width: 0;
  }

  .batch-bar,
  .admin-batch-toolbar,
  .share-bulk-toolbar,
  .code-bulk-toolbar,
  .trash-bulk-toolbar {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: stretch;
    gap: 8px;
  }

  .batch-bar > *,
  .admin-batch-toolbar > *,
  .share-bulk-toolbar > *,
  .code-bulk-toolbar > *,
  .trash-bulk-toolbar > * {
    min-width: 0;
    width: 100%;
  }

  .batch-bar .batch-select-all,
  .batch-bar .batch-count,
  .batch-bar .batch-option-field,
  .admin-batch-toolbar .batch-select-all,
  .admin-batch-toolbar .batch-count,
  .admin-batch-toolbar .batch-option-field,
  .share-bulk-toolbar .checkbox,
  .share-bulk-toolbar .hint,
  .code-bulk-toolbar .checkbox,
  .code-bulk-toolbar .hint,
  .trash-bulk-toolbar .checkbox,
  .trash-bulk-toolbar .hint {
    grid-column: 1 / -1;
  }

  .batch-bar .layui-btn,
  .batch-bar select,
  .batch-bar input:not([type="checkbox"]):not([type="radio"]),
  .admin-batch-toolbar .layui-btn,
  .admin-batch-toolbar select,
  .share-bulk-toolbar .layui-btn,
  .code-bulk-toolbar .layui-btn,
  .trash-bulk-toolbar .layui-btn {
    width: 100% !important;
    max-width: none;
    min-width: 0;
    min-height: 46px;
    justify-content: center;
  }

  .batch-bar .batch-option-field,
  .admin-batch-toolbar .batch-option-field {
    align-items: stretch;
    flex-direction: column;
    gap: 5px;
  }

  .batch-bar .batch-option-field input,
  .batch-bar .batch-option-field select,
  .admin-batch-toolbar .batch-option-field input,
  .admin-batch-toolbar .batch-option-field select {
    width: 100% !important;
    max-width: none;
  }

  .share-bulk-toolbar .hint,
  .code-bulk-toolbar .hint,
  .trash-bulk-toolbar .hint {
    margin-right: 0;
    text-align: center;
  }

  .ops {
    width: 100%;
    min-width: 0;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
  }

  .ops a,
  .ops form,
  .ops button.link {
    width: 100%;
    min-width: 0;
    margin: 0;
  }

  .ops a,
  .ops button.link {
    min-height: 44px;
    padding: 8px 10px;
    white-space: normal;
  }

  .database-view-toolbar,
  .admin-card-view-toolbar {
    width: 100%;
    min-width: 0;
    flex-direction: column;
    align-items: stretch;
    gap: 14px;
  }

  .database-view-group,
  .admin-card-view-group {
    width: 100%;
    min-width: 0;
  }

  .database-view-buttons,
  .admin-card-view-buttons {
    width: 100% !important;
    min-width: 0;
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
  }

  .database-view-buttons .layui-btn,
  .admin-card-view-buttons .layui-btn {
    width: 100% !important;
    min-width: 0;
    min-height: 46px;
    padding-inline: 8px;
    justify-content: center;
  }
}

@media (max-width: 360px) {
  .panel-head-actions,
  .admin-page-head-actions,
  .message-head-actions,
  .home-workspace-head-actions,
  .storage-profile-card-actions,
  .storage-profile-form-actions,
  .file-actions,
  .message-actions,
  .toolbar,
  .ops,
  .database-view-buttons,
  .admin-card-view-buttons {
    grid-template-columns: 1fr;
  }

  .search-bar,
  .filter,
  .admin-page .search-bar,
  .admin-page .filter,
  .batch-bar,
  .admin-batch-toolbar,
  .share-bulk-toolbar,
  .code-bulk-toolbar,
  .trash-bulk-toolbar {
    grid-template-columns: 1fr;
  }
}

/* 卡片视图工具栏最终兜底：避免后续页面样式覆盖按钮组宽度 */
.database-view-toolbar,
.admin-card-view-toolbar {
  align-items: stretch;
}

.database-view-group,
.admin-card-view-group {
  flex: 1 1 320px;
  min-width: 0;
}

.database-view-buttons,
.admin-card-view-buttons {
  width: 100% !important;
  min-width: 0;
}

.database-view-buttons .layui-btn,
.admin-card-view-buttons .layui-btn {
  min-width: 0;
}

@media (max-width: 1180px) {
  .database-view-group,
  .admin-card-view-group {
    flex-basis: 100%;
  }
}

/* 口令直达链接卡片（分享编辑页保存新密码后一次性展示） */
.share-direct-link-box { display: grid; gap: 10px; }
.share-direct-link-copy strong { display: block; margin-bottom: 2px; }
.share-direct-link-copy span { display: block; color: var(--muted, #6b7280); font-size: 0.8125rem; line-height: 1.6; }
.share-direct-link-row { display: flex; gap: 8px; align-items: center; }
.share-direct-link-row input { flex: 1 1 auto; min-width: 0; font-size: 0.8125rem; }
@media (max-width: 640px) {
  .share-direct-link-row { flex-direction: column; align-items: stretch; }
  .share-direct-link-row input { min-height: 44px; }
  .share-direct-link-row .layui-btn { min-height: 44px; }
}

/* ---------- 两步验证（TOTP）管理页 ---------- */
.twofa-steps { margin: 0; padding-left: 20px; line-height: 1.9; color: var(--muted, #6b7280); }
.twofa-step-note { margin-top: 10px; font-size: 0.8125rem; color: var(--muted, #6b7280); }
.twofa-bind-row { display: flex; gap: 24px; align-items: flex-start; flex-wrap: wrap; margin-top: 6px; }
.twofa-qr-box { width: 212px; height: 212px; display: grid; place-items: center; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius) - 2px); background: #fff; padding: 6px; flex: 0 0 auto; }
.twofa-qr-placeholder { color: var(--muted, #6b7280); font-size: 0.8125rem; text-align: center; padding: 0 12px; }
.twofa-qr-box img, .twofa-qr-box canvas { display: block; width: 200px; height: 200px; }
.twofa-bind-form { flex: 1 1 260px; min-width: 0; }
.twofa-bind-form code.recovery-code { display: inline-block; margin: 4px 2px 10px 0; }
.recovery-codes-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(128px, 1fr)); gap: 8px; margin-top: 10px; }
.recovery-code { display: inline-block; padding: 6px 10px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--panel, #fff) 96%, #000 4%); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.8125rem; letter-spacing: 1px; user-select: all; }
.detail-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px 20px; margin: 10px 0 4px; }
.detail-grid div { min-width: 0; }
.detail-grid dt { font-size: 0.75rem; color: var(--muted, #6b7280); margin-bottom: 2px; }
.detail-grid dd { margin: 0; font-weight: 600; }
.profile-card-actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-top: 14px; }
@media (max-width: 640px) {
  .twofa-bind-row { flex-direction: column; }
  .twofa-qr-box { align-self: center; }
}

/* ---------- 分享页访客留言板 ---------- */
.share-comments-panel { margin-top: 18px; }
.share-comments-body { margin-top: 10px; }
.share-comments-login-tip { margin: 0 0 10px; }
.share-comments-login-tip a { color: var(--link, var(--primary, #4f7cff)); text-decoration: none; }
.share-comments-form { margin-bottom: 14px; }
.share-comments-form label { display: block; margin: 0 0 6px; font-size: 0.8125rem; color: var(--muted, #6b7280); }
.share-comments-form input[name="nickname"] { width: 100%; max-width: 260px; margin-bottom: 8px; }
.share-comments-input-row { display: flex; gap: 8px; align-items: flex-end; }
.share-comments-input-row textarea { flex: 1 1 auto; min-width: 0; resize: vertical; min-height: 72px; }
.share-comments-input-row .layui-btn { flex: 0 0 auto; }
.share-comments-feedback { margin: 8px 0 0; font-size: 0.8125rem; }
.share-comments-feedback.is-ok { color: var(--green, #16a34a); }
.share-comments-feedback.is-err { color: var(--danger, #dc2626); }
.share-comments-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.share-comment-item { scroll-margin-top: 96px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius) + 2px) calc(var(--radius) + 2px) calc(var(--radius) + 2px) calc(var(--radius-sm) - 4px); padding: 12px 14px; background: color-mix(in srgb, var(--panel, #fff) 96%, #000 4%); box-shadow: 0 4px 14px rgba(15, 23, 42, .04); }
.share-comment-head { display: grid; grid-template-columns: var(--share-comment-avatar-size, 40px) minmax(0, 1fr) auto; align-items: center; gap: 9px; margin-bottom: 7px; min-width: 0; }
.share-comment-head-main { min-width: 0; }
.share-comment-head-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 5px 8px; min-width: 0; }
.share-comment-head b { font-size: 0.875rem; }
.share-comment-head time { font-size: 0.75rem; color: var(--muted, #6b7280); }
.share-comment-head > .share-comment-reply-btn { grid-column: 3; justify-self: end; margin-left: 0; }
.share-comments-panel[data-avatar-enabled="0"] .share-comment-head { grid-template-columns: minmax(0, 1fr) auto; }
.share-comments-panel[data-avatar-enabled="0"] .share-comment-head > .share-comment-reply-btn { grid-column: 2; }
.share-comments-panel[data-avatar-size="32"] { --share-comment-avatar-size: 32px; }
.share-comments-panel[data-avatar-size="40"] { --share-comment-avatar-size: 40px; }
.share-comments-panel[data-avatar-size="48"] { --share-comment-avatar-size: 48px; }
.share-comment-avatar { display: inline-flex; align-items: center; justify-content: center; width: var(--share-comment-avatar-size, 40px); height: var(--share-comment-avatar-size, 40px); flex: 0 0 var(--share-comment-avatar-size, 40px); overflow: hidden; border: 2px solid color-mix(in srgb, var(--panel, #fff) 82%, var(--primary, #4f7cff) 18%); border-radius: 50%; background: var(--primary, #4f7cff); color: #fff; font-size: calc(var(--share-comment-avatar-size, 40px) * .42); font-weight: 700; line-height: 1; user-select: none; }
.share-comment-avatar img { display: block; width: 100%; height: 100%; object-fit: cover; }
.share-comment-avatar-letter { display: block; transform: translateY(-1px); }
.share-comment-avatar.is-tone-0 { background: var(--primary); }
.share-comment-avatar.is-tone-1 { background: #8b5cf6; }
.share-comment-avatar.is-tone-2 { background: #0ea5a4; }
.share-comment-avatar.is-tone-3 { background: #f97316; }
.share-comment-avatar.is-tone-4 { background: #e11d48; }
.share-comment-avatar.is-tone-5 { background: #0891b2; }
.share-comments-panel[data-avatar-background="soft"] .share-comment-avatar { background: color-mix(in srgb, var(--primary, #4f7cff) 14%, var(--panel, #fff)); border-color: color-mix(in srgb, var(--primary, #4f7cff) 28%, var(--border, #e5e7eb)); color: var(--primary, #4f7cff); }
.share-comments-panel[data-avatar-background="mono"] .share-comment-avatar { background: color-mix(in srgb, var(--muted, #6b7280) 18%, var(--panel, #fff)); border-color: color-mix(in srgb, var(--muted, #6b7280) 34%, var(--border, #e5e7eb)); color: var(--text, #1f2937); }
.share-comments-panel .share-comment-avatar, .share-comments-panel[data-avatar-background="soft"] .share-comment-avatar, .share-comments-panel[data-avatar-background="mono"] .share-comment-avatar { background: transparent; border-color: transparent; box-shadow: none; color: var(--primary, #4f7cff); }
.share-comments-panel .share-comment-avatar.has-image img { background: transparent; }
.share-comment-reply .share-comment-avatar { width: calc(var(--share-comment-avatar-size, 40px) * .82); height: calc(var(--share-comment-avatar-size, 40px) * .82); flex-basis: calc(var(--share-comment-avatar-size, 40px) * .82); font-size: calc(var(--share-comment-avatar-size, 40px) * .34); }
.share-comment-content { min-width: 0; max-width: 100%; font-size: 0.875rem; line-height: 1.7; overflow-wrap: anywhere; word-break: break-word; }
.share-comment-content-body { min-width: 0; max-width: 100%; overflow-wrap: anywhere; }
.share-comment-content-body.is-collapsed { position: relative; max-height: 190px; overflow: hidden; }
.share-comment-content-body.is-collapsed::after { position: absolute; right: 0; bottom: 0; left: 0; height: 54px; background: linear-gradient(to bottom, transparent, var(--panel, #fff)); content: ''; pointer-events: none; }
.share-comment-content-toggle { display: inline-flex; align-items: center; min-height: 30px; margin-top: 5px; padding: 2px 10px; border: 1px solid color-mix(in srgb, var(--primary, #4f7cff) 30%, var(--border, #e5e7eb)); border-radius: 999px; background: color-mix(in srgb, var(--primary, #4f7cff) 7%, var(--panel, #fff)); color: var(--primary, #4f7cff); font-size: 0.75rem; cursor: pointer; }
.share-comment-content-toggle:hover { border-color: var(--primary, #4f7cff); background: color-mix(in srgb, var(--primary, #4f7cff) 14%, var(--panel, #fff)); }
.share-comment-content p { margin: 4px 0; }
.share-comment-content p:first-child { margin-top: 0; }
.share-comment-content h1, .share-comment-content h2, .share-comment-content h3, .share-comment-content h4, .share-comment-content h5, .share-comment-content h6 { margin: 10px 0 4px; font-weight: 600; line-height: 1.4; }
.share-comment-content h1 { font-size: 1.125rem; } .share-comment-content h2 { font-size: 1rem; } .share-comment-content h3 { font-size: 0.9375rem; } .share-comment-content h4, .share-comment-content h5, .share-comment-content h6 { font-size: 0.875rem; }
.share-comment-content ul, .share-comment-content ol { margin: 4px 0; padding-left: 22px; }
.share-comment-content li { margin: 2px 0; }
.share-comment-content blockquote { margin: 6px 0; padding: 4px 12px; border-left: 3px solid var(--border, #e5e7eb); color: var(--muted, #6b7280); }
.share-comment-content code { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 0.78125rem; background: color-mix(in srgb, var(--muted, #6b7280) 10%, transparent); border-radius: 4px; padding: 1px 5px; }
.share-comment-content pre { margin: 6px 0; padding: 10px 12px; background: color-mix(in srgb, var(--panel, #fff) 90%, #000 6%); border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); overflow-x: auto; }
.share-comment-content pre code { background: none; padding: 0; font-size: 0.78125rem; }
.share-comment-content img { display: block; width: auto; max-width: 100%; max-height: none; border-radius: calc(var(--radius-sm) - 4px); object-fit: contain; }
.share-comment-content img.share-comment-inline-image.is-previewable { cursor: zoom-in; }
.share-comment-image-load-error { display: inline-flex; align-items: center; gap: 8px; min-height: 34px; max-width: 100%; padding: 6px 10px; border: 1px dashed color-mix(in srgb, var(--red, #ef4444) 50%, var(--border, #e5e7eb)); border-radius: calc(var(--radius-sm) - 2px); color: var(--red, #ef4444); background: color-mix(in srgb, var(--red, #ef4444) 7%, var(--panel, #fff)); font-size: 0.75rem; overflow-wrap: anywhere; }
.share-comment-image-retry { min-height: 28px; padding: 3px 8px; border: 1px solid color-mix(in srgb, var(--red, #ef4444) 48%, var(--border, #e5e7eb)); border-radius: calc(var(--radius-sm) - 4px); color: var(--red, #ef4444); background: var(--panel, #fff); font-size: 0.75rem; cursor: pointer; }
.share-comment-image-retry:hover { color: #fff; border-color: var(--red, #ef4444); background: var(--red, #ef4444); }
.share-comments-panel[data-md-image-thumbnail="1"][data-md-image-width]:not([data-md-image-width="0"]) .share-comment-content img.share-comment-inline-image { max-width: min(100%, var(--share-comment-md-image-max-width, 720px)); }
.share-comments-panel[data-md-image-thumbnail="1"][data-md-image-height]:not([data-md-image-height="0"]) .share-comment-content img.share-comment-inline-image { max-height: var(--share-comment-md-image-max-height, 520px); }
.share-comment-content a { color: var(--primary, #4f7cff); text-decoration: none; }
.share-comment-content a:hover { text-decoration: none; }
.share-comment-attachments { margin-top: 6px; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.share-comment-attach { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); padding: 4px 10px; font-size: 0.78125rem; color: var(--muted, #6b7280); text-decoration: none; max-width: 260px; }
.share-comment-attach:hover { border-color: var(--primary, #4f7cff); color: var(--primary, #4f7cff); }
.share-comment-attach small { opacity: .7; }
.share-comment-attach-image { padding: 3px; }
.share-comment-attach-image img { display: block; max-width: 96px; max-height: 96px; border-radius: calc(var(--radius-sm) - 4px); object-fit: cover; }
.share-comment-attachment-inline-note { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; background: color-mix(in srgb, var(--primary, #4f7cff) 7%, var(--panel, #fff)); }
.share-comment-attachment-guest { white-space: nowrap; }
.share-comment-attach-del { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; min-width: 20px; margin-left: -6px; padding: 0; align-self: flex-start; border: 1px solid var(--border, #e5e7eb); border-radius: 999px; background: var(--panel, #fff); color: var(--muted, #6b7280); font-size: 0.8125rem; line-height: 1; cursor: pointer; transition: background .15s ease, border-color .15s ease, color .15s ease; }
.share-comment-attach-del:hover { border-color: #ef4444; background: #ef4444; color: #fff; }
.share-comment-attach-ref { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border: 1px dashed var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 4px); background: transparent; color: var(--muted, #6b7280); font-size: 0.71875rem; line-height: 1; cursor: pointer; transition: border-color .15s ease, color .15s ease; }
.share-comment-attach-ref:hover { border-color: var(--primary, #4f7cff); color: var(--primary, #4f7cff); }
/* 附件编辑工具条：改名 / 替换 / 排序（配色加粗提升可见度，避免被当成装饰而忽略） */
.share-comment-attach-tools { display: inline-flex; align-items: center; gap: 4px; margin-left: 4px; padding-left: 6px; border-left: 1px dashed var(--border, #e5e7eb); flex-wrap: wrap; }
.share-comment-attach-tools button { display: inline-flex; align-items: center; justify-content: center; min-width: 30px; height: 24px; padding: 0 8px; border: 1px solid color-mix(in srgb, var(--primary, #4f7cff) 38%, var(--border, #e5e7eb)); border-radius: calc(var(--radius-sm) - 4px); background: color-mix(in srgb, var(--panel, #fff) 86%, var(--primary, #4f7cff) 14%); color: var(--primary, #4f7cff); font-size: 0.75rem; font-weight: 600; line-height: 1; cursor: pointer; transition: background .15s ease, border-color .15s ease, color .15s ease; }
.share-comment-attach-tools button:hover:not(:disabled) { border-color: var(--primary, #4f7cff); background: var(--primary, #4f7cff); color: #fff; }
.share-comment-attach-tools button:disabled { opacity: .35; cursor: not-allowed; }
.share-comment-attach-tools button:focus-visible { outline: 2px solid color-mix(in srgb, var(--primary, #4f7cff) 55%, transparent); outline-offset: 1px; }
.share-comment-attach-tools .share-comment-attach-rename { max-width: 110px; }
.share-comment-attach-tools .share-comment-attach-sort { min-width: 26px; padding: 0 4px; font-size: 0.8125rem; }
/* 可管理提示：首次出现时提示有哪些操作，解决「功能存在却找不到」 */
.share-comment-attach-hint { flex-basis: 100%; font-size: 0.71875rem; line-height: 1.5; color: var(--muted, #6b7280); }
.share-comment-attach-hint b { color: var(--primary, #4f7cff); font-weight: 600; }
/* 多选批量删除 */
.share-comment-attach-pick { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; align-self: flex-start; cursor: pointer; }
.share-comment-attach-pick input { width: 16px; height: 16px; margin: 0; cursor: pointer; accent-color: var(--primary, #4f7cff); }
.share-comment-attachments-toolbar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; width: 100%; margin-top: 2px; padding-top: 6px; border-top: 1px dashed var(--border, #e5e7eb); font-size: 0.75rem; color: var(--muted, #6b7280); }
.share-comment-att-pick-all-label { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; }
.share-comment-att-pick-all-label input { width: 15px; height: 15px; margin: 0; cursor: pointer; }
.share-comment-att-bulk-del { white-space: nowrap; }
.share-comment-edit-attachments { margin-top: 8px; padding: 8px 10px; border: 1px dashed var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--panel, #fff) 97%, var(--primary, #4f7cff) 3%); }
.share-comment-edit-attachments .hint { display: block; margin-bottom: 6px; }
.share-comment-edit-att { display: inline-flex; align-items: center; gap: 4px; margin: 0 8px 6px 0; padding: 3px 8px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 4px); background: var(--panel, #fff); font-size: 0.78125rem; cursor: pointer; }
.share-comment-edit-att.is-remove { border-color: #ef4444; color: #ef4444; text-decoration: line-through; }
.share-comments-upload-label { display: inline-flex; align-items: center; gap: 6px; margin-top: 6px; font-size: 0.78125rem; color: var(--muted, #6b7280); cursor: pointer; }
.share-comments-head-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.share-comments-export-att { white-space: nowrap; }
.share-comments-upload-label input[type="file"] { max-width: 100%; }
.share-comments-md-tip { margin-top: 4px; font-size: 0.75rem; }
.share-comments-md-toolbar { display: flex; flex-wrap: wrap; gap: 4px; margin: 8px 0 6px; }
.share-comments-md-toolbar button { border: 1px solid var(--border, #e5e7eb); background: transparent; border-radius: calc(var(--radius-sm) - 4px); min-width: 30px; padding: 2px 8px; font-size: 0.78125rem; line-height: 1.6; color: var(--muted, #6b7280); cursor: pointer; transition: border-color .15s, color .15s, background .15s; }
.share-comments-md-toolbar button:hover { border-color: var(--primary, #4f7cff); color: var(--primary, #4f7cff); background: color-mix(in srgb, var(--primary, #4f7cff) 6%, transparent); }
/* ⚠️ 焦点指示：注释表单 MD 工具栏 8 个「无类裸 <button>」（functions.php 约 15079-15086 行
   共享渲染函数生成），layui.css 的 `button,input,...{outline:0}` 移除其焦点轮廓，
   :hover 规则无法覆盖键盘聚焦 → 补上与 :hover 一致的品牌色焦点环。
   特异性 (0,2,0) 压过 layui 的 (0,1,0)。 */
.share-comments-md-toolbar button:focus-visible { outline: 3px solid color-mix(in srgb, var(--primary, #4f7cff) 30%, transparent); outline-offset: 2px; border-color: var(--primary, #4f7cff); color: var(--primary, #4f7cff); }
.share-comments-md-toolbar .share-comments-md-preview { margin-left: auto; font-weight: 600; }
.share-comment-preview { margin: 6px 0; padding: 8px 12px; border: 1px dashed var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--panel, #fff) 96%, #000 3%); max-height: 260px; overflow-y: auto; }
.share-comments-md-toolbar button[data-md-block] { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; }
.share-comment-attach-badge { cursor: help; }
.share-comment-detail-row td { background: color-mix(in srgb, var(--panel, #fff) 98%, #000 2%); }
.share-comment-detail-row.is-hidden,
body.admin-page .content-review-table tr.share-comment-detail-row.is-hidden { display: none; }
.content-review-table tr.is-notification-focus > td { background: color-mix(in srgb, var(--primary, #4f7cff) 12%, var(--panel, #fff)); box-shadow: inset 3px 0 0 var(--primary, #4f7cff); animation: adminCommentFocusPulse 2.4s ease-out 1; }
.content-review-table tr.is-notification-focus-detail > td { border-left: 3px solid var(--primary, #4f7cff); }
@keyframes adminCommentFocusPulse { 0%, 45% { background: color-mix(in srgb, var(--primary, #4f7cff) 24%, var(--panel, #fff)); } 100% { background: color-mix(in srgb, var(--primary, #4f7cff) 12%, var(--panel, #fff)); } }
.share-comment-detail-block { margin-top: 10px; font-size: 0.78125rem; color: var(--muted, #6b7280); }
.share-comment-detail-block:first-child { margin-top: 0; }
.share-comment-detail-content { margin-top: 4px; white-space: pre-wrap; word-break: break-word; line-height: 1.7; }
.share-comment-detail-attachments { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 6px; }
.share-comment-detail-att { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; max-width: 420px; }
.share-comment-detail-att img { max-width: 120px; max-height: 90px; border-radius: calc(var(--radius-sm) - 4px); border: 1px solid var(--border, #e5e7eb); object-fit: cover; }
.share-comment-detail-att span.hint { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.share-comment-detail-file { display: flex; align-items: center; gap: 8px; border: 1px dashed var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 4px); padding: 6px 10px; max-width: 100%; }
.share-comment-detail-file span.hint { white-space: nowrap; }
.share-comment-detail-cell .layui-btn { flex-shrink: 0; }
.comment-admin-batchbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--panel, #fff) 96%, var(--primary, #4f7cff) 4%); }
.comment-admin-batchbar .comment-batch-title { margin-right: 4px; white-space: nowrap; }
.comment-admin-batchbar .batch-count { margin-left: auto; }
.comment-feature-migration-alert { margin: 0 0 14px; line-height: 1.7; }
.comment-feature-migration-alert a { color: inherit; font-weight: 700; text-decoration: none; }
.comment-feature-status { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 14px; padding: 10px 12px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--panel, #fff) 96%, var(--primary, #4f7cff) 6%); }
.comment-feature-status .comment-feature-status-title { font-weight: 700; margin-right: 2px; white-space: nowrap; }
.comment-feature-status .badge { white-space: nowrap; }
.comment-feature-status .hint { flex-basis: 100%; margin: 0; line-height: 1.6; }
.comment-feature-status a { color: inherit; font-weight: 700; text-decoration: none; }
.share-comment-quick-actions { min-width: 170px; }
/* 后台留言附件：缩略图预览、行内编辑操作、批量重命名/移动面板 */
.comment-att-thumb-cell { width: 84px; }
.comment-att-thumb { display: block; width: 64px; height: 64px; object-fit: cover; border-radius: calc(var(--radius-sm) - 2px); border: 1px solid var(--border, #e5e7eb); background: color-mix(in srgb, var(--panel, #fff) 92%, var(--primary, #4f7cff) 8%); }
.comment-att-fileicon { display: inline-flex; align-items: center; justify-content: center; width: 48px; height: 48px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); font-size: 1.375rem; }
.comment-att-row-actions { display: inline-flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.comment-att-rename-panel { margin: 0 0 12px; padding: 10px 12px; border: 1px dashed var(--border, #e5e7eb); border-radius: calc(var(--radius) - 2px); background: color-mix(in srgb, var(--panel, #fff) 97%, var(--primary, #4f7cff) 3%); }
.comment-att-rename-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.comment-att-rename-row input[type="text"], .comment-att-rename-row input[type="number"] { max-width: 200px; }
.comment-att-rename-row [data-rename-group] { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.comment-att-rename-row .hint { flex-basis: 100%; margin: 0; }
.share-comment-quick-actions .layui-btn { margin: 2px; }
.share-comment-detail-edit { margin-top: 10px; padding: 10px; border: 1px solid var(--border, #e5e7eb); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--panel, #fff) 97%, var(--primary, #4f7cff) 3%); }
.share-comment-detail-edit summary { cursor: pointer; color: var(--primary, #4f7cff); font-weight: 700; }
.share-comment-detail-edit-form textarea { width: 100%; box-sizing: border-box; margin: 10px 0 8px; resize: vertical; }
.share-comment-history { margin-top: 10px; padding: 10px; border: 1px solid var(--border, #e5e7eb); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--panel, #fff) 97%, var(--warning, #f59e0b) 3%); }
.share-comment-history summary { cursor: pointer; color: var(--text, #1f2937); font-weight: 700; }
.share-comment-history-list { display: grid; gap: 8px; margin-top: 10px; }
.share-comment-history-item { padding: 10px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel, #fff); }
.share-comment-history-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; color: var(--muted, #6b7280); font-size: 0.75rem; }
.share-comment-history-meta b { color: var(--text, #1f2937); }
.share-comment-history-content { margin-top: 8px; line-height: 1.7; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; }
.share-comment-history-restore { margin-top: 8px; }
.share-comment-history-panel { margin: 10px 0; padding: 10px; border: 1px solid var(--border, #e5e7eb); border-radius: var(--radius-sm); background: color-mix(in srgb, var(--panel, #fff) 97%, var(--warning, #f59e0b) 3%); }
.share-comment-history-panel[hidden] { display: none; }
.share-comment-history-title { margin-bottom: 8px; color: var(--text, #1f2937); font-weight: 700; }
.share-comment-history-panel .share-comment-history-item { margin-top: 8px; }
.share-comment-history-empty { padding: 14px 12px; border: 1px dashed var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); color: var(--muted, #6b7280); text-align: center; background: color-mix(in srgb, var(--panel, #fff) 96%, var(--muted, #6b7280) 4%); }
.share-comment-history-btn[aria-busy="true"] { opacity: .65; cursor: wait; }
@media (max-width: 768px) {
  .comment-admin-batchbar { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .comment-admin-batchbar .comment-batch-title, .comment-admin-batchbar .batch-count { grid-column: 1 / -1; margin-left: 0; }
  .comment-admin-batchbar .layui-btn { width: 100%; min-height: 42px; justify-content: center; }
  .share-comment-quick-actions { min-width: 0; }
  .comment-feature-status { gap: 6px; padding: 8px 10px; }
  .comment-feature-status .comment-feature-status-title { flex-basis: 100%; }
  .comment-feature-status .badge { display: inline-flex; align-items: center; min-height: 26px; }
  .share-comment-edit-area .share-comment-edit-actions { flex-wrap: wrap; }
  .share-comment-edit-area .share-comment-edit-actions .layui-btn { flex: 1 1 130px; min-height: 44px; justify-content: center; }
  .share-comment-edit-upload { align-items: flex-start; }
  .share-comment-attach-del { width: 26px; height: 26px; min-width: 26px; font-size: 0.9375rem; margin-left: -8px; }
  .share-comment-edit-attachments { display: flex; flex-wrap: wrap; }
  .share-comment-edit-att { width: 100%; min-height: 38px; margin-right: 0; }
  .share-comment-detail-att { max-width: 100%; }
  .share-comment-detail-att .layui-btn { min-height: 34px; }
  .share-comment-history-meta { align-items: flex-start; gap: 5px 8px; }
  .share-comment-history-restore .layui-btn { width: 100%; min-height: 42px; justify-content: center; }
  .share-comment-item { padding: 10px 11px; }
  .share-comment-head { grid-template-columns: var(--share-comment-avatar-size, 40px) minmax(0, 1fr); align-items: start; gap: 7px 8px; }
  .share-comment-head > .share-comment-reply-btn { grid-column: 2; grid-row: 2; justify-self: start; margin-top: 1px; }
  .share-comments-panel[data-avatar-enabled="0"] .share-comment-head { grid-template-columns: minmax(0, 1fr); }
  .share-comments-panel[data-avatar-enabled="0"] .share-comment-head > .share-comment-reply-btn { grid-column: 1; }
  .share-comment-head-meta { gap: 4px 6px; }
  .share-comment-head time { overflow-wrap: anywhere; }
  .share-comment-actions > button { min-height: 34px; padding-inline: 10px; }
}
.share-comments-lightbox { position: fixed; inset: 0; z-index: 1200; display: flex; align-items: center; justify-content: center; background: rgba(10, 12, 18, .82); cursor: zoom-out; }
.share-comments-lightbox.is-hidden { display: none; }
.share-comments-lightbox img { max-width: calc(100vw - 28px); max-height: calc(100dvh - 100px); border-radius: calc(var(--radius-sm) - 2px); box-shadow: 0 12px 48px rgba(0, 0, 0, .55); cursor: default; object-fit: contain; touch-action: pan-y; }
.share-comments-lightbox-close { position: absolute; top: 14px; right: 16px; width: 38px; height: 38px; border-radius: 50%; border: none; background: rgba(255, 255, 255, .12); color: #fff; font-size: 1.375rem; line-height: 1; cursor: pointer; }
.share-comments-lightbox-close:hover { background: rgba(255, 255, 255, .25); }
.share-comments-lightbox-nav { position: absolute; top: 50%; transform: translateY(-50%); width: 42px; height: 42px; border-radius: 50%; border: none; background: rgba(255, 255, 255, .12); color: #fff; font-size: 1.625rem; line-height: 1; cursor: pointer; }
.share-comments-lightbox-prev { left: 16px; }
.share-comments-lightbox-next { right: 16px; }
.share-comments-lightbox-nav:hover { background: rgba(255, 255, 255, .25); }
.share-comments-lightbox-counter { position: absolute; bottom: 14px; left: 50%; transform: translateX(-50%); color: rgba(255, 255, 255, .85); font-size: 0.8125rem; background: rgba(0, 0, 0, .35); padding: 3px 10px; border-radius: 999px; }
.share-comments-lightbox-toolbar { position: absolute; bottom: 46px; left: 50%; transform: translateX(-50%); display: inline-flex; align-items: center; gap: 6px; padding: 6px; border: 1px solid rgba(255, 255, 255, .16); border-radius: calc(var(--radius) - 2px); background: rgba(0, 0, 0, .42); backdrop-filter: blur(8px); }
.share-comments-lightbox-action { min-width: 34px; min-height: 32px; padding: 3px 8px; border: 1px solid rgba(255, 255, 255, .18); border-radius: calc(var(--radius-sm) - 3px); color: #fff; background: rgba(255, 255, 255, .1); font-size: 0.875rem; cursor: pointer; }
.share-comments-lightbox-action:hover { background: rgba(255, 255, 255, .24); }
.share-comments-lightbox-scale { min-width: 52px; font-size: 0.75rem; }
.share-comments-lightbox-copy { min-width: 68px; font-size: 0.75rem; }
.share-comments-lightbox-download { min-width: 68px; font-size: 0.75rem; }
.share-comments-lightbox-error { position: absolute; top: 50%; left: 50%; display: none; transform: translate(-50%, -50%); padding: 8px 12px; border-radius: calc(var(--radius-sm) - 2px); color: #fff; background: rgba(180, 30, 30, .76); font-size: 0.8125rem; }
.share-comments-lightbox.has-error .share-comments-lightbox-error { display: inline-flex; }
.share-comments-lightbox.has-error img { opacity: .18; }
.share-comments-lightbox-loading { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); padding: 8px 12px; border-radius: calc(var(--radius-sm) - 2px); color: #fff; background: rgba(0, 0, 0, .48); font-size: 0.8125rem; }
.share-comments-lightbox:not(.is-loading) .share-comments-lightbox-loading { display: none; }
.share-comments-lightbox-meta { position: absolute; top: 16px; left: 50%; max-width: calc(100vw - 100px); transform: translateX(-50%); color: rgba(255, 255, 255, .86); background: rgba(0, 0, 0, .36); padding: 4px 10px; border-radius: 999px; font-size: 0.75rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 640px) { .share-comments-lightbox { padding: 48px 8px 82px; } .share-comments-lightbox-nav { width: 34px; height: 34px; font-size: 1.25rem; } .share-comments-lightbox-close { width: 32px; height: 32px; font-size: 1.125rem; } .share-comments-lightbox-counter { bottom: 10px; } .share-comments-lightbox-toolbar { bottom: 42px; max-width: calc(100vw - 16px); gap: 4px; padding: 5px; } .share-comments-lightbox-action { min-width: 32px; min-height: 34px; padding-inline: 6px; } }
.share-comments-empty { margin: 4px 0; }
.share-comment-floor { font-size: 0.75rem; color: var(--muted, #6b7280); background: color-mix(in srgb, var(--muted, #6b7280) 12%, transparent); border-radius: calc(var(--radius-sm) - 4px); padding: 1px 7px; font-weight: 600; }
.share-comment-reply-btn { margin-left: auto; flex: 0 0 auto; }
.share-comment-replies-toggle { margin-top: 8px; border-style: dashed; color: var(--primary, #4f7cff); }
.share-comment-replies-toggle[aria-expanded="true"] { color: var(--muted, #6b7280); }
.share-comment-replies { list-style: none; margin: 8px 0 0; padding: 8px 10px; border-left: 3px solid var(--border, #e5e7eb); background: color-mix(in srgb, var(--panel, #fff) 92%, #000 3%); border-radius: 0 calc(var(--radius-sm) - 2px) calc(var(--radius-sm) - 2px) 0; display: grid; gap: 8px; }
.share-comment-replies.is-collapsed { border-bottom-style: dashed; }
.share-comment-reply { scroll-margin-top: 96px; padding: 2px 0; border-radius: calc(var(--radius-sm) - 2px); }
.share-comment-reply[hidden] { display: none !important; }
.share-comment-reply-tag { font-size: 0.75rem; color: var(--muted, #6b7280); }
.share-comments-reply-form { margin-top: 8px; }
.share-comment-reply-target { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 8px 0; padding: 8px 10px; border: 1px solid color-mix(in srgb, var(--primary, #4f7cff) 28%, var(--border, #e5e7eb)); border-radius: calc(var(--radius-sm) - 2px); background: color-mix(in srgb, var(--primary, #4f7cff) 8%, var(--panel, #fff)); color: var(--text, #1f2937); font-size: 0.8125rem; }
.share-comment-reply-target small { flex: 1 1 100%; min-width: 0; overflow: hidden; color: var(--muted, #6b7280); text-overflow: ellipsis; white-space: nowrap; }
.share-comment-reply-target-clear { margin-left: auto; border: 0; background: transparent; color: var(--primary, #4f7cff); cursor: pointer; font-size: 0.75rem; }
.share-comment-reply-quote { display: grid; gap: 3px; margin: 6px 0 8px; padding: 7px 10px; border-left: 3px solid color-mix(in srgb, var(--primary, #4f7cff) 45%, var(--border, #e5e7eb)); background: color-mix(in srgb, var(--muted, #6b7280) 7%, transparent); color: var(--muted, #6b7280); font-size: 0.75rem; line-height: 1.5; }
.share-comment-reply-quote span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.share-comments-more { margin-top: 10px; }
.share-comment-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 6px; }
.share-comment-actions > button { margin-left: 0; }
.share-comment-like { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--border, #e5e7eb); background: transparent; border-radius: 999px; padding: 2px 10px; font-size: 0.75rem; color: var(--muted, #6b7280); cursor: pointer; transition: border-color .15s, color .15s, background .15s; }
.share-comment-like:hover { border-color: var(--primary, #4f7cff); color: var(--primary, #4f7cff); }
.share-comment-like.is-liked { background: color-mix(in srgb, var(--primary, #4f7cff) 10%, transparent); border-color: var(--primary, #4f7cff); color: var(--primary, #4f7cff); }
.share-comment-like:disabled { opacity: .6; cursor: wait; }
.share-comment-like-count { font-weight: 600; }
.share-comment-owner { color: #c18403; background: color-mix(in srgb, #f59e0b 12%, transparent); border-color: color-mix(in srgb, #f59e0b 35%, transparent); font-size: 0.75rem; }
.share-comment-report-btn { margin-left: 10px; border: none; background: none; color: var(--muted, #6b7280); font-size: 0.75rem; cursor: pointer; padding: 2px 6px; border-radius: calc(var(--radius-sm) - 4px); transition: color .15s, background .15s; }
.share-comment-report-btn:hover { color: var(--danger, #dc2626); background: color-mix(in srgb, var(--danger, #dc2626) 8%, transparent); }
.share-comment-report-btn:disabled { opacity: .55; cursor: default; }
.share-comments-report-form { margin-top: 8px; }
.share-comments-report-form select { max-width: 130px; flex: 0 0 auto; }
.share-comments-report-form input[name="note"] { flex: 1 1 auto; min-width: 0; }
.share-comment-report-badge { margin-top: 4px; cursor: help; }
.share-comment-pinned { margin-left: 2px; }
.share-comment-pin-btn { margin-left: 10px; border: 1px solid var(--border, #e5e7eb); background: transparent; border-radius: calc(var(--radius-sm) - 4px); color: var(--muted, #6b7280); font-size: 0.75rem; cursor: pointer; padding: 2px 8px; transition: color .15s, border-color .15s, background .15s; }
.share-comment-pin-btn:hover { border-color: var(--primary, #4f7cff); color: var(--primary, #4f7cff); background: color-mix(in srgb, var(--primary, #4f7cff) 6%, transparent); }
.share-comment-pin-btn:disabled { opacity: .6; cursor: wait; }
.share-comment-copy-link.is-copied { border-color: var(--green, #16a34a); background: color-mix(in srgb, var(--green, #16a34a) 10%, transparent); color: var(--green, #16a34a); }
.share-comment-anchor-target { animation: share-comment-anchor-pulse 1.1s ease-in-out 2; outline: 3px solid color-mix(in srgb, var(--primary, #4f7cff) 38%, transparent); outline-offset: 3px; background: color-mix(in srgb, var(--panel, #fff) 84%, var(--primary, #4f7cff) 16%); }
@keyframes share-comment-anchor-pulse { 0%, 100% { box-shadow: 0 4px 14px rgba(15, 23, 42, .04); } 50% { box-shadow: 0 0 0 8px color-mix(in srgb, var(--primary, #4f7cff) 16%, transparent); } }
.share-comment-delete-btn:hover { border-color: var(--danger, #e5484d); color: var(--danger, #e5484d); background: color-mix(in srgb, var(--danger, #e5484d) 6%, transparent); }
.share-comment-edit-btn:hover { border-color: var(--primary, #4f7cff); color: var(--primary, #4f7cff); background: color-mix(in srgb, var(--primary, #4f7cff) 6%, transparent); }
.share-comment-edited { font-size: 0.75rem; color: var(--muted, #6b7280); background: transparent; border: 1px dashed var(--border, #e5e7eb); margin-left: 2px; }
.share-comment-edit-area { margin-top: 8px; }
.share-comment-edit-input { width: 100%; min-height: 90px; box-sizing: border-box; padding: 8px 10px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); font: inherit; line-height: 1.6; resize: vertical; }
.share-comment-edit-actions { display: flex; gap: 8px; margin-top: 6px; }
.share-comment-edit-area .share-comments-upload-label { display: flex; flex-wrap: wrap; margin-top: 8px; }
.share-comment-edit-upload { font-size: 0.78125rem; }
.share-comment-edit-area .share-comments-upload-preview { margin-top: 6px; }
.share-comment-edit-area .share-comment-edit-actions .layui-btn { min-height: 36px; }
.share-comments-filter { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; }
.share-comments-filter-input { flex: 1 1 200px; min-width: 0; padding: 7px 10px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); font: inherit; font-size: 0.8125rem; background: transparent; color: inherit; }
.share-comments-filter-input:focus { outline: none; border-color: var(--primary, #4f7cff); }
.share-comments-filter-sort { min-height: 38px; padding: 7px 34px 7px 10px; border: 1px solid var(--border, #e5e7eb); border-radius: calc(var(--radius-sm) - 2px); background: var(--panel, #fff); color: inherit; font: inherit; font-size: 0.8125rem; }
.share-comments-filter .layui-btn { min-height: 38px; }
.share-comments-filter-owner { display: inline-flex; align-items: center; gap: 5px; font-size: 0.8125rem; color: var(--muted, #6b7280); cursor: pointer; white-space: nowrap; }
.share-comments-filter-empty { margin-top: 6px; }
@media (max-width: 640px) {
  .share-comments-input-row { flex-direction: column; align-items: stretch; }
  .share-comments-input-row .layui-btn { min-height: 44px; }
  .share-comments-filter { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
  .share-comments-filter-input, .share-comments-filter-sort { grid-column: 1 / -1; width: 100%; min-height: 44px; box-sizing: border-box; }
  .share-comments-filter .layui-btn { width: 100%; min-height: 44px; justify-content: center; }
  .share-comments-filter-owner { grid-column: 1 / -1; min-height: 44px; white-space: normal; }
  .share-comment-replies-toggle { width: 100%; min-height: 44px; justify-content: center; }
  .share-comment-reply-target { align-items: flex-start; }
  .share-comment-reply-target-clear { min-height: 34px; padding: 6px 8px; }
  .share-comment-reply-quote span { white-space: normal; overflow-wrap: anywhere; }
}
/* 留言附件编辑与批量：手机端触控与换行适配 */
@media (max-width: 768px) {
  .share-comment-attach-tools { flex-basis: 100%; margin-left: 0; gap: 6px; }
  .share-comment-attach-tools button { min-width: 44px; height: 30px; font-size: 0.78125rem; }
  .share-comment-attach-pick { width: 30px; height: 30px; }
  .share-comment-attach-pick input { width: 19px; height: 19px; }
  .share-comment-attachments-toolbar { gap: 10px; }
  .share-comment-att-pick-all-label { min-height: 30px; }
  .share-comment-att-pick-all-label input { width: 19px; height: 19px; }
  .share-comment-att-bulk-del { min-height: 34px; }
}
@media (max-width: 540px) {
  /* 窄屏下重命名/移动参数面板：输入框整行铺开，按钮保持易点按 */
  .comment-att-rename-row { flex-direction: column; align-items: stretch; }
  .comment-att-rename-row input[type="text"], .comment-att-rename-row input[type="number"],
  .comment-att-rename-row select, .comment-att-rename-row .layui-btn { width: 100%; max-width: none; min-height: 40px; }
  .comment-att-rename-row [data-rename-group] { flex-direction: column; align-items: stretch; width: 100%; }
  .comment-att-thumb { width: 56px; height: 56px; }
  .comment-att-row-actions { gap: 6px; }
  .comment-att-row-actions .layui-btn { min-height: 34px; }
}
/* 后台「留言板与附件」设置面板：手机端输入与按钮适配 */
.comment-settings-panel h4 { margin: 18px 0 8px; padding-left: 10px; border-left: 3px solid var(--primary, #4f7cff); font-size: 0.9375rem; }
.comment-settings-panel .panel-head { flex-wrap: wrap; gap: 8px; }
.comment-settings-panel .panel-head a.layui-btn { min-height: 34px; }
.comment-upload-types-field input[type="text"] { width: 100%; }
.comment-upload-number-field input[type="number"] { width: 100%; box-sizing: border-box; }
.comment-upload-unlimited-tip { margin: 8px 0 0; }
@media (max-width: 640px) {
  .comment-settings-panel h4 { margin-top: 14px; font-size: 0.875rem; }
  .comment-settings-panel .panel-head a.layui-btn { flex: 1 1 46%; min-height: 44px; justify-content: center; }
  .comment-settings-panel .settings-toggle-item { min-height: 44px; align-items: center; }
  .comment-settings-panel select, .comment-settings-panel input[type="text"] { min-height: 40px; }
}
/* 留言内容、回复与头像的统一窄屏兜底 */
.share-comment-head-main, .share-comment-content, .share-comment-reply-quote, .share-comment-actions { min-width: 0; max-width: 100%; }
.share-comment-reply .share-comment-head { align-items: start; }
.share-comment-reply .share-comment-head > .share-comment-reply-btn { grid-column: 3; }
@media (max-width: 640px) {
  .share-comment-head { grid-template-columns: var(--share-comment-avatar-size, 40px) minmax(0, 1fr); align-items: start; }
  .share-comments-panel[data-avatar-enabled="0"] .share-comment-head { grid-template-columns: minmax(0, 1fr); }
  .share-comment-head > .share-comment-reply-btn, .share-comment-reply .share-comment-head > .share-comment-reply-btn { grid-column: 2; grid-row: 2; justify-self: start; max-width: 100%; }
  .share-comments-panel[data-avatar-enabled="0"] .share-comment-head > .share-comment-reply-btn { grid-column: 1; }
  .share-comment-reply .share-comment-head { grid-template-columns: calc(var(--share-comment-avatar-size, 40px) * .82) minmax(0, 1fr); }
  .share-comment-actions > button { min-height: 34px; max-width: 100%; overflow-wrap: anywhere; }
  .share-comment-attach-tools { width: 100%; margin-left: 0; padding-left: 0; border-left: 0; }
  .share-comment-content-body.is-collapsed { max-height: 160px; }
}

/* ===== 后台顶栏与侧边栏精进美化（2026-09-14 10:38） ===== */
/* 顶栏：底部品牌渐变发丝线，与整体玻璃质感呼应 */
.admin-page .admin-top { position: relative; }
.admin-page .admin-top::after {
  content: ''; position: absolute; left: 16px; right: 16px; bottom: -1px; height: 2px;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--primary) 42%, transparent) 28%, rgba(139,92,246,.42) 72%, transparent);
  border-radius: 999px; opacity: .65; pointer-events: none;
}
/* 标题分组名：前加渐变圆点装饰 */
.admin-page .admin-title-wrap .section-kicker { display: inline-flex; align-items: center; gap: 7px; }
.admin-page .admin-title-wrap .section-kicker::before {
  content: ''; width: 6px; height: 6px; border-radius: 50%; flex: 0 0 auto;
  background: linear-gradient(135deg, var(--grad-a, #4f7cff), var(--grad-b, #8b5cf6));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 16%, transparent);
}
/* 顶栏操作按钮：hover 轻微上浮 + 光晕 */
.admin-page .admin-top-actions .admin-front-action:hover,
.admin-page .admin-top-actions .admin-cache-action:hover,
.admin-page .admin-top-actions .admin-refresh-action:hover,
.admin-page .admin-top-actions .admin-fullscreen-action:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 14px color-mix(in srgb, var(--primary) 16%, transparent);
}
/* 侧边栏：品牌图标光晕增强 */
.admin-page .sidebar .brand-icon {
  box-shadow: 0 10px 22px color-mix(in srgb, var(--primary) 34%, transparent), inset 0 1px 0 rgba(255,255,255,.42);
}
/* 侧边栏导航：当前项左侧渐变指示条 */
.admin-page .sidebar nav .nav-group-items .nav-entry > a,
.admin-page .sidebar nav .nav-item.has-sub .nav-row > a { position: relative; }
.admin-page .sidebar nav a.on::before {
  content: ''; position: absolute; left: 7px; top: 50%; transform: translateY(-50%);
  width: 3px; height: 16px; border-radius: 999px;
  background: linear-gradient(180deg, var(--grad-a, #4f7cff), var(--grad-b, #8b5cf6));
  box-shadow: 0 0 8px color-mix(in srgb, var(--primary) 55%, transparent);
}
.admin-page .admin-layout.collapsed .sidebar nav a.on::before { display: none; }
/* 侧边栏导航项 hover：图标微亮 + 背景过渡 */
.admin-page .sidebar nav .nav-icon { transition: transform .18s ease; }
.admin-page .sidebar nav a:hover .nav-icon { transform: scale(1.08); }
/* 导航分组：hover 边框渐变 + 过渡 */
.admin-page .sidebar .nav-group { transition: background .2s, border-color .2s, box-shadow .2s; }
.admin-page .sidebar .nav-group:hover { border-color: rgba(99,126,255,.3); box-shadow: 0 2px 10px color-mix(in srgb, var(--primary) 6%, transparent); }
/* 搜索框聚焦：光晕与内阴影统一 */
.admin-page .sidebar .nav-search:focus-within { box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 18%, transparent), 0 2px 12px color-mix(in srgb, var(--primary) 10%, transparent); }
/* 侧边栏滚动条：细条圆角半透明 */
.admin-page .sidebar { scrollbar-width: thin; scrollbar-color: rgba(120,140,180,.3) transparent; }
.admin-page .sidebar::-webkit-scrollbar { width: 8px; }
.admin-page .sidebar::-webkit-scrollbar-track { background: transparent; }
.admin-page .sidebar::-webkit-scrollbar-thumb { background: rgba(120,140,180,.24); border-radius: 999px; border: 2px solid transparent; background-clip: padding-box; }
.admin-page .sidebar::-webkit-scrollbar-thumb:hover { background: rgba(120,140,180,.42); background-clip: padding-box; }
/* 侧边栏底部：渐变分隔线 + 徽标圆点 */
.admin-page .sidebar-foot { position: relative; }
.admin-page .sidebar-foot::before {
  content: ''; position: absolute; top: -1px; left: 16px; right: 16px; height: 1px;
  background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--primary) 45%, transparent), transparent);
}
.admin-page .sidebar-foot-kicker { display: inline-flex; align-items: center; gap: 6px; }
.admin-page .sidebar-foot-kicker::before {
  content: ''; width: 5px; height: 5px; border-radius: 50%; flex: 0 0 auto;
  background: linear-gradient(135deg, var(--grad-a, #4f7cff), var(--grad-b, #8b5cf6));
  box-shadow: 0 0 6px color-mix(in srgb, var(--primary) 75%, transparent);
}

/* 浅色主题兜底：确保后台美化规则不会把侧边栏和搜索框覆盖回深色。 */
html[data-theme="light"] body.admin-page .sidebar {
  background: var(--sb-bg) !important;
  color: var(--sb-text) !important;
}
html[data-theme="light"] body.admin-page .sidebar .brand,
html[data-theme="light"] body.admin-page .sidebar .nav-search,
html[data-theme="light"] body.admin-page .sidebar .nav-quick {
  background: var(--sb-brand-bg, var(--sb-chip)) !important;
  color: var(--sb-text) !important;
}
html[data-theme="light"] body.admin-page .sidebar .nav-group {
  background: color-mix(in srgb, var(--sb-strong) 3%, transparent) !important;
}

/* 后台公共顶栏固定：页面滚动时顶栏保持可见，内容区按侧边栏与顶栏避让。 */
html[data-theme="light"] body.admin-page {
  --admin-top-offset: 82px;
}
html[data-theme="dark"] body.admin-page {
  --admin-top-offset: 82px;
}
body.admin-page .admin-top {
  position: fixed;
  top: 12px;
  left: calc(var(--admin-sidebar-w, 248px) + 22px);
  right: 22px;
  z-index: 880;
  box-sizing: border-box;
  margin: 0;
}
html[data-theme="light"] body.admin-page .admin-top,
html[data-theme="dark"] body.admin-page .admin-top {
  position: fixed;
}
body.admin-page .admin-layout.collapsed .admin-top {
  left: 86px;
}
body.admin-page .admin-main {
  padding-top: calc(24px + var(--admin-top-offset, 82px));
}
body.admin-page .admin-layout.collapsed ~ .admin-main,
body.admin-page .admin-layout.collapsed .admin-main {
  padding-top: calc(24px + var(--admin-top-offset, 82px));
}
@media (max-width: 768px) {
  body.admin-page {
    --admin-top-offset: 76px;
  }
  body.admin-page .admin-top {
    top: 8px;
    left: 12px;
    right: 12px;
    border-radius: var(--radius);
  }
  body.admin-page .admin-layout.collapsed .admin-top {
    left: 12px;
  }
  body.admin-page .admin-main,
  body.admin-page .admin-layout.collapsed .admin-main {
    padding-top: calc(12px + var(--admin-top-offset, 76px));
  }
}

/* ============================================================
   layui 外观桥接层（全局）
   目的：让项目既有 .btn / .link-btn 系列直接呈现 layui 组件外观
   （2px 圆角、扁平无渐变、无阴影、无光泽扫过、尺寸对齐 layui），
   从而在不改动 795 处 HTML 类名、不破坏 566 条既有规则与
   common.js 图标注入的前提下，全站统一为 layui 视觉语言。
   真实 layui 组件（.layui-btn 等）不受影响，两者并存。
   说明：本层置于 style.css 末尾，同特异性规则按顺序覆盖既有定义；
   页面级高特异性规则（如 .cleanup-submit-actions .btn）仍优先，
   故手机端 44px 触控等既有适配保持不变。
   ============================================================ */

/* 基础几何：对齐 layui（圆角 2px、扁平、无光泽） */
.layui-btn {
  border-radius: 2px;
  min-height: 38px;
  padding: 0 18px;
  font-size: 0.875rem;
  font-weight: 400;
  letter-spacing: 0;
  box-shadow: none;
  background-image: none;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
.layui-btn::before { display: none; }               /* 去掉悬停光泽扫过 */
.layui-btn:hover { box-shadow: none; transform: none; }
.layui-btn:active { transform: none; }
.layui-btn:disabled { background: #c9cdd4; box-shadow: none; }

/* 实心按钮：颜色交还**项目品牌变量**（不要照搬 layui 蓝 #1E9FFF）
   ⚠️ 项目第 682 行本就有 `.layui-btn-normal{background:linear-gradient(135deg,
   var(--grad-a),var(--grad-b))}`（**品牌渐变**），但本层早期硬编码 #1e9fff 且更靠后，
   **把品牌渐变整个抹掉**（探针实测 background-image=none、bg=rgb(30,159,255)）。
   用户配置的「全站主色/强调色」对主按钮完全失效。此处改为复用项目变量：
   · .layui-btn-normal 用项目**品牌渐变**（与项目原规则一致，保留 layui 的实心观感）
   · .layui-btn（默认实心）用项目主色 var(--primary) */
.layui-btn,
.layui-btn-normal { background-color: var(--primary); color: #fff; }
.layui-btn-normal { background-image: linear-gradient(135deg, var(--grad-a), var(--grad-b)); }
.layui-btn:hover,
.layui-btn-normal:hover { background-color: color-mix(in srgb, var(--primary) 86%, #000); color: #fff; }
.layui-btn-normal:hover { background-image: linear-gradient(135deg, color-mix(in srgb, var(--grad-a) 86%, #000), color-mix(in srgb, var(--grad-b) 86%, #000)); }
/* ⚠️ 必须用 body 前缀提权到 (0,1,1)：layui.css 自身定义了 .layui-btn{background-color:#1E9FFF}
   与 .layui-btn-normal{background-color:#1E9FFF}，且在 style.css **之后**加载 —— 同特异性
   (0,1,0) 下 layui 胜（探针实测危险按钮即因此仍为 layui 橙红）。 */
body .layui-btn,
body .layui-btn-normal { background-color: var(--primary); color: #fff; }
body .layui-btn-normal { background-image: linear-gradient(135deg, var(--grad-a), var(--grad-b)); }
body .layui-btn:hover,
body .layui-btn-normal:hover { background-color: color-mix(in srgb, var(--primary) 86%, #000); color: #fff; }
body .layui-btn-normal:hover { background-image: linear-gradient(135deg, color-mix(in srgb, var(--grad-a) 86%, #000), color-mix(in srgb, var(--grad-b) 86%, #000)); }

/* 次要按钮：对齐 layui 默认按钮（白底 + #d2d2d2 边框 + #5f5f5f 文字）
   注：边框/文字色沿用 layui 的中性灰（非品牌色，无项目对应配置项），仅悬停强调色用项目主色 */
.layui-btn-primary {
  background: transparent;
  color: #5f5f5f;
  border: 1px solid #d2d2d2;
  box-shadow: none;
}
.layui-btn-primary:hover {
  background: transparent;
  /* 悬停强调色用项目主色变量（原硬编码 layui 青绿，会让次要按钮悬停脱离用户品牌色） */
  border-color: var(--primary);
  color: var(--text);
  box-shadow: none;
}
.layui-btn-primary:focus-visible,
.layui-btn-primary:focus { outline: 2px solid color-mix(in srgb, var(--primary) 45%, transparent); outline-offset: 2px; box-shadow: none; }

/* 危险按钮：颜色用**项目危险色变量** var(--red)（= 后台「危险状态色」ui_danger_color）
   ⚠️ 项目第 690 行本就有 `.layui-btn-danger{background:var(--red)}`，但有两处覆盖：
   1) 本层早期硬编码 layui 的 #ff5722 且书写更靠后（同特异性），**覆盖了项目配置**；
   2) 即使删掉本层的硬编码，**layui.css 自身也定义了 `.layui-btn-danger{background-color:#FF5722}`**
      且它在 style.css **之后**加载 → 同特异性 (0,1,0) 下仍是 layui 胜（探针实测
      bg 仍为 rgb(255,87,34)）。
   故此处必须用 `body` 前缀把特异性提到 (0,1,1) 才能稳定压过 layui.css（同项目其他桥接规则）。 */
body .layui-btn-danger,
.layui-btn-danger { background-color: var(--red); color: #fff; }
body .layui-btn-danger:hover,
.layui-btn-danger:hover { background-color: color-mix(in srgb, var(--red) 84%, #000); color: #fff; }

/* 暗色主题下的次要按钮：保持透明底 + 深色边框，避免白底刺眼 */
[data-theme="dark"] .layui-btn-primary { border-color: #3a4254; color: #c3cad8; }
[data-theme="dark"] .layui-btn-primary:hover { background: transparent; border-color: var(--primary); color: var(--text); }

/* 尺寸档位：对齐 layui 的 sm / xs（圆角跟随项目配置，与 .layui-btn 一致） */
.layui-btn-sm { min-height: 30px; padding: 0 12px; font-size: 0.8125rem; border-radius: var(--radius-sm); }
.layui-btn-sm .action-icon { width: 14px; height: 14px; }

/* 文本按钮（link-btn / .link）保持轻量，仅统一圆角（跟随项目配置） */
.link-btn { border-radius: var(--radius-sm); }

/* ---------- 表单控件：边框 #eee、悬停 #d2d2d2、聚焦用项目主色（圆角跟随项目「界面圆角风格」配置） ---------- */
/* 注意：layui.css 含全局重置（input/select/textarea{margin:0;padding:0}，元素选择器特异性 0,0,1），
   而项目表单几何写在 input:where(...)（零特异性）里，会被 layui 重置压掉导致内边距丢失。
   故此处用 :not() 链 / body 前缀把特异性提到 0,0,1 以上，显式恢复几何，保证与未引入 layui 时一致。 */
input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]):not([type=button]):not([type=submit]):not([type=reset]),
body select,
body textarea {
  padding: 10px 13px;
  min-height: 44px;
  /* ⚠️ 圆角必须跟随项目「界面圆角风格」配置（后台可切紧凑/标准/柔和 → --radius-*）。
     本层早期硬编码 layui 的 2px，导致**同一表单行内 input(2px) 与 select/textarea(11px) 圆角不一致**，
     并覆盖了用户所选圆角风格（A/B 探针实测：加载与不加载 layui.css 结果相同，证明是本层所致）。
     项目表单控件原本就是 var(--field-radius)，此处归还。 */
  border-radius: var(--field-radius);
  border-color: #eee;
  box-shadow: none;
}
body textarea { min-height: 96px; }
body select { padding-right: 42px; }
input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]):not([type=button]):not([type=submit]):not([type=reset]):hover:not(:disabled):not(:read-only):not(:focus),
body select:hover:not(:disabled):not(:focus),
body textarea:hover:not(:disabled):not(:read-only):not(:focus) { border-color: #d2d2d2; }
input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]):not([type=button]):not([type=submit]):not([type=reset]):focus,
body select:focus,
body textarea:focus {
  /* ⚠️ 聚焦色用项目主色变量，不照搬 layui 的青绿 #16b777 —— 项目所有 focus 视觉
     都基于 var(--primary)（见 .ui-select-searchbox input:focus 等），硬编码青绿会让
     表单聚焦态脱离用户品牌色。 */
  border-color: var(--primary);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 8%, transparent);
}
input.input-invalid, select.input-invalid, textarea.input-invalid,
input:user-invalid, select:user-invalid, textarea:user-invalid { border-color: var(--red); }
/* ⚠️ 带 layui 控件类的元素必须与项目主题一致：layui 的
   .layui-input{height:38px;background-color:#fff;color:rgba(0,0,0,.85)} 会把项目的
   min-height:44px 与主题色 var(--text) 覆盖掉（探针实测：color rgb(35,41,54)→rgba(0,0,0,.85)、
   line-height 22.4→20.8）。故此处把 layui 类拉回项目几何与主题色。
   ⚠️ 注意两点：
   1) 必须写 `body` 前缀（layui.css 在 style.css 之后加载，同特异性后者胜）；
   2) 不能给 textarea 写 min-height:44px —— 项目 `body textarea{min-height:96px}` 特异性同为 (0,0,2)
      且书写更靠前，会被本层压成 44px（已实测踩坑）。故 textarea 单独用 96px。 */
.layui-input, .layui-select,
body .layui-input, body .layui-select {
  height: auto;
  min-height: 44px;
  padding: 10px 13px;
  line-height: 1.4;
  /* ⚠️ 背景：layui 的 .layui-input 强制 `background-color:#fff`，必须拉回主题。
     项目裸 input **从未声明 background**，用的是浏览器 UA 默认（亮色实测
     color(srgb .994667 .995608 .99749) ≈ #fdfeff），而这里写 `Field` 关键字得到
     rgb(255,255,255) —— 两者每通道差约 0.4%，**肉眼不可辨**，属可接受的近似。
     ⚠️ 不要改成 var(--panel)：亮色下 --panel 恰为纯白 #ffffff，但那只是巧合，
     一旦用户改面板色就会与裸 input 分叉；`Field` 至少与 UA 同源、随 color-scheme 联动。
     暗色主题由下方 [data-theme="dark"] 规则显式覆盖为 --panel。
     注：经本轮排查已移除全站仅存的 3 页 8 处冗余 `layui-input` 类，
     裸 input 成为唯一写法，本规则实际只服务于 layui 组件自身的兜底。 */
  background-color: Field;
  color: var(--text);
  border-color: #eee;
  /* 圆角跟随项目配置（见上方说明），保证与 select/textarea 一致 */
  border-radius: var(--field-radius);
}
.layui-textarea,
body .layui-textarea {
  height: auto;
  min-height: 96px;
  padding: 10px 13px;
  line-height: 1.4;
  background-color: Field;
  color: var(--text);
  border-color: #eee;
  border-radius: var(--field-radius);
}
body .layui-input:focus, body .layui-textarea:focus, body .layui-select:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 8%, transparent);
}
/* ⚠️ 暗色主题下必须显式覆盖背景：layui 的 .layui-input{background-color:#fff} 在暗色主题下
   会渲染成 **纯白底 + 浅色文字（var(--text)）→ 文字几乎不可见**（探针实测 bg=rgb(255,255,255)、
   color=rgb(229,233,242)）。UA 系统色 Field 在部分浏览器暗色下也不跟随主题，故直接写项目暗色面板色。 */
[data-theme="dark"] body .layui-input, [data-theme="dark"] body .layui-select, [data-theme="dark"] body .layui-textarea {
  background-color: var(--panel);
}
[data-theme="dark"] body .layui-input, [data-theme="dark"] body .layui-textarea, [data-theme="dark"] body .layui-select {
  border-color: #2f3646;
}
/* 暗色主题下的表单边框（保持与 layui 一致的克制观感） */
[data-theme="dark"] input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]):not([type=button]):not([type=submit]):not([type=reset]),
[data-theme="dark"] body select,
[data-theme="dark"] body textarea { border-color: #2f3646; }
[data-theme="dark"] input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]):not([type=button]):not([type=submit]):not([type=reset]):hover:not(:disabled):not(:read-only):not(:focus),
[data-theme="dark"] body select:hover:not(:disabled):not(:focus),
[data-theme="dark"] body textarea:hover:not(:disabled):not(:read-only):not(:focus) { border-color: #3d4658; }

/* ---------- 表格：无需桥接（保留极少量暗色适配） ----------
   ⚠️ 本层原有一组「对齐 layui」的表格规则，实测**全部有害**，已删除：
     · layui.css 的表格样式**全部限定在 .layui-table 前缀**（.layui-table/.layui-table th/td 等），
       而项目用的是 .table → **layui.css 根本不影响项目表格**（仅全局 `table{border-collapse}`
       与 `td,th{margin:0;padding:0}` 重置，而项目 .table th/td 自带 padding，不受影响）。
     · 原桥接规则与项目规则**同特异性且更靠后**，反而把项目主题变量替换成 layui 硬编码灰：
         th 背景  var(--bg)     → #fafafa   （A/B 实测 rgb(238,241,247) → rgb(250,250,250)）
         th 文字  var(--muted)  → #333      （A/B 实测 rgb(95,107,130) → rgb(51,51,51)）
         th/td 边框 var(--border) → #eee    （A/B 实测 rgb(228,231,240) → rgb(238,238,238)）
         行悬停   var(--primary-soft) → #f8f8f8（**品牌主色悬停被覆盖**）
         th 圆角  8px → var(--radius-sm)    （破坏「界面圆角风格」配置）
     全部删除后表格回到项目主题（含暗色主题），与未引入 layui 时完全一致。
   · 仅保留一条：.table-responsive 的圆角交由项目规则（原 10px），不再覆盖。 */

/* ---------- 分页：对齐 layui laypage（边框 #eee；当前页/悬停用项目主色变量） ---------- */
/* ⚠️ 分页按钮已改用 layui-btn（原 .btn 已全项目重命名），故本段直接写 .layui-btn。 */
.list-pager .layui-btn,
.list-pager.pager .layui-btn,
.pager.list-pager .layui-btn,
.pager .layui-btn {
  /* 圆角跟随项目配置（原硬编码 2px） */
  border-radius: var(--radius-sm);
  /* ⚠️ 原为固定 `height:30px; line-height:1.75rem` —— 行高为 rem，随「全站字号比例」
     放大后会超过 30px 被裁；且固定高度无法容纳换行文字。改为 min-height + 行高随字号。 */
  min-height: 30px;
  line-height: 1.4;
  min-width: 0;
  padding: 5px 15px;
  font-size: 0.75rem;
  border: 1px solid #eee;
  background: #fff;
  color: #333;
  box-shadow: none;
}
.list-pager .layui-btn:hover,
.list-pager.pager .layui-btn:hover,
.pager.list-pager .layui-btn:hover,
.pager .layui-btn:hover { color: var(--primary); border-color: #eee; background: #fff; }
/* 当前页：实心主色（对齐 .layui-laypage-em 的「实心强调」观感）
   ⚠️ 颜色用**项目主色变量**，不硬编码 layui 的 #16baaa —— 否则用户配置的
   「全站主色」ui_primary_color 对分页当前页失效（探针实测青绿恒为 rgb(22,186,170)）。 */
.list-pager .list-pager-current,
.list-pager .layui-btn.list-pager-current,
.pager .list-pager-current,
.admin-page .admin-dashboard-log-page-current {
  background: var(--primary);
  border-color: var(--primary);
  color: #fff;
}
.list-pager .layui-btn.is-disabled { opacity: .45; }
/* 跳转输入框对齐 layui 分页输入框（圆角跟随项目配置） */
.list-pager-goto input { border-radius: var(--radius-sm); border-color: #eee; min-height: 30px; height: 30px; }
[data-theme="dark"] .list-pager .layui-btn,
[data-theme="dark"] .pager.list-pager .layui-btn,
[data-theme="dark"] .pager .layui-btn { background: var(--panel); border-color: #2f3646; color: var(--text); }
[data-theme="dark"] .list-pager .layui-btn:hover,
[data-theme="dark"] .pager.list-pager .layui-btn:hover,
[data-theme="dark"] .pager .layui-btn:hover { color: var(--primary); background: var(--panel); }
/* 暗色主题下的「当前页」必须单独提权：上面的 [data-theme="dark"] .list-pager .layui-btn
   特异性为 (0,3,0)，与 .list-pager .layui-btn.list-pager-current 相同却书写更靠后，
   会把当前页的实心主色覆盖成面板色，导致「当前页」标识丢失（已用计算样式探针实测）。
   故此处用 (0,4,0) 的复合选择器压回。 */
[data-theme="dark"] .list-pager .layui-btn.list-pager-current,
[data-theme="dark"] .pager.list-pager .layui-btn.list-pager-current,
[data-theme="dark"] .pager .layui-btn.list-pager-current {
  background: var(--primary);
  border-color: var(--primary);
  color: #fff;
}
[data-theme="dark"] .list-pager-goto input { border-color: #2f3646; background: var(--panel); color: var(--text); }

/* 手机端：分页按钮保持 44px 触控（项目既有约定） */
@media (max-width: 760px) {
  .list-pager .layui-btn,
  .list-pager.pager .layui-btn,
  .pager.list-pager .layui-btn { min-height: 44px; min-width: 44px; padding: 8px 12px; }
  .list-pager-goto input { min-height: 44px; height: 44px; }
}
/* 手机端：遵循项目既有 44px 触控约定 */
@media (max-width: 760px) {
  .layui-btn { min-height: 44px; padding: 0 16px; }
  .layui-btn-sm { min-height: 38px; }
}

/* ---------- 弹层：对齐 layui layer 的几何（标题栏 50px、按钮 30px/#dedede 边框；
   颜色一律用**项目主题变量**，圆角跟随项目「界面圆角风格」配置） ---------- */
.app-dialog {
  /* ⚠️ 圆角跟随项目配置（原硬编码 layui 的 2px）：项目 .app-dialog 基础为 16px、
     手机端媒体查询为 14px，而另两套弹层（.announce-popup 16px / .code-batch-dialog 14px）
     也都是项目圆角 —— 仅此处被压成 2px，会造成**同页多个弹层圆角不一致**。
     改用 --radius-lg 后与项目其余弹层观感统一，且尊重用户在后台选的紧凑/标准/柔和。 */
  border-radius: var(--radius-lg);
  box-shadow: 1px 1px 50px rgba(0, 0, 0, .3);
  padding: 0;
  overflow: hidden;
}
.app-dialog h3 {
  margin: 0;
  padding: 0 16px;
  height: 50px;
  line-height: 3.125rem;
  font-size: 0.875rem;
  font-weight: 600;
  /* ⚠️ 文字/分隔线用项目主题变量，不照搬 layui layer 的 #333/#f0f0f0 ——
     项目 .app-dialog 标题原为 var(--text)、分隔线原为 var(--border)（见第 7344/7353 行），
     硬编码会让暗色主题下标题发灰、分隔线过亮。 */
  color: var(--text);
  border-bottom: 1px solid var(--border);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.app-dialog p { padding: 16px; margin: 0; color: var(--text); }
.app-dialog-actions {
  padding: 10px 16px 14px;
  border-top: 1px solid var(--border);
  background: var(--bg);
}
/* 弹层按钮：几何对齐 .layui-layer-btn a（30px、#dedede 中性灰边框），
   圆角跟随项目配置（原硬编码 2px） */
.app-dialog-actions .layui-btn {
  /* ⚠️ 原为固定 `height:30px; line-height:1.75rem` —— 行高为 rem，随「全站字号比例」
     放大后会超过 30px 被裁。改为 min-height + 行高随字号。 */
  min-height: 30px;
  line-height: 1.4;
  min-width: 0;
  padding: 5px 16px;
  border-radius: var(--radius-sm);
  border: 1px solid #dedede;
  background: #fff;
  color: #333;
  font-size: 0.75rem;
  font-weight: 400;
  box-shadow: none;
}
.app-dialog-actions .layui-btn-normal,
.app-dialog-actions .layui-btn:not(.layui-btn-primary):not(.layui-btn-danger) {
  border-color: transparent;
  background: var(--primary);
  color: #fff;
}
.app-dialog-actions .layui-btn-normal:hover,
.app-dialog-actions .layui-btn:not(.layui-btn-primary):not(.layui-btn-danger):hover { background: color-mix(in srgb, var(--primary) 86%, #000); color: #fff; }
.app-dialog-actions .layui-btn-danger { border-color: transparent; background: var(--red); color: #fff; }
.app-dialog-actions .layui-btn-danger:hover { background: color-mix(in srgb, var(--red) 84%, #000); color: #fff; }
.app-dialog-actions .layui-btn-primary:hover { border-color: var(--primary); color: var(--primary); background: #fff; }
[data-theme="dark"] .app-dialog { border-color: #2f3646; }
[data-theme="dark"] .app-dialog h3 { color: var(--text); border-bottom-color: #2f3646; }
[data-theme="dark"] .app-dialog-actions { border-top-color: #2f3646; background: color-mix(in srgb, var(--panel) 88%, #ffffff 4%); }
[data-theme="dark"] .app-dialog-actions .layui-btn { background: var(--panel); border-color: #2f3646; color: var(--text); }
/* 暗色主题：弹层取消按钮的 **hover 态** 补偿（必须保留）
   基础态已在上一行补了暗色覆盖（#fff → var(--panel)），但 hover 态漏了：
   12466 行 `.app-dialog-actions .layui-btn-primary:hover` 硬编码纯白 background:#fff，
   特异性 (0,3,0) 与通用暗色 hover 规则 `[data-theme="dark"] .layui-btn-primary:hover`
   （12220 行，background:transparent）**打平**，而 12466 行书写更靠后 → **12466 胜**。
   后果：暗色主题下鼠标悬停弹层取消按钮，按钮会突然变成**刺眼纯白块**
   （弹层底部为 color-mix(…var(--panel)…) 暗色），与整体暗色严重冲突。
   修法：补 hover 态的暗色覆盖，取值与通用暗色 hover（12220 行）保持一致，
   特异性 (0,4,0) > (0,3,0) → 必然胜出，与书写位置无关。**仅暗色生效，亮色零变化**。
   （判据：伪类状态无法用 getComputedStyle 实测，按约定 §30.4 用「特异性 + 源码顺序」静态判定。） */
[data-theme="dark"] .app-dialog-actions .layui-btn-primary:hover {
  background: transparent;
  border-color: var(--primary);
  color: var(--primary);
}
[data-theme="dark"] .app-dialog-actions .layui-btn-normal,
[data-theme="dark"] .app-dialog-actions .layui-btn:not(.layui-btn-primary):not(.layui-btn-danger) { background: var(--primary); border-color: transparent; color: #fff; }
/* 手机端弹层：保持既有单列按钮与 44px 触控 */
@media (max-width: 768px) {
  .app-dialog { border-radius: var(--radius); }
  .app-dialog-actions .layui-btn { min-height: 44px; padding: 8px 16px; width: 100%; }
}

/* ---------- 面板/卡片：对齐 layui card（浅阴影；圆角跟随项目「界面圆角风格」配置） ---------- */
/* ⚠️ 原硬编码 border-radius:2px 实为**死代码**（被项目 .admin-page .panel 的 (0,2,0) 覆盖，
   探针实测面板为 16px），且与项目圆角配置冲突。故直接删除该圆角声明，交由项目既有规则控制。 */
.panel {
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05);
}
.panel:hover { box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05); border-color: var(--border); }
.panel-head { margin-bottom: 14px; }

/* ============================================================
   layui.css 全局重置补偿层（必须保留）
   问题：layui.css 开头含元素级全局重置 ——
     p,ul,ol,li,h1-h6,blockquote,dd,dt,pre,div,form,table,td,th{margin:0;padding:0}
     li{list-style:none}  a{color:#333}  body{color:rgba(0,0,0,.85)}
   这些是「元素选择器（特异性 0,0,1）」规则，而项目 style.css 对 p/ul/ol/li/h1-h6 等
   几乎没有裸元素规则（仅 pre 一条），且 render_layui_assets() 输出在 style.css 之后，
   因此浏览器默认排版会被 layui 重置压掉 —— 表现为列表项目符号消失、段间距与标题边距
   被抹平、链接变灰、暗色主题下正文被强制成近黑色。
   修法：用 body 前缀把特异性提到 0,0,2 压过 layui 重置，并写入「与浏览器默认一致的
   显式值」（不用 revert，避免回退到 UA 默认导致行高/间距被放大）。
   项目自身的组件级规则（如 .panel p、.table td）特异性为 0,1,x，高于本层，仍优先。
   ============================================================ */
body p, body blockquote, body dl, body pre { margin: 1em 0; padding: 0; }
body h1 { margin: .67em 0; padding: 0; }
body h2 { margin: .83em 0; padding: 0; }
body h3 { margin: 1em 0; padding: 0; }
body h4 { margin: 1.33em 0; padding: 0; }
body h5 { margin: 1.67em 0; padding: 0; }
body h6 { margin: 2.33em 0; padding: 0; }
body ul, body ol { margin: 1em 0; padding-left: 40px; }
body li { list-style: revert; }
body dd { margin-left: 40px; padding: 0; }
body dt { margin: 0; padding: 0; }
body table { border-collapse: revert; border-spacing: revert; }
/* ⚠️ 本行原为 `color: revert; text-decoration: revert;` —— 这是**缺陷**（第 16-18 轮实测发现并修复）：
   revert 对 margin/list-style 是「还原浏览器排版」（body p/ul/li/table/img/hr 等条款实测均正常），
   但对 color 是**丢弃项目品牌色、换成 UA 默认**，而 `a` 的 UA 默认恰是「#0000EE 蓝 + 下划线」。
   A/B 探针实测（加载 / 不加载 layui.css 结果**完全相同**）证明根因在本文件而非 layui 适配层：
   裸链接、.panel 内链接、.table 内链接全部变成刺眼的浏览器蓝 + 下划线，
   与第 109 行 `a{color:var(--primary);text-decoration:none}` 的设计明确冲突。
   修法：**保持选择器 `body a` 与特异性 (0,0,2) 完全不变，只把值换成项目令牌** ——
   级联格局不变（仍胜 layui 的裸 `a{color:#333}`(0,0,1)，仍负于 .topnav a / .site-footer-links a
   等容器规则 (0,1,1) 从而**零回归**），仅把「UA 蓝 + 下划线」纠正为「品牌色 + 无下划线」。 */
body a { color: var(--primary); text-decoration: none; }
body img { display: revert; border: revert; vertical-align: revert; }
body hr { margin: .5em auto; border: revert; height: revert; background: revert; }
/* body 自身：layui 的 body{font-size:0.875rem;color:rgba(0,0,0,.85);font-family:...}
   会覆盖浏览器默认的 16px 字号与项目文字色（暗色主题下正文被压成近黑色），必须提权还原。
   ⚠️ 字号必须写 1rem（= :root 的 calc(16px * var(--ui-font-scale,1))），**不能硬编码 16px**：
   项目有用户可配置的「全站字号比例」ui_font_scale（90%/100%/110%/120%），
   硬编码绝对像素会**切断继承链、静默废掉该设置**。
   A/B 探针实测（--ui-font-scale:1.2）：html=19.2px 但 body=16px（被本层截断）；
   改为 1rem 后 body=19.2px，缩放恢复正常。 */
html body {
  font-family: -apple-system, "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif;
  font-size: 1rem;
  color: var(--text);
  line-height: 1.6;
}

/* ============================================================
   导航/菜单：对齐 layui nav
   重要：layui 的 .layui-nav 是**为深色导航栏设计**的 ——
     .layui-nav-item a{color:rgba(255,255,255,.7)}（白字）、悬停/当前项 {color:#fff}
   而项目侧边栏在**浅色模式下是浅底深字**，直接照搬白字会导致「白字浅底」不可读。
   因此本层**只对齐与底色无关的令牌**：
     · 激活态 = 实心项目主色 var(--primary) + 白字（观感对齐 .layui-nav-tree .layui-this）
     · 悬停强调色 var(--primary)（对齐 .layui-nav a:hover 的强调语义，且跟随用户品牌色）
     · 圆角 2px（layui 全站几何）、扁平化（去掉品牌渐变与投影，layui 无渐变）
   正常态文字色仍沿用项目变量（--sb-text / --sb-hover-text），保证明暗主题都可读。
   手机端 44px 触控热区保持不变（既有 @media 规则未改动）。
   ============================================================ */
/* 侧边栏：圆角与扁平化
   注意：项目存在 .admin-page .sidebar nav a{border-radius:calc(var(--radius) - 3px)}（特异性 0,3,2），
   故本层必须写 body.admin-page（**无空格**，因为 .admin-page 就在 body 自身；
   写成 `body .admin-page` 会变成后代选择器而永远匹配不到）来把特异性提到 0,3,3。
   已用计算样式探针验证生效。 */
body .sidebar nav a,
body.admin-page .sidebar nav a,
body.admin-page .admin-layout .sidebar nav a { border-radius: var(--radius-sm); }
body .sidebar .nav-group-toggle,
body .sidebar .nav-sub-toggle,
body .sidebar .nav-sub-links a,
body .sidebar .nav-quick-entry a { border-radius: var(--radius-sm); }
/* 侧边栏：悬停强调色 */
body .sidebar nav a:hover,
body.admin-page .sidebar nav a:hover { color: var(--primary); }
body .sidebar .nav-sub-links a:hover { color: var(--primary); }
/* 侧边栏：当前项 —— 对齐 .layui-nav-tree .layui-this 的「实心主色 + 白字」观感
   ⚠️ 颜色必须用**项目主色变量**，不能硬编码 layui 的 #16baaa：
   项目有用户可配置的「全站主色」ui_primary_color（默认 var(--primary)）与「强调色」ui_accent_color，
   硬编码青绿会让**侧边栏激活态永远脱离用户所选品牌色**（探针实测 on_bg=rgb(22,186,170)
   而 --primary=var(--primary)）。此处改用项目主色变量，保留「实心 + 白字 + 去投影」的 layui 观感。
   注意：必须写 body.admin-page（**无空格**）—— .admin-page 就在 body 自身，
   写成 `body .admin-page` 是后代选择器，永远匹配不到（本项目已踩过此坑）。
   项目规则 .admin-page .sidebar nav a.on 为 (0,3,2)，本层 body.admin-page 版本为 (0,3,3)，可覆盖。 */
body .sidebar nav a.on,
body.admin-page .sidebar nav a.on,
body.admin-page .admin-layout .sidebar nav a.on,
body .sidebar .nav-item.has-sub .nav-row > a.on {
  background: var(--primary);
  color: #fff;
  box-shadow: none;
}
body .sidebar nav a.on::before,
body.admin-page .sidebar nav a.on::before { display: none; }
body .sidebar .nav-sub-links a.is-anchor-on {
  background: var(--primary);
  color: #fff;
  box-shadow: none;
}
body .sidebar .nav-sub-links a.is-anchor-on::before { background: #fff; opacity: 1; }
/* 顶部横向导航（user/home 端）：圆角跟随项目配置 + 悬停用项目主色
   注意：项目存在 .user-page .topnav a（0,2,2）与 .home-page .topnav a:hover（0,2,3），
   本层必须带对应页面类前缀才能覆盖（已用计算样式探针验证）。 */
body .topnav a,
body.user-page .topnav a,
body.home-page .topnav a { border-radius: var(--radius-sm); }
body .topnav a:hover,
body.user-page .topnav a:hover,
body.user-page .topnav a[aria-current="page"],
body.home-page .topnav a:hover { color: var(--primary); background: color-mix(in srgb, var(--primary) 10%, transparent); }
body .topnav-more-toggle,
body .topnav-more-menu,
body.user-page .topnav-more-toggle,
body.home-page .topnav-more-toggle { border-radius: var(--radius-sm); }
body .topnav-more-menu a:hover { color: var(--primary); }
body .topnav-more-toggle:hover,
body .topnav-more.is-open .topnav-more-toggle { color: var(--primary); border-color: var(--primary); background: color-mix(in srgb, var(--primary) 10%, transparent); }
/* 折叠态侧边栏悬浮提示：圆角跟随项目配置 */
body .sidebar-tooltip { border-radius: var(--radius-sm); }
/* 暗色主题：强调色沿用项目主色变量，避免主题切换后语义漂移 */
[data-theme="dark"] body .sidebar nav a:hover,
[data-theme="dark"] body .sidebar .nav-sub-links a:hover,
[data-theme="dark"] body .topnav a:hover,
[data-theme="dark"] body .topnav-more-menu a:hover { color: var(--primary); }
[data-theme="dark"] body .topnav-more-toggle:hover,
[data-theme="dark"] body .topnav-more.is-open .topnav-more-toggle { color: var(--primary); border-color: var(--primary); }

/* ============================================================
   layui-btn 的图标尺寸对齐
   背景：common.js 的按钮图标自动注入（initButtonIcons）原选择器只匹配 `.btn`
   （`.admin-main .btn, .container .btn` 等）。逐页改造把按钮换成 `layui-btn` 后，
   注入范围必须同步扩展到 `layui-btn`，否则「复制/详情/取消」这类按钮的自动 SVG 图标会消失。
   JS 选择器已同步扩展；此处补上对应的图标几何，保证与 `.btn` 完全一致的视觉。
   ============================================================ */
.layui-btn .action-icon,
.layui-btn > .action-icon,
.layui-btn > svg {
  width: 16px;
  height: 16px;
  min-width: 16px;
  min-height: 16px;
  flex: 0 0 16px;
  overflow: visible;
  display: inline-block;
  margin-right: 0;
  vertical-align: 0;
  position: relative;
  z-index: 1;
}
@media (max-width: 760px) {
  .layui-btn .action-icon { width: 16px; height: 16px; }
}

/* ============================================================
   layui-btn 的几何对齐（全局）
   背景：layui 的按钮用**固定高度**：.layui-btn 38px、-sm 30px、-xs 仅 22px。
   项目手机端硬性约定是触控热区 ≥44px，若不统一提权，批量改造出来的页面
   在手机上会出现 22px 的小按钮（不可点按），违反约定。
   这里用一条全局规则统一处理，而不是给每个页面复制一份局部 <style>
   （逐页局部样式只作为个别页面的额外微调保留）。
   桌面端与项目既有 .btn 桥接层保持一致（38 / 30 / 26px）。
   ============================================================ */
.layui-btn { min-height: 38px; }
.layui-btn-sm { min-height: 30px; }
.layui-btn-xs { min-height: 26px; line-height: 1.5rem; padding: 0 10px; }
/* 布局语义对齐 .btn：项目 `.btn` 是 inline-flex + 居中 + gap:6px，
   而 layui 的 `.layui-btn` 是 inline-block。若不改，common.js 自动注入的
   SVG 图标（复制/详情/取消/刷新…）会与文字**失去垂直居中与间距**。
   ⚠️ 必须用 `body .layui-btn` 提权：layui.css 在 style.css **之后**加载，
   同特异性下 `.layui-btn{display:inline-block}` 会反压（已用探针实测确认：
   只写 `.layui-btn` 时 disp 仍是 inline-block）。
   注意：项目 `.btn` 有 ::before 悬停光泽，layui-btn 不需要，故只对齐布局属性。 */
body .layui-btn,
body .layui-btn-sm,
body .layui-btn-xs {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  vertical-align: middle;
  /* ⚠️ 必须提权（body 前缀）覆盖 layui.css 的
     `.layui-btn{height:38px;line-height:36px;padding:0 18px;white-space:nowrap}`：
     layui.css 在 style.css **之后**加载，同特异性下会反压项目规则。
     ① `white-space:nowrap` 本身不裁切，但基类同时有 `overflow:hidden`（为悬停光泽 ::before 而设）
        → 「不换行 + 裁切」= 一旦宽度受约束（flex 收缩 / 窄列 / 固定宽度）文字被**水平硬裁**。
     ② `height:38px` 是**固定高度**，文字换行后第二行被**垂直裁掉**。
     本轮实测（Chrome --dump-dom，120px 窄容器）：
       修复前：cw=118 sw=154 → HCLIP（溢出 36px 被裁）
       只改 nowrap 后：cw=118 sw=118 ok，但 ch=36 sh=47 → VCLIP（换行第二行被裁）
       本块改完：cw==sw 且 ch>=sh，两种裁切均消除。
     高度改用「auto + min-height 保底」：单行高度不变（min-height 由下方 38/30/26px 规则保证），
     多行自动增高；触控热区仍由手机端 44/38px 的 min-height 保证。 */
  height: auto;
  white-space: normal;
  word-break: break-word;
  text-align: center;
  line-height: 1.4;
}
/* 内边距同样需提权覆盖（layui.css 的 padding 为 `0 18px` 等纵向 0 值，多行时文字贴边）。
   数值经过反算：单行总高 = 2×纵向内边距 + 行高 + 2×1px 透明边框，
   取 8/4/2px 使单行总高精确回到 38/30/26px（与改动前一致，避免视觉回归）。 */
body .layui-btn { padding: 8px 18px; }
body .layui-btn-sm { padding: 4px 10px; }
body .layui-btn-xs { padding: 2px 5px; }
/* ⚠️ 第 43 轮：layui.css 的 `.layui-btn{border-radius:2px;white-space:nowrap}` 与
   `.layui-btn+.layui-btn{margin-left:10px}` 均在 style.css **之后**加载，同特异性反压：
   ① 圆角被锁死 2px → 「界面圆角风格」自定义在**所有按钮上无效**（第 42 轮实测 radius=2px）；
   ② 相邻按钮自动 +10px 左外边距，与项目 flex/grid 的 `gap` **叠加**（第 42 轮实测
      gap:10px 容器里相邻 .layui-btn 实际间距 20px，而 .link-btn 对照 10px ✅）。
   两条都用 `body` 前缀提权到 0,1,1（layui 为 0,1,0 / 0,2,0）： */
body .layui-btn { border-radius: var(--radius-sm); }
body .layui-btn + .layui-btn { margin-left: 0; }
/* ⚠️ 第 43 轮：`.layui-btn-primary` 也被 layui.css 反压（实测 bg 变成实心主色、
   border 变成 layui 的 #d2d2d2、文字色走 layui 的 #5f5f5f），项目「透明底 + 品牌色边框」
   的次要按钮语义**完全失效**。用 `body` 前缀提权到 0,1,1 复位。 */
body .layui-btn-primary {
  background: transparent;
  color: var(--link, var(--primary));
  border: 1px solid color-mix(in srgb, var(--primary) 45%, transparent);
  box-shadow: none;
}
body .layui-btn-primary:hover {
  background: var(--primary-soft);
  border-color: var(--primary);
  box-shadow: none;
}
@media (max-width: 760px) {
  /* 手机端：主按钮与行内小按钮统一到 44px / 38px 触控热区（与 .btn 约定一致）。
     ⚠️ 高度用 `min-height` 而非固定 `height`：固定高度 + `line-height:2.625rem`(42px)
     在「全站字号比例」放大后会溢出被裁（42px 行高塞进 44px 高、再叠字距与边框即超）；
     且固定高度无法容纳换行的第二行文字。改为 min-height + 行高随字号即可自适应。 */
  .layui-btn { min-height: 44px; padding: 8px 16px; font-size: 0.9375rem; }
  .layui-btn-sm { min-height: 38px; padding: 6px 12px; }
  .layui-btn-xs { min-height: 38px; padding: 6px 12px; }
}

/* ============================================================
   disabled 禁用态文字色（必须保留）
   缺陷：`.layui-btn:disabled`（12163 行）设了 background:#c9cdd4 却**没设 color**，
   于是文字沿用基础态 `.layui-btn{color:#fff}`（693 行）→ **浅灰底 + 白字**。
   探针实测（真实渲染，两主题一致，因该底色与主题无关）：
     默认/主色/危险 禁用 → 底 rgb(201,205,212) + 字 rgb(255,255,255) = **1.59:1** ❌
     .layui-btn-primary 禁用 → 底 rgb(201,205,212) + 字 rgb(195,202,216) = **1.03:1** ❌
   注：WCAG 1.4.3 虽豁免「失效控件」的对比度要求，但 1.03:1 意味着标签**几乎完全不可见**，
   用户无法辨认被禁用的是哪个操作 —— 属真实可用性缺陷（与「未设样式的按钮」同类）。
   ⚠️ 修法**必须用固定深灰、不能用主题令牌**：因为禁用底色 #c9cdd4 是**与主题无关的固定值**，
   若用 var(--text) 则暗色主题下会变成浅色 #e5e9f2，压在同一浅灰底上反而更不可读（更坏）。
   —— 即：**底色写死时，文字色也必须写死**，二者必须成对。
   取 #4b5563：对 #c9cdd4 实测 **4.75:1** ✅（达标且保留「变灰」的禁用观感）。
   ⚠️ 必须用 body 前缀提权到 (0,2,1)：否则暗色主题的
   `[data-theme="dark"] .layui-btn-primary`（12219 行，color:#c3cad8，特异性 (0,2,0)）
   会因**更靠后而胜出**，让次色禁用按钮继续停留在 1.03:1。
   四个变体（默认/主色/次色/危险）全部覆盖，避免任一变体漏网。
   ============================================================ */
body .layui-btn:disabled,
body .layui-btn-normal:disabled,
body .layui-btn-danger:disabled,
body .layui-btn-primary:disabled {
  color: #4b5563;
}
