/* avatar_upload */
.avatar-upload-panel{margin-top:12px;padding:12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--bg)}
.avatar-upload-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:10px}
.avatar-upload-head h3{margin:0;font-size:var(--font-size-md)}
.avatar-upload-hint{font-size:var(--font-size-xs);color:var(--text-subtle);line-height:1.6}
.avatar-upload-body{display:flex;flex-wrap:wrap;align-items:flex-start;gap:12px}
.avatar-upload-preview{width:72px;height:72px;flex:none;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}
.avatar-upload-preview .avatar-upload-image{display:block;width:100%;height:100%;object-fit:cover}
.avatar-upload-main{flex:1 1 240px;display:grid;gap:8px;min-width:0}
.avatar-upload-field{display:grid;gap:4px;font-size:var(--font-size-sm);color:var(--text-muted)}
.avatar-upload-field input[type=file]{width:100%;min-width:0;font-size:var(--font-size-sm)}
.avatar-upload-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.avatar-upload-state{margin:0;font-size:var(--font-size-xs);color:var(--text-subtle);line-height:1.6}
.avatar-upload-error{margin:0;font-size:var(--font-size-xs);color:var(--danger);line-height:1.6}
.avatar-upload-error:empty{display:none}
.avatar-upload-shell{display:none}
.avatar-upload-divider{display:none}
/* 面板被脚本搬进核心「头像」折叠区后：去掉外层卡片样式，并露出与系统头像样式之间的分隔线 */
[data-slot~="profile.after_form"] [data-profile-edit] > .avatar-upload-panel{margin:0;padding:0 0 4px;border:0;background:none}
[data-slot~="profile.after_form"] [data-profile-edit] > .avatar-upload-panel .avatar-upload-divider{display:flex;align-items:center;gap:8px;margin:12px 0 10px;font-size:var(--font-size-xs);color:var(--text-subtle)}
.avatar-upload-divider::before,.avatar-upload-divider::after{content:"";flex:1;height:1px;background:var(--line)}
.avatar-upload-admin h2{margin-top:0}
.avatar-upload-admin form{display:grid;gap:10px}
@media(max-width:720px){
.avatar-upload-body{gap:10px}
.avatar-upload-preview{width:60px;height:60px}
.avatar-upload-main{flex:1 1 100%}
}
/* batch_admin */
.batch-admin-badge{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;height:18px;min-width:18px;padding:0 6px;border-radius:999px;font-size:var(--font-size-xs);font-weight:700;line-height:1}.batch-admin-badge-info{background:var(--info-soft);color:var(--info)}.batch-admin-badge-success{background:var(--success-soft);color:var(--success)}.batch-admin-badge-warning{background:var(--warning-soft);color:var(--warning)}.batch-admin-badge-muted{background:var(--line-soft);color:var(--text-muted)}.batch-admin-trash-row{grid-template-columns:minmax(0,1fr) auto;align-items:start;padding:14px}.batch-admin-trash-title{display:flex;align-items:center;gap:7px;min-width:0;flex-wrap:wrap}.batch-admin-trash-title strong{min-width:0;overflow:hidden;color:var(--text);font-size:var(--font-size-md);line-height:1.4;text-overflow:ellipsis;white-space:nowrap}.batch-admin-id{flex:0 0 auto;color:var(--text-subtle);font-family:var(--font-mono);font-size:var(--font-size-xs)}.batch-admin-meta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.4}.batch-admin-details{margin-top:4px}.batch-admin-details summary{width:max-content;max-width:100%;color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer}.batch-admin-details summary:hover{color:var(--brand)}.batch-admin-details pre{max-height:320px;margin:8px 0 0;padding:10px;overflow:auto;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}.batch-admin-log-detail{margin-top:4px;color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.5;overflow-wrap:anywhere}.batch-admin-head-note{color:var(--text-muted);font-size:var(--font-size-xs)}@media(max-width:720px){.batch-admin-trash-row{grid-template-columns:minmax(0,1fr);gap:10px;padding:12px}.batch-admin-trash-title{align-items:flex-start;gap:6px}.batch-admin-trash-title strong{flex:1 1 130px;white-space:normal;overflow-wrap:anywhere}}
/* block_follow */
.block-follow-acts{display:inline-flex;gap:6px;margin-top:6px;vertical-align:top}
.block-follow-docked{margin-top:0}
/* 未安装 post_vote 时没有投票条可作为 dock 目标，图标组必须自处得当（此前只剩「帖子左下方」）。
   .post-entry 是 grid（"avatar body" / "content content"），追加在正文之后的元素会落到隐式行的
   第一列（36px 头像列）——这就是无投票条时图标跑到帖子左下方的根因；跨两列 + flex-end 即与
   投票条同处一行右端。有 [data-post-vote] 时不生效：归位由 JS 完成，避免抢占投票条所在行的位置。
   这一行同时是 quote_reply_plus 的兜底落点：它没找到 [data-post-vote] 时会把「引用 / 回复」整组
   append 进本容器（见该插件 quote_reply_plus_dock），故此处用 align-items:center 让两组垂直居中对齐。
   1.0.25 兼容性说明：:has() 现代主流浏览器（Chrome 105+/Safari 15.4+/Firefox 121+）均已支持；
   极老内核不支持时本条整规则失效，图标组停留正文下一行，功能不受影响（与无 JS 兜底一致）。 */
.post-entry:not(:has([data-post-vote])) .block-follow-acts{display:flex;align-items:center;grid-column:1/-1;justify-content:flex-end}
.block-follow-pop{position:relative;display:inline-flex}
.block-follow-ico{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;background:none;color:var(--text-muted);cursor:pointer;list-style:none;user-select:none;position:relative}
/* 高层级仅在气泡开启时生效：关闭态压回普通层级，避免盖住页面上的下拉面板（如 topic_manage 操作菜单） */
.block-follow-pop[open] .block-follow-ico{z-index:46}
.block-follow-ico::-webkit-details-marker{display:none}
.block-follow-ico svg{width:14px;height:14px}
.block-follow-ico:hover{color:var(--brand)}
.block-follow-ico.block-follow-block:hover{color:var(--danger)}
.block-follow-ico.block-follow-on{color:var(--brand)}
.block-follow-ico.block-follow-blocked{color:var(--danger)}
/* 文字形态（消费方经 render_actions 的 as=text 选用，1.0.20）：与图标形态共用同一套交互与状态类，
   只把 24×24 图标盒换成与消费方按钮同规格的文字胶囊（1px 描边 + 4/12 内边距 + 12px 粗体），
   未激活为中性描边，激活后按语义着色（已关注=品牌绿、已屏蔽=危险红）。 */
.block-follow-acts-text{gap:8px}
.block-follow-acts-text .block-follow-ico{width:auto;height:auto;padding:4px 12px;border:1px solid var(--line);border-radius:var(--radius);background:none;color:var(--text-muted);font-size:var(--font-size-xs);font-weight:700;line-height:1.5}
.block-follow-acts-text .block-follow-ico:hover{border-color:var(--brand);color:var(--brand)}
.block-follow-acts-text .block-follow-ico.block-follow-block:hover{border-color:var(--danger);color:var(--danger)}
.block-follow-acts-text .block-follow-ico.block-follow-on{border-color:transparent;background:var(--brand-soft);color:var(--success)}
.block-follow-acts-text .block-follow-ico.block-follow-blocked{border-color:transparent;background:var(--danger-soft);color:var(--danger)}
.block-follow-mask{display:none}
/* 1.0.25 遮罩色改用核心语义变量 --backdrop（原字面量 rgba(0,0,0,.3) 不随主题变化） */
.block-follow-pop[open] .block-follow-mask{display:block;position:fixed;inset:0;background:var(--backdrop);z-index:45}
/* 楼层气泡默认向上弹出；展开后由 JS 改成 position:fixed 并按屏幕空位定位（见 block_follow_bubble_place）
   ——气泡住在核心 .main-panel（overflow:hidden）里，贴面板顶边时上半截会被裁掉，固定定位才能逃逸该
   裁剪（同页遮罩本就如此）；下面这条只作「JS 未介入时」的兜底锚点。
   管理页网格那颗（见下面的 .block-follow-grid 覆盖规则）不走 JS：设置页容器本就向下弹即可避开裁剪。 */
.block-follow-bubble{position:absolute;right:0;bottom:calc(100% + 6px);z-index:46;width:200px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 8px 24px var(--shadow-base);padding:10px;font-size:var(--font-size-sm);color:var(--text);text-align:center}
.block-follow-bubble-text{line-height:1.5}
.block-follow-bubble-actions{display:flex;gap:8px;margin-top:8px}
/* 气泡内全部按钮（确认/取消/确认屏蔽/确认解除）不做皮肤，统一走核心官方按钮样式；
   确认按钮的类名（.block-follow-confirm）仅作 JS 文案更新定位，无对应样式 */
.block-follow-bubble-actions button{flex:1;height:28px;min-height:28px;padding:0 8px;font-size:var(--font-size-sm)}
.block-follow-panel{display:flex;flex-direction:column;gap:14px}
.block-follow-card{border:1px solid var(--line-soft);border-radius:var(--radius);padding:12px 14px;background:var(--panel)}
.block-follow-card-head{display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:var(--font-size-sm);color:var(--text)}
.block-follow-card-head span:last-child{color:var(--text-subtle);font-weight:400;font-variant-numeric:tabular-nums}
.block-follow-list{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.block-follow-list li{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:var(--font-size-sm)}
.block-follow-user{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 用户网格：每行 5 个（窄屏 3 个），悬停用户名时显示 ×，点击弹气泡二次确认 */
.block-follow-grid{list-style:none;margin:8px 0 0;padding:0;display:grid;grid-template-columns:repeat(5,1fr);gap:6px}
.block-follow-grid li{display:flex;min-width:0}
.block-follow-chip{display:flex;align-items:center;justify-content:space-between;gap:4px;width:100%;min-width:0;padding:4px 8px;border:1px solid var(--line-soft);border-radius:var(--radius);background:var(--panel);cursor:pointer;list-style:none;user-select:none;font-size:var(--font-size-sm);color:var(--text)}
.block-follow-chip::-webkit-details-marker{display:none}
.block-follow-chip:hover{border-color:var(--brand)}
.block-follow-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 1.0.25 豁免注释：border-radius:50% 为正圆×按钮（16×16 方形容器取半作圆），非圆角变量场景 */
.block-follow-x{display:none;flex-shrink:0;width:16px;height:16px;line-height:15px;text-align:center;border-radius:50%;background:var(--line-soft);color:var(--text-muted);font-size:var(--font-size-sm)}
.block-follow-chip:hover .block-follow-x{display:block}
.block-follow-x:hover{background:var(--danger-soft);color:var(--danger)}
/* 管理页网格的气泡向下弹出：设置页内容容器会裁剪超出顶部的 absolute 元素（fixed 遮罩不受限，
   气泡上半截被裁），向下弹避开顶部区域；网格下方还有关键字卡，空间充足。 */
.block-follow-grid .block-follow-bubble{bottom:auto;top:calc(100% + 6px);right:auto;left:0}
@media (max-width:720px){.block-follow-grid{grid-template-columns:repeat(3,1fr)}}
.block-follow-empty{margin:8px 0 0;font-size:var(--font-size-sm);color:var(--text-subtle)}
.block-follow-error{margin:6px 0 0;color:var(--danger);font-size:var(--font-size-sm);font-weight:600;line-height:1.5}
.block-follow-add{display:flex;gap:8px;margin-top:10px}
.block-follow-add input{flex:1;min-width:0;border:1px solid var(--line);border-radius:var(--radius);padding:5px 8px;font-size:var(--font-size-sm);background:var(--panel);color:var(--text)}
.block-follow-admin-rules{margin:12px 0;padding:10px 14px;border:1px solid var(--line-soft);border-radius:var(--radius);font-size:var(--font-size-sm);color:var(--text-muted)}
.block-follow-admin-rules ul{margin:6px 0 0;padding-left:18px}
.block-follow-admin-rules li{margin-bottom:4px}
/* cf_verify */
.cf-verify-widget{width:300px;max-width:100%;margin:2px 0}.cf-verify-widget[data-cf-verify-size="compact"]{width:150px}.cf-verify-widget .cf-turnstile{min-height:65px}.cf-verify-widget[data-cf-verify-size="compact"] .cf-turnstile{min-height:140px}.cf-verify-status{font-weight:700}.cf-verify-status.is-on{color:var(--success)}.cf-verify-status.is-off{color:var(--warning)}.cf-verify-note{margin:0 0 14px;color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.8}.cf-verify-admin-form .cf-verify-admin-fields{max-width:640px}.cf-verify-admin-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px}.cf-verify-admin-tip{color:var(--text-subtle);font-size:var(--font-size-sm)}
/* color_switch */
html[data-color-switch-mode="light"]{--color-switch-success:#1a9c62;--color-switch-success-soft:#e8f7ef;--color-switch-danger:#d34a4a;--color-switch-danger-soft:#fdeeee;--color-switch-warning:#b45309;--color-switch-warning-soft:#fdf5e8;--color-switch-info:#2f7fd8;--color-switch-info-soft:#eaf2fc;--color-switch-shadow-base-a:.07;--color-switch-shadow-medium-a:.14;}html[data-color-switch-mode="dark"]{--color-switch-success:#38d08a;--color-switch-success-soft:rgba(56,208,138,.14);--color-switch-danger:#ef6a6a;--color-switch-danger-soft:rgba(239,106,106,.15);--color-switch-warning:#e0a44a;--color-switch-warning-soft:rgba(224,164,74,.15);--color-switch-info:#5fa8ef;--color-switch-info-soft:rgba(95,168,239,.15);--color-switch-shadow-base-a:.05;--color-switch-shadow-medium-a:.1;}html[data-color-switch]:not([data-color-switch-mode]){--color-switch-success:#1a9c62;--color-switch-success-soft:#e8f7ef;--color-switch-danger:#d34a4a;--color-switch-danger-soft:#fdeeee;--color-switch-warning:#b45309;--color-switch-warning-soft:#fdf5e8;--color-switch-info:#2f7fd8;--color-switch-info-soft:#eaf2fc;--color-switch-shadow-base-a:.07;--color-switch-shadow-medium-a:.14;}@media (prefers-color-scheme: dark){html[data-color-switch]:not([data-color-switch-mode]){--color-switch-success:#38d08a;--color-switch-success-soft:rgba(56,208,138,.14);--color-switch-danger:#ef6a6a;--color-switch-danger-soft:rgba(239,106,106,.15);--color-switch-warning:#e0a44a;--color-switch-warning-soft:rgba(224,164,74,.15);--color-switch-info:#5fa8ef;--color-switch-info-soft:rgba(95,168,239,.15);--color-switch-shadow-base-a:.05;--color-switch-shadow-medium-a:.1;}}@media (prefers-color-scheme: light){html[data-color-switch]:not([data-color-switch-mode]){--color-switch-success:#1a9c62;--color-switch-success-soft:#e8f7ef;--color-switch-danger:#d34a4a;--color-switch-danger-soft:#fdeeee;--color-switch-warning:#b45309;--color-switch-warning-soft:#fdf5e8;--color-switch-info:#2f7fd8;--color-switch-info-soft:#eaf2fc;--color-switch-shadow-base-a:.07;--color-switch-shadow-medium-a:.14;}}html[data-color-switch][data-color-switch-palette="glacier"][data-color-switch-mode="light"]{--color-switch-bg:#eceff4;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#0f1420;--color-switch-ink-rgb:15,20,32;--color-switch-ink-muted:#4e586b;--color-switch-ink-subtle:#8a93a3;--color-switch-ink-disabled:#b8bfca;--color-switch-line:rgba(15,20,32,.14);--color-switch-line-soft:rgba(15,20,32,.07);--color-switch-inverse:#101725;--color-switch-inverse-line:#242e40;--color-switch-inverse-ink:#eef2f8;--color-switch-scrim:rgba(10,14,22,.42);--color-switch-brand:#2f6fd0;--color-switch-brand-hover:#255bb0;--color-switch-brand-rgb:47,111,208;--color-switch-brand-soft:#e6eef9;}html[data-color-switch][data-color-switch-palette="glacier"][data-color-switch-mode="dark"]{--color-switch-bg:#0c1017;--color-switch-surface-rgb:20,25,34;--color-switch-ink:#e2e7f0;--color-switch-ink-rgb:226,231,240;--color-switch-ink-muted:#a3adbd;--color-switch-ink-subtle:#7d8798;--color-switch-ink-disabled:#5a6373;--color-switch-line:rgba(226,231,240,.14);--color-switch-line-soft:rgba(226,231,240,.08);--color-switch-inverse:#e9eef6;--color-switch-inverse-line:#cdd6e4;--color-switch-inverse-ink:#131a26;--color-switch-scrim:rgba(4,7,12,.6);--color-switch-brand:#5b9bff;--color-switch-brand-hover:#7cb0ff;--color-switch-brand-rgb:91,155,255;--color-switch-brand-soft:#1c2c45;}html[data-color-switch][data-color-switch-palette="glacier"]:not([data-color-switch-mode]){--color-switch-bg:#eceff4;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#0f1420;--color-switch-ink-rgb:15,20,32;--color-switch-ink-muted:#4e586b;--color-switch-ink-subtle:#8a93a3;--color-switch-ink-disabled:#b8bfca;--color-switch-line:rgba(15,20,32,.14);--color-switch-line-soft:rgba(15,20,32,.07);--color-switch-inverse:#101725;--color-switch-inverse-line:#242e40;--color-switch-inverse-ink:#eef2f8;--color-switch-scrim:rgba(10,14,22,.42);--color-switch-brand:#2f6fd0;--color-switch-brand-hover:#255bb0;--color-switch-brand-rgb:47,111,208;--color-switch-brand-soft:#e6eef9;}@media (prefers-color-scheme: dark){html[data-color-switch][data-color-switch-palette="glacier"]:not([data-color-switch-mode]){--color-switch-bg:#0c1017;--color-switch-surface-rgb:20,25,34;--color-switch-ink:#e2e7f0;--color-switch-ink-rgb:226,231,240;--color-switch-ink-muted:#a3adbd;--color-switch-ink-subtle:#7d8798;--color-switch-ink-disabled:#5a6373;--color-switch-line:rgba(226,231,240,.14);--color-switch-line-soft:rgba(226,231,240,.08);--color-switch-inverse:#e9eef6;--color-switch-inverse-line:#cdd6e4;--color-switch-inverse-ink:#131a26;--color-switch-scrim:rgba(4,7,12,.6);--color-switch-brand:#5b9bff;--color-switch-brand-hover:#7cb0ff;--color-switch-brand-rgb:91,155,255;--color-switch-brand-soft:#1c2c45;}}html[data-color-switch][data-color-switch-palette="indigo"][data-color-switch-mode="light"]{--color-switch-bg:#eceff4;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#0f1420;--color-switch-ink-rgb:15,20,32;--color-switch-ink-muted:#4e586b;--color-switch-ink-subtle:#8a93a3;--color-switch-ink-disabled:#b8bfca;--color-switch-line:rgba(15,20,32,.14);--color-switch-line-soft:rgba(15,20,32,.07);--color-switch-inverse:#101725;--color-switch-inverse-line:#242e40;--color-switch-inverse-ink:#eef2f8;--color-switch-scrim:rgba(10,14,22,.42);--color-switch-brand:#4a52c8;--color-switch-brand-hover:#3c44a8;--color-switch-brand-rgb:74,82,200;--color-switch-brand-soft:#e9eaf8;}html[data-color-switch][data-color-switch-palette="indigo"][data-color-switch-mode="dark"]{--color-switch-bg:#0c1017;--color-switch-surface-rgb:20,25,34;--color-switch-ink:#e2e7f0;--color-switch-ink-rgb:226,231,240;--color-switch-ink-muted:#a3adbd;--color-switch-ink-subtle:#7d8798;--color-switch-ink-disabled:#5a6373;--color-switch-line:rgba(226,231,240,.14);--color-switch-line-soft:rgba(226,231,240,.08);--color-switch-inverse:#e9eef6;--color-switch-inverse-line:#cdd6e4;--color-switch-inverse-ink:#131a26;--color-switch-scrim:rgba(4,7,12,.6);--color-switch-brand:#8b93ff;--color-switch-brand-hover:#a5abff;--color-switch-brand-rgb:139,147,255;--color-switch-brand-soft:#252a45;}html[data-color-switch][data-color-switch-palette="indigo"]:not([data-color-switch-mode]){--color-switch-bg:#eceff4;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#0f1420;--color-switch-ink-rgb:15,20,32;--color-switch-ink-muted:#4e586b;--color-switch-ink-subtle:#8a93a3;--color-switch-ink-disabled:#b8bfca;--color-switch-line:rgba(15,20,32,.14);--color-switch-line-soft:rgba(15,20,32,.07);--color-switch-inverse:#101725;--color-switch-inverse-line:#242e40;--color-switch-inverse-ink:#eef2f8;--color-switch-scrim:rgba(10,14,22,.42);--color-switch-brand:#4a52c8;--color-switch-brand-hover:#3c44a8;--color-switch-brand-rgb:74,82,200;--color-switch-brand-soft:#e9eaf8;}@media (prefers-color-scheme: dark){html[data-color-switch][data-color-switch-palette="indigo"]:not([data-color-switch-mode]){--color-switch-bg:#0c1017;--color-switch-surface-rgb:20,25,34;--color-switch-ink:#e2e7f0;--color-switch-ink-rgb:226,231,240;--color-switch-ink-muted:#a3adbd;--color-switch-ink-subtle:#7d8798;--color-switch-ink-disabled:#5a6373;--color-switch-line:rgba(226,231,240,.14);--color-switch-line-soft:rgba(226,231,240,.08);--color-switch-inverse:#e9eef6;--color-switch-inverse-line:#cdd6e4;--color-switch-inverse-ink:#131a26;--color-switch-scrim:rgba(4,7,12,.6);--color-switch-brand:#8b93ff;--color-switch-brand-hover:#a5abff;--color-switch-brand-rgb:139,147,255;--color-switch-brand-soft:#252a45;}}html[data-color-switch][data-color-switch-palette="pine"][data-color-switch-mode="light"]{--color-switch-bg:#ebf1ef;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#0d1a19;--color-switch-ink-rgb:13,26,25;--color-switch-ink-muted:#4a5c5a;--color-switch-ink-subtle:#879996;--color-switch-ink-disabled:#b5c4c1;--color-switch-line:rgba(13,26,25,.14);--color-switch-line-soft:rgba(13,26,25,.07);--color-switch-inverse:#0e1a19;--color-switch-inverse-line:#1f2f2d;--color-switch-inverse-ink:#edf4f3;--color-switch-scrim:rgba(8,18,17,.42);--color-switch-brand:#0f8a72;--color-switch-brand-hover:#0b7160;--color-switch-brand-rgb:15,138,114;--color-switch-brand-soft:#e2f1ee;}html[data-color-switch][data-color-switch-palette="pine"][data-color-switch-mode="dark"]{--color-switch-bg:#0b1211;--color-switch-surface-rgb:18,26,25;--color-switch-ink:#e0ecea;--color-switch-ink-rgb:224,236,234;--color-switch-ink-muted:#a0b1af;--color-switch-ink-subtle:#7b8b89;--color-switch-ink-disabled:#586765;--color-switch-line:rgba(224,236,234,.14);--color-switch-line-soft:rgba(224,236,234,.08);--color-switch-inverse:#e8f2f1;--color-switch-inverse-line:#cbd9d7;--color-switch-inverse-ink:#111a19;--color-switch-scrim:rgba(4,10,9,.6);--color-switch-brand:#35c7a4;--color-switch-brand-hover:#57d6b7;--color-switch-brand-rgb:53,199,164;--color-switch-brand-soft:#13362e;}html[data-color-switch][data-color-switch-palette="pine"]:not([data-color-switch-mode]){--color-switch-bg:#ebf1ef;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#0d1a19;--color-switch-ink-rgb:13,26,25;--color-switch-ink-muted:#4a5c5a;--color-switch-ink-subtle:#879996;--color-switch-ink-disabled:#b5c4c1;--color-switch-line:rgba(13,26,25,.14);--color-switch-line-soft:rgba(13,26,25,.07);--color-switch-inverse:#0e1a19;--color-switch-inverse-line:#1f2f2d;--color-switch-inverse-ink:#edf4f3;--color-switch-scrim:rgba(8,18,17,.42);--color-switch-brand:#0f8a72;--color-switch-brand-hover:#0b7160;--color-switch-brand-rgb:15,138,114;--color-switch-brand-soft:#e2f1ee;}@media (prefers-color-scheme: dark){html[data-color-switch][data-color-switch-palette="pine"]:not([data-color-switch-mode]){--color-switch-bg:#0b1211;--color-switch-surface-rgb:18,26,25;--color-switch-ink:#e0ecea;--color-switch-ink-rgb:224,236,234;--color-switch-ink-muted:#a0b1af;--color-switch-ink-subtle:#7b8b89;--color-switch-ink-disabled:#586765;--color-switch-line:rgba(224,236,234,.14);--color-switch-line-soft:rgba(224,236,234,.08);--color-switch-inverse:#e8f2f1;--color-switch-inverse-line:#cbd9d7;--color-switch-inverse-ink:#111a19;--color-switch-scrim:rgba(4,10,9,.6);--color-switch-brand:#35c7a4;--color-switch-brand-hover:#57d6b7;--color-switch-brand-rgb:53,199,164;--color-switch-brand-soft:#13362e;}}html[data-color-switch][data-color-switch-palette="amber"][data-color-switch-mode="light"]{--color-switch-bg:#f5f0e6;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#221a10;--color-switch-ink-rgb:34,26,16;--color-switch-ink-muted:#5f5545;--color-switch-ink-subtle:#948a78;--color-switch-ink-disabled:#c3bbaa;--color-switch-line:rgba(34,26,16,.15);--color-switch-line-soft:rgba(34,26,16,.07);--color-switch-inverse:#241d13;--color-switch-inverse-line:#3a3124;--color-switch-inverse-ink:#f6f2ea;--color-switch-scrim:rgba(28,20,10,.42);--color-switch-brand:#b8791a;--color-switch-brand-hover:#9c6512;--color-switch-brand-rgb:184,121,26;--color-switch-brand-soft:#f6efe4;}html[data-color-switch][data-color-switch-palette="amber"][data-color-switch-mode="dark"]{--color-switch-bg:#14110c;--color-switch-surface-rgb:25,21,15;--color-switch-ink:#eee7dc;--color-switch-ink-rgb:238,231,220;--color-switch-ink-muted:#b6ab99;--color-switch-ink-subtle:#8d8271;--color-switch-ink-disabled:#6a6053;--color-switch-line:rgba(238,231,220,.14);--color-switch-line-soft:rgba(238,231,220,.08);--color-switch-inverse:#f3ede2;--color-switch-inverse-line:#d8cfbe;--color-switch-inverse-ink:#1a1610;--color-switch-scrim:rgba(12,9,4,.6);--color-switch-brand:#e8a93f;--color-switch-brand-hover:#f0bd63;--color-switch-brand-rgb:232,169,63;--color-switch-brand-soft:#3e2f16;}html[data-color-switch][data-color-switch-palette="amber"]:not([data-color-switch-mode]){--color-switch-bg:#f5f0e6;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#221a10;--color-switch-ink-rgb:34,26,16;--color-switch-ink-muted:#5f5545;--color-switch-ink-subtle:#948a78;--color-switch-ink-disabled:#c3bbaa;--color-switch-line:rgba(34,26,16,.15);--color-switch-line-soft:rgba(34,26,16,.07);--color-switch-inverse:#241d13;--color-switch-inverse-line:#3a3124;--color-switch-inverse-ink:#f6f2ea;--color-switch-scrim:rgba(28,20,10,.42);--color-switch-brand:#b8791a;--color-switch-brand-hover:#9c6512;--color-switch-brand-rgb:184,121,26;--color-switch-brand-soft:#f6efe4;}@media (prefers-color-scheme: dark){html[data-color-switch][data-color-switch-palette="amber"]:not([data-color-switch-mode]){--color-switch-bg:#14110c;--color-switch-surface-rgb:25,21,15;--color-switch-ink:#eee7dc;--color-switch-ink-rgb:238,231,220;--color-switch-ink-muted:#b6ab99;--color-switch-ink-subtle:#8d8271;--color-switch-ink-disabled:#6a6053;--color-switch-line:rgba(238,231,220,.14);--color-switch-line-soft:rgba(238,231,220,.08);--color-switch-inverse:#f3ede2;--color-switch-inverse-line:#d8cfbe;--color-switch-inverse-ink:#1a1610;--color-switch-scrim:rgba(12,9,4,.6);--color-switch-brand:#e8a93f;--color-switch-brand-hover:#f0bd63;--color-switch-brand-rgb:232,169,63;--color-switch-brand-soft:#3e2f16;}}html[data-color-switch][data-color-switch-palette="clay"][data-color-switch-mode="light"]{--color-switch-bg:#f4ece6;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#241813;--color-switch-ink-rgb:36,24,19;--color-switch-ink-muted:#61514a;--color-switch-ink-subtle:#96867e;--color-switch-ink-disabled:#c4b6af;--color-switch-line:rgba(36,24,19,.15);--color-switch-line-soft:rgba(36,24,19,.07);--color-switch-inverse:#261a15;--color-switch-inverse-line:#3d2d26;--color-switch-inverse-ink:#f7efeb;--color-switch-scrim:rgba(30,18,12,.42);--color-switch-brand:#c0552f;--color-switch-brand-hover:#a4461f;--color-switch-brand-rgb:192,85,47;--color-switch-brand-soft:#f7ebe6;}html[data-color-switch][data-color-switch-palette="clay"][data-color-switch-mode="dark"]{--color-switch-bg:#130e0b;--color-switch-surface-rgb:24,18,15;--color-switch-ink:#efe5e0;--color-switch-ink-rgb:239,229,224;--color-switch-ink-muted:#b8a8a1;--color-switch-ink-subtle:#8f7f78;--color-switch-ink-disabled:#6c5d57;--color-switch-line:rgba(239,229,224,.14);--color-switch-line-soft:rgba(239,229,224,.08);--color-switch-inverse:#f4ece7;--color-switch-inverse-line:#d9cbc4;--color-switch-inverse-ink:#191310;--color-switch-scrim:rgba(10,6,4,.6);--color-switch-brand:#e87752;--color-switch-brand-hover:#ef8f70;--color-switch-brand-rgb:232,119,82;--color-switch-brand-soft:#3e2319;}html[data-color-switch][data-color-switch-palette="clay"]:not([data-color-switch-mode]){--color-switch-bg:#f4ece6;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#241813;--color-switch-ink-rgb:36,24,19;--color-switch-ink-muted:#61514a;--color-switch-ink-subtle:#96867e;--color-switch-ink-disabled:#c4b6af;--color-switch-line:rgba(36,24,19,.15);--color-switch-line-soft:rgba(36,24,19,.07);--color-switch-inverse:#261a15;--color-switch-inverse-line:#3d2d26;--color-switch-inverse-ink:#f7efeb;--color-switch-scrim:rgba(30,18,12,.42);--color-switch-brand:#c0552f;--color-switch-brand-hover:#a4461f;--color-switch-brand-rgb:192,85,47;--color-switch-brand-soft:#f7ebe6;}@media (prefers-color-scheme: dark){html[data-color-switch][data-color-switch-palette="clay"]:not([data-color-switch-mode]){--color-switch-bg:#130e0b;--color-switch-surface-rgb:24,18,15;--color-switch-ink:#efe5e0;--color-switch-ink-rgb:239,229,224;--color-switch-ink-muted:#b8a8a1;--color-switch-ink-subtle:#8f7f78;--color-switch-ink-disabled:#6c5d57;--color-switch-line:rgba(239,229,224,.14);--color-switch-line-soft:rgba(239,229,224,.08);--color-switch-inverse:#f4ece7;--color-switch-inverse-line:#d9cbc4;--color-switch-inverse-ink:#191310;--color-switch-scrim:rgba(10,6,4,.6);--color-switch-brand:#e87752;--color-switch-brand-hover:#ef8f70;--color-switch-brand-rgb:232,119,82;--color-switch-brand-soft:#3e2319;}}html[data-color-switch][data-color-switch-palette="rose"][data-color-switch-mode="light"]{--color-switch-bg:#f5f0e6;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#221a10;--color-switch-ink-rgb:34,26,16;--color-switch-ink-muted:#5f5545;--color-switch-ink-subtle:#948a78;--color-switch-ink-disabled:#c3bbaa;--color-switch-line:rgba(34,26,16,.15);--color-switch-line-soft:rgba(34,26,16,.07);--color-switch-inverse:#241d13;--color-switch-inverse-line:#3a3124;--color-switch-inverse-ink:#f6f2ea;--color-switch-scrim:rgba(28,20,10,.42);--color-switch-brand:#c34a72;--color-switch-brand-hover:#a93b60;--color-switch-brand-rgb:195,74,114;--color-switch-brand-soft:#f8e9ee;}html[data-color-switch][data-color-switch-palette="rose"][data-color-switch-mode="dark"]{--color-switch-bg:#14110c;--color-switch-surface-rgb:25,21,15;--color-switch-ink:#eee7dc;--color-switch-ink-rgb:238,231,220;--color-switch-ink-muted:#b6ab99;--color-switch-ink-subtle:#8d8271;--color-switch-ink-disabled:#6a6053;--color-switch-line:rgba(238,231,220,.14);--color-switch-line-soft:rgba(238,231,220,.08);--color-switch-inverse:#f3ede2;--color-switch-inverse-line:#d8cfbe;--color-switch-inverse-ink:#1a1610;--color-switch-scrim:rgba(12,9,4,.6);--color-switch-brand:#f0779f;--color-switch-brand-hover:#f491b2;--color-switch-brand-rgb:240,119,159;--color-switch-brand-soft:#402529;}html[data-color-switch][data-color-switch-palette="rose"]:not([data-color-switch-mode]){--color-switch-bg:#f5f0e6;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#221a10;--color-switch-ink-rgb:34,26,16;--color-switch-ink-muted:#5f5545;--color-switch-ink-subtle:#948a78;--color-switch-ink-disabled:#c3bbaa;--color-switch-line:rgba(34,26,16,.15);--color-switch-line-soft:rgba(34,26,16,.07);--color-switch-inverse:#241d13;--color-switch-inverse-line:#3a3124;--color-switch-inverse-ink:#f6f2ea;--color-switch-scrim:rgba(28,20,10,.42);--color-switch-brand:#c34a72;--color-switch-brand-hover:#a93b60;--color-switch-brand-rgb:195,74,114;--color-switch-brand-soft:#f8e9ee;}@media (prefers-color-scheme: dark){html[data-color-switch][data-color-switch-palette="rose"]:not([data-color-switch-mode]){--color-switch-bg:#14110c;--color-switch-surface-rgb:25,21,15;--color-switch-ink:#eee7dc;--color-switch-ink-rgb:238,231,220;--color-switch-ink-muted:#b6ab99;--color-switch-ink-subtle:#8d8271;--color-switch-ink-disabled:#6a6053;--color-switch-line:rgba(238,231,220,.14);--color-switch-line-soft:rgba(238,231,220,.08);--color-switch-inverse:#f3ede2;--color-switch-inverse-line:#d8cfbe;--color-switch-inverse-ink:#1a1610;--color-switch-scrim:rgba(12,9,4,.6);--color-switch-brand:#f0779f;--color-switch-brand-hover:#f491b2;--color-switch-brand-rgb:240,119,159;--color-switch-brand-soft:#402529;}}html[data-color-switch][data-color-switch-palette="graphite"][data-color-switch-mode="light"]{--color-switch-bg:#eeeeee;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#141414;--color-switch-ink-rgb:20,20,20;--color-switch-ink-muted:#555555;--color-switch-ink-subtle:#8f8f8f;--color-switch-ink-disabled:#bfbfbf;--color-switch-line:rgba(20,20,20,.14);--color-switch-line-soft:rgba(20,20,20,.07);--color-switch-inverse:#171717;--color-switch-inverse-line:#2b2b2b;--color-switch-inverse-ink:#f2f2f2;--color-switch-scrim:rgba(12,12,12,.42);--color-switch-brand:#3b6ea5;--color-switch-brand-hover:#305a89;--color-switch-brand-rgb:59,110,165;--color-switch-brand-soft:#e7eef4;}html[data-color-switch][data-color-switch-palette="graphite"][data-color-switch-mode="dark"]{--color-switch-bg:#0e0e0e;--color-switch-surface-rgb:22,22,22;--color-switch-ink:#e8e8e8;--color-switch-ink-rgb:232,232,232;--color-switch-ink-muted:#a8a8a8;--color-switch-ink-subtle:#818181;--color-switch-ink-disabled:#5e5e5e;--color-switch-line:rgba(232,232,232,.14);--color-switch-line-soft:rgba(232,232,232,.08);--color-switch-inverse:#ededed;--color-switch-inverse-line:#d0d0d0;--color-switch-inverse-ink:#141414;--color-switch-scrim:rgba(5,5,5,.6);--color-switch-brand:#79aede;--color-switch-brand-hover:#94bfe8;--color-switch-brand-rgb:121,174,222;--color-switch-brand-soft:#232e38;}html[data-color-switch][data-color-switch-palette="graphite"]:not([data-color-switch-mode]){--color-switch-bg:#eeeeee;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#141414;--color-switch-ink-rgb:20,20,20;--color-switch-ink-muted:#555555;--color-switch-ink-subtle:#8f8f8f;--color-switch-ink-disabled:#bfbfbf;--color-switch-line:rgba(20,20,20,.14);--color-switch-line-soft:rgba(20,20,20,.07);--color-switch-inverse:#171717;--color-switch-inverse-line:#2b2b2b;--color-switch-inverse-ink:#f2f2f2;--color-switch-scrim:rgba(12,12,12,.42);--color-switch-brand:#3b6ea5;--color-switch-brand-hover:#305a89;--color-switch-brand-rgb:59,110,165;--color-switch-brand-soft:#e7eef4;}@media (prefers-color-scheme: dark){html[data-color-switch][data-color-switch-palette="graphite"]:not([data-color-switch-mode]){--color-switch-bg:#0e0e0e;--color-switch-surface-rgb:22,22,22;--color-switch-ink:#e8e8e8;--color-switch-ink-rgb:232,232,232;--color-switch-ink-muted:#a8a8a8;--color-switch-ink-subtle:#818181;--color-switch-ink-disabled:#5e5e5e;--color-switch-line:rgba(232,232,232,.14);--color-switch-line-soft:rgba(232,232,232,.08);--color-switch-inverse:#ededed;--color-switch-inverse-line:#d0d0d0;--color-switch-inverse-ink:#141414;--color-switch-scrim:rgba(5,5,5,.6);--color-switch-brand:#79aede;--color-switch-brand-hover:#94bfe8;--color-switch-brand-rgb:121,174,222;--color-switch-brand-soft:#232e38;}}html[data-color-switch][data-color-switch-palette="stone"][data-color-switch-mode="light"]{--color-switch-bg:#eeeeee;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#141414;--color-switch-ink-rgb:20,20,20;--color-switch-ink-muted:#555555;--color-switch-ink-subtle:#8f8f8f;--color-switch-ink-disabled:#bfbfbf;--color-switch-line:rgba(20,20,20,.14);--color-switch-line-soft:rgba(20,20,20,.07);--color-switch-inverse:#171717;--color-switch-inverse-line:#2b2b2b;--color-switch-inverse-ink:#f2f2f2;--color-switch-scrim:rgba(12,12,12,.42);--color-switch-brand:#4a7f6a;--color-switch-brand-hover:#3c6a58;--color-switch-brand-rgb:74,127,106;--color-switch-brand-soft:#e9f0ed;}html[data-color-switch][data-color-switch-palette="stone"][data-color-switch-mode="dark"]{--color-switch-bg:#0e0e0e;--color-switch-surface-rgb:22,22,22;--color-switch-ink:#e8e8e8;--color-switch-ink-rgb:232,232,232;--color-switch-ink-muted:#a8a8a8;--color-switch-ink-subtle:#818181;--color-switch-ink-disabled:#5e5e5e;--color-switch-line:rgba(232,232,232,.14);--color-switch-line-soft:rgba(232,232,232,.08);--color-switch-inverse:#ededed;--color-switch-inverse-line:#d0d0d0;--color-switch-inverse-ink:#141414;--color-switch-scrim:rgba(5,5,5,.6);--color-switch-brand:#7dbfa3;--color-switch-brand-hover:#98cfb7;--color-switch-brand-rgb:125,191,163;--color-switch-brand-soft:#24312c;}html[data-color-switch][data-color-switch-palette="stone"]:not([data-color-switch-mode]){--color-switch-bg:#eeeeee;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#141414;--color-switch-ink-rgb:20,20,20;--color-switch-ink-muted:#555555;--color-switch-ink-subtle:#8f8f8f;--color-switch-ink-disabled:#bfbfbf;--color-switch-line:rgba(20,20,20,.14);--color-switch-line-soft:rgba(20,20,20,.07);--color-switch-inverse:#171717;--color-switch-inverse-line:#2b2b2b;--color-switch-inverse-ink:#f2f2f2;--color-switch-scrim:rgba(12,12,12,.42);--color-switch-brand:#4a7f6a;--color-switch-brand-hover:#3c6a58;--color-switch-brand-rgb:74,127,106;--color-switch-brand-soft:#e9f0ed;}@media (prefers-color-scheme: dark){html[data-color-switch][data-color-switch-palette="stone"]:not([data-color-switch-mode]){--color-switch-bg:#0e0e0e;--color-switch-surface-rgb:22,22,22;--color-switch-ink:#e8e8e8;--color-switch-ink-rgb:232,232,232;--color-switch-ink-muted:#a8a8a8;--color-switch-ink-subtle:#818181;--color-switch-ink-disabled:#5e5e5e;--color-switch-line:rgba(232,232,232,.14);--color-switch-line-soft:rgba(232,232,232,.08);--color-switch-inverse:#ededed;--color-switch-inverse-line:#d0d0d0;--color-switch-inverse-ink:#141414;--color-switch-scrim:rgba(5,5,5,.6);--color-switch-brand:#7dbfa3;--color-switch-brand-hover:#98cfb7;--color-switch-brand-rgb:125,191,163;--color-switch-brand-soft:#24312c;}}html[data-color-switch][data-color-switch-palette="amethyst"][data-color-switch-mode="light"]{--color-switch-bg:#eeeeee;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#141414;--color-switch-ink-rgb:20,20,20;--color-switch-ink-muted:#555555;--color-switch-ink-subtle:#8f8f8f;--color-switch-ink-disabled:#bfbfbf;--color-switch-line:rgba(20,20,20,.14);--color-switch-line-soft:rgba(20,20,20,.07);--color-switch-inverse:#171717;--color-switch-inverse-line:#2b2b2b;--color-switch-inverse-ink:#f2f2f2;--color-switch-scrim:rgba(12,12,12,.42);--color-switch-brand:#7c4dc4;--color-switch-brand-hover:#653aa8;--color-switch-brand-rgb:124,77,196;--color-switch-brand-soft:#efeaf8;}html[data-color-switch][data-color-switch-palette="amethyst"][data-color-switch-mode="dark"]{--color-switch-bg:#0e0e0e;--color-switch-surface-rgb:22,22,22;--color-switch-ink:#e8e8e8;--color-switch-ink-rgb:232,232,232;--color-switch-ink-muted:#a8a8a8;--color-switch-ink-subtle:#818181;--color-switch-ink-disabled:#5e5e5e;--color-switch-line:rgba(232,232,232,.14);--color-switch-line-soft:rgba(232,232,232,.08);--color-switch-inverse:#ededed;--color-switch-inverse-line:#d0d0d0;--color-switch-inverse-ink:#141414;--color-switch-scrim:rgba(5,5,5,.6);--color-switch-brand:#b39dff;--color-switch-brand-hover:#c3b2ff;--color-switch-brand-rgb:179,157,255;--color-switch-brand-soft:#2f2b3e;}html[data-color-switch][data-color-switch-palette="amethyst"]:not([data-color-switch-mode]){--color-switch-bg:#eeeeee;--color-switch-surface-rgb:255,255,255;--color-switch-ink:#141414;--color-switch-ink-rgb:20,20,20;--color-switch-ink-muted:#555555;--color-switch-ink-subtle:#8f8f8f;--color-switch-ink-disabled:#bfbfbf;--color-switch-line:rgba(20,20,20,.14);--color-switch-line-soft:rgba(20,20,20,.07);--color-switch-inverse:#171717;--color-switch-inverse-line:#2b2b2b;--color-switch-inverse-ink:#f2f2f2;--color-switch-scrim:rgba(12,12,12,.42);--color-switch-brand:#7c4dc4;--color-switch-brand-hover:#653aa8;--color-switch-brand-rgb:124,77,196;--color-switch-brand-soft:#efeaf8;}@media (prefers-color-scheme: dark){html[data-color-switch][data-color-switch-palette="amethyst"]:not([data-color-switch-mode]){--color-switch-bg:#0e0e0e;--color-switch-surface-rgb:22,22,22;--color-switch-ink:#e8e8e8;--color-switch-ink-rgb:232,232,232;--color-switch-ink-muted:#a8a8a8;--color-switch-ink-subtle:#818181;--color-switch-ink-disabled:#5e5e5e;--color-switch-line:rgba(232,232,232,.14);--color-switch-line-soft:rgba(232,232,232,.08);--color-switch-inverse:#ededed;--color-switch-inverse-line:#d0d0d0;--color-switch-inverse-ink:#141414;--color-switch-scrim:rgba(5,5,5,.6);--color-switch-brand:#b39dff;--color-switch-brand-hover:#c3b2ff;--color-switch-brand-rgb:179,157,255;--color-switch-brand-soft:#2f2b3e;}}html[data-color-switch]{--color-switch-fs-xxs:10px;--color-switch-fs-xs:11px;--color-switch-fs-sm:12px;--color-switch-fs-md:14px;--color-switch-fs-lg:16px;--color-switch-fs-xl:18px;}html[data-color-switch][data-color-switch-font="compact"]{--color-switch-fs-xxs:9px;--color-switch-fs-xs:10px;--color-switch-fs-sm:11px;--color-switch-fs-md:13px;--color-switch-fs-lg:15px;--color-switch-fs-xl:17px;}html[data-color-switch][data-color-switch-font="relaxed"]{--color-switch-fs-xxs:11px;--color-switch-fs-xs:12px;--color-switch-fs-sm:13px;--color-switch-fs-md:16px;--color-switch-fs-lg:18px;--color-switch-fs-xl:20px;}html[data-color-switch]{--bg:var(--color-switch-bg);--panel:rgb(var(--color-switch-surface-rgb));--line:var(--color-switch-line);--line-soft:var(--color-switch-line-soft);--text:var(--color-switch-ink);--text-muted:var(--color-switch-ink-muted);--text-subtle:var(--color-switch-ink-subtle);--text-disabled:var(--color-switch-ink-disabled);--brand:var(--color-switch-brand);--brand-hover:var(--color-switch-brand-hover);--brand-soft:var(--color-switch-brand-soft);--focus-ring:rgba(var(--color-switch-brand-rgb),.34);--focus-halo:rgba(var(--color-switch-brand-rgb),.28);--success:var(--color-switch-success);--success-soft:var(--color-switch-success-soft);--danger:var(--color-switch-danger);--danger-soft:var(--color-switch-danger-soft);--warning:var(--color-switch-warning);--warning-soft:var(--color-switch-warning-soft);--info:var(--color-switch-info);--info-soft:var(--color-switch-info-soft);--inverse:var(--color-switch-inverse);--inverse-border:var(--color-switch-inverse-line);--inverse-text:var(--color-switch-inverse-ink);--backdrop:var(--color-switch-scrim);--shadow-base:rgba(var(--color-switch-ink-rgb),var(--color-switch-shadow-base-a));--shadow-medium:rgba(var(--color-switch-ink-rgb),var(--color-switch-shadow-medium-a));--color-switch-brand-line:rgba(var(--color-switch-brand-rgb),.42);--font-size-xxs:var(--color-switch-fs-xxs);--font-size-xs:var(--color-switch-fs-xs);--font-size-sm:var(--color-switch-fs-sm);--font-size-md:var(--color-switch-fs-md);--font-size-lg:var(--color-switch-fs-lg);--font-size-xl:var(--color-switch-fs-xl);}html[data-color-switch] .color-switch{position:relative;display:flex;align-items:center}html[data-color-switch] .color-switch-toggle{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;min-height:0;font-weight:400;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-subtle);cursor:pointer}html[data-color-switch] .color-switch-toggle:hover{color:var(--brand);background:transparent}html[data-color-switch] .color-switch-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:60;display:none;flex-direction:column;min-width:168px;padding:4px 12px;border:1px solid var(--line);border-radius:var(--radius);background:rgb(var(--color-switch-surface-rgb))}html[data-color-switch] .color-switch-menu[hidden]{display:none}html[data-color-switch] .color-switch-menu.is-open{display:flex}html[data-color-switch] .color-switch-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;justify-items:center;padding:10px 0}html[data-color-switch] .color-switch-divider{display:block;height:1px;background:var(--line-soft)}html[data-color-switch] .color-switch-pick{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;min-height:0;font-weight:400;border:1px solid var(--line);border-radius:50%;background:transparent;color:var(--text-muted);cursor:pointer;flex:none}html[data-color-switch] .color-switch-pick:hover{color:var(--text);border-color:var(--color-switch-brand-line);background:transparent}html[data-color-switch] .color-switch-pick.is-active{color:var(--success);border-color:var(--brand);background:var(--brand-soft)}html[data-color-switch] .color-switch-pick .meta-icon{width:16px;height:16px;flex:none;color:currentColor}html[data-color-switch] .color-switch-swatch i{position:relative;display:block;width:22px;height:22px;border-radius:50%}html[data-color-switch] .color-switch-swatch i::after{content:"";position:absolute;inset:2px;border-radius:50%}html[data-color-switch] .color-switch-ico{display:none;align-items:center;justify-content:center;width:18px;height:18px}html[data-color-switch] .color-switch-ico svg{width:18px;height:18px;flex:none;color:currentColor}@media(max-width:720px){html[data-color-switch] .color-switch-toggle{width:28px;height:28px}html[data-color-switch] .color-switch-ico,html[data-color-switch] .color-switch-ico svg{width:24px;height:24px}}html[data-color-switch] .color-switch[data-color-switch-active-mode="light"] .color-switch-ico[data-color-switch-ico="light"],html[data-color-switch] .color-switch[data-color-switch-active-mode="dark"] .color-switch-ico[data-color-switch-ico="dark"],html[data-color-switch] .color-switch[data-color-switch-active-mode="auto"] .color-switch-ico[data-color-switch-ico="auto"]{display:inline-flex}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="glacier"] i{background:#eceff4}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="glacier"] i::after{background:#2f6fd0}.color-switch-admin-swatch i[data-color-switch-swatch="glacier"]{background:#eceff4}.color-switch-admin-swatch i[data-color-switch-swatch="glacier"]::after{background:#2f6fd0}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="indigo"] i{background:#eceff4}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="indigo"] i::after{background:#4a52c8}.color-switch-admin-swatch i[data-color-switch-swatch="indigo"]{background:#eceff4}.color-switch-admin-swatch i[data-color-switch-swatch="indigo"]::after{background:#4a52c8}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="pine"] i{background:#ebf1ef}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="pine"] i::after{background:#0f8a72}.color-switch-admin-swatch i[data-color-switch-swatch="pine"]{background:#ebf1ef}.color-switch-admin-swatch i[data-color-switch-swatch="pine"]::after{background:#0f8a72}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="amber"] i{background:#f5f0e6}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="amber"] i::after{background:#b8791a}.color-switch-admin-swatch i[data-color-switch-swatch="amber"]{background:#f5f0e6}.color-switch-admin-swatch i[data-color-switch-swatch="amber"]::after{background:#b8791a}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="clay"] i{background:#f4ece6}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="clay"] i::after{background:#c0552f}.color-switch-admin-swatch i[data-color-switch-swatch="clay"]{background:#f4ece6}.color-switch-admin-swatch i[data-color-switch-swatch="clay"]::after{background:#c0552f}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="rose"] i{background:#f5f0e6}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="rose"] i::after{background:#c34a72}.color-switch-admin-swatch i[data-color-switch-swatch="rose"]{background:#f5f0e6}.color-switch-admin-swatch i[data-color-switch-swatch="rose"]::after{background:#c34a72}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="graphite"] i{background:#eeeeee}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="graphite"] i::after{background:#3b6ea5}.color-switch-admin-swatch i[data-color-switch-swatch="graphite"]{background:#eeeeee}.color-switch-admin-swatch i[data-color-switch-swatch="graphite"]::after{background:#3b6ea5}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="stone"] i{background:#eeeeee}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="stone"] i::after{background:#4a7f6a}.color-switch-admin-swatch i[data-color-switch-swatch="stone"]{background:#eeeeee}.color-switch-admin-swatch i[data-color-switch-swatch="stone"]::after{background:#4a7f6a}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="amethyst"] i{background:#eeeeee}html[data-color-switch] .color-switch-swatch[data-color-switch-swatch="amethyst"] i::after{background:#7c4dc4}.color-switch-admin-swatch i[data-color-switch-swatch="amethyst"]{background:#eeeeee}.color-switch-admin-swatch i[data-color-switch-swatch="amethyst"]::after{background:#7c4dc4}.color-switch-admin-notice{margin:0 0 12px;padding:10px 14px;border:1px solid var(--warning);border-radius:var(--radius);background:var(--warning-soft);color:var(--warning);font-size:var(--font-size-sm);line-height:1.6}.color-switch-admin-cards{columns:2;column-gap:14px;margin-bottom:2px}@media(max-width:920px){.color-switch-admin-cards{columns:1}}.color-switch-card{break-inside:avoid;-webkit-column-break-inside:avoid;page-break-inside:avoid;margin:0 0 14px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.color-switch-card-head{padding:10px 14px;border-bottom:1px solid var(--line-soft)}.color-switch-card-head h3{margin:0;font-size:var(--font-size-md);color:var(--text)}.color-switch-card-head p{margin:4px 0 0;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.55}.color-switch-card-body{padding:10px 14px}form.plugin-settings-form.color-switch-admin-form{max-width:none}form.plugin-settings-form.color-switch-admin-form .color-switch-admin-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:4px}.color-switch-admin-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.color-switch-admin-note{color:var(--text-subtle);font-size:var(--font-size-xs)}.color-switch-admin-swatches{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}.color-switch-admin-swatch-label{display:block;color:var(--text);font-weight:600;font-size:var(--font-size-sm)}.color-switch-admin-swatch-set{display:flex;flex-wrap:wrap;gap:10px}.color-switch-admin-swatch{position:relative;display:inline-flex;cursor:pointer}.color-switch-admin-swatch input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.color-switch-admin-swatch i{display:block;width:26px;height:26px;border-radius:50%;border:1px solid var(--line);position:relative}.color-switch-admin-swatch i::after{content:"";position:absolute;inset:4px;border-radius:50%}.color-switch-admin-swatch input:checked + i{box-shadow:0 0 0 2px var(--brand)}.color-switch-admin-swatch input:focus-visible + i{box-shadow:0 0 0 2px var(--focus-ring)}.color-switch-tip{position:fixed;z-index:80;pointer-events:none;max-width:240px;padding:5px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-xs);line-height:1.5;overflow-wrap:anywhere}.color-switch-tip[hidden]{display:none}
/* digest */
/* 列表标题后与详情页标题后的精华徽章（仅图标，无底色）
   对齐与间距取自同类插件 topic_readonly 的「只读」徽章（同为 topic.title_suffix 注入）：
   line-height:1 + padding 撑出圆形 + vertical-align:middle；
   不写死 height，避免固定高度在中文标题行里显得偏上。
   1.6.1 起去掉底色（原 background:var(--brand-soft)），只保留图标本身；
   padding 与 border-radius 保留——内边距不可见但撑住盒尺寸，flex 行下 top 偏移的
   推导基于 17px 盒高，删掉 padding 会让对齐基准变化，故不随之删除。
   1.6.2 起间距按「可见墨迹起点」统一：有底色徽章（如 lottery「已开奖」）可见距离=盒缘 6px
   （AI_CONTEXT §6.6-2 margin-left:6px）；纯图标徽章无底色，墨迹 = margin + padding + 字形内缩
   （diamond 字形 x 从 2.5 起，13px 渲染内缩 ≈1.35px），盒距 6px 时墨迹 ≈ 9.4px、观感偏远——
   列表取 3px、详情取 2px（墨迹 ≈ 6px，与底色胶囊盒缘对齐）。
   1.6.3 起在行内流里补一次绘制级上提：vertical-align:middle 对准的是「基线 + x-height 的一半」，
   而中文标题的视觉中心在字面中心，两者相差约 0.1em，徽章整体偏低
   （实测：14px 时盒心在基线上方 3.77px、墨迹中心在 5px → 需上提 1.23px；16px 同理需 1.67px）。
   改用 em 而非写死像素：随字号自动缩放，列表与详情页共用一套基准，不必各写一个像素值。
   取 0.12em 略大于实测所需（14px 时残差 0.45px、详情页 16px 残差 0.33px，同量级、肉眼不可辨）。
   实测环境：无头 Edge + 真实 index.css，字体落 Microsoft YaHei。 */
.digest-badge{display:inline-flex;align-items:center;justify-content:center;margin-left:3px;padding:2px;border-radius:999px;line-height:1;vertical-align:middle;position:relative;top:-0.12em;color:var(--brand);flex:none}
.digest-badge svg{width:13px;height:13px;flex:none}
/* 兼容电脑端把标题行做成 flex 行（align-items:baseline）的主题：flex 项忽略 vertical-align，
   胶囊改以自身基线（内部 14px 行盒的基线，高出盒底 2px）对齐容器基线，盒心落到基线上方
   6.5px（17px 盒高 → 底边在基线上时盒心本应 8.5px，实测少 2px），而中文标题的墨迹中心在
   基线上方 5px（14px 正文）→ 需下移 1.5px。
   1.6.4 修正：原值 3px 出自「盒心对齐行盒中心（基线 − 5.3px）」的推导，与实测差 1.5px，
   电脑端因此一直偏低（根因即此条）。数值用 px 不用 em：该偏移的主体（6.5px）由徽章自身
   盒几何决定（padding 2px×2 + 13px 图标，不随标题字号变），字号带来的差异在后台档位区间内
   不足 0.5px。实测环境：无头 Edge + 真实 index.css，字体落 Microsoft YaHei。
   限定在「非手机断点」（theme_plus 用 max-width:720px 切手机形态，这里取其补集，
   不用 min-width:721px——分数视口宽如 720.5 会落在两者的缝里，届时行已是 flex、补正却不生效）。
   手机端主题会把标题行改回行内流（-webkit-line-clamp 钳行、标题回 display:inline），
   此处的 align-self 失效而 top 仍生效，会平白多下一次移，故必须排除。 */
@media not all and (max-width:720px){
html[data-theme-plus] .post-list .post-title-row .digest-badge,
html[data-theme-prism] .post-list .post-title-row .digest-badge{align-self:baseline;position:relative;top:1.5px}
}
/* 详情页标题字号更大（核心 h1 16px / 主题 18px），徽章按同比例放大一档。
   h1 内是行内流，middle 对齐的落点比中文行盒中心低约 2px（推导见下条注释），
   这里用相对定位上提 2px 补正；只影响绘制，不参与布局。 */
.post-topic-title .digest-badge{margin-left:2px;padding:3px;position:relative;top:-2px}
.post-topic-title .digest-badge svg{width:15px;height:15px}
/* 精华贴 Tab（首页 / 版块列表工具栏，纯文字；普通色，悬停才转强调色） */
.digest-tab:hover{color:var(--brand)}
/* 主题操作区兜底按钮（仅帖子管理助手未启用时出现；对齐核心 icon-action 视觉） */
.digest-toggle-form{display:inline-flex}
.digest-toggle{display:inline-flex;align-items:center;gap:3px;background:none;border:0;padding:0;color:var(--text-muted);font-size:var(--font-size-sm);cursor:pointer}
.digest-toggle:hover{color:var(--brand)}
.digest-toggle svg{width:13px;height:13px;flex:none}
.digest-toggle.is-featured{color:var(--brand)}
/* 三点管理菜单内的精华项（样式自带，不依赖对端类；整行文字项对齐菜单其余项） */
.digest-menu-item-form{margin:0}
.digest-menu-item{display:block;width:100%;text-align:left;background:none;border:0;padding:7px 12px;font-size:var(--font-size-sm);color:var(--text);cursor:pointer;white-space:nowrap}
.digest-menu-item:hover{background:var(--line-soft);color:var(--brand)}
.digest-menu-item.is-featured{color:var(--brand)}
/* 后台子标签与提示 */
.digest-subtabs{margin-bottom:12px}
.digest-form-actions{margin-top:12px}
/* 日志工具栏：标题与筛选栏同行，窄屏自动换行；筛选栏右对齐（对齐 sign_in 日志页） */
.digest-panel .digest-log-top{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.digest-panel .digest-log-top h2{flex:0 0 auto;margin:0}
.digest-filter{display:flex;flex:1 1 auto;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px;margin:0}
.digest-filter-field{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;color:var(--text-muted);font-size:var(--font-size-sm);white-space:nowrap}
/* 后台 legacy 作用域对抗（与 sign_in / points_manager 同一套写法）：
   核心把插件后台 HTML 包进 .plugin-admin-page .plugin-admin-legacy-body，其
   .form-panel>form 以 grid 布局、input/select/textarea 以 width:100% 强制铺满，
   会把筛选控件拉成整行。此处以更高特异性压回行内尺寸，不依赖 CSS 加载顺序、不用 !important。 */
.plugin-admin-page .plugin-admin-legacy-body .form-panel.digest-panel .digest-filter{display:flex;max-width:none}
.plugin-admin-page .plugin-admin-legacy-body .form-panel.digest-panel .digest-filter-field select{width:auto;min-width:84px;height:34px;box-sizing:border-box;border:1px solid var(--line);border-radius:var(--radius);padding:0 8px;background:var(--panel);color:var(--text);font-size:var(--font-size-md)}
.plugin-admin-page .plugin-admin-legacy-body .form-panel.digest-panel .digest-filter button{height:34px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;justify-self:auto}
.digest-count{margin:10px 0;color:var(--text-muted);font-size:var(--font-size-sm)}
.digest-help{margin:10px 0 0;color:var(--text-muted);font-size:var(--font-size-sm)}
.digest-warn{margin:8px 0 0;color:var(--warning);font-size:var(--font-size-sm);font-weight:600}
/* 表格铺满内容区；主题列自适应并省略，其余列定宽不换行 */
.digest-panel .list{width:100%}
.digest-admin-table .digest-col-title{max-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.digest-admin-table .digest-col-time{width:150px;white-space:nowrap}
.digest-admin-table .digest-col-action,.digest-admin-table .digest-col-source,.digest-admin-table .digest-col-operator{width:96px;white-space:nowrap}
/* 版块列：长版块名省略，避免挤压标题列 */
.digest-admin-table .digest-col-forum{width:130px;max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.digest-empty-text{color:var(--text-subtle)}
/* 后台图标图例：四种图标的实际外观对照 */
.digest-icon-legend{display:flex;flex-wrap:wrap;gap:14px;margin:8px 0 0}
.digest-icon-legend-item{display:inline-flex;align-items:center;gap:5px;color:var(--text-muted);font-size:var(--font-size-sm)}
.digest-icon-legend-item svg{width:18px;height:18px;flex:none;color:var(--brand)}
/* 通知列：已发用成功色，未发用弱化色，一眼分辨是否送达 */
.digest-admin-table .digest-col-notified{width:150px;white-space:nowrap;color:var(--text-muted)}
.digest-admin-table .digest-col-notified[data-digest-state="sent"]{color:var(--success)}
.digest-empty-cell{text-align:center;color:var(--text-subtle)}
/* ext_link */
/* ===== 正文内联真实地址：弱化色小字，随正文换行不撑破容器 ===== */
.ext-link-real{margin-left:4px;color:var(--text-muted);font-size:var(--font-size-xs);word-break:break-all}
/* ===== 黑名单降级文本：不可点击，弱化配色 + 常显的禁止小图标；悬停显示「链接已被限制」原生提示 ===== */
.ext-link-blocked{color:var(--text-muted);word-break:break-all;cursor:help}
.ext-link-blocked-icon{display:inline-block;width:12px;height:12px;margin-left:4px;vertical-align:-2px}
/* ===== 中转确认页 ===== */
.ext-link-panel{max-width:640px}
.ext-link-title{margin:0 0 10px}
.ext-link-lead{margin:0 0 12px;color:var(--text)}
.ext-link-url-box{margin:0 0 12px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text);font-size:var(--font-size-sm);line-height:1.6;word-break:break-all;user-select:all}
.ext-link-note{margin:0 0 16px;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.6}
.ext-link-actions{display:flex;flex-wrap:wrap;gap:10px}
/* ===== 后台设置：勾选项卡片（核心全局样式给 input 设了 width:100%，复选框必须复位） ===== */
.ext-link-checks{display:flex;flex-direction:column;gap:8px}
.ext-link-check{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);cursor:pointer;transition:border-color var(--transition-normal),background-color var(--transition-normal)}
.ext-link-check:hover{border-color:var(--brand)}
.ext-link-check:has(input:checked){border-color:var(--brand);background:var(--brand-soft)}
.ext-link-check input[type=checkbox]{flex:0 0 16px;width:16px;height:16px;min-width:0;margin:2px 0 0;padding:0;border:0;background:none;accent-color:var(--brand);cursor:pointer}
.ext-link-check input[type=checkbox]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}
.ext-link-check b{display:block;color:var(--text);font-size:var(--font-size-sm);font-weight:600;line-height:1.5}
.ext-link-check small{display:block;margin-top:2px;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.5}
.ext-link-admin-note{margin:0;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.6}
/* forum_nav */
/* 顶栏容器：对齐核心 .top / .bar 基线（panel 底 + 1px line 边 + 1200px 版心 + 48px 高） */
.forum-nav-top{background:var(--panel);border-bottom:1px solid var(--line)}
.forum-nav-bar{position:relative;max-width:1200px;margin:0 auto;padding:0 12px;height:48px;display:flex;align-items:center;gap:4px}
.forum-nav-brand{display:inline-flex;align-items:center;gap:4px;min-width:0;color:var(--text);font-size:var(--font-size-lg);font-weight:700;white-space:nowrap}
.forum-nav-brand-name{min-width:0;overflow:hidden;text-overflow:ellipsis}
/* Logo 图标：尺寸与亮色图由后台配置（内联自定义属性），未配置回落 index.svg。
   站名文字包在 .forum-nav-brand-name 里做收缩省略——挤压时先收文字，不伤图标。 */
.forum-nav-brand:before{content:"";width:var(--forum-nav-logo-w,24px);height:var(--forum-nav-logo-h,24px);flex:0 0 auto;border-radius:var(--radius);background:var(--forum-nav-logo,url("index.svg")) center/100% 100% no-repeat}
/* 暗色 logo：后台「暗色 Logo 图片地址」为空时暗层变量未定义，首层回落 none 不绘制、
   亮色图自然兜底。判定两路：系统深色（原生主题 / 访客未显式选过时跟随系统）；
   中立契约 html[data-site-color-mode]（由配色插件 color_switch 履行，其
   data-color-switch-mode 为 auto 或未安装时不输出，自然落回系统偏好）。
   显式浅色规则用于压回「系统深色但站点选了浅色」的误判。 */
@media (prefers-color-scheme:dark){
    .forum-nav-brand:before{background-image:var(--forum-nav-logo-dark,none),var(--forum-nav-logo,url("index.svg"))}
}
html[data-site-color-mode="dark"] .forum-nav-brand:before{background-image:var(--forum-nav-logo-dark,none),var(--forum-nav-logo,url("index.svg"))}
html[data-site-color-mode="light"] .forum-nav-brand:before{background-image:var(--forum-nav-logo,url("index.svg"))}
/* 与站名的间距（1.11.8）：bar 的 gap 只有 4px，而 .forum-nav-brand 整个是「回首页」
   链接，其右缘（站名文字末尾）与首个版块只隔 4px —— 瞄准第一个版块时手偏几像素会点到
   站名（站长反馈误点击）。这里补 8px，使「站名末尾 → 首个版块文字」= 4+8+8 = 20px，
   与相邻两个版块之间的文字间距（8+4+8）一致。手机端 .forum-nav-links 为 display:none，
   本规则不生效。 */
.forum-nav-links{position:relative;display:flex;align-items:center;gap:4px;min-width:0;overflow:hidden;flex:1 1 auto;margin-left:8px}
.forum-nav-link{display:inline-flex;align-items:center;max-width:96px;height:28px;padding:0 8px;border-radius:var(--radius);color:var(--text-muted);font-size:var(--font-size-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.forum-nav-link:hover{color:var(--text)}
.forum-nav-link.active{color:var(--brand);background:var(--brand-soft)}
/* 「导航」下拉（只含后台配的自定义菜单）：触发按钮 + 下拉面板。面板绝对定位在按钮
   自身（.forum-nav-menu-item 无 overflow），bar 也无 overflow，下拉不会被裁剪。 */
/* 顶栏里的 <button> 必须显式压掉核心的全局 button 口径（index.css L2260/L2277）：
   `button{padding:7px 13px;min-height:32px;font-weight:700}` —— border-box 下 30px 宽的
   按钮塞进 26px 左右内边距，图标只剩 4px 可见宽度（表现为「图标被挤压变形」）；
   `button:hover{background:var(--brand-hover);color:var(--inverse-text)}` 的优先级(0,1,1)
   高于任意单个类选择器(0,1,0)，触摸/悬停时按钮被填成品牌色块（手机端触摸后 :hover 会
   粘住不消失）。故 padding / min-height / font-weight 与 :hover 的 background 一律写死。
   核心自己的 .mobile-menu-button 也是这个口径（显式 padding:0），此处对齐。 */
.forum-nav-menu-item{position:relative;display:inline-flex;flex:none;min-width:0}
.forum-nav-pop-group{padding:7px 10px 3px;color:var(--text-subtle);font-size:var(--font-size-xs);font-weight:700}
.forum-nav-menu-link{display:inline-flex;align-items:center;max-width:96px;height:28px;padding:0 8px;min-height:0;border:0;border-radius:var(--radius);background:none;color:var(--text-muted);font-size:var(--font-size-sm);font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.forum-nav-menu-link:hover{background:none;color:var(--text)}
.forum-nav-pop-panel{display:none;position:absolute;top:calc(100% + 6px);left:0;z-index:80;width:var(--forum-nav-pop-w,160px);max-width:calc(100vw - 24px);max-height:70vh;overflow:auto;padding:6px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--forum-nav-lift-float),inset 0 1px 0 var(--forum-nav-lit)}
/* 「导航」面板的悬停开合由 CSS 驱动（不依赖 JS 的指针能力探测——DevTools 设备仿真下
   `hover:hover` 会返回 false，JS 挂载被整段跳过，表现为「只能点开」）。鼠标指向按钮即
   展开，指针离开「按钮 + 面板」整体即收起；面板是 .forum-nav-menu-item 的后代，指针
   移入面板时 :hover 不断。两者之间 6px 空隙靠 ::after 桥接——指针落在伪元素上时
   :hover 仍归属该容器，否则面板会被自己下方这点空隙关掉。
   .is-open 供触摸端 / 键盘端的点击开合（CSS 探不出触摸，由脚本置类）。 */
.forum-nav-menu-item::after{content:"";position:absolute;left:0;right:0;top:100%;height:6px}
/* 1.11.0 起开合**只有 .is-open 一套**：鼠标开合由脚本驱动（移入即开、移出延迟关，
   见 JS 的 finePointer 分支），原来的 `:hover` 那一路已删 —— 两套并存时会互相打架
   （要延迟关闭就必须能拦住 :hover 的立即关，那只能由脚本单点控制状态）。 */
.forum-nav-pop-panel.is-open{display:block}
/* 菜单项统一 flex：文本可省略、箭头固定右侧 */
.forum-nav-pop-link{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:var(--radius);color:var(--text);font-size:var(--font-size-sm)}
.forum-nav-pop-link:hover{background:var(--brand-soft)}
.forum-nav-pop-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 父项：有子项时作纯展开触发器（不可点、指针为默认）。PC 上指向即在其下方展开；
   不能用 :focus-within——鼠标点击父项会把它聚焦并一直展开，再悬停另一个就是两个同时
   开着（站长实测）。键盘可达性改由脚本按 :focus-visible 补 .is-open（鼠标点击不算
   focus-visible，故不会钉住）；手机端（≤720px）关掉悬停展开，改点击切换 .is-open。 */
.forum-nav-pop-has-sub{position:relative}
.forum-nav-pop-parent{cursor:default}
/* 展开态把 › 转 90° 读作 ⌄ —— 子项展开只发生在下方（.forum-nav-pop-sub 的 display），
   箭头一起转向才读得出「这个父项已经展开」。两条路径与子项的展开条件严格对应：
   桌面 hover、触摸 / 键盘 .is-open（CSS 探不出触摸，由脚本置类）。
   用直接子链 `> .forum-nav-pop-parent > ` 只命中本层。caret 是 flex item（父级 .forum-nav-pop-parent
   是 display:flex），不是 inline 元素，故 transform 必然生效。 */
.forum-nav-pop-caret{flex:none;color:var(--text-subtle);transition:transform var(--transition-normal,.2s ease)}
.forum-nav-pop-has-sub:hover>.forum-nav-pop-parent>.forum-nav-pop-caret,
.forum-nav-pop-has-sub.is-open>.forum-nav-pop-parent>.forum-nav-pop-caret{transform:rotate(90deg)}
/* 截断项的全名提示：**自绘气泡**（1.11.2），不用原生 title —— 原生提示框由系统绘制，
   底色与文字在深浅两态下都不受站点控制（theme_plus 早为此把全站原生 title 换成自绘气泡）。
   这里全部走核心语义变量，配色插件映射 --panel / --text / --line 时自动随色随深浅；
   阴影复用与下拉面板同一枚 --forum-nav-lift-float，读作同一层浮层。
   z-index 高于下拉面板(80)与账号面板(90)，贴着触发项浮在它们之上。
   pointer-events:none 是必须的 —— 否则气泡会盖住鼠标、把 mouseout 搅乱（自己闪自己）。 */
.forum-nav-tip{position:fixed;left:0;top:0;z-index:95;max-width:min(320px,calc(100vw - 24px));
padding:6px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);
background:var(--panel);color:var(--text);font-size:var(--font-size-sm);line-height:1.5;
box-shadow:var(--forum-nav-lift-float);pointer-events:none;word-break:break-word}
.forum-nav-tip[hidden]{display:none}
.forum-nav-pop-sub{display:none;padding-left:14px}
.forum-nav-pop-has-sub:hover>.forum-nav-pop-sub,.forum-nav-pop-has-sub.is-open>.forum-nav-pop-sub{display:block}
.forum-nav-right{flex:0 1 auto;display:flex;align-items:center;justify-content:flex-end;gap:4px;min-width:0;margin-left:auto}
.forum-nav-search{display:inline-flex;align-items:center;gap:4px;height:30px;padding:0 8px;border-radius:var(--radius);color:var(--text-muted);font-size:var(--font-size-sm)}
.forum-nav-search:hover{color:var(--brand)}
/* 原生假输入框形态（search_style=native）：描边胶囊 + 放大镜 + 占位文字 */
.forum-nav-search-native{width:200px;height:32px;padding:0 12px;border:1px solid var(--line);border-radius:999px}
.forum-nav-search-native:hover{border-color:var(--brand);color:var(--brand)}
.forum-nav-search-native .forum-nav-search-text{color:var(--text-subtle)}
.forum-nav-search-native:hover .forum-nav-search-text{color:var(--brand)}
/* 仅图标形态（search_style=icon）：全局只显示图标按钮 */
.forum-nav-search-ico{width:30px;height:30px;padding:0;justify-content:center;flex:none}
.forum-nav-menu-btn{display:none;align-items:center;justify-content:center;flex:none;width:30px;height:30px;padding:0;min-height:0;border:0;border-radius:var(--radius);background:none;color:var(--text-muted);font-weight:400;cursor:pointer}
.forum-nav-menu-btn:hover{background:none;color:var(--brand)}
.forum-nav-menu-btn svg{width:18px;height:18px;flex:none}
.forum-nav-mine{position:relative;display:inline-flex;align-items:center;flex:none;padding:2px;min-height:0;border:0;border-radius:50%;background:none;cursor:pointer}
.forum-nav-mine:hover{background:none}
.forum-nav-avatar{display:block;width:28px;height:28px;border-radius:50%}
.forum-nav-unread{position:absolute;top:-3px;right:-5px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:var(--danger);color:var(--inverse-text);font-size:var(--font-size-xxs);line-height:16px;text-align:center;font-variant-numeric:tabular-nums}
.forum-nav-login{display:inline-flex;align-items:center;height:30px;padding:0 14px;border-radius:var(--radius);background:var(--brand-soft);color:var(--brand);font-size:var(--font-size-sm);font-weight:600}

/* 「+」发帖按钮（show_post 开关）：透明底，悬停时只有「+」变强调色 */
.forum-nav-new{display:inline-flex;align-items:center;justify-content:center;flex:none;width:30px;height:30px;border-radius:var(--radius);background:none;color:var(--text-muted)}
.forum-nav-new:hover{background:none;color:var(--brand)}
.forum-nav-new svg{width:18px;height:18px;flex:none}

/* 右区图标统一档位（1.5.1）：桌面 18px、手机（≤720px）24px——核心给顶栏搜索 / 菜单
   图标的既定两档。此前搜索 18（SVG 属性写死）、汉堡 19、加号 16、注入的外观入口各带
   各的尺寸，同排不齐；现统一由宿主 CSS 声明（HTML 属性仅作无 CSS 兜底，已同步同值）。
   注入入口（如 color_switch）的图标位一并覆盖：html 前缀使特异性必胜消费方自带规则
   （plugins.css 按插件 ID 字典序拼接，color_switch 在前、forum_nav 在后，顺序兜底同向）；
   消费方自带尺寸与本档一致，此规则的价值是把「档位定义权」收归宿主、防将来单方漂移。
   菜单浮层内部的选项图标（如 color-switch 菜单内的太阳 / 月亮）不属于顶栏入口档，不覆盖。 */
.forum-nav-right .forum-nav-search svg,
.forum-nav-right .forum-nav-menu-btn svg,
.forum-nav-right .forum-nav-new svg,
html .forum-nav-right .color-switch-ico,
html .forum-nav-right .color-switch-ico svg{width:18px;height:18px}

/* 吸顶（sticky 开关）：三层阴影 + 顶缘受光（1.8.0，移植自 theme_plus「光影」）。
   吸顶后顶栏压在正文之上、是全场离底面最远的浮层，所以用 lift-float 而不是给卡片用的
   lift；顶缘那条 1px 白线是玻璃压边，与底部保留的 1px border-bottom 一上一下，顶栏才
   读得出「一块有厚度的板」。令牌按核心语义变量派生，见 forum_nav_css() 末尾。 */
.forum-nav-top-sticky{position:sticky;top:0;z-index:70;box-shadow:var(--forum-nav-lift-float),inset 0 1px 0 var(--forum-nav-lit)}
/* 毛玻璃（nav_blur 开关，仅吸顶时生效）：滤镜**绝不能挂在 .forum-nav-top 上** ——
   backdrop-filter 与 filter / transform / will-change 一样，会让元素成为其**内部
   position:fixed / absolute 后代的包含块**，其他插件挂在顶栏里的浮层会被「困」在顶栏内
   （这正是 1.6.0 起刻意不用它的原因之一）。解法是挂在 ::before 这层「不含任何子元素」的
   独立层上：包含块效应只作用于该元素的后代，而伪元素没有后代，因此对顶栏里其他插件的
   内容零影响。吸顶时 .forum-nav-top 已经是 position:sticky（定位元素），::before 的
   inset:0 直接以它为参照，不需要再补 position。z-index:-1 稳定画在「顶栏自身半透明底
   之上、顶栏内容之下」——该元素此时是 position:sticky + z-index:70，自成层叠上下文，
   负层级的子层因此不会掉到页面底下。@supports 包裹：不支持滤镜的环境不输出这条规则，
   回落成现有的纯半透明底，不会出现「没有模糊但也没了底色」的空洞。 */
@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
    .forum-nav-top-sticky.forum-nav-top-blur::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}
}

/* 账号面板：由脚本搬到 body 末尾，absolute 定位在头像按钮下方（脱离顶栏子树） */
.forum-nav-panel{position:absolute;z-index:90;width:236px;padding:6px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--forum-nav-lift-float),inset 0 1px 0 var(--forum-nav-lit)}
.forum-nav-panel-head{display:flex;align-items:center;gap:10px;padding:8px;margin-bottom:4px;border-bottom:1px solid var(--line-soft)}
.forum-nav-panel-head .forum-nav-avatar{width:34px;height:34px;flex:none}
.forum-nav-panel-id{display:flex;flex-direction:column;gap:2px;min-width:0}
.forum-nav-panel-name{font-size:var(--font-size-md);font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 身份行第二行（等级 + 积分）：比用户名低一档、用次级文字色，不抢用户名。
   等级文本可能来自 levels 的状态链（组名 / LVx），长度不定，故同样允许省略。 */
.forum-nav-panel-rank{display:flex;align-items:center;gap:4px;font-size:var(--font-size-xs);color:var(--text-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.forum-nav-panel-rank .user-state-tag{flex:none}
.forum-nav-panel-links{display:grid;grid-template-columns:1fr 1fr;gap:2px 10px;font-size:var(--font-size-sm)}
.forum-nav-panel-link{position:relative;display:flex;align-items:center;gap:5px;min-height:26px;border-radius:var(--radius);color:var(--text-muted);white-space:nowrap;overflow:hidden;padding:0 4px}
.forum-nav-panel-link:hover{color:var(--brand)}
.forum-nav-panel-link svg{flex:none;width:14px;height:14px;color:var(--text-subtle)}
.forum-nav-panel-link:hover svg{color:var(--brand)}
.forum-nav-panel-unread{margin-left:auto;padding:0 5px;border-radius:999px;background:var(--danger);color:var(--inverse-text);font-size:var(--font-size-xxs);line-height:15px}
/* 「安全退出」行（1.9.0）：面板最尾的单行尾部动作，上方一条分隔线把它与入口列表分开。
   必须显式写死 padding / min-height / font-weight 与 :hover 的 background：核心全局
   `button{padding:7px 13px;min-height:32px;font-weight:700}`（index.css L2260）会把 26px
   高的行撑成 32px，而 `button:hover{background:var(--brand-hover);color:var(--inverse-text)}`
   优先级 (0,1,1) 高于任意单个类选择器，不写死就会在悬停时被填成品牌色块（与 1.4.0 顶栏
   那三个按钮踩的是同一个坑，见 DESIGN §10）。配色对齐核心的退出入口
   （.profile-exit-button 悬停走 --danger/--danger-soft），语义即「危险动作」。 */
.forum-nav-panel-exit{margin:6px 0 0;padding-top:6px;border-top:1px solid var(--line-soft)}
.forum-nav-panel-exit button{display:flex;align-items:center;gap:5px;width:100%;min-height:26px;padding:0 4px;border:0;border-radius:var(--radius);background:none;color:var(--text-muted);font:inherit;font-size:var(--font-size-sm);font-weight:400;line-height:1.4;cursor:pointer}
.forum-nav-panel-exit button:hover{background:var(--danger-soft);color:var(--danger)}
.forum-nav-panel-exit svg{flex:none;width:14px;height:14px}

/* 账号面板毛玻璃（panel_glass 开关，1.10.0）：底色与模糊**同进同出**——嵌套 @supports 要求
   「滤镜」与「color-mix」都支持才转半透明，否则只加模糊不加底色、或只加底色不加模糊，
   都会得到「半透明白塑料」：正文从面板底下透出来，可读性直接掉。基色复用顶栏那枚
   --forum-nav-glass-base（同一种材质，两处读起来才是一套），但 alpha 固定 82% 而不跟顶栏的
   sticky_alpha —— 那档可以低到 10%，面板照抄会读不清。 */
@supports (background: color-mix(in srgb, red, blue)){
    @supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
        .forum-nav-panel-glass{background:color-mix(in srgb,var(--forum-nav-glass-base,var(--panel)) 82%,transparent);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}
    }
}

/* 三档开合（html[data-forum-nav-mode] 门控；display 档不加规则，[hidden] 由 UA 的
   display:none 原生承担）。visibility / opacity 两档都用 [hidden]{display:block}
   抵消 UA 隐藏、让元素保持参与渲染，开合改由各自机制承担。 */
html[data-forum-nav-mode="visibility"] .forum-nav-panel{visibility:hidden}
html[data-forum-nav-mode="visibility"] .forum-nav-panel.is-open{visibility:visible}
html[data-forum-nav-mode="visibility"] .forum-nav-panel[hidden]{display:block}
html[data-forum-nav-mode="opacity"] .forum-nav-panel{opacity:0;pointer-events:none;transform:translateZ(0);will-change:transform}
html[data-forum-nav-mode="opacity"] .forum-nav-panel.is-open{opacity:1;pointer-events:auto}
html[data-forum-nav-mode="opacity"] .forum-nav-panel[hidden]{display:block}

/* 手机端（≤720px）：版块导航收起，版块走汉堡按钮打开的核心菜单抽屉（抽屉内容由
   核心 mobile_menu_html() 提供）；原生搜索撑满右区但保住图标下限——右区按钮已
   flex:none 不会被挤压，空间不足时先收品牌区文字、再压搜索胶囊到 44px 下限。 */
@media (max-width:720px){
    .forum-nav-links{display:none}
    .forum-nav-menu-btn{display:inline-flex}
    .forum-nav-search{padding:0 6px}
    .forum-nav-search-native{flex:1 1 auto;width:auto;min-width:44px}
    /* 右区图标手机档：24px，与核心手机端搜索 / 菜单图标同档（见桌面统一规则注释）。 */
    .forum-nav-right .forum-nav-search svg,
    .forum-nav-right .forum-nav-menu-btn svg,
    .forum-nav-right .forum-nav-new svg,
    html .forum-nav-right .color-switch-ico,
    html .forum-nav-right .color-switch-ico svg{width:24px;height:24px}
    /* 手机端没有悬停概念：关掉悬停展开（含触摸端 tap 后粘住的 :hover），改由脚本点击
       父项切换 .is-open；箭头保留，作为「可点开」的提示。 */
    .forum-nav-pop-has-sub:hover:not(.is-open)>.forum-nav-pop-sub{display:none}
}
@media print{
    .forum-nav-top{display:none}
}html[data-forum-nav]{--forum-nav-pop-w:160px;--forum-nav-float-close:1s;--forum-nav-glass-base:var(--panel);--forum-nav-shadow-far:var(--shadow-base);--forum-nav-lift-float:0 10px 30px var(--shadow-medium);--forum-nav-lit:rgba(255,255,255,.5)}@media (prefers-color-scheme:dark){html[data-forum-nav]{--forum-nav-lit:rgba(255,255,255,.08)}}html[data-site-color-mode="dark"]{--forum-nav-lit:rgba(255,255,255,.08)}html[data-site-color-mode="light"]{--forum-nav-lit:rgba(255,255,255,.5)}@supports (background: color-mix(in srgb, red, blue)){html[data-forum-nav]{--forum-nav-glass-base:color-mix(in srgb,var(--panel) 72%,var(--bg));--forum-nav-shadow-far:color-mix(in srgb,var(--shadow-base) 65%,transparent);--forum-nav-lift-float:0 2px 4px var(--shadow-base),0 12px 30px var(--shadow-medium),0 32px 64px var(--forum-nav-shadow-far)}.forum-nav-top-sticky[data-forum-nav-alpha="10"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 10%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="15"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 15%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="20"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 20%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="25"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 25%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="30"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 30%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="35"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 35%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="40"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 40%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="45"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 45%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="50"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 50%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="55"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 55%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="60"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 60%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="65"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 65%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="70"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 70%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="75"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 75%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="80"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 80%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="85"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 85%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="90"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 90%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="95"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 95%, transparent)}.forum-nav-top-sticky[data-forum-nav-alpha="100"]{background:color-mix(in srgb, var(--forum-nav-glass-base,var(--panel)) 100%, transparent)}}html .forum-nav-bar .forum-nav-right .color-switch-toggle{width:30px;height:30px;color:var(--text-muted)}html .forum-nav-bar .forum-nav-right .color-switch-toggle:hover{color:var(--brand)}form.plugin-settings-form.forum-nav-admin-form{max-width:none}.forum-nav-admin-cards{margin-bottom:2px}.forum-nav-admin-card{break-inside:avoid;-webkit-column-break-inside:avoid;page-break-inside:avoid;margin:0 0 14px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.forum-nav-admin-card-head{padding:10px 14px;border-bottom:1px solid var(--line-soft)}.forum-nav-admin-card-head h3{margin:0;font-size:var(--font-size-md);color:var(--text)}.forum-nav-admin-card-head p{margin:4px 0 0;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.55}.forum-nav-admin-card-body{padding:10px 14px}.forum-nav-admin-field{margin:0 0 12px}.forum-nav-admin-card-body .forum-nav-admin-field:last-child{margin-bottom:0}.forum-nav-admin-field p{margin:0 0 6px}.forum-nav-admin-field-label{display:block;color:var(--text);font-weight:600;font-size:var(--font-size-sm);margin-bottom:6px}.forum-nav-admin-check{display:flex;align-items:center;gap:8px;cursor:pointer}.forum-nav-admin-check input{flex:none;margin:0}.forum-nav-admin-help{display:block;margin-top:4px;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.6}.forum-nav-admin-warn{margin:0 0 12px;padding:8px 12px;border:1px solid var(--brand);border-radius:var(--radius-sm);background:var(--brand-soft);color:var(--text);font-size:var(--font-size-sm)}.forum-nav-admin-forums{list-style:none;margin:0 0 4px;padding:0;max-height:320px;overflow:auto;border:1px solid var(--line-soft);border-radius:var(--radius-sm)}.forum-nav-admin-forums li{display:flex;align-items:center;gap:8px;margin:0;padding:5px 10px;border-bottom:1px solid var(--line-soft)}.forum-nav-admin-forums li:last-child{border-bottom:0}.forum-nav-admin-forums li label{display:inline-flex;align-items:center;gap:6px;flex:1 1 auto;min-width:0;cursor:pointer}.forum-nav-admin-forums input[type="number"]{width:56px;flex:none}.forum-nav-admin-forums input[type="checkbox"]{flex:none;margin:0}form.plugin-settings-form.forum-nav-admin-form .forum-nav-admin-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:4px}.forum-nav-admin-note{color:var(--text-subtle);font-size:var(--font-size-xs)}
/* forum_pin */
/* forum_pin 1.1.4 */
/* 置顶卡片：行式条目直接坐在淡强调色渐变底上，不与普通列表抢视觉（只用系统变量，不引主题变量）。
   margin 归零（1.0.9）：卡片与首条列表项的间距由核心 .post-item 的 padding-top:12px 独自承担——
   原来卡片自带的 12px 外边距会与之叠成 24px 空白（上方工具条才 10px，下方显得空）；归零后 12px
   与列表项之间的内部节奏一致，也是不动核心样式能达到的最小间距 */
/* --forum-pin-slide：轮播补间时长。.45s 为刻意慢于标准动效（--transition-normal .2s）的数值——
   整行宽度滑入需要更慢的节奏（DESIGN §6 定稿），仅 .forum-pin-track 使用；此处以语义化变量集中定义 */
[data-forum-pin]{--forum-pin-line-height:30px;--forum-pin-slide:.45s ease;--forum-pin-index:0;position:relative;display:flex;align-items:center;gap:8px;margin:0;padding:6px 10px;border:1px solid var(--line);border-radius:var(--radius);background:linear-gradient(135deg,var(--brand-soft),var(--panel) 70%);transition:border-color var(--transition-normal)}
[data-forum-pin]:hover{border-color:var(--brand)}
/* 右侧空白区的图钉水印：mask 抠出图钉形状（Material 经典 push_pin）、按主题强调色（--brand）低透明垫底，
   后台切换强调色即联动（1.0.7 起，原跟随文字色）；斜置 24° 营造「置顶 = 图钉钉住」的暗影感。
   pointer-events:none 是硬性要求——它叠在内容上层，绝不允许成为挡点击的透明覆盖层（见 §13 排查史） */
[data-forum-pin]::after{content:"";position:absolute;right:72px;top:50%;width:44px;height:44px;transform:translateY(-50%) rotate(24deg);background:var(--brand);opacity:.09;pointer-events:none;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3z'/%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%3Cpath d='M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3z'/%3E%3C/svg%3E") center/contain no-repeat}
[data-forum-pin] .forum-pin-window{flex:1 1 0%;min-width:0;overflow:hidden}
[data-forum-pin] .forum-pin-track{position:relative;transition:transform var(--forum-pin-slide,.45s ease);will-change:transform}
/* 行式条目：无边框 / 无底色 / 无圆角，直接排在块渐变底上；悬停整行转强调色。
   显式 margin:0，保证竖排时「一条 = 一个行高」，位移不受主题给 a 加的外边距影响 */
[data-forum-pin] .forum-pin-line{display:flex;align-items:center;gap:6px;min-width:0;margin:0;height:var(--forum-pin-line-height);color:var(--text);text-decoration:none;transition:color var(--transition-normal)}
[data-forum-pin] .forum-pin-line:hover,[data-forum-pin] .forum-pin-line:hover .forum-pin-line-title{color:var(--brand)}
[data-forum-pin] .forum-pin-line:focus-visible{border-radius:var(--radius-sm);outline:2px solid var(--focus-ring);outline-offset:2px}
/* 位移一律由「索引 × 自身尺寸」在 CSS 里算，JS 只下发无单位索引 --forum-pin-index：
   横排每条占满整轨，所以 -100% 正好一条；竖排每条一个行高，所以 -索引 × 行高 正好一屏。
   这样位移完全不依赖 JS 测量（offsetLeft / clientWidth），布局未就绪也不会算成「原地不动」。
   左右滚动（默认）：每次一条、占满整行宽度，横向逐条滑入滑出；标题长度只由「标题截断字数」钳制 */
[data-forum-pin][data-forum-pin-direction="horizontal"] .forum-pin-track{display:flex;width:100%;transform:translateX(calc(var(--forum-pin-index,0) * -100%))}
[data-forum-pin][data-forum-pin-direction="horizontal"] .forum-pin-line{flex:0 0 100%}
/* 上下滚动：窗口高 = 行高 × 可见条数，逐行上滚（行高恒定，位移恒为行高的整数倍） */
[data-forum-pin][data-forum-pin-direction="vertical"] .forum-pin-window{height:calc(var(--forum-pin-line-height) * var(--forum-pin-visible,1))}
[data-forum-pin][data-forum-pin-direction="vertical"] .forum-pin-track{transform:translateY(calc(var(--forum-pin-index,0) * -1 * var(--forum-pin-line-height)))}
[data-forum-pin] .forum-pin-badge{display:inline-flex;flex:0 0 auto;align-items:center;height:18px;min-width:18px;line-height:1;padding:0 6px;border-radius:999px;background:var(--brand-soft);color:var(--success);font-size:var(--font-size-xs);font-weight:700}
[data-forum-pin] .forum-pin-badge-global{background:var(--warning-soft);color:var(--warning)}
/* 标题字重与主列表对齐：核心 .post-title 基准回到 700（v10.3，index.css L781-790；1.0.12 的 400 对齐依据失效）；
   放大的内联 font-size:1.2em 覆盖本层的 font-size（em 相对继承字号，与主列表同语义），恒定行高内以省略号收尾 */
[data-forum-pin] .forum-pin-line-title{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:var(--font-size-md);font-weight:700;color:inherit;transition:color var(--transition-normal)}
/* 切换箭头走「幽灵按钮」路线：无边框无底色、默认淡显（opacity .65），悬停才现出强调色底——
   它是辅助操作，视觉存在感应弱于标题，避免和内容抢注意力 */
[data-forum-pin] .forum-pin-nav{position:relative;z-index:6;display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:22px;min-width:22px;height:22px;min-height:22px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--text-muted);opacity:.65;cursor:pointer;transition:color var(--transition-normal),opacity var(--transition-normal),background-color var(--transition-normal)}
/* 箭头容器：横排档（含移动端强制横排的竖排档）两个按钮并排在窗口右侧；竖排档下方规则改为竖列 */
[data-forum-pin] .forum-pin-navs{display:flex;align-items:center;gap:4px;flex:0 0 auto}
/* 上下滚动档：两个箭头改为竖列叠放在窗口右侧，图标顺时针转 90°（◄→▲、►→▼），与滚动方向一致。
   按钮保持正圆（radius 50% 在拉伸后会变椭圆）；幽灵按钮无框无底，不存在挤压问题 */
[data-forum-pin][data-forum-pin-direction="vertical"] .forum-pin-navs{flex-direction:column;justify-content:center;align-self:stretch}
[data-forum-pin][data-forum-pin-direction="vertical"] .forum-pin-nav svg{transform:rotate(90deg)}
[data-forum-pin] .forum-pin-nav:hover:not([data-forum-pin-off]){background:var(--brand-soft);color:var(--brand);opacity:1}
[data-forum-pin] .forum-pin-nav:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}
/* 触控热区扩展：按钮视觉 18~22px，可点面积以 ::after 外扩 8px（约 34px）——移动端手指好点，视觉不臃肿 */
[data-forum-pin] .forum-pin-nav::after{content:'';position:absolute;inset:-8px;border-radius:50%}
/* 到端态：用自有属性而不是 :disabled（见 forum_pin_nav_html 注释），无框按钮上以更低的透明度表达置灰 */
[data-forum-pin] .forum-pin-nav[data-forum-pin-off]{opacity:.3}
[data-forum-pin] .forum-pin-nav-icon{width:14px;height:14px}
/* 长标题提示条：left/right:0 绝对定位在块宽之内；直接是 [data-forum-pin] 的子节点（不在 .forum-pin-window 内），
   否则会被窗口的 overflow:hidden 裁掉。垂直位置由 JS 悬停时写内联 top（恒在悬停行上方，空间不足贴面板顶
   钳制，1.0.15；内联 bottom 恒写 auto 压过默认值）；默认 bottom:100% 只是隐藏态的惰性兜底。
   高度封顶 2 行（1.0.16 起）：clamp 放在内层文本盒 .forum-pin-tip-text 上而非本层——本层自带竖向 padding，
   而 overflow 的裁剪边是 padding 盒边缘，被截断行的字头会从底部 padding 带里露出来（1.0.16 剃头现象，
   §13-21）；内层无内边距，裁剪边 = 内容边 = 恰好第 2 行行尾，被截断内容无处可画。
   pointer-events:none 是硬性要求——提示条会叠在相邻行 / 工具条之上，绝不允许挡住它们的悬停与点击（§13-15 同纪律） */
[data-forum-pin] .forum-pin-tip{position:absolute;left:0;right:0;bottom:100%;margin-bottom:4px;z-index:5;pointer-events:none;max-width:100%;padding:6px 9px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-sm);line-height:1.5;box-shadow:0 6px 18px var(--shadow-medium)}
[data-forum-pin] .forum-pin-tip-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere}
[data-forum-pin] .forum-pin-tip[hidden]{display:none}
@media(max-width:720px){
[data-forum-pin]{--forum-pin-line-height:28px;padding:5px 8px;gap:6px}
/* 图钉水印：箭头隐藏后右侧不再让位，按 PC 版相对块高的比例取值（PC 44/42≈1.05 → 40/38），
   位置回到释放出的右侧空间（1.0.21 前的 60px/34px 是为箭头让位的特例） */
[data-forum-pin]::after{right:16px;width:40px;height:40px}
/* 标题字号不在手机端降级：主列表 .post-title 手机端仍是 --font-size-md（核心只改换行不改字号），
   置顶块单独降到 --font-size-sm 会比同页主列表小一号、12px 粗体在手机上发虚显淡（1.0.11 移除）。 */
/* 窄屏隐藏手动切换箭头：切换由自动轮播（后台可配，默认 5 秒）+ 轻扫承担（1.0.21）——横排档原生
   [prev][窗口][next] 与被强制横排的竖排档 [窗口][navs] 一并覆盖；标题多出约 50px 横向空间；
   reduced-motion（不自动轮播）下轻扫仍可用。服务端渲染与桌面端不动，跨回桌面断点箭头自动恢复 */
[data-forum-pin] .forum-pin-nav,
[data-forum-pin] .forum-pin-navs{display:none}
}
@media(prefers-reduced-motion:reduce){
[data-forum-pin] .forum-pin-track{transition:none}
}
/* 三点菜单项：自有类名，外观贴近对端菜单项，只用系统变量 */
.forum-pin-menu-item{display:flex;align-items:center;justify-content:flex-start;width:100%;min-height:30px;padding:5px 10px;margin:0;border:1px solid transparent;border-radius:var(--radius-sm);background:none;color:var(--text);font-size:var(--font-size-xs);font-weight:400;line-height:1.4;text-align:left;cursor:pointer;transition:background var(--transition-normal),border-color var(--transition-normal),color var(--transition-normal)}
.forum-pin-menu-item:hover{border-color:transparent;background:var(--line-soft);color:var(--brand)}
.forum-pin-menu-item:focus-visible{border-color:transparent;outline:none;box-shadow:0 0 0 2px var(--brand-soft)}
/* 弹层：单例 DOM，由 JS 生成；无 JS 时不产生半截交互。
   弹层挂在 body 上（不在 [data-forum-pin] 根容器内），因此统一用属性前缀 [data-forum-pin-modal] 抬高特异性，
   压过核心 / 主题里 button、label 一类的通用规则；并对齐与文字色全部显式声明，避免被继承样式带偏。 */
.forum-pin-modal-backdrop{position:fixed;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:16px;background:var(--backdrop)}
.forum-pin-modal-backdrop[hidden]{display:none}
.forum-pin-modal{width:min(380px,100%);max-height:calc(100vh - 32px);overflow:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text);box-shadow:0 20px 60px var(--shadow-medium)}
.forum-pin-modal-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line-soft)}
.forum-pin-modal-head strong{font-size:var(--font-size-md);color:var(--text)}
[data-forum-pin-modal] .forum-pin-modal-close{width:28px;min-width:28px;height:28px;min-height:28px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--text-muted);font:inherit;cursor:pointer}
[data-forum-pin-modal] .forum-pin-modal-close:hover{background:var(--line-soft);color:var(--text)}
.forum-pin-modal-body{padding:14px;text-align:left}
[data-forum-pin-modal] .forum-pin-status{margin:0 0 10px;color:var(--text-muted);font-size:var(--font-size-sm);text-align:left}
[data-forum-pin-modal] .forum-pin-status.is-error{color:var(--danger)}
/* 置顶范围：显式左对齐 + 显式文字色，避免被主题的 label / form 通用样式改成居中或浅色 */
[data-forum-pin-modal] .forum-pin-scope{display:grid;justify-items:start;gap:8px;min-width:0;margin:0 0 14px;text-align:left}
[data-forum-pin-modal] .forum-pin-scope label{display:flex;align-items:center;justify-content:flex-start;gap:8px;width:100%;min-width:0;font-size:var(--font-size-sm);color:var(--text);text-align:left;cursor:pointer}
/* 单选框：核心 index.css 有**全局** `input,select,textarea{width:100%;border;background;padding}`（只 1 级特异性，
   但本插件此前只声明了 flex 与 margin，width / 边框 / 内边距全部吃到了那条全局规则），结果是 radio 被撑成整行宽的
   输入框、字形在框内居中，同一 flex 行里的标题 <span> 被挤成 0 宽（表现为「两个选择居中且文字看不见」）。
   必须逐项显式复位，不能只写 flex。 */
[data-forum-pin-modal] .forum-pin-scope label input{flex:0 0 auto;width:auto;min-width:0;max-width:none;height:auto;margin:0;padding:0;border:0;background:none}
[data-forum-pin-modal] .forum-pin-scope label span{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:inherit;text-align:left}
[data-forum-pin-modal] .forum-pin-scope label:has(input:disabled){color:var(--text-muted);cursor:default}
[data-forum-pin-modal] .forum-pin-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}
/* 按钮配色：保存 = 强调色实底；关闭 / 重试 = 中性描边；取消置顶 = 危险色实底。全部显式声明，不吃核心 button 默认色 */
[data-forum-pin-modal] .forum-pin-btn{min-height:34px;padding:0 14px;border-radius:var(--radius-sm);font:inherit;font-size:var(--font-size-sm);font-weight:400;line-height:1.2;cursor:pointer}
[data-forum-pin-modal] .forum-pin-btn:disabled{opacity:.6;cursor:default}
[data-forum-pin-modal] .forum-pin-btn-plain{border:1px solid var(--line);background:var(--bg);color:var(--text)}
[data-forum-pin-modal] .forum-pin-btn-plain:hover:not(:disabled){background:var(--line-soft);border-color:var(--line);color:var(--text)}
[data-forum-pin-modal] .forum-pin-btn-primary{border:1px solid var(--brand);background:var(--brand);color:var(--inverse-text)}
[data-forum-pin-modal] .forum-pin-btn-primary:hover:not(:disabled){border-color:var(--brand);background:var(--brand);color:var(--inverse-text);opacity:.88}
[data-forum-pin-modal] .forum-pin-btn-unpin{margin-right:auto;border:1px solid var(--danger);background:var(--danger);color:var(--inverse-text)}
[data-forum-pin-modal] .forum-pin-btn-unpin:hover:not(:disabled){border-color:var(--danger);background:var(--danger);color:var(--inverse-text);opacity:.88}
/* forum_shortcut */
/* 几何与视觉集中在基规则（display 由状态类与媒体查询决定，避免多处重复）；
   栏宽与不透明度由容器内联样式写入 CSS 变量（固定 CSS 不能依赖配置值），此处给默认回退值。
   容器自身 overflow:visible（浮层不被裁剪），滚动由内层 .forum-shortcut-list 承担。
   水平定位是单一连续公式：min(面板左锚, 屏幕钳制)——有空间就贴住面板左缘，空间不足
   （右缘会越过屏幕）时钳制项生效、栏收拢到距左 8px，两式重合处过渡连续，跨缩放/拖动
   窗口无跳变。面板左锚（--forum-shortcut-anchor）与顶距（--forum-shortcut-top）由 JS
   实测 main.wrap 写入（1.2.4）：主题可改版心宽度/页面内边距（theme_plus 的四档版心等），
   实测值自动跟随；此处的 50%+600px / 61px 只是未启用 JS 或量不到容器时的回退值，
   按核心默认 1200px 版心（right=50%+600px ⇔ 右缘位于 50vw−600px，与居中 .wrap 左缘重合，
   视觉留出 wrap 的 12px 内边距）+ 顶栏 48px + wrap 上内边距 12px 成立。
   背景（1.4.5）：强调色半透明渐变（135deg，品牌色 15% 渐入面板色 78%、70% 处收束，构图参照
   user_panel 卡片表面 brand-soft→panel 70%），经 color-mix 用语义变量取色，随昼夜主题令牌
   自适应；前置 background:var(--panel) 为不支持 color-mix 的旧浏览器回退。max-height 与实测
   顶距联动（100vh − 顶距 − 12px）：固定 73px 只按回退顶距 61px 成立，顶栏更高的主题下栏底会越出视口 */
.forum-shortcut{display:none;position:fixed;top:var(--forum-shortcut-top,61px);right:min(var(--forum-shortcut-anchor,calc(50% + 600px)),calc(100% - 8px - var(--forum-shortcut-width,80px)));width:var(--forum-shortcut-width,80px);opacity:var(--forum-shortcut-opacity,.9);max-height:calc(100vh - var(--forum-shortcut-top,61px) - 12px);overflow:visible;padding:6px;background:var(--panel);background:linear-gradient(135deg,color-mix(in srgb,var(--brand) 15%,transparent),color-mix(in srgb,var(--panel) 78%,transparent) 70%);border:1px solid var(--line-soft);border-radius:var(--radius);box-shadow:0 6px 18px var(--shadow-base);z-index:30}
/* JS 门控：视口 >= 后台配置的最小宽度时加 -on 显示（不达标时加 -off 隐藏） */
.forum-shortcut.forum-shortcut-on{display:flex;flex-direction:column}
/* 无 JS 回退：按默认断点 1200（与后台默认值一致）显示。JS 在时不达标会加 -off 覆盖本规则 */
@media (min-width:1200px){
.forum-shortcut{display:flex;flex-direction:column}
}
.forum-shortcut.forum-shortcut-off{display:none}
/* 关闭态：0-3-0 压过门控类 .forum-shortcut-on（0-2-0）的 display:flex */
.forum-shortcut.forum-shortcut-on.forum-shortcut-closed{display:none}
/* 服务端 Cookie 记忆（1.4.0）：访客已关闭时服务端预置 -closed，首绘即隐藏、无修正闪烁。
   0-2-0 与 -on 同特异性但位于其后（压过它与 0-1-0 的无 JS 回退媒体查询）；无 JS 访客不可能
   写入该 Cookie（Cookie 由 JS 翻栏时写），回退显示不受影响 */
.forum-shortcut.forum-shortcut-closed{display:none}
/* 版块列表：唯一滚动层（min-height:0 是 flex 子项可收缩的必要条件），底部操作条因此常驻不随列表滚走 */
.forum-shortcut-list{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:2px}
/* 重开小标签：关闭后留在原位置，点它恢复直达栏。与直达栏共用 JS 实测锚点（钳制项按 24px 宽计算） */
.forum-shortcut-reopen[data-forum-shortcut-reopen]{display:none;position:fixed;top:var(--forum-shortcut-top,61px);right:min(var(--forum-shortcut-anchor,calc(50% + 600px)),calc(100% - 32px));width:24px;height:28px;min-height:0;padding:0;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--panel);color:var(--text-subtle);box-shadow:0 6px 18px var(--shadow-base);cursor:pointer;z-index:30}
.forum-shortcut-reopen[data-forum-shortcut-reopen]::after{content:"»";font-size:var(--font-size-xs);line-height:1}
.forum-shortcut-reopen[data-forum-shortcut-reopen]:hover{background:var(--panel);border-color:var(--line);color:var(--text)}
.forum-shortcut-reopen[data-forum-shortcut-reopen].forum-shortcut-reopen-on{display:flex;align-items:center;justify-content:center}

.forum-shortcut-item{position:relative;display:flex;align-items:center;gap:6px;padding:4px 6px;border-radius:var(--radius-sm);color:var(--text-muted);font-size:var(--font-size-md);line-height:1.5;text-decoration:none;white-space:nowrap}
.forum-shortcut-item:hover{background:var(--brand-soft);color:var(--text)}
.forum-shortcut-active{background:var(--brand-soft);color:var(--brand);font-weight:600}
.forum-shortcut-dot{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--forum-shortcut-dot,var(--brand))}
.forum-shortcut-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}

/* 栏底操作条：折叠/展开切换 + 隐藏整栏。核心 button 为元素选择器、:hover 为 0-1-1，
   故按钮一律用「容器类 + data-* 属性」的 0-2-0 选择器压回（悬停不变绿、不撑高） */
.forum-shortcut-actions{display:flex;align-items:center;margin-top:4px;border-top:1px solid var(--line-soft)}
.forum-shortcut [data-forum-shortcut-toggle],.forum-shortcut [data-forum-shortcut-close]{position:relative;flex:1 1 0;min-width:0;min-height:0;padding:4px 0;border:0;border-radius:0;background:none;color:var(--text-subtle);font-size:var(--font-size-xs);font-weight:400;line-height:1;cursor:pointer}
.forum-shortcut [data-forum-shortcut-toggle]:hover,.forum-shortcut [data-forum-shortcut-close]:hover{background:none;color:var(--text)}
.forum-shortcut [data-forum-shortcut-toggle]::after{content:"«"}
.forum-shortcut [data-forum-shortcut-close]::after{content:"×"}
/* 操作按钮与重开标签的悬停气泡：与版块名气泡同一官方视觉。这三处的 ::after 已用于字形（«/»/×），故气泡走 ::before；
   位置恒为按钮右侧（纯 CSS、从不变化），transition:all 无副作用 */
.forum-shortcut [data-forum-shortcut-toggle]::before,.forum-shortcut [data-forum-shortcut-close]::before,.forum-shortcut-reopen[data-forum-shortcut-reopen]::before{content:attr(data-forum-shortcut-tip);position:absolute;left:calc(100% + 6px);top:50%;transform:translateY(-50%);padding:4px 8px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text);box-shadow:0 6px 18px var(--shadow-medium);font-size:var(--font-size-xs);font-weight:400;line-height:1.4;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--transition-normal),visibility var(--transition-normal);z-index:2}
.forum-shortcut [data-forum-shortcut-toggle]:hover::before,.forum-shortcut [data-forum-shortcut-close]:hover::before,.forum-shortcut-reopen[data-forum-shortcut-reopen]:hover::before{opacity:1;visibility:visible}

/* 折叠态容器：JS 门控类 .forum-shortcut-on 为 0-2-0，故此处同列 0-2-0（无 JS 回退）+ 0-3-0（JS 态）双写。
   钳制项须按折叠宽重算（1.3.0）：基准规则的钳制用配置栏宽 var（120px），折叠后若沿用会仍按 120px
   收拢，30px 圆点条在留白不足区（版心左缘留白 < 配置栏宽，如 1366 笔记本）悬在离屏 98~128px 处
   压住面板；与重开标签按自身宽度（24+8=32）收拢同一先例 */
.forum-shortcut.forum-shortcut-collapsed,.forum-shortcut.forum-shortcut-on.forum-shortcut-collapsed{width:30px;padding:6px 2px;right:min(var(--forum-shortcut-anchor,calc(50% + 600px)),calc(100% - 38px))}
.forum-shortcut.forum-shortcut-collapsed .forum-shortcut-name{display:none}
.forum-shortcut.forum-shortcut-collapsed .forum-shortcut-item{justify-content:center;padding:5px 2px}
.forum-shortcut.forum-shortcut-collapsed [data-forum-shortcut-toggle]::after{content:"»"}
/* 版块名气泡（单例、JS 定位）：半透明栏与滚动列表都会干扰纯 CSS 气泡（列表 overflow-y:auto 会把
   overflow-x 一并算作 auto，横竖都裁），故用 position:fixed 放在栏外逃逸裁剪，视觉仍是官方 tooltip。
   过渡只允许 opacity/visibility——JS 会即时改写 top/left，若用 transition:all（如 var(--transition-normal)
   裸写）位置变化也会被过渡成「从旧坐标/视口左上角飞入」；操作条按钮的 ::before 气泡位置恒定不受此影响 */
.forum-shortcut-tip{position:fixed;top:0;left:0;transform:translateY(-50%);padding:4px 8px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text);box-shadow:0 6px 18px var(--shadow-medium);font-size:var(--font-size-xs);font-weight:400;line-height:1.4;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--transition-normal),visibility var(--transition-normal);z-index:31}
.forum-shortcut-tip.forum-shortcut-tip-on{opacity:1;visibility:visible}

/* 后台配置页：核心 .plugin-admin-legacy-body input:not([type=checkbox]) 以 0-3-1 强制 width:100%，
   故此处用 0-4-1 的同级容器选择器压回（不依赖资源加载顺序，不用 !important） */
.forum-shortcut-admin-block{margin-bottom:14px}
.forum-shortcut-admin-block-title{font-size:var(--font-size-sm);font-weight:600;color:var(--text)}
.forum-shortcut-admin-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:6px 14px;margin-top:8px}
.forum-shortcut-admin-row{display:flex;align-items:center;gap:8px;font-size:var(--font-size-sm);color:var(--text)}
.forum-shortcut-admin-list .forum-shortcut-admin-row input[type=checkbox]{flex:0 0 auto;width:38px;height:22px;margin:0;padding:0}
/* 圆形色点：外层圆形 + 原生取色块的圆角（WebKit/Firefox 各有一组伪元素），点击仍唤起原生色盘 */
.forum-shortcut-admin-list .forum-shortcut-admin-row input[type=color].forum-shortcut-admin-color{flex:0 0 22px;width:22px;height:22px;min-width:0;margin:0;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--panel);overflow:hidden;cursor:pointer}
.forum-shortcut-admin-color::-webkit-color-swatch-wrapper{padding:0}
.forum-shortcut-admin-color::-webkit-color-swatch{border:0;border-radius:50%}
.forum-shortcut-admin-color::-moz-color-swatch{border:0;border-radius:50%}
/* 未勾选的版块其取色器禁用：需与上方定尺寸规则同特异性（0-5-1）才压得住 cursor:pointer */
.forum-shortcut-admin-list .forum-shortcut-admin-row input[type=color].forum-shortcut-admin-color:disabled{opacity:.45;cursor:not-allowed}
.forum-shortcut-admin-list .forum-shortcut-admin-row .forum-shortcut-admin-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.forum-shortcut-admin-empty{margin:8px 0 0;font-size:var(--font-size-sm);color:var(--text-subtle)}
.forum-shortcut-admin-rules{margin:12px 0;padding:10px 14px;border:1px solid var(--line-soft);border-radius:var(--radius);font-size:var(--font-size-sm);color:var(--text-muted)}
.forum-shortcut-admin-rules ul{margin:6px 0 0;padding-left:18px}
.forum-shortcut-admin-rules li{margin-bottom:4px}
/* guest_gate */
/* 登录/注册弹窗：截取核心认证页 .auth-panel 注入。核心 .form-panel form 为 grid + 2px 间距（弹窗内过挤），
   此处复位容器外观、放大字段间距并让提交按钮通栏，使弹窗内观感与独立认证页一致 */
.guest-gate-auth-modal .auth-panel{margin:0;padding:0;border:0;border-radius:0;background:none}
.guest-gate-auth-modal .auth-panel h2{margin:0 0 14px;font-size:var(--font-size-lg)}
/* 弹窗标题栏：站点 Logo + 站点名（替代"登录/注册"文案，认证类型由 .auth-panel h2 承担） */
.guest-gate-auth-brand{display:flex;align-items:center;gap:8px;min-width:0}
.guest-gate-auth-logo{width:20px;height:20px;flex:0 0 auto;display:block}
.guest-gate-auth-site{font-size:var(--font-size-md);font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.guest-gate-auth-modal .auth-panel form{display:flex;flex-direction:column;gap:10px}
.guest-gate-auth-modal .auth-panel button{align-self:stretch}
.guest-gate-auth-loading{margin:0;color:var(--text-muted);font-size:var(--font-size-sm)}
/* 弹窗底部互切行（1.6.6）：对端认证入口 + 面板尾部辅助区（表单之后的兄弟节点，核心
   login.after_form 注入，如 reg_control 的「忘记密码」）同行排布——辅助入口靠左、互切靠右，
   无辅助入口时整行居中。只依赖核心面板结构（h2+表单+尾部），不引用其他插件的类名 */
.guest-gate-auth-switch{display:flex;align-items:baseline;justify-content:center;gap:4px 12px;flex-wrap:wrap;margin:12px 0 0;font-size:var(--font-size-sm);color:var(--text-muted)}
.guest-gate-auth-switch.has-extra{justify-content:space-between}
/* 移入节点的块级外边距归零。特异性必须压过协同插件对同一元素的自有规则——如 reg_control
   的 .reg-control-login-extra{margin-top:12px}（0,1,0）：plugins.css 按插件 ID 字典序拼接，
   guest_gate 在前、等特异性必输（实测表现为该项文字被 margin 顶低约 6px），故挂 modal
   祖先前缀抬到 (0,2,0)，不依赖拼接顺序；基线对齐（baseline）兜底同类问题 */
.guest-gate-auth-modal .guest-gate-auth-switch>*{margin:0}
.guest-gate-auth-modal .guest-gate-auth-switch a{color:var(--brand);font-weight:600}
.guest-gate-auth-modal .guest-gate-auth-switch a:hover{color:var(--brand-hover);text-decoration:underline}

/* 互动时机引导（底部 snackbar；层级高于内容层 35-40、低于弹窗遮罩 100） */
.guest-gate-nudge{position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom, 0px));transform:translateX(-50%);z-index:45;display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;max-width:min(680px,calc(100vw - 24px));padding:10px 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:0 6px 18px var(--shadow-medium);animation:guest-gate-nudge-in var(--transition-normal) both}
.guest-gate-nudge[hidden]{display:none}
.guest-gate-nudge-text{font-size:var(--font-size-sm);color:var(--text);line-height:1.6}
.guest-gate-nudge-actions{display:inline-flex;align-items:center;gap:8px}
.guest-gate-nudge-btn{display:inline-flex;align-items:center;min-height:28px;padding:0 12px;border-radius:var(--radius-sm);background:var(--brand);color:var(--inverse-text);font-size:var(--font-size-sm);font-weight:600;text-decoration:none;transition:background var(--transition-normal)}
.guest-gate-nudge-btn:hover{background:var(--brand-hover);color:var(--inverse-text)}
.guest-gate-nudge-btn.alt{background:var(--panel);color:var(--text);border:1px solid var(--line)}
.guest-gate-nudge-btn.alt:hover{background:var(--brand-soft);color:var(--brand-hover)}
.guest-gate-nudge-close{background:none;border:0;color:var(--text-subtle);font-size:var(--font-size-lg);line-height:1;padding:0 2px;cursor:pointer}
.guest-gate-nudge-close:hover{color:var(--danger)}
@keyframes guest-gate-nudge-in{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}
@media (prefers-reduced-motion:reduce){.guest-gate-nudge{animation:none}}
/* 融入核心「登录后回复」框的引导内容（reply-login-box 为 flex 居中 + 虚线框，
   框内 a 自动呈品牌色按钮形态；此处改为纵向两行——文案一行、按钮并排一行，
   注册按钮以描边形态区分） */
.guest-gate-login-box{flex-direction:column;gap:10px;max-width:640px;margin:0 auto;padding:14px 16px}
.guest-gate-login-note{font-size:var(--font-size-sm);color:var(--text-subtle);line-height:1.7}
.guest-gate-login-actions{display:inline-flex;align-items:center;gap:10px}
.reply-login-box.guest-gate-login-box a.guest-gate-login-register{background:var(--panel);color:var(--text);border:1px solid var(--line);font-weight:600}
.reply-login-box.guest-gate-login-box a.guest-gate-login-register:hover{background:var(--brand-soft);color:var(--brand-hover)}
/* 主楼预览渐隐呈现：正文底部经 mask 渐隐（对内容本身生效，任意背景色成立）。
   「登录后查看全文」压住正文底部分割线 50%——按钮相对上移半个身位（min-height 的一半），
   上半覆盖渐隐区、下半落于强调色渐变带；引导带对底层内容透传指针事件，仅按钮可点 */
.guest-gate-preview-body{-webkit-mask-image:linear-gradient(180deg,#000 calc(100% - 76px),transparent 100%);mask-image:linear-gradient(180deg,#000 calc(100% - 76px),transparent 100%)}
.guest-gate-preview-more{position:relative;text-align:center;padding:2px 0 22px;background:linear-gradient(180deg,var(--brand-soft),transparent);pointer-events:none}
.guest-gate-preview-more a{position:relative;top:-16px;display:inline-flex;align-items:center;min-height:32px;padding:0 16px;border-radius:999px;background:var(--brand);color:var(--inverse-text);font-size:var(--font-size-sm);font-weight:600;text-decoration:none;transition:background var(--transition-normal);pointer-events:auto}
.guest-gate-preview-more a:hover{background:var(--brand-hover);color:var(--inverse-text)}
/* 后台设置页（三子页签） */
.guest-gate-admin h2{display:flex;align-items:center;gap:8px;font-size:var(--font-size-lg);font-weight:700;margin:0 0 14px;line-height:1.3}
.guest-gate-admin h2::before{content:"";width:3px;height:16px;border-radius:999px;background:var(--brand);flex:0 0 auto}
.guest-gate-help{font-size:var(--font-size-sm);color:var(--text-muted);line-height:1.7;margin:-4px 0 16px}
.guest-gate-tip{font-size:var(--font-size-sm);color:var(--text-muted);line-height:1.7;margin:0 0 12px}
.guest-gate-section{border:1px solid var(--line);border-radius:var(--radius);padding:16px;margin-bottom:16px;background:var(--panel)}
.guest-gate-section h3{margin:0 0 14px;font-size:var(--font-size-sm);color:var(--text-muted);font-weight:600;letter-spacing:.03em;display:flex;align-items:center;gap:7px}
.guest-gate-section h3::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--brand);flex:0 0 auto}
.guest-gate-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 20px}
/* 窄屏适配 */
@media (max-width:720px){
.guest-gate-grid{grid-template-columns:1fr}
}
/* levels */
/* 插件语义化变量（--levels- 前缀，仅定义不覆盖任何核心或其他插件变量）：
   - 字号 13px/15px 为「有理由例外」（核心字号档为 10/11/12/14/16/18，确无对应档，2026-10 审查登记）；
   - --levels-bar-ease：进度条宽度补间（.4s，刻意慢于标准动效 --transition-normal 的数值依据见下方用量处） */
:root{--levels-font-size-caption:13px;--levels-font-size-heading:15px;--levels-bar-ease:.4s ease}
/* 徽章 */
.levels-badge{display:inline-flex;align-items:center;gap:2px;margin-left:6px;padding:1px 3px;border:1px solid var(--levels-badge-border,#888);border-radius:var(--radius,10px);background:var(--levels-badge-bg,#f3f3f3);color:var(--levels-badge-text,#555);font-size:var(--font-size-xs);font-weight:600;line-height:1;vertical-align:middle;white-space:nowrap}
.post-meta .levels-badge{margin-left:4px}
/* 内容遮罩 */
.levels-mask{display:flex;align-items:center;gap:8px;color:var(--danger,#d94b4b);font-size:var(--font-size-md);padding:4px 0}
.levels-mask-icon{width:20px;height:20px;flex:none}
/* 遮罩行收起操作条（post-ops 与遮罩同为 .post-content 子元素且在后），
   维持 content_html 迁移前「遮罩替换整个正文区、操作条一并消失」的行为 */
.levels-mask ~ .post-ops{display:none}
/* 个性签名（固定两行高截断） */
/* 两行 = 2 × 1.6em = 3.2em；全站 *{box-sizing:border-box}，max-height 含 padding 与上边框，
   故须补 6+6+1=13px，否则内容区装不下第 2 行被 overflow:hidden 切掉 */
.levels-signature{margin-top:10px;padding:6px 10px;border-top:1px dashed var(--line,#e5e5e5);color:var(--text-muted,#777);font-size:var(--levels-font-size-caption);line-height:1.6;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-height:calc(3.2em + 13px)}
.levels-gate-hint{margin:4px 0;padding:8px 10px;border:1px solid var(--danger,#d94b4b);border-radius:var(--radius-sm,4px);background:var(--bg,#f7f7f7);color:var(--danger,#d94b4b);font-size:var(--levels-font-size-caption);line-height:1.5}
/* 发帖表单：版块 + 浏览权限 并列行（各占 50%；窄屏折行各占整行） */
.levels-form-row{display:flex;flex-wrap:wrap;gap:0 12px;margin:0 0 8px}
.levels-form-row>.grid{flex:1 1 0;min-width:220px;margin:0}
.levels-form-row .levels-forum-locked b{display:block;font-weight:400;color:var(--text,#000);line-height:1.5;padding:2px 0}
/* 无权查看提示页面板（版块门槛/帖子门槛/私有帖）——规格对齐 topic_read_groups 拒绝页，
   按钮走核心官方 .btn/.btn alt，不自建按钮态（2026-09-26 拒绝页收敛） */
.levels-denied-panel{text-align:center;padding:56px 20px}
.levels-denied-panel h2{color:var(--danger);margin:0 0 8px;font-size:var(--font-size-xl)}
.levels-denied-panel p{color:var(--text-muted);margin:0 0 22px;font-size:var(--font-size-sm)}
.levels-denied-icon{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:50%;background:var(--danger-soft);color:var(--danger);margin-bottom:14px}
.levels-denied-icon svg{width:26px;height:26px}
.levels-denied-actions{display:flex;justify-content:center;gap:10px;flex-wrap:wrap}
@media (max-width:720px){.levels-denied-panel{padding:36px 14px}}
.levels-signature p{margin:0}
/* 用户卡 rank 等级链接 */
.user-rank .levels-rank-link{color:inherit;font-weight:600;text-decoration:none}
.user-rank .levels-rank-link:hover{color:var(--info,#4a9eff);text-decoration:underline}
/* /levels 等级页（版式借鉴 user_level 前台面板；进度/图表/达成强调走强调色 --brand，随主题 8 套强调色联动；语义状态胶囊仍走 --success，见 4338 行 WCAG 注） */
.levels-page{display:flex;flex-direction:column;gap:14px}
.levels-page>*{min-width:0}
.levels-page .card{margin-bottom:0}
.levels-card{padding:16px 18px;min-width:0}
.levels-card-next{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand)}
.levels-card-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;margin-bottom:12px}
.levels-card-head h2{margin:0;font-size:var(--font-size-md)}
.levels-card-foot{margin:10px 0 0;font-size:var(--font-size-xs);color:var(--text-muted,#777);line-height:1.6}
/* Hero 头卡 */
.levels-hero{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px}
.levels-hero-badge{display:flex;align-items:center;gap:12px;min-width:0}
.levels-hero .levels-badge{margin-left:0;font-size:var(--font-size-sm);padding:3px 8px}
.levels-hero-name{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:var(--font-size-xs);color:var(--text-muted,#777)}
.levels-hero-name strong{color:var(--text,#000)}
.levels-hero-note{flex:1 1 100%;margin:0;font-size:var(--font-size-xs);color:var(--warning,#c2410c);line-height:1.6}
/* 状态胶囊（--brand 文字配 --brand-soft 底仅 4.22:1，小字号不达 WCAG AA，按 AI_CONTEXT §6.6-2 改用 --success 4.74:1） */
.levels-state{display:inline-flex;align-items:center;height:18px;min-width:18px;line-height:1;padding:0 6px;border-radius:999px;background:var(--brand-soft);color:var(--success);font-size:var(--font-size-xs);font-weight:700;white-space:nowrap}
.levels-state-ok{background:var(--success-soft);color:var(--success,#27ae60)}
.levels-state-warn{background:var(--warning-soft,#fff7ed);color:var(--warning,#c2410c)}
.levels-state-todo{background:var(--line-soft);color:var(--text-muted,#777)}
/* 列表标题后缀徽章（私有 / LV 门槛）：核心 .topic-badge 仅设 margin-right（其设计位置是
   标题「前」的置顶等徽章位），用在标题后会贴住标题——补 margin-left:6px 对齐站点徽章
   统一间距（AI_CONTEXT §6.6-2，同 lottery「已开奖」的盒缘 6px）。
   配色按语义分族（默认灰底与列表页同色、观感悬空）：私有=danger（与 trg「无权」小人
   同一受限语义，5.05:1）；LV 门槛=info（补「条件/信息」语义档，5.47:1）——
   站点标题徽章四色各管一事：红=受限 / 橙=注意 / 绿=达成 / 蓝=条件。 */
.levels-topic-private{margin-left:6px;min-width:18px;line-height:1;background:var(--danger-soft);color:var(--danger)}
.levels-topic-gate{margin-left:6px;min-width:18px;line-height:1;background:var(--info-soft);color:var(--info)}
/* 逐档进度卡：句子化指标行（未达标「已来访 1 天，还差 2 天。」/ 达标「来访天数：3 天（已达标）」）+ 计量条 + 百分比 */
.levels-metrics{display:grid;gap:11px}
.levels-metric{display:grid;gap:5px;min-width:0}
.levels-metric-label{font-size:var(--font-size-sm);color:var(--text,#000)}
.levels-metric-done .levels-metric-label{color:var(--brand,#1f883d)}
.levels-meter-row{display:flex;align-items:center;gap:8px;min-width:0}
.levels-meter{flex:1;height:10px;border-radius:999px;background:var(--line-soft);box-shadow:inset 0 1px 2px var(--line,#e5e5e5);overflow:hidden;min-width:0}
.levels-meter-fill{display:block;height:100%;border-radius:999px;background:var(--brand,#1f883d);transition:width var(--levels-bar-ease)}
.levels-metric-pct{font-size:var(--font-size-xs);color:var(--brand,#1f883d);font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
/* 等级条件页脚摘要（替代磁贴一览） */
.levels-page-summary{margin:0;padding:2px 4px;font-size:var(--font-size-xs);color:var(--text-muted,#777);line-height:1.8}
/* 近 30 天活跃趋势：纯 CSS 柱状（hover 出数值气泡），今日柱高亮 */
.levels-trend{display:grid;gap:14px}
.levels-trend-row{display:grid;gap:6px}
.levels-trend-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:2px 12px}
.levels-trend-name{font-size:var(--font-size-sm);font-weight:700;color:var(--text,#000)}
.levels-trend-nums{display:inline-flex;flex-wrap:wrap;gap:2px 12px;font-size:var(--font-size-xs);color:var(--text-muted,#777)}
.levels-trend-nums b{color:var(--text,#000);font-variant-numeric:tabular-nums}
.levels-trend-bars{display:flex;align-items:flex-end;gap:2px;height:52px;min-width:0}
.levels-trend-bars span{flex:1;min-height:2px;border-radius:999px 999px 0 0;background:var(--brand-soft);position:relative}
.levels-trend-bars span:hover{background:var(--brand,#1f883d)}
.levels-trend-bars span.levels-bar-today{background:var(--brand,#1f883d)}
.levels-trend-bars span::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 4px);left:50%;transform:translateX(-50%);padding:2px 8px;border-radius:var(--radius-sm);background:var(--inverse,#0f172a);color:var(--inverse-text,#fff);font-size:var(--font-size-xxs);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity var(--transition-normal);z-index:5}
.levels-trend-bars span[data-tip]:hover::after{opacity:1}
/* 数值气泡贴到可裁剪容器顶边时会被削掉上半截。伪元素无法改成 fixed 逃逸裁剪，改为贴近顶边时
   从柱体下方弹出：JS 判定后加 is-tip-down 类（此规则须排在上面的显示规则之后）。 */
.levels-trend-bars span.is-tip-down::after{bottom:auto;top:calc(100% + 4px)}
/* 来访数据并入趋势图「来访」行（plugin_levels_visits 流水，与考核来访天数同源） */
.levels-penalty-banner{margin:0 0 12px;padding:10px 14px;border-radius:var(--radius,8px);border:1px solid var(--warning,#c2410c);background:var(--warning-soft,#fff7ed);color:var(--warning,#c2410c);font-size:var(--font-size-sm)}
.levels-table{width:100%;border-collapse:collapse;font-size:var(--font-size-md)}
.levels-table th,.levels-table td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--line,#e5e5e5)}
/* 能力解锁一览：窄列居中 + 当前列高亮 + 布尔能力门槛「解锁」标注；横向滚动容器防小屏溢出 */
.levels-table-wrap{overflow-x:auto}
.levels-caps-table th,.levels-caps-table td{white-space:nowrap}
.levels-caps-table td:not(:first-child),.levels-caps-table thead th:not(:first-child){text-align:center}
.levels-caps-table tbody th{font-weight:400;color:var(--text,#000)}
.levels-col-current{background:var(--bg,#f7f7f7)}
.levels-cap-on{color:var(--brand,#1f883d);font-weight:600}
.levels-cap-off{color:var(--text-muted,#bbb)}
.levels-cap-gate{color:var(--brand);font-weight:700}
/* 移动端：趋势柱降高，卡片收窄内边距 */
@media (max-width:720px){.levels-card{padding:13px 14px}.levels-trend-bars{height:40px}}
/* 点击拦截提示浮层（替代原生 alert，AI_CONTEXT 6.6-6） */
.levels-tip{position:fixed;left:50%;bottom:32px;z-index:60;transform:translate(-50%,8px);padding:8px 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--danger);font-size:var(--font-size-sm);font-weight:600;box-shadow:0 6px 18px var(--shadow-medium);opacity:0;pointer-events:none;transition:opacity var(--transition-normal),transform var(--transition-normal)}
.levels-tip.is-show{opacity:1;transform:translate(-50%,0)}
/* 「签名与账号」标签页：两张面板自带内边距与留白。
   核心 .card 只有描边/圆角/overflow:hidden，没有 padding；.form-panel form 又是 display:grid;gap:2px，
   原先内联在「个人设置」主表单里被外层容器撑开，独立成 Tab 后必须自己补齐间距 */
.levels-sig-panel,.levels-pause-panel{padding:18px 20px}
.levels-sig-panel h2,.levels-pause-panel h2{margin:0 0 14px;font-size:var(--font-size-lg)}
.levels-sig-panel form,.levels-pause-panel form{display:flex;flex-direction:column;gap:10px;margin:0}
.levels-sig-label{color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.6}
.levels-sig-panel .levels-admin-tip{margin:0;line-height:1.7}
.levels-sig-panel button,.levels-pause-panel button{align-self:flex-start}
.levels-sig-panel textarea{width:100%;min-height:88px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text);font-size:var(--font-size-sm);line-height:1.7;resize:vertical}
.levels-sig-panel textarea:focus{border-color:var(--brand);outline:2px solid var(--focus-ring);outline-offset:-1px}
.levels-sig-meta{display:flex;justify-content:flex-end;margin-top:-4px}
.levels-sig-count{font-size:var(--font-size-xs);color:var(--text-subtle)}
.levels-sig-preview{border:1px solid var(--line-soft);border-radius:var(--radius);background:var(--bg);padding:10px 12px;min-height:42px}
/* 预览框内解除帖子里的两行截断与虚线顶边，编辑时看全文（字号/配色仍与帖子一致） */
.levels-sig-preview .levels-signature{display:block;max-height:none;-webkit-line-clamp:unset;margin:0;padding:0;border-top:0}
.levels-pause-panel .levels-admin-tip{margin:0 0 14px;line-height:1.7}
/* 后台 */
.levels-admin-form{margin-bottom:20px}
.levels-admin-form h3{margin:0 0 8px}
.levels-admin-tip{font-size:var(--levels-font-size-caption);color:var(--text-muted,#777);margin:0 0 10px}
.levels-settings-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:12px;margin-bottom:14px;align-items:start}
/* 1.6.5：窄屏防溢出——420px 最小列宽在 720px 以下必超面板宽度，降为单列 */
@media(max-width:720px){.levels-settings-cards{grid-template-columns:1fr}}
/* 卡片最小宽 420：真实容器上限约 1137px（.wrap 1200 − 面板/内边距 − 滚动条），
 * 三列需 1284px 不可能出现，故最多两列——第四张卡总能排进第二行右侧，
 * 不留空网格单元；末行底边参差为自然收尾，其下即保存按钮。 */
.levels-settings-card{border:1px solid var(--line,#e8e8e8);border-radius:var(--radius);background:var(--panel,#fff);padding:12px 16px}
.levels-settings-card h4{margin:0 0 10px;font-size:var(--font-size-md)}
/* 后台设置页表单：分区卡片 + 右轨控件。每行是独立 .grid：
 * 左列文案占满剩余宽度（说明每行可排更长、少折行），右列控件 hug 到卡片右缘，
 * 开关/数值框右缘对齐成一条右轨，开关与标题首行视觉居中（margin-top:5px）。
 * 长选项下拉与多行 textarea 加 .levels-field-stack：标签在上、控件通栏在下。
 * 同时覆盖核心 .grid 的 98px 标签列与全局 textarea{min-height:120px}。 */
.levels-settings-form .grid{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:20px;row-gap:2px;align-items:start;margin:0 0 12px}
.levels-settings-card .grid:last-child{margin-bottom:2px}
.levels-settings-form .grid>span{color:var(--text,#000);font-size:var(--levels-font-size-caption);line-height:1.5}
.levels-settings-form .grid>span>small{color:var(--text-muted,#777);font-size:var(--levels-font-size-caption);line-height:1.55}
.levels-settings-form .grid>input[type=checkbox]{justify-self:end;margin-top:5px}
.levels-settings-form .grid>input[type=number],.levels-settings-form .grid>input[type=text]{width:150px;max-width:150px;box-sizing:border-box;justify-self:end}
.levels-settings-form .grid.levels-field-stack{grid-template-columns:minmax(0,1fr);row-gap:6px}
.levels-settings-form .grid.levels-field-stack>select,.levels-settings-form .grid.levels-field-stack>textarea{width:100%;max-width:none}
.levels-settings-form .grid>textarea{padding:7px 9px;border:1px solid var(--line,#e8e8e8);border-radius:var(--radius-sm,8px);background:var(--panel,#fff);color:var(--text,#000);font:inherit;resize:vertical;box-sizing:border-box}
/* 核心 textarea{min-height:120px} 收紧：停用提示（两行）为 80px 高 */
.levels-settings-form .grid>textarea[name=paused_hint]{min-height:80px}
/* 移动端跟随核心 720px 断点：输入类行单列通栏；开关行保留「文案 + 开关」双列，
 * 开关始终贴标题首行右缘（不被排到整段说明下方） */
@media(max-width:720px){.levels-settings-form .grid{grid-template-columns:minmax(0,1fr);row-gap:6px}.levels-settings-form .grid.levels-toggle-row{grid-template-columns:minmax(0,1fr) auto;column-gap:16px;row-gap:2px}.levels-settings-form .grid>input[type=number],.levels-settings-form .grid>input[type=text]{width:100%;max-width:100%}}
.levels-admin-table{width:100%;border-collapse:collapse;font-size:var(--font-size-md);margin-bottom:10px}
.levels-admin-table th,.levels-admin-table td{padding:6px 8px;border-bottom:1px solid var(--line,#e5e5e5);text-align:left;vertical-align:middle}
.levels-admin-table input[type=text],.levels-admin-table input[type=number]{width:100px}
/* 矩阵中因能力关闭而禁用的数值框（如「编辑已发内容」关闭后的「编辑时限」）：灰显不可编辑 */
.levels-admin-table input[type=number]:disabled{background:var(--bg,#f5f5f5);color:var(--text-muted,#999);opacity:.75;cursor:not-allowed}
/* 考核模式下拉（矩阵单元格内），核心全局 select{width:100%} 收窄 */
.levels-admin-table select{width:80px}
/* 版块等级限制：四个门槛/时限下拉统一 100px 并整体左移 10px，避免「LV0（≥0 分）」被截断 */
.levels-forum-gate td select{width:100px;margin-left:-10px}
/* 分布看板：徽章列 + 条形 + 人数标注；计量条与前台 .levels-meter 同构（官方变量随主题/色系自适应） */
.levels-dist{display:flex;flex-direction:column;gap:6px}
.levels-dist-row{display:flex;align-items:center;gap:10px}
.levels-dist-label{flex:0 0 90px}
.levels-dist-bar{flex:1;height:10px;border-radius:999px;background:var(--line-soft);box-shadow:inset 0 1px 2px var(--line,#e5e5e5);overflow:hidden}
.levels-dist-bar i{display:block;height:100%;border-radius:999px;background:var(--brand,#1f883d);transition:width var(--levels-bar-ease)}
.levels-dist-row em{flex:0 0 110px;font-style:normal;font-size:var(--levels-font-size-caption);color:var(--text-muted,#777)}
.levels-admin-actions{display:flex;gap:10px}
.levels-admin-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.levels-chip{border:1px solid var(--line,#ddd);border-radius:999px;padding:2px 12px;font-size:var(--levels-font-size-caption)}
.levels-chip.active{border-color:var(--info,#4a9eff);color:var(--info,#4a9eff)}
.levels-member-fields{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
/* 核心全局 input,select,textarea{width:100%}（index.css）会作为无 flex-basis
 * 元素的基准尺寸把整行撑爆；此处对每个控件显式定宽收紧行内布局 */
.levels-member-fields input[name=username]{flex:0 0 150px;width:150px;min-width:0}
.levels-member-fields select{flex:0 0 120px;width:120px;min-width:0}
.levels-member-fields [data-levels-reason-custom]{flex:1 1 120px;min-width:120px}
/* 成员移出行内理由 select 与自定义输入 */
.levels-member-remove [data-levels-reason-select]{flex:0 0 130px;width:130px;min-width:0}
.levels-member-remove [data-levels-reason-custom]{flex:1 1 110px;min-width:110px}
/* 后台用户名联想下拉（fixed 定位，避免被容器裁剪） */
.levels-user-suggest{position:fixed;z-index:300;border:1px solid var(--line,#ddd);border-radius:var(--radius);background:var(--panel,#fff);box-shadow:0 6px 18px var(--shadow-medium);max-height:260px;overflow:auto}
.levels-user-suggest-item{display:flex;gap:8px;align-items:center;padding:6px 10px;font-size:var(--levels-font-size-caption);cursor:pointer}
.levels-user-suggest-item:hover,.levels-user-suggest-active{background:var(--bg,#f7f7f7)}
.levels-user-sug-id{color:var(--text-muted,#777);font-size:var(--font-size-sm);min-width:44px}
.levels-member-remove{display:flex;gap:8px;align-items:center}
.levels-logs-table td{font-size:var(--levels-font-size-caption)}
.levels-logs-download,.levels-logs-clear{display:inline-block}
.levels-logs-clear{margin-left:10px}
/* 后台卡片分区 + 页内锚点导航 */
.levels-admin-card{border:1px solid var(--line,#e8e8e8);border-radius:var(--radius);background:var(--panel,#fff);padding:14px 18px;margin:0 0 14px}
.levels-admin-card h3{margin:0 0 6px}
.levels-anchor-nav{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}
.levels-anchor-nav a{border:1px solid var(--line,#ddd);border-radius:999px;padding:3px 14px;font-size:var(--levels-font-size-caption);color:var(--text-muted,#555)}
.levels-anchor-nav a:hover{border-color:var(--info,#4a9eff);color:var(--info,#4a9eff)}
/* 转置矩阵表：行=指标/能力，列=档位；窄屏横向滚动、首列吸附 */
.levels-table-scroll{overflow-x:auto}
.levels-matrix th[scope=row]{white-space:nowrap;font-weight:600}
.levels-matrix th[scope=row] small{display:block;font-weight:400;color:var(--text-muted,#999);font-size:var(--levels-font-size-caption);white-space:normal}
.levels-matrix thead th{white-space:nowrap}
.levels-matrix th:first-child,.levels-matrix td:first-child{position:sticky;left:0;background:var(--panel,#fff);min-width:132px;max-width:170px}
.levels-matrix td{text-align:center}
.levels-matrix td input[type=number]{width:78px}
.levels-matrix td input[type=text]{width:92px}
.levels-matrix .levels-cb{white-space:nowrap}
.levels-na{color:var(--text-muted,#bbb)}
/* 表格内徽章预览：定宽 chip 居中呈现，与组徽章卡、等级徽章卡预览列共用 */
.levels-admin-table td .levels-badge{margin-left:0;min-width:64px;box-sizing:border-box;justify-content:center;padding:4px 10px;vertical-align:middle}
/* login_multi */
.login-multi-hint{margin:10px 0 0;font-size:var(--font-size-xs);color:var(--text-subtle)}.login-multi-admin-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:4px}
/* lottery */
/* 发起表单（折叠卡片外壳由核心 .topic-extension-* 样式负责，此处只管面板内部） */
.lottery-create-body{display:grid;grid-template-columns:auto 1fr;gap:8px 10px;padding:12px}
.lottery-create-enable{align-self:center}
.lottery-create-toggle{display:inline-flex;align-items:center;gap:6px;font-weight:600;cursor:pointer;min-width:0}
.lottery-create-fields{grid-column:1/-1;display:flex;flex-direction:column;gap:10px;padding:12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--line-soft)}
.lottery-create-enable:not(:checked)~.lottery-create-fields{display:none}
.lottery-create-field{display:flex;flex-direction:column;gap:4px;min-width:0}
.lottery-create-field>span{font-size:var(--font-size-sm);color:var(--text-muted)}
/* 份数 + 人数不足预设同行（各自带标题的纵向字段并排，框宽按内容收窄不拉伸） */
.lottery-create-row{display:flex;gap:10px}
.lottery-create-row .lottery-create-field{flex:0 0 auto}
.lottery-create-row input[name="lottery_count"]{width:150px}
.lottery-create-row select[name="lottery_shortage"]{width:auto}
.lottery-create-tip{margin:0;font-size:var(--font-size-xs);color:var(--text-subtle);line-height:1.6}
/* 开奖时间字段说明气泡（data-lottery-tip）与用户名气泡同套主题变量，自动适配明暗模式；
   虚线下划线提示可悬停，气泡左对齐、可换行（区别于单行用户名气泡） */
.lottery-tip{position:relative;border-bottom:1px dashed var(--line);cursor:help}
.lottery-tip[data-lottery-tip]::after{content:attr(data-lottery-tip);position:absolute;left:0;bottom:calc(100% + 6px);width:max-content;max-width:280px;white-space:normal;text-align:left;padding:6px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-xs);font-weight:400;line-height:1.6;box-shadow:0 2px 10px var(--shadow-medium);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--transition-normal),visibility var(--transition-normal);z-index:6}
.lottery-tip[data-lottery-tip]:hover::after,.lottery-tip[data-lottery-tip]:focus-visible::after{opacity:1;visibility:visible}
/* 开奖时间快捷时长（一键设置，JS 以 min 属性为服务器时间锚点计算）：
   复用核心 button 基础样式，压缩为小胶囊（1.0.11：圆角改 var(--radius-sm)，
   不再使用 999px 字面量——非药丸徽章场景回归令牌） */
.lottery-draw-quick{display:flex;flex-wrap:wrap;gap:6px;margin-top:-2px}
.lottery-draw-quick button{min-height:0;padding:2px 10px;font-size:var(--font-size-xs);line-height:1.6;border-radius:var(--radius-sm);background:var(--panel);color:var(--text-muted)}
.lottery-draw-quick button:hover{border-color:var(--brand);color:var(--brand)}
/* 标题状态徽章（列表标题后 + 详情页标题后，随核心 .topic-badge 风格） */
.lottery-title-badge{display:inline-flex;align-items:center;height:18px;min-width:18px;line-height:1;margin:0 0 0 6px;padding:0 6px;border-radius:999px;font-size:var(--font-size-xs);font-weight:700;white-space:nowrap;vertical-align:middle;flex-shrink:0}
.lottery-title-open{background:var(--warning-soft);color:var(--warning)}
.lottery-title-drawn{background:var(--success-soft);color:var(--success)}
.lottery-title-cancelled{background:var(--line-soft);color:var(--text-muted)}
.lottery-card{box-sizing:border-box;grid-column:1/-1;flex:0 0 100%;min-width:0;width:100%;margin-top:18px;padding:14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}
.lottery-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap}
.lottery-card-title{margin:0;font-size:var(--font-size-md);font-weight:600;word-break:break-word}
/* 卡片状态胶囊：与标题徽章同色同族——橙=抽奖中（基样式） / 红=已到期未开奖 / 绿=已开奖 / 灰=已流局（橙 4.88:1、红 5.05:1，均达 WCAG AA） */
.lottery-card-status{flex-shrink:0;padding:1px 8px;border-radius:var(--radius);background:var(--warning-soft);color:var(--warning);font-size:var(--font-size-xs);white-space:nowrap}
.lottery-status-1{background:var(--success-soft);color:var(--success)}
.lottery-status-2{background:var(--line-soft);color:var(--text-subtle)}
.lottery-status-pending{background:var(--danger-soft);color:var(--danger)}
.lottery-card-meta{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:8px;color:var(--text-subtle);font-size:var(--font-size-xs)}
/* 警示文本（卡片 meta 流局次数 / 冷却处罚提示通用）：危险红 + 加粗 */
.lottery-meta-warn{color:var(--danger);font-weight:600}
.lottery-card-hash{margin-top:10px;padding:8px 10px;border:1px dashed var(--line);border-radius:var(--radius-sm);font-size:var(--font-size-xs);color:var(--text-muted);word-break:break-all}
.lottery-hash-label{display:block;margin-bottom:4px}
.lottery-card-hash code,.lottery-verify code{font-family:var(--font-mono);font-size:var(--font-size-xxs);word-break:break-all}
.lottery-card-people{margin-top:12px}
.lottery-avatars{display:flex;flex-wrap:wrap;gap:6px}
.lottery-avatar{width:24px;height:24px;border-radius:var(--radius-sm)}
.lottery-avatar-lg{width:36px;height:36px}
.lottery-avatar-link{display:inline-flex;position:relative;border-radius:var(--radius-sm);line-height:0}
/* 悬停用户名气泡：复用核心主题变量（--panel/--text/--line 等），自动适配白天/黑夜模式 */
.lottery-entry-link{position:relative;color:var(--brand)}
.lottery-avatar-link::after,.lottery-entry-link[data-username]::after{content:attr(data-username);position:absolute;left:50%;bottom:calc(100% + 6px);transform:translateX(-50%);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:3px 8px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-xs);font-weight:400;line-height:1.4;box-shadow:0 2px 10px var(--shadow-medium);opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--transition-normal),visibility var(--transition-normal);z-index:5}
.lottery-avatar-link:hover::after,.lottery-avatar-link:focus-visible::after,.lottery-entry-link[data-username]:hover::after,.lottery-entry-link[data-username]:focus-visible::after{opacity:1;visibility:visible}
/* 提示气泡贴到可裁剪容器顶边时会被削掉上半截。伪元素无法像普通浮层那样改成 fixed 逃逸裁剪，
   只能在悬停/聚焦时改从下方弹出：JS 判定后加 is-tip-down 类，样式随之翻转（此规则须排在上面的
   显示规则之后才能覆盖同特异性的定位）。 */
.lottery-tip[data-lottery-tip].is-tip-down::after{bottom:auto;top:calc(100% + 6px)}
.lottery-avatar-link.is-tip-down::after,.lottery-entry-link[data-username].is-tip-down::after{bottom:auto;top:calc(100% + 6px)}
.lottery-people-count{display:block;margin-top:6px;color:var(--text-subtle);font-size:var(--font-size-xs)}
.lottery-card-actions{margin-top:12px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lottery-joined,.lottery-muted-hint{color:var(--text-subtle);font-size:var(--font-size-sm)}
.lottery-joined{color:var(--success)}
.lottery-reply-join-hint{color:var(--text-muted);font-size:var(--font-size-sm)}
.lottery-login-link{color:var(--brand);font-size:var(--font-size-sm)}
/* 管理区单行按钮：修改表单 display:contents 去盒（不影响表单提交语义），
   使「保存修改」与开奖/流局按钮同处一行；标题/提示/字段网格整行占满，间距由 gap 统一。
   字段网格固定两列（每行 2 项）：原来 auto-fit 在宽屏会排出 5 列，4 项挤一行时第 4 项
   「开奖时间」的长标签被迫折行、把输入框顶下去与同行错位；固定两列后标签单行显示，
   行序为「奖品名称 + 中奖份数」「人数不足时 + 开奖时间」；窄屏（≤720px）降为单列 */
.lottery-manage-zone{margin-top:12px;padding-top:10px;border-top:1px solid var(--line-soft);display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.lottery-zone-title{width:100%;margin:0;color:var(--text-subtle);font-size:var(--font-size-xs)}
.lottery-manage{display:contents}
.lottery-manage-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;width:100%;margin-bottom:0}
.lottery-manage-grid .lottery-lock-note{grid-column:1/-1;margin:0;padding:6px 8px;border-radius:var(--radius-sm);background:var(--bg);color:var(--text-subtle);font-size:var(--font-size-xs)}
.lottery-manage-grid label{display:flex;flex-direction:column;gap:4px;min-width:0}
.lottery-manage-grid span{font-size:var(--font-size-xs);color:var(--text-muted)}
.lottery-pending-hint{width:100%;margin:0;color:var(--warning);font-size:var(--font-size-sm)}
.lottery-op-form{margin:0}
.lottery-cancelled{margin-top:10px;color:var(--text-subtle);font-size:var(--font-size-sm)}
.lottery-verify{margin-top:12px}
.lottery-verify summary{cursor:pointer;color:var(--text-subtle);font-size:var(--font-size-xs)}
.lottery-verify-body{margin-top:6px;padding:10px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.7}
.lottery-verify-body p{margin:0 0 4px}
.lottery-entry-list{word-break:break-all}
.lottery-announce{margin-top:12px;display:flex;flex-direction:column;gap:6px}
.lottery-announce label{color:var(--text-muted);font-size:var(--font-size-xs)}
.lottery-announce textarea{box-sizing:border-box;width:100%;min-height:96px;padding:8px;font-size:var(--font-size-sm);line-height:1.6;resize:vertical}
.lottery-announce .lottery-copy-btn{align-self:flex-start}
/* 后台设置卡片：两张分组卡片（可用版块 / 时间设置），复用核心主题变量适配明暗；
   核心对 .plugin-settings-form 有 max-width:520px / 输入框 max-width:450px 的限制，
   叠加 lottery-settings-form 类放宽，使卡片铺满后台面板 */
form.lottery-settings-form{max-width:none}
form.lottery-settings-form input,form.lottery-settings-form select{max-width:none}
/* 后台内联行：「标题 + 输入框」同一行（快捷档位说明长，保持上下排布）；
   提交行：保存设置与清理历史数据两个按钮（分属两个表单，经 form 属性关联）同一行 */
label.grid.lottery-admin-inline{display:flex;align-items:center;gap:10px}
label.grid.lottery-admin-inline>span{flex-shrink:0;white-space:nowrap}
label.grid.lottery-admin-inline input{flex:0 0 150px;width:150px}
.lottery-admin-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:2px}
#lottery-cleanup-form{display:contents}
.lottery-admin-card{display:block;width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);padding:14px 16px;margin:0 0 14px}
.lottery-admin-card-title{margin:0 0 10px;font-size:var(--font-size-sm);font-weight:600;color:var(--text)}
/* 后台版块勾选：每个版块一格（边框小卡片），核心 input[type=checkbox] 自带 38×22 开关样式，此处只排版、不覆盖尺寸 */
.lottery-admin-forums{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px;margin:10px 0 0}
.lottery-admin-forum{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 10px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--bg);font-size:var(--font-size-sm);color:var(--text-muted)}
.lottery-admin-forum span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lottery-admin-forum input{flex-shrink:0}
@media(max-width:720px){.lottery-card{padding:12px}.lottery-manage-grid{grid-template-columns:1fr}}
/* maintenance_mode */
.maintenance-mode-window{--maintenance-mode-title-size:22px;--maintenance-mode-clock-size:36px;position:relative;margin:0 0 14px;padding:16px 20px;background:var(--brand-soft);border:1px solid var(--line);border-left:4px solid var(--brand-hover);border-radius:var(--radius)}.maintenance-mode-title{margin:0 0 8px;font-size:var(--maintenance-mode-title-size);font-weight:700;color:var(--text)}.maintenance-mode-reason{margin:0 0 12px;font-size:var(--font-size-lg);color:var(--text);line-height:1.7}.maintenance-mode-reason p{margin:0 0 6px}.maintenance-mode-reason p:last-child{margin-bottom:0}.maintenance-mode-reason a{color:var(--brand-hover)}.maintenance-mode-reason ul,.maintenance-mode-reason ol{margin:0 0 6px;padding-left:22px}.maintenance-mode-eta{margin:0 0 4px;font-size:var(--font-size-lg);color:var(--text-muted)}.maintenance-mode-remaining{margin:0 0 14px;display:flex;align-items:center;justify-content:center;gap:8px;font-size:var(--font-size-md);color:var(--text-muted)}.maintenance-mode-clock{font-size:var(--maintenance-mode-clock-size);line-height:1.15;font-variant-numeric:tabular-nums;color:var(--brand-hover);font-weight:700}.maintenance-mode-overtime{margin:0 0 12px;color:var(--text);font-weight:700}.maintenance-mode-window [hidden]{display:none}.maintenance-mode-note{margin:0 0 6px;font-size:var(--font-size-sm);color:var(--text-subtle);line-height:1.7}.maintenance-mode-note:last-child{margin-bottom:0}.maintenance-mode-admin-link{margin-left:8px;color:var(--brand-hover)}.maintenance-mode-banner [hidden]{display:none}.maintenance-mode-handle{display:none;position:absolute;left:50%;bottom:-7px;transform:translateX(-50%);z-index:1;flex-direction:column;align-items:center;justify-content:center;gap:2px;width:64px;height:14px;padding:0;border:1px solid var(--line);border-radius:999px;background:var(--panel);cursor:pointer}.maintenance-mode-banner[data-maintenance-mode-ready] .maintenance-mode-handle{display:inline-flex}.maintenance-mode-handle i{display:block;width:28px;height:2px;border-radius:999px;background:var(--text-subtle)}.maintenance-mode-handle:hover{background:var(--panel);border-color:var(--brand-hover)}.maintenance-mode-handle:hover i{background:var(--brand-hover)}.maintenance-mode-collapsed-bar{display:block;width:100%;margin:0 0 14px;padding:6px 10px;text-align:center;border:1px solid var(--line);border-left:3px solid var(--brand-hover);border-radius:var(--radius);background:var(--brand-soft);color:var(--text-muted);font-size:var(--font-size-md);cursor:pointer}.maintenance-mode-collapsed-bar:hover{background:var(--brand-soft);color:var(--text)}.maintenance-mode-page{display:flex;align-items:center;justify-content:center;min-height:60vh;padding:48px 24px}.maintenance-mode-page~*{display:none}.maintenance-mode-window-page{--maintenance-mode-title-size:24px;--maintenance-mode-clock-size:44px;width:100%;max-width:680px;margin:0;padding:40px 48px;border-left-width:6px}.maintenance-mode-login-note{margin-top:10px;padding:10px 12px;border:1px solid var(--line);border-left:3px solid var(--brand-hover);border-radius:var(--radius);background:var(--brand-soft);font-size:var(--font-size-sm);color:var(--text);max-width:450px;box-sizing:border-box;flex:1 1 100%;min-width:0}.maintenance-mode-login-note strong{display:block;margin-bottom:4px}.maintenance-mode-login-note span{display:block;color:var(--text-muted)}.maintenance-mode-login-reason{margin-bottom:6px;color:var(--text-muted);line-height:1.6}.maintenance-mode-login-reason p{margin:0 0 4px}.maintenance-mode-login-reason p:last-child{margin-bottom:0}.maintenance-mode-login-reason a{color:var(--brand-hover)}.maintenance-mode-field-caption{display:block;margin:0 0 4px;font-size:var(--font-size-sm);color:var(--text);line-height:1.6}.maintenance-mode-field-caption small{display:block;margin-top:2px;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.6}.maintenance-mode-datetime-row{display:flex;flex-wrap:wrap;gap:6px 10px;margin:0 0 12px}.maintenance-mode-datetime-row input{width:auto;flex:0 1 auto;min-width:0}.maintenance-mode-window-scheduled{border-left-color:var(--info)}.maintenance-mode-admin-actions{margin-top:10px}
/* medal */
.medal-badge{display:inline-flex;align-items:center;gap:3px;padding:3px var(--font-size-sm);border-radius:var(--medal-radius,999px);background-color:var(--panel);background-image:linear-gradient(135deg,color-mix(in srgb,var(--medal-color) var(--medal-alpha,16%),transparent),color-mix(in srgb,var(--medal-gradient,var(--medal-color)) var(--medal-alpha,16%),transparent));border:1px solid var(--medal-border-color,color-mix(in srgb,var(--medal-color) 45%,transparent));color:var(--medal-text-color,var(--text));font-size:var(--font-size-sm);line-height:1.6;white-space:nowrap;max-width:100%;box-sizing:border-box}.medal-badge-icon{font-size:var(--font-size-md);line-height:1;flex:0 0 auto}.medal-badge-name{overflow:hidden;text-overflow:ellipsis}.medal-badge-sm{padding:2px var(--font-size-xs);font-size:var(--font-size-xs)}.medal-badge-sm .medal-badge-icon{font-size:var(--font-size-sm)}.medal-disabled{opacity:.6}.medal-title-line{display:flex;align-items:center;gap:var(--font-size-sm);flex-wrap:wrap;min-width:0}.medal-holders{color:var(--brand);font-size:var(--font-size-xs);font-weight:600;text-decoration:none}.medal-holders:hover{text-decoration:underline}.medal-conds{display:flex;flex-wrap:wrap;gap:var(--font-size-xs);margin-top:var(--font-size-sm);padding-top:var(--font-size-sm);border-top:1px dashed var(--line-soft)}.medal-cond-chip{display:inline-flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:2px var(--font-size-xs);font-size:var(--font-size-xs)}.medal-cond-metric{color:var(--text-muted)}.medal-cond-sign{color:var(--brand);font-weight:600}.medal-cond-val{color:var(--text);font-weight:700}.medal-cond-empty{background:var(--bg);border-style:dashed;color:var(--text-subtle)}.medal-rule-head{display:flex;align-items:center;gap:var(--font-size-sm);flex-wrap:wrap;min-width:0}.medal-rule-head .medal-rule-badge{display:inline-flex;flex:0 0 auto}.medal-rule-name{white-space:nowrap}.medal-rule-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--font-size-sm) var(--font-size-md);margin-top:var(--font-size-xs);color:var(--text-muted);font-size:var(--font-size-xs)}.medal-rule-stat{display:inline-flex;align-items:center;gap:2px}.medal-rule-stat b{color:var(--text);font-weight:700}.medal-rule-never{color:var(--text-subtle)}.medal-rule-logic-tag{display:inline-flex;align-items:center;background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:1px 10px;font-weight:600}.medal-rule-logic-tag.and{color:var(--success);border-color:color-mix(in srgb,var(--brand) 30%,transparent);background:var(--brand-soft)}.medal-rule-logic-tag.or{color:var(--warning);border-color:color-mix(in srgb,var(--warning) 32%,transparent);background:color-mix(in srgb,var(--warning) 12%,transparent)}.medal-form-panel .medal-settings-form{max-width:none;width:100%}.medal-form-panel .medal-settings-form input,.medal-form-panel .medal-settings-form select{max-width:none}.medal-form-panel .confirm-actions{justify-content:flex-start}.medal-form-fields{display:flex;flex-direction:column;gap:var(--font-size-sm)}.medal-form-section{display:flex;flex-direction:column;gap:var(--font-size-sm);padding:var(--font-size-sm) var(--font-size-md);background:var(--bg);border:1px solid var(--line-soft);border-radius:var(--radius-sm)}.medal-form-section-title{font-weight:600;font-size:var(--font-size-sm);color:var(--text)}.medal-form-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:var(--font-size-sm) var(--font-size-md);align-items:start}.medal-form-cols .medal-color-input{width:100%;max-width:none}.medal-form-cols .medal-radius-input{width:100%;max-width:none}.medal-switch-cell{display:flex;flex-direction:column;gap:5px}.medal-switch-check{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font-size:var(--font-size-sm)}.medal-switch-check input[type=checkbox]{flex:0 0 auto;margin:0;padding:0}.medal-field-disabled{opacity:.45}.medal-form-preview{display:flex;flex-direction:row;align-items:center;gap:var(--font-size-sm);padding:var(--font-size-md);background:var(--bg);border:1px solid var(--line-soft);border-radius:var(--radius-sm);min-width:0;box-sizing:border-box}.medal-form-preview .medal-badge{width:fit-content;max-width:100%}.medal-preview-label{color:var(--text-muted);font-size:var(--font-size-xs)}.medal-color-input{width:100px;height:38px;padding:2px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);cursor:pointer}.medal-cond-row{display:flex;align-items:center;gap:var(--font-size-xs);flex-wrap:wrap;background:var(--bg);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:var(--font-size-xs) var(--font-size-sm)}.medal-cond-no{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:999px;background:var(--brand-soft);color:var(--success);font-size:var(--font-size-xs);font-weight:700;flex:0 0 auto}.medal-cond-row select,.medal-cond-row input{height:36px}.medal-cond-row select[name^="cond_metric"]{width:120px;flex:0 0 auto}.medal-cond-row select[name^="cond_op"]{width:auto;min-width:56px;flex:0 0 auto}.medal-cond-row input[type=number]{width:100px;flex:0 0 auto}.medal-conditions{display:flex;flex-direction:column;gap:var(--font-size-xs);margin:var(--font-size-sm) 0}.medal-rule-conds{margin-top:var(--font-size-sm);padding:var(--font-size-md);background:var(--bg);border:1px solid var(--line-soft);border-radius:var(--radius-sm)}.medal-rule-conds-head{display:flex;align-items:baseline;gap:var(--font-size-xs);margin-bottom:var(--font-size-xs)}.medal-rule-conds-title{font-weight:600}.medal-rule-conds-hint{color:var(--text-subtle);font-size:var(--font-size-xs)}.medal-add-cond-btn{margin-top:var(--font-size-xs);border-style:dashed;width:100%;justify-content:center}.medal-profile-box{margin-top:var(--font-size-md);padding:var(--font-size-md);background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-sm)}.medal-profile-title{font-size:var(--font-size-sm);color:var(--text-muted);margin-bottom:var(--font-size-xs)}.medal-profile-list{display:flex;flex-wrap:wrap;gap:var(--font-size-xs)}.medal-post-badges{display:inline-flex;flex-wrap:wrap;align-items:center;gap:3px;vertical-align:middle}.medal-post-badges .medal-badge{margin:0;padding:0 5px;font-size:var(--font-size-xxs);line-height:1.4;gap:2px;height:18px}.medal-post-badges .medal-badge .medal-badge-icon{font-size:var(--font-size-xs)}.medal-post-badges .medal-badge-icon-only{padding:0;width:18px;height:18px;justify-content:center;gap:0}.medal-post-badges .medal-badge-icon-only .medal-badge-icon{font-size:var(--font-size-sm)}.medal-post-badges .medal-badge-text-only{background:transparent;border-color:transparent;padding:0;color:var(--medal-text-color,var(--medal-color))}.medal-badge[data-medal-tip],.medal-medal-check[data-medal-tip],.medal-switch-cell[data-medal-tip]{position:relative}.medal-badge[data-medal-tip]:hover::after,.medal-avatar-badge[data-medal-tip]:hover::after,.medal-medal-check[data-medal-tip]:hover::after,.medal-switch-cell[data-medal-tip]:hover::after{content:attr(data-medal-tip);position:absolute;left:50%;bottom:calc(100% + 6px);transform:translateX(-50%);z-index:30;padding:5px 9px;border-radius:var(--radius-sm);background:var(--panel);border:1px solid var(--line);box-shadow:0 6px 18px var(--shadow-medium);color:var(--text);font-size:var(--font-size-xs);font-weight:500;line-height:1.4;pointer-events:none;white-space:nowrap}.medal-switch-cell[data-medal-tip]:hover::after{white-space:normal;width:max-content;max-width:340px;text-align:left}@media(max-width:720px){.medal-badge-name{max-width:120px}}.medal-user-picker{position:relative;padding:8px;background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm)}.medal-user-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.medal-user-tag{display:inline-flex;align-items:center;gap:4px;background:var(--brand-soft);color:var(--success);border-radius:999px;padding:2px 4px 2px 10px;font-size:var(--font-size-sm);font-weight:600;line-height:1.6}.medal-user-invalid{background:var(--danger-soft);color:var(--danger)}.medal-error{margin:6px 0 0;color:var(--danger);font-size:var(--font-size-sm);font-weight:600;line-height:1.5}.medal-user-name{overflow:hidden;text-overflow:ellipsis;max-width:160px}.medal-user-remove{border:0;background:transparent;color:inherit;cursor:pointer;font-size:var(--font-size-md);line-height:1;padding:0 2px;border-radius:999px}.medal-user-remove:hover{background:color-mix(in srgb,currentColor 12%,transparent)}.medal-user-input-wrap{display:block}.medal-user-input{width:100%;height:36px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-sm);box-sizing:border-box}.medal-user-input:focus{outline:none;border-color:var(--brand)}.medal-form-help{margin:10px 0 0;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.6}.medal-user-error{color:var(--danger);font-size:var(--font-size-xs);margin-top:6px;display:none}.medal-user-suggest{position:fixed;z-index:9999;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:0 8px 24px var(--shadow-medium);max-height:240px;overflow:auto;display:none}.medal-user-suggest-item{display:flex;align-items:center;gap:8px;padding:6px 10px;cursor:pointer;font-size:var(--font-size-sm)}.medal-user-suggest-item:hover,.medal-user-suggest-active{background:var(--brand-soft);color:var(--success)}.medal-user-sug-id{color:var(--text-subtle);font-size:var(--font-size-xs);flex:0 0 auto}.medal-user-sug-name{font-weight:600}.medal-user-suggest-empty{padding:8px 10px;color:var(--text-subtle);font-size:var(--font-size-xs)}.medal-duration-chip{display:inline-flex;align-items:center;background:var(--brand-soft);color:var(--success);border-radius:999px;padding:1px var(--font-size-xs);font-size:var(--font-size-xs);font-weight:600}.medal-log-actions{display:inline-flex;align-items:center;gap:12px}.medal-grant-medals{margin:var(--font-size-sm) 0}.medal-grant-box{margin-top:var(--font-size-sm);padding:var(--font-size-md);background:var(--bg);border:1px solid var(--line-soft);border-radius:var(--radius-sm)}.medal-grant-box-head{display:flex;align-items:center;gap:var(--font-size-xs);margin-bottom:var(--font-size-xs);flex-wrap:wrap}.medal-grant-box-title{font-weight:600;color:var(--text)}.medal-grant-box-hint{color:var(--text-subtle);font-size:var(--font-size-xs)}.medal-grant-medals-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}.medal-grant-medals-hint{color:var(--text-muted);font-size:var(--font-size-xs)}.medal-grant-medals-ops{margin-left:auto;display:flex;flex:0 0 auto;gap:8px}.medal-grant-medals-head .form-field-caption{margin:0}.medal-grant-medals-list{display:flex;flex-wrap:wrap;gap:8px;padding:8px;background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);max-height:180px;overflow:auto}.medal-medal-check{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;border-radius:var(--medal-radius,999px);border:1px solid var(--medal-border-color,color-mix(in srgb,var(--medal-color) 45%,transparent));background-color:var(--panel);background-image:linear-gradient(135deg,color-mix(in srgb,var(--medal-color) var(--medal-alpha,16%),transparent),color-mix(in srgb,var(--medal-gradient,var(--medal-color)) var(--medal-alpha,16%),transparent));color:var(--medal-text-color,var(--text));font-size:var(--font-size-sm);cursor:pointer;white-space:nowrap}.medal-medal-check input{margin:0}.medal-medal-ico{font-size:var(--font-size-sm);line-height:1}.medal-bulk-bar{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--bg);border-bottom:1px solid var(--line-soft)}.medal-bulk-bar .medal-bulk-sel{display:inline-flex;align-items:center;gap:6px}.medal-bulk-bar .medal-bulk-ops{margin-left:auto;display:inline-flex;align-items:center;gap:6px}.medal-bulk-sel-all[data-medal-on="1"]{background:var(--brand-soft);border-color:var(--brand);color:var(--success)}.medal-list-panel .medal-list .medal-item{display:flex;align-items:flex-start;gap:10px}.medal-list-panel .medal-list .medal-rule-item{display:flex;align-items:flex-start;gap:10px}.medal-list-panel .medal-list .medal-rule-item .admin-row-main{flex:1 1 auto;min-width:0}.medal-list-panel .medal-list .medal-item .admin-row-main{flex:1 1 auto;min-width:0}.medal-item-cb{display:inline-flex;align-items:center;margin-right:4px}.medal-item-cb input[type=checkbox]{width:38px;height:22px;margin:0}.medal-title-line .medal-medal-check{cursor:default}.medal-grant-medal-item{display:inline-flex;align-items:center;gap:7px;padding:3px 4px 3px 0}.medal-grant-medal-item input[type=checkbox]{width:38px;height:22px;margin:0}.medal-field-help{margin:2px 0 0;color:var(--text-subtle);font-size:var(--font-size-xs)}.medal-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--font-size-sm);margin:var(--font-size-sm) var(--font-size-md)}.medal-radius-input{box-sizing:border-box;width:120px;max-width:120px;height:38px;padding:2px 6px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);font-size:var(--font-size-sm)}.medal-stat{display:flex;flex-direction:column;gap:2px;padding:var(--font-size-sm) var(--font-size-md);border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.medal-stat b{font-size:var(--font-size-xl);font-weight:700;line-height:1.2}.medal-stat span{font-size:var(--font-size-xs);color:var(--text-muted)}.medal-mode-picker{display:grid;gap:var(--font-size-xs);margin-bottom:var(--font-size-sm)}.medal-mode-picker-label{color:var(--text-muted);font-size:var(--font-size-sm)}.medal-mode-picker-label small{display:block;color:var(--text-subtle);font-size:var(--font-size-xs)}.medal-mode-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--font-size-sm)}.medal-mode-option{position:relative;display:flex;flex-direction:column;align-items:center;gap:var(--font-size-xs);padding:var(--font-size-md) var(--font-size-sm);border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);cursor:pointer;text-align:center;transition:border-color var(--transition-normal),background var(--transition-normal)}.medal-mode-option:hover{background:var(--bg)}.medal-mode-option input{position:absolute;opacity:0;pointer-events:none}.medal-mode-icon{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--radius);background:var(--bg);color:var(--text-muted);transition:color var(--transition-normal),background var(--transition-normal)}.medal-mode-icon svg{width:20px;height:20px}.medal-mode-label{font-size:var(--font-size-sm);font-weight:600;color:var(--text)}.medal-mode-desc{font-size:var(--font-size-xs);color:var(--text-muted);line-height:1.4}.medal-mode-option:has(input:checked){border-color:var(--brand);background:var(--brand-soft)}.medal-mode-option:has(input:checked) .medal-mode-icon{color:var(--brand);background:var(--panel)}.medal-settings-form:not(:has(input[name="list_mode"][value="avatar"]:checked)) .medal-alpha-field{opacity:.45;pointer-events:none}.medal-avatar-badge{position:absolute;right:-3px;bottom:-3px;z-index:2;display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 3px;border-radius:999px;background:transparent;box-shadow:0 1px 2px var(--shadow-base);font-size:var(--font-size-xs);line-height:1;cursor:default}.medal-avatar-badge::before{content:'';position:absolute;inset:0;z-index:-1;border-radius:inherit;background-image:linear-gradient(135deg,color-mix(in srgb,var(--medal-color) var(--medal-avatar-alpha,50%),transparent),color-mix(in srgb,var(--medal-gradient,var(--medal-color)) var(--medal-avatar-alpha,50%),transparent));-webkit-backdrop-filter:blur(var(--medal-avatar-blur,2px));backdrop-filter:blur(var(--medal-avatar-blur,2px))}.medal-profile-title small{display:block;color:var(--text-subtle);font-size:var(--font-size-xs);font-weight:400;margin-top:2px}.medal-avatar-options{display:flex;flex-wrap:wrap;gap:6px}.medal-avatar-option{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;background:var(--panel);cursor:pointer;font-size:var(--font-size-sm);transition:border-color var(--transition-normal),background var(--transition-normal)}.medal-avatar-option:hover{background:var(--bg)}.medal-avatar-option:has(input:checked){border-color:var(--brand);background:var(--brand-soft);color:var(--success)}.medal-avatar-option input{width:14px;height:14px;flex:0 0 auto;padding:0;margin:0;border:0;background:none;accent-color:var(--brand)}.medal-avatar-opt-name{font-weight:600}.medal-avatar-pref{margin-top:var(--font-size-xs)}
/* mymsg */
/* 私信 Tab 自行渲染内容，隐藏官方遗留的空列表占位（:has 不支持时退化为隐藏该行） */
.mymsg-hidden-empty{display:none}
.empty-state:has(>.mymsg-hidden-empty){padding:0;border:0;background:none;min-height:0}
.post-list:has(>.empty-state>.mymsg-hidden-empty){display:none}
.mymsg-wrap{display:flex;flex-direction:column;gap:12px;margin:12px 0}
.mymsg-empty{display:flex;flex-direction:column;align-items:center;gap:6px;padding:38px 16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text-muted);text-align:center}
.mymsg-empty p{font-size:var(--font-size-md);font-weight:600;color:var(--text)}
.mymsg-empty span{font-size:var(--font-size-sm)}
.mymsg-empty a{color:var(--brand)}
.mymsg-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:0 6px 18px var(--shadow-base);overflow:hidden}
.mymsg-thread{display:flex;align-items:center;gap:12px;padding:12px 14px;border-bottom:1px solid var(--line-soft);color:var(--text);transition:background var(--transition-normal)}
.mymsg-thread:last-child{border-bottom:0}
.mymsg-thread:hover{background:var(--bg);color:var(--text)}
.mymsg-thread.unread{background:var(--brand-soft)}
.mymsg-thread.unread .mymsg-thread-name{font-weight:700}
.mymsg-thread.unread .mymsg-thread-preview{color:var(--text)}
.mymsg-thread-avatar{flex:0 0 auto;display:block;line-height:0}
.mymsg-thread-avatar .avatar-img{width:40px;height:40px}
.mymsg-thread-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:4px}
.mymsg-thread-top{display:flex;align-items:baseline;min-width:0}
.mymsg-thread-name{font-size:var(--font-size-md);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mymsg-thread-time{flex:0 0 auto;margin-bottom:2px;font-size:var(--font-size-xs);color:var(--text-subtle)}
.mymsg-thread-preview{font-size:var(--font-size-sm);color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mymsg-thread-me{font-style:normal;color:var(--text-subtle)}
.mymsg-thread-meta{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:5px}
.mymsg-thread-count{font-size:var(--font-size-xs);color:var(--text-subtle)}
.mymsg-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 6px;border-radius:999px;background:var(--danger);color:var(--inverse-text);font-size:var(--font-size-xs);font-weight:700;line-height:1}
.mymsg-head{position:relative;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}
.mymsg-back{position:relative;z-index:1;flex:0 0 auto;display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-muted);font-size:var(--font-size-sm)}
.mymsg-back:hover{border-color:var(--brand);color:var(--brand)}
.mymsg-head-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:flex;align-items:center;justify-content:center;gap:8px;max-width:calc(100% - 160px);min-width:0;color:var(--text);text-decoration:none}
.mymsg-head-center:hover{color:var(--brand)}
.mymsg-head-center .avatar-img{width:28px;height:28px;flex:0 0 auto}
.mymsg-head-name{flex:0 1 auto;font-size:var(--font-size-md);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mymsg-head-tip{position:relative;z-index:1;flex:0 0 auto;font-size:var(--font-size-xs);color:var(--text-subtle)}
.mymsg-stream{display:flex;flex-direction:column;gap:14px;max-height:60vh;overflow-y:auto;padding:14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:0 6px 18px var(--shadow-base)}
.mymsg-day{align-self:center;padding:2px 10px;border-radius:999px;background:var(--bg);color:var(--text-subtle);font-size:var(--font-size-xs)}
.mymsg-msg{display:flex;gap:10px;max-width:82%}
.mymsg-msg.in{align-self:flex-start}
.mymsg-msg.out{align-self:flex-end;flex-direction:row-reverse}
.mymsg-msg-avatar{flex:0 0 auto;line-height:0}
.mymsg-msg-avatar .avatar-img{width:34px;height:34px}
.mymsg-msg-body{min-width:0;display:flex;flex-direction:column;gap:4px}
.mymsg-msg.out .mymsg-msg-body{align-items:flex-end}
.mymsg-msg-head{display:flex;align-items:baseline;gap:8px;font-size:var(--font-size-xs);color:var(--text-subtle)}
.mymsg-msg.out .mymsg-msg-head{flex-direction:row-reverse}
.mymsg-msg-name{font-weight:600;color:var(--text-muted)}
.mymsg-bubble{padding:8px 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--bg);font-size:var(--font-size-md);line-height:1.65;word-break:break-word;overflow-wrap:anywhere}
.mymsg-msg.in .mymsg-bubble{border-top-left-radius:var(--radius-sm)}
.mymsg-msg.out .mymsg-bubble{border-top-right-radius:var(--radius-sm);background:var(--brand-soft);border-color:color-mix(in srgb,var(--brand) 24%,transparent)}
.mymsg-bubble p+p{margin-top:6px}
.mymsg-bubble img{display:block;max-width:100%;height:auto;border-radius:var(--radius-sm)}
.mymsg-bubble blockquote{margin:0 0 6px;padding:4px 10px;border-left:3px solid var(--line);color:var(--text-muted)}
.mymsg-reply{display:flex;flex-direction:column;gap:8px;padding:14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:0 8px 24px var(--shadow-base)}
.mymsg-reply textarea{line-height:1.6;resize:vertical}
.mymsg-reply textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--focus-ring)}
.mymsg-reply-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px}
.mymsg-reply-status{font-size:var(--font-size-sm);color:var(--text-muted)}
.mymsg-reply-status.error{color:var(--danger)}
.mymsg-reply .btn-post{margin:0;padding:7px 16px}
.mymsg-reply-disabled{padding:14px;border:1px dashed var(--line);border-radius:var(--radius);background:var(--bg);color:var(--text-subtle);font-size:var(--font-size-sm);text-align:center}
/* 后台按维度分块设置（全局默认 + 用户组覆盖）。
   1.1.13：note 样式选择器从 .settings-form 限定到 .mymsg-admin（插件后台容器根类），
   避免覆写核心/其他插件后台同类名元素的说明条样式 */
.mymsg-admin .settings-note{margin:0 0 16px;padding:10px 12px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-muted);font-size:var(--font-size-sm)}
.mymsg-dim{border:1px solid var(--line);border-radius:var(--radius);margin:0 0 14px;padding:12px 14px;background:var(--panel)}
.mymsg-dim-takeover{opacity:.65}
.mymsg-takeover-note{margin:0 0 10px;padding:8px 10px;border:1px solid var(--brand-soft,var(--line));border-radius:var(--radius-sm);background:var(--bg);color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.5}
.mymsg-dim legend{padding:0 8px;font-size:var(--font-size-md);font-weight:700;color:var(--text)}
.mymsg-dim-global{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.mymsg-gl-label{flex:0 0 auto;min-width:64px;font-size:var(--font-size-sm);color:var(--text-muted);font-weight:600}
.mymsg-dim-global input{width:120px}
.mymsg-dim-help{flex:1 1 240px;font-size:var(--font-size-xs);color:var(--text-subtle);line-height:1.5}
.mymsg-dim-groups{display:flex;align-items:flex-start;gap:10px;flex-wrap:wrap}
.mymsg-group-inputs{display:flex;flex-wrap:wrap;gap:8px;flex:1 1 auto}
.mymsg-gi{display:flex;flex-direction:column;gap:3px;min-width:96px}
.mymsg-gi-name{font-size:var(--font-size-xs);color:var(--text-muted)}
.mymsg-gi input{width:100%}
@media(max-width:720px){
.mymsg-msg{max-width:92%}
.mymsg-stream{max-height:none;padding:12px 10px}
.mymsg-head-tip,.mymsg-thread-count{display:none}
.mymsg-head-center .avatar-img{width:24px;height:24px}
.mymsg-head-center{gap:6px}
}
/* new_markdown */
.new-markdown-admin-settings{max-width:none;gap:16px}
.new-markdown-admin-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.new-markdown-admin-section{display:grid;align-content:start;gap:10px;min-width:0;padding:14px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg)}
.new-markdown-admin-section-head{display:grid;gap:3px;padding-bottom:2px}
.new-markdown-admin-section-head strong{color:var(--text);font-size:var(--font-size-md);line-height:1.4}
.new-markdown-admin-section-head span{color:var(--text-subtle);font-size:var(--font-size-sm);line-height:1.45}
.new-markdown-admin-settings .new-markdown-admin-section>.grid{grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;margin:0;padding:9px 0;border-top:1px solid var(--line-soft)}
.new-markdown-admin-settings .new-markdown-admin-section-head+.grid{border-top:0}
.new-markdown-admin-settings .new-markdown-admin-section>.grid>span{padding-top:0;color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.45}
.new-markdown-admin-settings .new-markdown-admin-section>.grid>span small{margin-top:2px;color:var(--text-subtle);line-height:1.4}
/* 提示语可能写成两三行：说明自己占一行，文本框整行铺在下面；高度按 3 行算（行高 1.6 × 3 + 上下内边距），
   核心 textarea 默认 min-height:120px 约 5 行，这里必须压回 3 行。 */
.new-markdown-admin-settings .new-markdown-admin-section>.grid.new-markdown-admin-field{grid-template-columns:minmax(0,1fr);align-items:start;gap:8px}
.new-markdown-admin-settings .new-markdown-admin-field>textarea{min-height:calc(4.8em + 16px)}
.new-markdown-admin-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding-top:2px}
.new-markdown-admin-actions button{margin:0}
.new-markdown-admin-actions span{color:var(--text-subtle);font-size:var(--font-size-sm);line-height:1.45}
@media(max-width:720px){
.new-markdown-admin-grid{grid-template-columns:1fr}
.new-markdown-admin-section{padding:12px}
.new-markdown-admin-actions{align-items:stretch;flex-direction:column}
.new-markdown-admin-actions button{width:100%}
}
.new-markdown-field{position:relative;display:grid;row-gap:0;margin:8px 0}
.reply-panel .new-markdown-field{margin:0}
.new-markdown-field>.grid{display:contents}
.new-markdown-field>.grid>span{order:1;margin-bottom:6px;padding-top:0}
/* 本地草稿有了存档就直接恢复，不再询问；这条说明只是告诉作者「内容被换过」，
   一行文字、没有任何按钮，几秒后自己消失。四边都有边线（工具栏底边线为 0、正文框顶边线为 0），
   于是与工具栏、正文框拼成同一个编辑器盒子，不会脱开浮在标签上方。 */
.new-markdown-draft{display:block;padding:6px 10px;border:1px solid var(--line);background:var(--brand-soft);color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.5}
/* 聚焦时工具栏描边会变主题色，说明条不跟着变就会在接缝处露出两种颜色。 */
.new-markdown-field:focus-within>.new-markdown>.new-markdown-draft{border-color:var(--brand)}
.new-markdown-field>.new-markdown{order:2}
/* 帖子标题并入编辑器：标题输入框由脚本移到编辑器盒子最上面，与工具栏、正文框共用同一圈边线，
   于是「标题」「内容」两个标签都不再需要（标题改用占位符，正文框的位置本身即提示）。
   回帖框没有标题输入框，这套规则自然不生效，标签照旧。 */
/* 核心 .grid 自带 margin:8px 0，并进盒子后必须清掉，否则标题行会把边框撑开一道缝。 */
.new-markdown .new-markdown-title{display:block;margin:0;padding:0 9px;border:1px solid var(--line);border-bottom:0;border-radius:var(--radius-sm) var(--radius-sm) 0 0;background:var(--panel)}
.new-markdown-field:focus-within>.new-markdown>.new-markdown-title{border-color:var(--brand)}
/* 去掉核心输入框的边框与内边距，只留字号字重把它和正文分开；max-width 必须显式放开，
   否则会被 .form-panel input 的 450px 上限拦住。 */
.new-markdown .new-markdown-title>input{display:block;width:100%;max-width:none;height:42px;padding:0;border:0;border-radius:0;background:transparent;font-size:var(--font-size-lg);font-weight:600;line-height:1.4}
/* 键盘聚焦时保留核心的 focus-visible 焦点环（核心 input:focus 已把 outline 归零）。 */
.new-markdown .new-markdown-title>span,.new-markdown-field.new-markdown-titled>.grid>span{display:none}
/* 工具栏不再是盒子的顶边：圆角交给标题行，两者之间用工具栏的顶边线做分隔。 */
.new-markdown-field.new-markdown-titled>.new-markdown>.new-markdown-bar{border-radius:0}
/* 正文框固定白底，和主题色工具栏拉开层次；高度仍交给核心按场景决定。 */
.new-markdown-field>.grid>textarea[name=body]{order:3;border-top:0;border-radius:0 0 var(--radius-sm) var(--radius-sm);background:var(--panel);resize:vertical}
/* 后台配置的正文提示语：原生占位符，正文为空时出现、敲第一个字就消失，透明到正文文字的一半。 */
.new-markdown-field>.grid>textarea[name=body]::placeholder{color:var(--text);opacity:.5}
/* 分栏实时预览：左边写，右边常驻渲染结果，随输入更新。 */
.new-markdown-field.new-markdown-live{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.new-markdown-field.new-markdown-live>.grid>span,.new-markdown-field.new-markdown-live>.new-markdown{grid-column:1/-1}
.new-markdown-field.new-markdown-live>.grid>textarea[name=body]{grid-column:1;border-bottom-right-radius:0}
.new-markdown-field.new-markdown-live>.new-markdown-preview{grid-column:2;max-height:60vh;overflow:auto;border-left:0;border-bottom-left-radius:0}
/* 纵向弹性列：工具栏与本地草稿提示条按 DOM 顺序上下排，提示条自然落在工具栏下方。 */
.new-markdown{display:flex;flex-direction:column;min-width:0}
/* 工具栏跟随站点主题色，不写死中性灰。 */
.new-markdown-bar{display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:4px 6px;border:1px solid var(--line);border-bottom:0;border-radius:var(--radius-sm) var(--radius-sm) 0 0;background:var(--brand-soft)}
.new-markdown-field:focus-within>.new-markdown>.new-markdown-bar{border-color:var(--brand)}
/* 选择器带上根容器，避免被 .reply-panel button 之类的核心规则按特异性压过。 */
.new-markdown .new-markdown-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;width:30px;min-width:30px;min-height:28px;height:28px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--brand-hover);cursor:pointer}
.new-markdown .new-markdown-btn svg{width:16px;height:16px}
.new-markdown .new-markdown-btn:hover{border-color:var(--line);background:var(--panel);color:var(--brand-hover)}
.new-markdown .new-markdown-btn:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}
.new-markdown .new-markdown-btn.new-markdown-btn-active{border-color:var(--brand);background:var(--panel);color:var(--brand-hover)}
/* 工具栏提示改用自绘气泡：原生 title 的配色由操作系统决定，无法随站点明暗主题变化。
   只在支持悬停的设备出现，触屏点按不会留下残影。 */
@media (hover:hover){
    .new-markdown .new-markdown-btn[data-new-markdown-tip]:hover::after{content:attr(data-new-markdown-tip);position:absolute;z-index:5;top:calc(100% + 6px);left:50%;transform:translateX(-50%);padding:3px 7px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-xs);font-weight:400;line-height:1.5;white-space:nowrap;box-shadow:0 4px 12px var(--shadow-base);pointer-events:none}
}
.new-markdown-split{width:1px;height:16px;margin:0 4px;background:var(--line)}
/* 窄屏工具栏只留最常用的 5 个按钮（粗体/斜体/删除线/标题/引用）+ 字数 + 预览 + 全屏，
   其余（代码/列表/链接/图片/表格/分割线/表情/大表情）整体折叠，工具栏不再折成两三行。
   包层在桌面端是 display:contents——按钮仍是工具栏的直接 flex 子项，布局与不包完全一致。 */
.new-markdown-more{display:contents}
@media (max-width:720px){
    .new-markdown-more{display:none}
    /* 极限收紧（原 480 断点并入 720，全站断点唯一）：工具栏更紧凑 */
    .new-markdown-bar{gap:1px;padding:4px}
    .new-markdown .new-markdown-btn{width:28px;min-width:28px}
    .new-markdown-split{margin:0 2px}
}
.new-markdown-space{flex:1 1 auto;min-width:0}
.new-markdown-count{flex:0 1 auto;min-width:0;padding:0 6px;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.4;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 超限态：红字明示超出量，随 updateCount 的 class 切换 */
.new-markdown-count.new-markdown-count-over{color:var(--danger);font-weight:600}
/* 面板用 fixed 浮层：既不挤占正文框空间，也不会被祖先的 overflow:hidden 裁掉。位置由 JS 计算，优先向上弹。
   高度随内容自适应，max-height 只兜住上限（超过就内部滚动）；切换分组尺寸会变，
   靠「每次变化都重算位置」让贴住工具栏的那条边不动（见 layoutPanel 注释）。 */
.new-markdown-panel{--new-markdown-emoji-size:20px;position:fixed;z-index:60;display:flex;flex-direction:column;width:min(380px,100%);max-height:min(70vh,520px);border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:0 12px 32px var(--shadow-medium);overflow:hidden}
/* 大表情面板按分组标题排列，整面板一起滚动，标题跟随内容移动。 */
.new-markdown-panel[data-new-markdown-kind=sticker]{overflow-y:auto}
.new-markdown-panel[hidden]{display:none}
.new-markdown-items{flex:1 1 auto;min-height:0;display:flex;align-items:flex-start;align-content:flex-start;flex-wrap:wrap;gap:3px;margin:0;padding:8px 10px;overflow-y:auto;list-style:none}
.new-markdown-items[hidden]{display:none}
.new-markdown-items li{padding:4px 7px;border-radius:var(--radius-sm);color:var(--text);font-size:var(--font-size-sm);line-height:1.4;cursor:pointer;user-select:none}
.new-markdown-items li:hover{background:var(--bg)}
/* 表情格子用等分网格：flex 换行是按内容宽度凑整数个，凑不满就把余量整块堆在行尾，
   右边缘参差不齐。网格按固定列宽把整行铺满，行尾不再留那块空白。 */
.new-markdown-items-emoji{display:grid;grid-template-columns:repeat(auto-fill,minmax(34px,1fr));gap:3px;align-content:start}
.new-markdown-items-emoji li{display:flex;align-items:center;justify-content:center;padding:2px 0;font-size:var(--new-markdown-emoji-size)}
/* 大表情分组标题：目录名即标题，只有一组时不出现。 */
.new-markdown-items-head{flex:0 0 auto;padding:6px 8px 0;color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.5}
/* 大表情：贴图缩略，点选后独立成行插入。 */
.new-markdown-items-sticker{flex:0 0 auto;overflow:visible;gap:4px}
.new-markdown-items-sticker li{padding:3px;border:1px solid transparent;border-radius:var(--radius-sm)}
.new-markdown-items-sticker li:hover{border-color:var(--line)}
.new-markdown-items-sticker li img{display:block;height:48px;max-width:96px;object-fit:contain}
/* 正文里的大表情限高显示，避免被核心图片 max-width 压成通栏。 */
.new-markdown-sticker{max-height:120px;width:auto;vertical-align:middle}
/* 标签栏（原来的「点一下把…插入到正文」提示已去掉）贴着靠工具栏的那条边，
   向下弹在顶部、向上弹移到底部（方向标记由 layoutPanel 写入），分隔线始终朝面板内容一侧。 */
.new-markdown-tabs{flex:0 0 auto;display:flex;align-items:stretch;flex-wrap:wrap;border-bottom:1px solid var(--line);background:var(--brand-soft)}
.new-markdown-panel[data-new-markdown-dir=up]>.new-markdown-tabs{order:2;border-bottom:0;border-top:1px solid var(--line)}
.new-markdown .new-markdown-tab{min-width:0;min-height:34px;padding:0 12px;border:0;border-radius:0;background:transparent;color:var(--text-muted);font-size:var(--font-size-sm);font-weight:400;cursor:pointer}
.new-markdown .new-markdown-tab:hover{background:var(--panel);color:var(--text)}
.new-markdown .new-markdown-tab.new-markdown-tab-active{background:var(--panel);color:var(--brand-hover);font-weight:500}
/* 预览框借用核心 .post-content 的排版，但要去掉它的 margin-top，否则与正文框差 2px。 */
.new-markdown-preview{order:4;margin-top:0;min-height:120px;padding:12px 14px;border:1px solid var(--line);border-top:0;border-radius:0 0 var(--radius-sm) var(--radius-sm);background:var(--panel)}
.new-markdown-preview[hidden]{display:none}
.new-markdown-preview-empty{color:var(--text-subtle);font-size:var(--font-size-sm)}
/* 全屏编辑区铺满视口。层高取 60——**低于 forum_nav 吸顶顶栏（sticky, z-70）**，顶栏在全屏时
   保留可见（站长要求的 1.6.12 行为；1.7.2 曾抬到 75 把顶栏盖掉，已回退）。代价是顶栏盖住字段
   顶部约 48px，故 padding-top 用 62px（48px 顶栏 + 14px 原内边距），工具栏完整落在顶栏下方。
   又必须低于全屏期被抬高的核心弹窗与 toast——全屏面板不透明，1.6.17 修复过「弹窗被整块盖住
   =点了没反应」，因此全屏激活期间（body.new-markdown-fulling，由 toggleFullscreen 维护）把
   .modal-backdrop 抬到 80、.toast 抬到 85。**调整前先读 DESIGN §5 的层级说明。 */
.new-markdown-field.new-markdown-full{position:fixed;inset:0;z-index:60;align-content:start;margin:0;padding:62px 14px 14px;background:var(--panel);overflow:auto}
body.new-markdown-fulling .modal-backdrop{z-index:80}
body.new-markdown-fulling .toast{z-index:85}
/* 正文框与预览固定为一屏高、在框内滚动：字段容器本身不产生滚动，工具栏（含「退出全屏」按钮）
   恒在视口内——此前 min-height 随内容生长，长文全屏时工具栏与退出按钮会被推出视口
   （1.7.0 移除 maxlength 后粘贴超长内容即可复现） */
.new-markdown-field.new-markdown-full>.grid>textarea[name=body]{height:calc(100vh - 155px)}
.new-markdown-field.new-markdown-full>.new-markdown-preview{height:calc(100vh - 155px);max-height:none}
.new-markdown-dialog-field{display:grid;gap:5px;color:var(--text-muted);font-size:var(--font-size-sm)}
.new-markdown-dialog-field .prompt-input{box-sizing:border-box}
/* ===== 代码复制（仅在未启用 code-highlight 时随正文输出）=====
   代码表面是核心的反色表面（--inverse，亮主题深底、暗主题浅底），按钮因此走反色令牌，
   亮暗两套主题都不用单独写色值；padding-top 与高亮插件留出的按钮位一致，
   装与不装高亮插件，代码块的观感不变。 */
.new-markdown-copy{position:relative;display:block;min-width:0;margin:10px 0}
.new-markdown-copy>pre{margin:0;padding-top:2.6em}
.new-markdown-copy-btn{position:absolute;z-index:2;top:9px;right:9px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid var(--inverse-border);border-radius:var(--radius-sm);background:var(--inverse);color:var(--inverse-text);opacity:0;pointer-events:none;cursor:pointer;transition:opacity var(--transition-normal),border-color var(--transition-normal),color var(--transition-normal)}
.new-markdown-copy-btn svg{display:block;width:17px;height:17px}
.new-markdown-copy:hover>.new-markdown-copy-btn,.new-markdown-copy:focus-within>.new-markdown-copy-btn,.new-markdown-copy-btn.new-markdown-copy-ok,.new-markdown-copy-btn.new-markdown-copy-fail{opacity:1;pointer-events:auto}
.new-markdown-copy-btn:focus-visible{opacity:1;pointer-events:auto;outline:2px solid var(--focus-ring);outline-offset:2px}
.new-markdown-copy-btn.new-markdown-copy-ok{border-color:var(--success);color:var(--success)}
.new-markdown-copy-btn.new-markdown-copy-fail{border-color:var(--danger);color:var(--danger)}
/* 触屏没有 hover，按钮常显，否则复制入口不可达。 */
@media(hover:none){.new-markdown-copy-btn{opacity:.68;pointer-events:auto}}
@media(prefers-reduced-motion:reduce){.new-markdown-copy-btn{transition:none}}
/* 窄屏放不下两栏，预览移到正文框下方，仍然实时更新。 */
@media(max-width:720px){
.new-markdown-field.new-markdown-live{grid-template-columns:minmax(0,1fr)}
.new-markdown-field.new-markdown-live>.grid>textarea[name=body]{grid-column:1;border-radius:0}
.new-markdown-field.new-markdown-live>.new-markdown-preview{grid-column:1;max-height:50vh;border-left:1px solid var(--line);border-radius:0 0 var(--radius-sm) var(--radius-sm)}
}
/* perf_inspector */
.perf-inspector{margin:12px auto;max-width:1000px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text);font-size:var(--font-size-sm)}.perf-inspector>summary{padding:8px 12px;cursor:pointer;color:var(--text-muted)}.perf-inspector-body{padding:0 12px 12px}.perf-inspector h3{margin:12px 0 6px;font-size:var(--font-size-sm);font-weight:600;color:var(--text-muted)}.perf-inspector-facts{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 4px;padding:0;list-style:none}.perf-inspector-fact{display:flex;align-items:baseline;gap:6px;padding:4px 10px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--bg)}.perf-inspector-fact-label{color:var(--text-subtle);font-size:var(--font-size-xs)}.perf-inspector-fact b{font-weight:600}.perf-inspector-fact-alert{border-color:var(--danger);color:var(--danger)}.perf-inspector-fact-alert .perf-inspector-fact-label{color:var(--danger)}.perf-inspector table{width:100%;border-collapse:collapse;margin:0;font-size:var(--font-size-xs)}.perf-inspector caption{caption-side:top;padding:0 0 4px;text-align:left;color:var(--text-subtle)}.perf-inspector th,.perf-inspector td{padding:4px 6px;border-bottom:1px solid var(--line-soft);text-align:left;vertical-align:top}.perf-inspector th{color:var(--text-muted);font-weight:600;white-space:nowrap}.perf-inspector td.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.perf-inspector-sql{font-family:var(--font-mono);color:var(--text-muted);word-break:break-all}.perf-inspector-params{color:var(--text-subtle)}.perf-inspector-hot{color:var(--danger);font-weight:600}.perf-inspector-tag{display:inline-block;margin:0 4px 2px 0;padding:1px 6px;border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--text-muted);white-space:nowrap}.perf-inspector-empty{color:var(--text-subtle)}.perf-inspector-note{margin:12px 0 0;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.8}.perf-inspector-note code{font-family:var(--font-mono);color:var(--text-muted)}.perf-inspector-suspects-title{color:var(--danger)}.perf-inspector-suspects{margin:0 0 8px;padding:8px 10px 8px 26px;border:1px solid var(--danger);border-radius:var(--radius-sm);color:var(--text);line-height:1.8}.perf-inspector-client-verdict{margin:0 0 8px;padding:6px 10px;border-left:2px solid var(--danger);color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.8}.perf-inspector-client-verdict[hidden]{display:none}.perf-inspector-log{margin:0;padding:8px 10px;max-height:260px;overflow:auto;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--font-size-xs);white-space:pre-wrap;word-break:break-all}.perf-inspector-copy{margin-left:8px;padding:1px 8px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer;vertical-align:middle}.perf-inspector-copy:hover{border-color:var(--brand);color:var(--brand)}.perf-inspector-copy:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.perf-inspector-report{display:none}.perf-inspector-admin-hint{color:var(--text-muted)}
/* points_manager */
.points-manager-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;margin-bottom:16px;text-align:center}
.points-manager-balance-label{font-size:var(--font-size-sm);color:var(--text-muted)}
.points-manager-balance{font-size:var(--font-size-xl);font-weight:700;color:var(--brand);margin-top:6px}
.points-manager-balance-neg{color:var(--danger)}
.points-manager-neg-tip{font-size:var(--font-size-xs);color:var(--danger);margin-top:8px;line-height:1.5}
.points-manager-cap-tip{font-size:var(--font-size-xs);color:var(--text-subtle);margin-top:8px}
/* 前台积分页：标题区（用户名 + 副标题），品牌色竖条与后台面板标题呼应 */
.points-manager-front-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.points-manager-front-head h1{display:flex;align-items:center;gap:8px;font-size:var(--font-size-lg);font-weight:700;margin:0}
.points-manager-front-head h1::before{content:"";width:3px;height:16px;border-radius:999px;background:var(--brand);flex:0 0 auto}
.points-manager-front-sub{font-size:var(--font-size-sm);color:var(--text-muted);margin:0}
/* 筛选栏：控件统一定高 34px、垂直居中，间距均匀，避免输入框/下拉与按钮高度不一、按钮偏上错位 */
.points-manager-filter{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
/* 覆盖核心样式表 input,select{width:100%}：筛选控件改为内容自适应宽度 */
.points-manager-filter select,.points-manager-filter input{width:auto;min-width:110px;flex:0 1 auto;height:34px;box-sizing:border-box;border:1px solid var(--line);border-radius:var(--radius);padding:0 10px;font-size:var(--font-size-md);background:var(--panel);color:var(--text)}
.points-manager-filter input[type=number]{min-width:96px}
.points-manager-filter button{flex:0 0 auto;height:34px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center}
.points-manager-page-size{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;white-space:nowrap}
.points-manager-page-size-prefix{font-size:var(--font-size-sm);color:var(--text-muted);white-space:nowrap;flex:0 0 auto}
.points-manager-page-size select{min-width:88px}
/* 积分日志筛选栏：用户ID 输入与类型下拉统一加宽至 100px（flex:0 0 auto 防止行内空间不足时被压缩变形） */
.points-manager-filter input.points-manager-uid-input{width:100px;min-width:100px;flex:0 0 auto}
.points-manager-filter select.points-manager-kind-select{width:100px;min-width:100px}
/* 后台 legacy 作用域覆盖：核心 .plugin-admin-page .plugin-admin-legacy-body input:not([type=checkbox])
   以特异性 (0,3,1)（2 class + :not 内属性选择器）强制后台全部 input/select 为 width:100%，
   导致筛选控件被拉伸到内在宽度（uid 输入框约 184~220px、类型下拉膨胀），控件相互挤压。
   此处以 (0,5,1) 高特异性（.plugin-admin-page + .form-panel.points-manager-panel 面板作用域
   + :not 计入属性选择器）恢复内容自适应，并锁定 uid/kind 两控件为 100px；
   前台（非 legacy-body）不受影响，沿用上方通用规则。 */
.plugin-admin-page .form-panel.points-manager-panel .points-manager-filter input:not([type=checkbox]),
.plugin-admin-page .form-panel.points-manager-panel .points-manager-filter select{width:auto;min-width:0;flex:0 1 auto;height:34px}
.plugin-admin-page .form-panel.points-manager-panel .points-manager-filter input.points-manager-uid-input,
.plugin-admin-page .form-panel.points-manager-panel .points-manager-filter select.points-manager-kind-select{width:100px;min-width:100px;flex:0 0 auto}
.plugin-admin-page .form-panel.points-manager-panel .points-manager-page-size select{min-width:88px}
/* 积分日志：标题与筛选栏合并为同一行，筛选(GET 表单)作为 flex 项撑满剩余宽度；控件 flex:0 0 auto 不收缩，
   空间不足时由 log-top 外层 flex-wrap 整体换行（filter 整块到下一行，内部仍保持一行），避免控件挤压错乱 */
.points-manager-log-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.points-manager-log-top h2{flex:0 0 auto;margin:0;white-space:nowrap}
.points-manager-log-top .points-manager-filter{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;margin-bottom:0;flex:1 1 auto;min-width:0}
.points-manager-log-top .points-manager-filter>*{flex:0 0 auto}
/* 查询按钮推至筛选栏最右端 */
.points-manager-log-top .points-manager-filter button[type=submit]{margin-left:auto}
/* 表格下方操作区：导出CSV 与 清空日志 并排，与分页/帮助文字保持垂直间距 */
.points-manager-log-actions{display:flex;align-items:center;gap:10px;margin-top:14px;margin-bottom:6px}
.points-manager-log-actions .points-manager-export-btn{display:inline-flex;align-items:center;justify-content:center;height:34px;box-sizing:border-box;padding:0 14px;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);color:var(--text);font-size:var(--font-size-md);text-decoration:none;transition:border-color var(--transition-normal),color var(--transition-normal)}
.points-manager-log-actions .points-manager-export-btn:hover{border-color:var(--brand);color:var(--brand)}
.points-manager-log-actions .post-action-form{display:inline-flex;margin:0}
.points-manager-log-actions .post-action-form button.danger{background:transparent;color:var(--danger);border:1px solid var(--danger);font-weight:500;height:34px;min-height:34px;padding:0 12px;font-size:var(--font-size-sm);display:inline-flex;align-items:center;white-space:nowrap}
.points-manager-log-actions .post-action-form button.danger:hover{background:var(--danger-soft);border-color:var(--danger)}
/* 积分流水表美化：全宽填充面板、卡片式圆角边框、表头底色、加宽单元格内边距
   核心 table.list{width:auto} 优先级 (0,1,1) 高于 .points-manager-table (0,1,0)，故用 table. 前缀拉平后靠后加载覆盖 */
table.points-manager-table{width:100%;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--panel);box-shadow:0 8px 24px var(--shadow-base)}
.points-manager-table th,.points-manager-table td{padding:12px 14px;vertical-align:middle}
.points-manager-table th{background:var(--bg);color:var(--text-muted);font-size:var(--font-size-sm);font-weight:600;border-bottom:1px solid var(--line-soft)}
.points-manager-table td{font-size:var(--font-size-md);border-bottom:1px solid var(--line-soft)}
/* 时间列收窄（class 精确命中，不依赖列位置；前后台表头与单元格均已加该 class）：width:1% + nowrap 收缩到内容宽度（shrink-to-fit），结余列不换行保持数字紧凑 */
.points-manager-table th.points-manager-time-col,.points-manager-table td.points-manager-time-col{width:1%;white-space:nowrap}
.points-manager-table td.points-manager-balance{white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--text-muted)}
.points-manager-balance.neg{color:var(--danger);font-weight:600}
/* 后台日志截断单元格：PHP 侧截断加省略号 + CSS max-width 双保险（防长英文串撑破表格），title 悬停显示全文 */
.points-manager-table td.points-manager-cell-cut{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:help}
.points-manager-table th:last-child,.points-manager-table td:last-child{text-align:left}
.points-manager-table tr:hover td{background:var(--brand-soft)}
.points-manager-table tr:last-child td{border-bottom:none}
.points-manager-delta.pos{color:var(--brand);font-weight:600}
.points-manager-delta.neg{color:var(--danger);font-weight:600}
.points-manager-note{color:var(--text-muted);font-size:var(--font-size-sm)}
.points-manager-empty{text-align:center;color:var(--text-subtle);padding:18px 0}
.points-manager-kind{font-size:var(--font-size-xs);color:var(--text-muted)}
.points-manager-panel{margin-bottom:16px}
.points-manager-grid{display:grid;grid-template-columns:1fr;gap:10px}
.points-manager-forum-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 16px}
.points-manager-grid input:disabled,.points-manager-forum-grid input:disabled{opacity:.55;cursor:not-allowed;background:var(--bg);color:var(--text-muted)}
.points-manager-rank-link{color:var(--brand);font-weight:600}
.points-manager-rank-link:hover{color:var(--brand-hover);text-decoration:underline}
/* 面板标题统一：品牌色竖条强调，强化三个标签页的标题层级 */
.points-manager-admin h2{display:flex;align-items:center;gap:8px;font-size:var(--font-size-lg);font-weight:700;margin:0 0 14px}
.points-manager-admin h2::before{content:"";width:3px;height:16px;border-radius:999px;background:var(--brand);flex:0 0 auto}
/* 积分日志单行工具栏内的 h2 保持无外边距（覆盖上方 .points-manager-admin h2 的 margin，保证与筛选控件垂直对齐） */
.points-manager-log-top h2{margin:0}
/* 帮助文字：统一小字灰色，与标题留白协调 */
.points-manager-help{font-size:var(--font-size-sm);color:var(--text-muted);margin:-4px 0 14px}
.points-manager-forum-block{border:1px solid var(--line-soft);border-radius:var(--radius);padding:12px 16px;margin-bottom:12px;background:var(--bg)}
.points-manager-forum-form{margin:0}
.points-manager-deny-panel{text-align:center}
.points-manager-deny-panel p{font-size:var(--font-size-md);color:var(--text);margin:12px 0 0}
.points-manager-deny-actions{margin-top:18px}
.points-manager-home-btn{display:inline-block;padding:8px 22px;border-radius:var(--radius);background:var(--brand);color:var(--inverse-text);font-size:var(--font-size-md);text-decoration:none;transition:background var(--transition-normal)}
.points-manager-home-btn:hover{background:var(--brand-hover);color:var(--inverse-text)}
.points-manager-forum-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.points-manager-forum-name{display:flex;align-items:center;gap:6px}
.points-manager-forum-name .meta-icon{color:var(--text-muted)}
.points-manager-forum-head strong{font-size:var(--font-size-md)}
.points-manager-custom{font-size:var(--font-size-xxs);color:var(--success);background:var(--success-soft);border-radius:var(--radius);padding:2px 8px}
.points-manager-forum-switch{margin-top:10px}
/* 版块卡片操作按钮左对齐（与"运行自检"一致） */
.points-manager-forum-actions{display:flex;justify-content:flex-start;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}
.points-manager-forum-actions .post-action-form{display:inline-flex;margin:0}
.points-manager-forum-actions button{height:32px;min-height:32px;min-width:82px;padding:7px 13px;font-size:var(--font-size-md);font-weight:500;line-height:1.2}
/* 自检面板：运行按钮右对齐 */
.points-manager-selftest-panel .post-action-form{display:flex;justify-content:flex-end}
.points-manager-selftest-result{margin-top:12px}
.points-manager-pass{color:var(--brand);font-weight:600}
.points-manager-fail{color:var(--danger);font-weight:600}
.points-manager-subtabs{margin-bottom:16px}
.points-manager-section{border:1px solid var(--line-soft);border-radius:var(--radius);padding:14px 16px;margin-bottom:14px;background:var(--bg)}
.points-manager-section:last-child{margin-bottom:0}
.points-manager-section h3{margin:0 0 12px;font-size:var(--font-size-sm);color:var(--text-muted);font-weight:600;letter-spacing:.02em;display:flex;align-items:center;gap:6px}
.points-manager-section h3::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--brand);flex:0 0 auto}
/* 操作按钮左对齐：与"运行自检"保持一致（全局设置保存按钮） */
.points-manager-form-actions{display:flex;justify-content:flex-start;margin-top:16px;padding-top:14px;border-top:1px solid var(--line-soft)}
.points-manager-grid input[type=number],.points-manager-forum-grid input[type=number]{max-width:200px}
.points-manager-count{font-size:var(--font-size-sm);color:var(--text-muted);margin-bottom:10px}
.points-manager-custom-default{color:var(--text-muted);background:var(--bg)}
/* 管理员评分：详情页徽章（评分合计/已评态）+ 入口触发按钮（行内星形 / 三点菜单整行项）。
   表单在同页唯一的 fixed 定位评分弹窗内（见 points_manager_rate_modal）；
   原先的 details 弹层因 `.main-panel{overflow:hidden}` 在短帖会被裁剪，已废弃 */
.points-manager-rate-badge{display:inline-flex;align-items:center;height:18px;min-width:18px;font-size:var(--font-size-xs);font-weight:700;border-radius:999px;padding:0 6px;line-height:1;white-space:nowrap}
.points-manager-rate-badge.pos{color:var(--success);background:var(--success-soft)}
.points-manager-rate-badge.neg{color:var(--danger);background:var(--danger-soft)}
.points-manager-rate-badge.mine{color:var(--text-muted);background:var(--bg)}
/* 评分块行级容器（1.8.6）：包裹合计徽章 + 明细 + 入口，复刻操作条 flex 的 10px gap 与换行行为
   （视觉与拆分前一致）；同时作为评分成功后前端就地替换的定位锚点 */
.points-manager-rate-block{display:inline-flex;align-items:center;flex-wrap:wrap;gap:10px;min-width:0;max-width:100%}
/* 评分明细（post.ops_actions 随合计徽章渲染在楼层操作条）：「被 X 评分 ±N（理由）」小字，多人逐条；
   覆盖 .post-ops 继承的 white-space:nowrap，长理由窄屏可换行；间距交给操作条自身的 flex gap */
.points-manager-rate-records{display:flex;flex-wrap:wrap;gap:2px 14px;font-size:var(--font-size-xs);color:var(--text-muted);white-space:normal}
.points-manager-rate-record b{font-weight:600}
.points-manager-rate-record b.pos{color:var(--success)}
.points-manager-rate-record b.neg{color:var(--danger)}
.points-manager-rate-record .points-manager-rate-name{color:var(--text)}
/* 主题化悬停提示（明暗自适应）：原生 title 由浏览器渲染、无法适配站点明暗主题，
   改 data-points-manager-tip + 伪元素，配色用核心反色对 --inverse/--inverse-text；
   绝对定位脱离 flex 流不占徽章内空间；pointer-events:none 避免移向间隙时的悬停抖动 */
.points-manager-rate-badge[data-points-manager-tip],.points-manager-rate-ico[data-points-manager-tip]{position:relative}
.points-manager-rate-badge[data-points-manager-tip]::after,.points-manager-rate-ico[data-points-manager-tip]::after{content:attr(data-points-manager-tip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:var(--inverse);color:var(--inverse-text);border:1px solid var(--inverse-border);border-radius:var(--radius-sm);padding:4px 8px;font-size:var(--font-size-xs);font-weight:400;line-height:1.4;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--transition-normal),visibility var(--transition-normal);z-index:30}
.points-manager-rate-badge[data-points-manager-tip]:hover::after,.points-manager-rate-ico[data-points-manager-tip]:hover::after,.points-manager-rate-badge[data-points-manager-tip]:focus-visible::after,.points-manager-rate-ico[data-points-manager-tip]:focus-visible::after{opacity:1;visibility:visible}
/* 触发按钮：清掉按钮默认外观。星形图标（mask，日夜模式随 currentColor 变色）只用于行内圆形按钮；
   菜单形态为纯文字项（与宿主菜单其余项一致，不带图标）。
   选择器带自有 data-* 提升特异性：核心 `.post-ops button{padding:3px 8px;line-height:1.2}`
   为 0-1-1，单类选择器（0-1-0）会被其覆盖，导致圆形图标被 padding 挤出变形 */
.points-manager-rate-ico[data-points-manager-rate-open],.points-manager-rate-item[data-points-manager-rate-open]{appearance:none;-webkit-appearance:none;margin:0;font-family:inherit;cursor:pointer;color:var(--text-muted);background:none;box-sizing:border-box;transition:background-color var(--transition-normal),border-color var(--transition-normal),color var(--transition-normal)}
.points-manager-rate-ico[data-points-manager-rate-open]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:1px solid var(--line);border-radius:50%}
.points-manager-rate-ico[data-points-manager-rate-open]:hover{color:var(--brand);border-color:var(--brand)}
.points-manager-rate-ico[data-points-manager-rate-open]::before{content:'';flex:0 0 auto;width:13px;height:13px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2.5l2.83 6.1 6.67.72-4.95 4.47 1.36 6.58L12 17l-5.91 3.37 1.36-6.58-4.95-4.47 6.67-.72z'/%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%3Cpath d='M12 2.5l2.83 6.1 6.67.72-4.95 4.47 1.36 6.58L12 17l-5.91 3.37 1.36-6.58-4.95-4.47 6.67-.72z'/%3E%3C/svg%3E") center/contain no-repeat}
/* 菜单形态（承载于 topic_manage 三点菜单内）：纯文字整行项；min-height 与宿主菜单项（30px）齐平。
   颜色**不自述** —— 由上方共享规则给 --text-muted，与承载宿主「更多」弹层里其余条目
   （核心 `.post-ops .post-ops-menu>*{color:var(--text-muted)}`）同色。此前自述 --text，暗色下
   与同列灰字条目相比明显偏亮（站长实测反馈即此）。
   字重同样不自述：详情页弹层由核心给 400，列表页三点菜单由宿主基线 `.topic-manage-kebab-menu button` 给 400。 */
.points-manager-rate-item[data-points-manager-rate-open]{display:flex;width:100%;align-items:center;justify-content:flex-start;min-height:30px;padding:5px 10px;border-radius:var(--radius-sm);font-size:var(--font-size-xs);line-height:1.4;text-align:left}
.points-manager-rate-item[data-points-manager-rate-open]:hover{background:var(--line-soft);color:var(--brand)}
.points-manager-rate-label{white-space:nowrap}
/* 评分弹窗表单：label 在左、控件在右（与 topic_manage 弹窗行同一视觉写法） */
.points-manager-rate-quota{margin:0 0 14px;font-size:var(--font-size-xs);color:var(--text-subtle)}
.points-manager-rate-modal .points-manager-rate-row{display:flex;align-items:center;gap:12px;margin:0 0 14px;font-size:var(--font-size-sm)}
.points-manager-rate-modal .points-manager-rate-row[hidden]{display:none}
.points-manager-rate-modal .points-manager-rate-row>span{flex:0 0 auto;min-width:72px;color:var(--text-muted);white-space:nowrap}
.points-manager-rate-modal .points-manager-rate-row input[type=number]{flex:0 1 auto;width:auto;min-width:120px;min-height:32px;padding:5px 9px;font-size:var(--font-size-sm)}
.points-manager-rate-modal .points-manager-rate-row select{flex:0 1 auto;width:auto;min-width:200px;min-height:32px;padding:5px 9px;font-size:var(--font-size-sm)}
.points-manager-rate-modal .points-manager-rate-reason-wrap{align-items:flex-start}
.points-manager-rate-modal .points-manager-rate-reason-wrap>span{padding-top:7px}
.points-manager-rate-modal .points-manager-rate-reason-wrap textarea{width:200px;min-height:72px;padding:5px 9px;font-size:var(--font-size-sm);font-family:inherit;line-height:1.5;resize:vertical}
@media (max-width:720px){.points-manager-forum-grid{grid-template-columns:1fr}.points-manager-log-top{flex-direction:column;align-items:stretch}.points-manager-log-top .points-manager-filter{flex-wrap:wrap}.points-manager-filter{flex-direction:column;align-items:stretch}.points-manager-filter select,.points-manager-filter input{width:100%}}
/* post_vote */
.post-vote{display:flex;justify-content:flex-end;align-items:center;gap:8px;margin-top:6px}
.post-vote-form{display:inline-flex;gap:6px}
.post-vote-btn{display:inline-flex;align-items:center;gap:3px;padding:2px;border:0;background:none;color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.4;cursor:pointer}
.post-vote-btn svg{width:14px;height:14px}
/* 悬停只让拇指本身变色，不铺背景：核心 button:hover 会给按钮铺一层 --brand-hover 底色并把文字
   改成 --inverse-text（已投票的 disabled 按钮不在原 :not(:disabled) 覆盖范围内，悬停同样变色），
   这里按官方 .icon-action 的写法统一压成透明并复位文字色，再由下面两条规则给图标上色。 */
.post-vote-btn:hover,.post-vote-btn:active{background:transparent;color:var(--text-muted)}
/* 冻结（超期）与自己的内容都不再降低透明度：所有拇指颜色保持一致，
   能不能顶/踩改由点击时的弹窗说明，避免同一页出现深浅不一的拇指。 */
/* 顶/踩的悬停与已投态统一走官方变量 --brand / --danger：各主题都保证定义的只有这两个，
   原先顶用 --success、收藏用 --info/--warning 等语义色在本主题虽有别名，换主题后可能整套未定义
   （如安装程序那套主题只定义了 --brand/--danger/--ok/--warn），会直接失效。 */
.post-vote-up:hover:not(:disabled){color:var(--brand)}
.post-vote-down:hover:not(:disabled){color:var(--danger)}
.post-vote-btn:disabled,.post-vote-off{opacity:.55;cursor:default;pointer-events:none}
/* 投票弹层（视觉对齐 points-manager-rate-pop）+ 全屏遮罩：
   遮罩 z-45 盖住内容与导航下拉（核心 z-40），低于 toast（z-50）与页头（z-100）；
   summary 与气泡开启时 z-46 在遮罩之上（保证无 JS 时 summary 仍可点击收起），关闭态回归普通层级。
   遮罩色（1.1.9）由字面量 rgba(0,0,0,.3) 改为核心令牌派生 color-mix(in srgb, var(--backdrop) 70%, transparent)
   （≈30% 不透明度，跟随主题遮罩基色）：仍有意轻于核心 --backdrop（42%）——投票条位于内容底部、
   遮罩覆盖全文，42% 会把正文压得过暗。
   气泡默认向上弹出（投票条位于内容底部），展开后由 JS 改成 position:fixed 并按屏幕空位定位
   （见 post_vote_place）——气泡住在核心 .main-panel（overflow:hidden）里，贴面板顶边时上半截会被
   裁掉，固定定位才能逃逸该裁剪（同页遮罩本就如此）；下面这条只作「JS 未介入时」的兜底锚点。 */
.post-vote-pop{position:relative;display:inline-flex}
.post-vote-pop summary{list-style:none;user-select:none;position:relative}
/* 高层级仅在气泡开启时生效：关闭态压回普通层级，避免盖住页面上的下拉面板（如 topic_manage 操作菜单） */
.post-vote-pop[open] summary{z-index:46}
.post-vote-pop summary::-webkit-details-marker{display:none}
.post-vote-mask{display:none}
.post-vote-pop[open] .post-vote-mask{display:block;position:fixed;inset:0;background:color-mix(in srgb, var(--backdrop) 70%, transparent);z-index:45}
.post-vote-bubble{position:absolute;right:0;bottom:calc(100% + 6px);z-index:46;width:200px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 8px 24px var(--shadow-base);padding:10px;font-size:var(--font-size-sm);color:var(--text);text-align:center}
.post-vote-bubble-text{line-height:1.5}
.post-vote-bubble-actions{display:flex;gap:8px;margin-top:8px}
.post-vote-bubble-actions button{flex:1;height:28px;min-height:28px;padding:0 8px;font-size:var(--font-size-sm)}
/* 「点踩」确认按钮挂核心官方 danger 类（红底），无自绘按钮皮肤 */
.post-vote-cancel{background:transparent;color:var(--text-muted);border:1px solid var(--line)}
.post-vote-up.post-vote-on{color:var(--brand)}
.post-vote-down.post-vote-on{color:var(--danger)}
/* 收藏入口的包装层必须是 flex 上下文：层内是 inline-level 的 details，若只是普通 inline span，
   details 会按「基线」对齐（行盒还会给下方留出降部空间），而顶/踩是 .post-vote-form 的 flex 子项、
   按「居中」对齐——两者混用会让五角星整体比拇指高一截。 */
.post-vote-fav-wrap{display:inline-flex;align-items:center}
/* 收藏入口（仅主楼）配色：默认描边空星（继承 .post-vote-btn 的弱色）。
   悬停＝「点下去会变成的样子」预览——未收藏 → 品牌色实心，已收藏 → 回描边弱色（即取消后的样子）；
   已收藏恒为品牌色实心。
   为何用 --brand：核心官方收藏按钮 .fav-btn 的 :hover 与 .active 都用 --brand（index.css），
   关注（block_follow）的悬停与已关注态也已是 --brand；且 --brand/--danger 是各主题都保证定义的变量，
   而 --info 在部分主题里根本没有定义（换主题即失效）。
   配色规则置于 .post-vote-btn:hover（悬停置灰）之后，同特异性下靠源顺序覆盖。 */
.post-vote-fav,.post-vote-fav:hover{text-decoration:none}
.post-vote-fav:hover,.post-vote-fav-on{color:var(--brand)}
.post-vote-fav:hover svg,.post-vote-fav-on svg{fill:currentColor}
.post-vote-fav-on:hover{color:var(--text-muted)}
.post-vote-fav-on:hover svg{fill:none}
.post-vote-num{min-width:1em;text-align:center;font-variant-numeric:tabular-nums}
.post-vote-tip{font-size:var(--font-size-xs);color:var(--text-subtle)}
.post-vote-hot{margin-top:14px;padding-top:10px;border-top:1px dashed var(--line-soft)}
.post-vote-hot-head{display:flex;align-items:center;gap:5px;margin-bottom:8px;font-size:var(--font-size-xs);font-weight:600;color:var(--text-muted)}
.post-vote-hot-head svg{width:13px;height:13px;color:var(--warning)}
.post-vote-hot-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.post-vote-hot .post-vote-hot-item{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--line-soft);border-radius:var(--radius);background:var(--panel)}
.post-vote-hot .post-vote-hot-item:hover{border-color:var(--brand)}
.post-vote-hot-avatar{display:block;width:22px;height:22px;flex-shrink:0;border-radius:50%;overflow:hidden}
.post-vote-hot-avatar .avatar-img{width:100%;height:100%;border-radius:50%}
.post-vote-hot-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.post-vote-hot .post-vote-hot-name{font-size:var(--font-size-xs);color:var(--text-muted);text-decoration:none}
.post-vote-hot .post-vote-hot-name:hover{color:var(--brand)}
.post-vote-hot .post-vote-hot-excerpt{font-size:var(--font-size-sm);color:var(--text);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.post-vote-hot .post-vote-hot-excerpt:hover{color:var(--brand)}
.post-vote-hot-scores{display:inline-flex;align-items:center;gap:6px;flex-shrink:0}
.post-vote-hot-score{display:inline-flex;align-items:center;gap:3px;font-size:var(--font-size-xs)}
.post-vote-hot-score svg{width:12px;height:12px}
.post-vote-hot-up{color:var(--brand)}
.post-vote-hot-down{color:var(--danger)}
.post-vote-admin-rules{margin:12px 0;padding:10px 14px;border:1px solid var(--line-soft);border-radius:var(--radius);font-size:var(--font-size-sm);color:var(--text-muted)}
.post-vote-admin-rules ul{margin:6px 0 0;padding-left:18px}
.post-vote-admin-rules li{margin-bottom:4px}
@media (max-width:720px){.post-vote-hot-excerpt{white-space:normal}}
/* quote_reply_plus */
.quote-reply-plus-block{margin:0 0 10px;padding:10px 12px;border:1px solid var(--line);border-left:3px solid var(--brand);border-radius:var(--radius-sm,4px);background:var(--bg);color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.6}
.quote-reply-plus-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;margin-bottom:6px;color:var(--text-subtle);font-size:var(--font-size-xs)}
.quote-reply-plus-head strong{color:var(--text);font-weight:600}
.quote-reply-plus-head a{color:var(--brand);text-decoration:none}
.quote-reply-plus-head a:hover{color:var(--brand-hover);text-decoration:underline}
.quote-reply-plus-text{margin:0;overflow-wrap:anywhere;white-space:pre-wrap}
.quote-reply-plus-clip{display:block;max-height:7.2em;overflow:hidden}
/* 提高选择器特异度，覆盖核心 .btn,button 与 .btn:hover,button:hover 的全局绿色按钮样式 */
.quote-reply-plus-block .quote-reply-plus-toggle{display:inline;margin-top:6px;padding:0;border:0;background:transparent;color:var(--brand);font-size:var(--font-size-xs);font-weight:400;line-height:inherit;min-height:0;cursor:pointer}
.quote-reply-plus-block .quote-reply-plus-toggle:hover{background:transparent;color:var(--brand-hover);text-decoration:underline}
.quote-reply-plus-drop{margin-left:6px;color:var(--text-subtle);font-size:var(--font-size-xs);text-decoration:none}
.quote-reply-plus-drop:hover{color:var(--danger)}
@media(max-width:720px){.quote-reply-plus-block{padding:8px 10px;font-size:var(--font-size-xs)}}
/* 行内入口组（引用 + 回复）：待归位态与 block_follow 同构（inline-flex + margin-top，归位后压掉） */
[data-quote-reply-plus-acts]{display:inline-flex;align-items:center;gap:2px;margin-top:6px;vertical-align:top}
[data-quote-reply-plus-acts].quote-reply-plus-docked{margin-top:0}
/* 未安装 post_vote 时没有顶/踩行容器可作为 dock 目标，本组必须自处得当（此前只剩「正文左下方」）。
   楼层 .post-entry 是 grid（"avatar body" / "content content"），追加在正文之后的元素会落到隐式行的
   第一列（36px 头像列）——即无顶/踩行时入口组缩在帖子左下方的根因；跨两列 + flex-end 即落在这一行右端。
   本组已归位（docked）时不生效：归位到 [data-post-vote]、或退一步归位到 block_follow 的图标组容器
   （见 quote_reply_plus_dock），此时位置由容器决定，不该再自己铺满一整行——那会与 block_follow 各占一行。 */
.post-entry:not(:has([data-post-vote])) [data-quote-reply-plus-acts]:not(.quote-reply-plus-docked){display:flex;grid-column:1/-1;justify-content:flex-end}
/* 静止态：对齐同排邻居——顶/踩/关注/屏蔽都是 --text-muted、全不透明、无底色。
   颜色必须显式复述：本组归位后位于 .post-content 内，而核心 .post-content a{color:var(--brand-hover)}
   是 0-1-1，会盖过核心 .icon-action 的 --text-muted（0-1-0）——核心原按钮在 post-ops 里本是灰的，
   搬进正文就会被染绿。这里用 0-2-0 复述静止色，再由 0-3-0 的 :hover 在悬停时转官方 --brand
   （与关注/屏蔽同款），同时压掉核心 .icon-action:hover 的浅灰底（同排其它按钮都没有悬停底色）。
   文字标签改为可见：核心 .icon-action span 是 sr-only（0-1-1），由下方 0-2-1 覆盖，
   按钮随之由 24×24 方框变为「图标 + 文字」胶囊。 */
[data-quote-reply-plus-acts] .icon-action{width:auto;min-height:0;padding:2px 6px;gap:3px;color:var(--text-muted);opacity:1}
[data-quote-reply-plus-acts] .icon-action:hover{background:transparent;color:var(--brand)}
[data-quote-reply-plus-acts] .icon-action span{position:static;width:auto;height:auto;margin:0;padding:0;overflow:visible;clip:auto;white-space:nowrap;font-size:var(--font-size-xs);line-height:1.4}
/* 引用图标：手绘双引号（核心 icon 表无此字形），mask 写法逐字对齐核心 .icon-quote。
   换成别的字形只需替换下面两处 data URI */
.icon-quote-plus:before{
-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272.6%27 stroke-linecap=%27round%27%3E%3Ccircle cx=%276.3%27 cy=%2714.7%27 r=%273%27 fill=%27currentColor%27 stroke=%27none%27/%3E%3Cpath d=%27M8.9 13.1 11.1 7.5%27/%3E%3Ccircle cx=%2714.8%27 cy=%2714.7%27 r=%273%27 fill=%27currentColor%27 stroke=%27none%27/%3E%3Cpath d=%27M17.4 13.1 19.6 7.5%27/%3E%3C/svg%3E") center/14px 14px no-repeat;
mask:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272.6%27 stroke-linecap=%27round%27%3E%3Ccircle cx=%276.3%27 cy=%2714.7%27 r=%273%27 fill=%27currentColor%27 stroke=%27none%27/%3E%3Cpath d=%27M8.9 13.1 11.1 7.5%27/%3E%3Ccircle cx=%2714.8%27 cy=%2714.7%27 r=%273%27 fill=%27currentColor%27 stroke=%27none%27/%3E%3Cpath d=%27M17.4 13.1 19.6 7.5%27/%3E%3C/svg%3E") center/14px 14px no-repeat}
/* 核心「更多」弹层内的条目统一为纯文字：核心 v10.2 把「编辑」「复制链接」收进 .post-ops-menu 时
   保留了 .icon-action 的前置图标，而弹层里其余条目（管理项 / 评分管理 / 扩展项）都是纯文字，
   这两行因此比同列多出 14px 图标位、首字缩进不齐。本插件已把「编辑」搬回顶/踩行
   （见 JS quote_reply_plus_move_edit），这里把剩下的前置图标一律隐掉，整列纯文字对齐。
   选择器 .post-ops-menu>.icon-action::before（0-2-1）与核心 .post-ops-menu>.icon-action:before
   同分，本插件样式后加载故生效；只作用于弹层直接子级，操作条左侧的图标按钮不受影响。 */
.post-ops-menu>.icon-action::before{display:none}
/* 窄屏只留图标：这一行（顶/踩行）不换行，文字标签会把整行撑溢出 */
@media(max-width:720px){[data-quote-reply-plus-acts] .icon-action{padding:2px}[data-quote-reply-plus-acts] .icon-action span{display:none}}
/* rank_hall */
/* 侧栏卡片 */
.rank-hall-card .rank-hall-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.rank-hall-card .rank-hall-more{color:var(--text-subtle);font-size:var(--font-size-xs);text-decoration:none;white-space:nowrap}
.rank-hall-card .rank-hall-more:hover{color:var(--brand)}
.rank-hall-tabs{display:flex;align-items:center;justify-content:center;gap:2px;margin:10px 0 0;padding:0;list-style:none}
.rank-hall-tab{appearance:none;border:0;background:none;padding:4px 8px;border-radius:var(--radius-sm);font-size:var(--font-size-sm);color:var(--text-muted);cursor:pointer;line-height:1.4;transition:color var(--transition-normal),background-color var(--transition-normal)}
.rank-hall-tab:hover{color:var(--brand);background:var(--brand-soft)}
.rank-hall-tab.active{color:var(--brand);background:var(--brand-soft);font-weight:700}
.rank-hall-panels{margin-top:8px}
.rank-hall-list{margin:0;padding:0;list-style:none}
.rank-hall-list[hidden]{display:none}
.rank-hall-card .rank-hall-list li{margin:0;padding:0;list-style:none}
/* 行分割线（原由核心 .quick-links li 提供；不再借用该类后在自有作用域内复刻）。
   空白占位行不显示分割线 */
.rank-hall-card .rank-hall-list li:not(.rank-hall-slot){border-bottom:1px solid var(--bg)}
.rank-hall-card .rank-hall-list li:last-child{border-bottom:none}
/* 空白占位行补透明下边框：与真实行的 1px 分割线同占高（末行除外，与真实行口径一致），
   使「不足人数」与「0 人」的榜和满榜逐像素等高 */
.rank-hall-card .rank-hall-list li.rank-hall-slot:not(:last-child){border-bottom:1px solid transparent}
/* 空榜提示行：外层 li 去掉通用空态的竖向内边距（16px 会比真实行更高、且无占位补足，
   0 人榜的卡片明显偏矮）；内层 span 复用 rank-hall-item 盒几何并居中。
   完整榜单页的 .rank-hall-empty 空态不受此作用域影响 */
.rank-hall-card .rank-hall-list .rank-hall-empty{padding:0}
.rank-hall-card .rank-hall-list .rank-hall-empty-inner{justify-content:center;color:var(--text-subtle)}
.rank-hall-item{display:flex;align-items:center;gap:8px;padding:6px 0;min-height:40px;color:var(--text);text-decoration:none}
/* 空白占位：沿用 rank-hall-item 的盒几何（min-height+padding 与真实行等高），
   无内容、不响应指针 */
.rank-hall-slot-inner{pointer-events:none;background:none}
.rank-hall-rank{flex:0 0 20px;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);background:var(--line-soft);color:var(--text-muted);font-size:var(--font-size-xs);font-weight:700;line-height:1}
/* 前三名行内徽章：金/银/铜为名次数据类别（6.5#7 允许的额外颜色），
   色值取低饱和金属色、配白底，保证小字对比度 */
.rank-hall-medal-1 .rank-hall-rank{background:#fef3c7;color:#92400e}
.rank-hall-medal-2 .rank-hall-rank{background:#f1f5f9;color:#334155}
.rank-hall-medal-3 .rank-hall-rank{background:#ffedd5;color:#9a3412}
.rank-hall-avatar{flex:0 0 26px;width:26px;height:26px;border-radius:50%;overflow:hidden}
.rank-hall-avatar .avatar-img{width:26px;height:26px}
.rank-hall-name{flex:1;min-width:0;font-size:var(--font-size-sm);color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rank-hall-item:hover .rank-hall-name{color:var(--brand)}
.rank-hall-count{flex:0 0 auto;font-size:var(--font-size-sm);font-weight:700;color:var(--text)}
.rank-hall-empty{padding:16px 4px;text-align:center;color:var(--text-subtle);font-size:var(--font-size-sm)}
.rank-hall-self-item .rank-hall-name{color:var(--brand);font-weight:600}

/* 完整榜单页：panel 白底容器，与 leaderboard 页同语言 */
.rank-hall-page{border-radius:var(--radius);background:var(--panel);overflow:hidden}
.rank-hall-page-head{padding:18px 20px 10px}
.rank-hall-page-title{margin:0;font-size:var(--font-size-xl);font-weight:700;color:var(--text);line-height:1.3}
.rank-hall-page-tabs{display:flex;flex-wrap:wrap;gap:4px;padding:0 20px 14px}
.rank-hall-page-tab{padding:6px 14px;border-radius:var(--radius-sm);font-size:var(--font-size-sm);color:var(--text-muted);text-decoration:none;transition:color var(--transition-normal),background-color var(--transition-normal)}
.rank-hall-page-tab:hover{color:var(--brand);background:var(--brand-soft)}
.rank-hall-page-tab.active{background:var(--brand);color:var(--inverse-text);font-weight:600}
/* 颁奖台 */
.rank-hall-podium{display:flex;justify-content:center;align-items:flex-end;gap:10px;padding:8px 20px 20px}
.rank-hall-podium-col{display:flex;flex-direction:column;align-items:center;flex:0 1 180px;min-width:0}
.rank-hall-podium-col-2{flex-basis:160px}
.rank-hall-podium-col-3{flex-basis:150px}
.rank-hall-podium-profile{display:flex;flex-direction:column;align-items:center;gap:6px;padding:14px 10px 10px;width:100%;border-radius:var(--radius) var(--radius) 0 0;text-decoration:none}
.rank-hall-podium-col-1 .rank-hall-podium-profile{padding-top:20px;background:#fffbeb}
.rank-hall-podium-col-2 .rank-hall-podium-profile{background:#f8fafc}
.rank-hall-podium-col-3 .rank-hall-podium-profile{background:#fff7ed}
.rank-hall-podium-avatar{flex:0 0 52px;width:52px;height:52px;border-radius:50%;overflow:hidden;border:2px solid var(--line)}
.rank-hall-podium-col-1 .rank-hall-podium-avatar{width:60px;height:60px;flex-basis:60px;border-color:#f59e0b}
.rank-hall-podium-col-2 .rank-hall-podium-avatar{border-color:#94a3b8}
.rank-hall-podium-col-3 .rank-hall-podium-avatar{border-color:#fb923c}
.rank-hall-podium-avatar .avatar-img{width:100%;height:100%}
.rank-hall-podium-name{font-size:var(--font-size-sm);font-weight:700;color:var(--text);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rank-hall-podium-col-1 .rank-hall-podium-name{font-size:var(--font-size-md);color:#92400e}
.rank-hall-podium-col-2 .rank-hall-podium-name{color:#334155}
.rank-hall-podium-col-3 .rank-hall-podium-name{color:#9a3412}
.rank-hall-podium-count{display:inline-flex;align-items:baseline;font-size:var(--font-size-sm);font-weight:700;color:var(--text)}
.rank-hall-podium-step{display:flex;align-items:center;justify-content:center;width:100%;font-size:var(--font-size-sm);font-weight:800;color:var(--inverse-text)}
.rank-hall-podium-col-1 .rank-hall-podium-step{height:52px;background:#f59e0b;font-size:var(--font-size-md)}
.rank-hall-podium-col-2 .rank-hall-podium-step{height:40px;background:#94a3b8}
.rank-hall-podium-col-3 .rank-hall-podium-step{height:32px;background:#fb923c}
/* 第 4 名起列表 */
.rank-hall-page-list{display:grid;gap:2px;padding:0 20px 18px}
.rank-hall-page-list .rank-hall-item{padding:9px 12px;border-radius:var(--radius-sm);background:var(--bg);transition:background-color var(--transition-normal)}
.rank-hall-page-list .rank-hall-item:hover{background:var(--brand-soft)}
.rank-hall-page-list .rank-hall-avatar{flex-basis:32px;width:32px;height:32px}
.rank-hall-page-list .rank-hall-avatar .avatar-img{width:32px;height:32px}
.rank-hall-page-list .rank-hall-name{font-size:var(--font-size-md)}
.rank-hall-page-list .rank-hall-count{font-size:var(--font-size-md)}
.rank-hall-page-list .rank-hall-self-item{background:var(--brand-soft)}
/* 后台 */
.rank-hall-form-section{margin:14px 0 6px;font-size:var(--font-size-sm);font-weight:700;color:var(--text)}
.rank-hall-help{margin:12px 0 0;color:var(--text-subtle);font-size:var(--font-size-sm)}
/* 榜单编排编辑器（参照 forum_nav 版块编排：边框容器 + 行分隔） */
.rank-hall-board-editor{list-style:none;margin:0 0 4px;padding:0;border:1px solid var(--line);border-radius:var(--radius-sm)}
.rank-hall-board-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border-bottom:1px solid var(--line-soft)}
.rank-hall-board-row:last-child{border-bottom:none}
.rank-hall-board-pick{display:inline-flex;align-items:center;gap:8px;font-size:var(--font-size-sm);color:var(--text)}
.rank-hall-board-ord{width:56px;padding:4px 6px;box-sizing:border-box;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:var(--font-size-sm);color:var(--text)}
/* 显示页面编辑器：开关与页面名同行、三行紧凑排列（避开核心 label.grid 窄列） */
.rank-hall-pages{border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px 10px}
.rank-hall-page-row{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:var(--font-size-sm);color:var(--text);cursor:pointer}
.rank-hall-page-row input{flex:0 0 auto}
.rank-hall-pages .rank-hall-help{margin:8px 0 0}
@media(max-width:720px){
.rank-hall-page-head{padding:14px 14px 8px}
.rank-hall-page-title{font-size:var(--font-size-lg)}
.rank-hall-page-tabs{padding:0 14px 12px}
.rank-hall-page-tab{padding:6px 10px}
.rank-hall-podium{gap:6px;padding:6px 12px 16px}
.rank-hall-podium-col,
.rank-hall-podium-col-2,
.rank-hall-podium-col-3{flex:1;flex-basis:1px}
.rank-hall-podium-col-1 .rank-hall-podium-profile{padding-top:14px}
.rank-hall-podium-profile{padding:10px 6px 8px}
.rank-hall-podium-avatar,
.rank-hall-podium-col-1 .rank-hall-podium-avatar{flex-basis:40px;width:40px;height:40px}
.rank-hall-podium-name,
.rank-hall-podium-col-1 .rank-hall-podium-name{font-size:var(--font-size-xs)}
.rank-hall-podium-col-1 .rank-hall-podium-step{height:40px;font-size:var(--font-size-sm)}
.rank-hall-podium-col-2 .rank-hall-podium-step{height:32px}
.rank-hall-podium-col-3 .rank-hall-podium-step{height:26px}
.rank-hall-page-list{padding:0 12px 14px}
}
/* reg_control */
/* 后台：面板标题统一品牌色竖条 */
.reg-control-admin h2,.reg-control-panel h2{display:flex;align-items:center;gap:8px;font-size:var(--font-size-lg);font-weight:700;margin:0 0 14px;line-height:1.3}
.reg-control-admin h2::before,.reg-control-panel h2::before{content:"";width:3px;height:16px;border-radius:999px;background:var(--brand);flex:0 0 auto}
.reg-control-help,.reg-control-tip{font-size:var(--font-size-sm);color:var(--text-muted);line-height:1.7}
.reg-control-help{margin:-4px 0 16px}
.reg-control-tip{margin:0 0 12px}
.reg-control-tip-muted{color:var(--text-subtle)}
/* 分组卡片：圆点标题 + 卡片化分组 */
.reg-control-section{border:1px solid var(--line);border-radius:var(--radius);padding:16px;margin-bottom:16px;background:var(--panel)}
.reg-control-section:last-of-type{margin-bottom:0}
.reg-control-section h3{margin:0 0 14px;font-size:var(--font-size-sm);color:var(--text-muted);font-weight:600;letter-spacing:.03em;display:flex;align-items:center;gap:7px}
.reg-control-section h3::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--brand);flex:0 0 auto}
.reg-control-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 20px}
.reg-control-grid input[type=number]{max-width:220px}
.reg-control-checks{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}
/* 统一操作栏：左对齐 + 顶部分隔线（保存/测试/批量操作共用一种视觉） */
.reg-control-form-actions,.reg-control-test-actions,.reg-control-log-actions{display:flex;align-items:center;justify-content:flex-start;gap:10px;flex-wrap:wrap;margin-top:16px;padding-top:14px;border-top:1px solid var(--line-soft)}
.reg-control-test-actions{margin-top:14px}
.reg-control-log-actions{margin-top:10px;margin-bottom:2px}
/* 测试邮件区（section 结构） */
.reg-control-test-form{margin-top:16px}
/* 危险操作（描边式，避免整块红色抢眼） */
.reg-control-log-actions .post-action-form button.danger,.reg-control-emergency .post-action-form button.danger{background:transparent;color:var(--danger);border:1px solid var(--danger);font-weight:500;min-height:32px;padding:4px 12px;font-size:var(--font-size-sm);display:inline-flex;align-items:center;white-space:nowrap}
.reg-control-log-actions .post-action-form button.danger:hover,.reg-control-emergency .post-action-form button.danger:hover{background:var(--danger-soft)}
/* 列表页：标题行 + 筛选工具栏行（功能选择类组件居左，查询按钮靠右，同一水平线） */
.reg-control-log-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 8px}
.reg-control-log-top h2{flex:0 0 auto;margin:0;white-space:nowrap}
.reg-control-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 16px}
/* 覆盖核心 .form-panel form 的 grid：筛选行须为弹性布局，保证左边组件 + 右侧查询按钮同行 */
.reg-control-panel .reg-control-filter{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;flex:1 1 auto;min-width:0}
.reg-control-filter>*{flex:0 0 auto}
.reg-control-filter select,.reg-control-uid input{height:32px;box-sizing:border-box;border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 10px;font-size:var(--font-size-md);background:var(--panel);color:var(--text);transition:border-color var(--transition-normal)}
.reg-control-filter select:focus,.reg-control-uid input:focus{border-color:var(--brand);outline:none}
/* 1.11.8：固定宽度规则带 .reg-control-panel 前缀提升特异性到 0,2,1——核心后台把插件页内容包进
   .plugin-admin-page .plugin-admin-legacy-body 并对其内 select/非复选框 input 强制 width:100%;max-width:none，
   无前缀(0,1,1)的固定宽度会被覆盖，筛选行的状态下拉被拉满整行；同特异性后靠 plugins.css 晚于 index.css 加载胜出 */
.reg-control-panel .reg-control-filter select{width:200px}
.reg-control-panel .reg-control-filter select.reg-control-size{width:80px;margin-left:auto}
.reg-control-panel .reg-control-uid input{width:200px}
.reg-control-panel .reg-control-uid-sm input{width:100px}
.reg-control-filter button[type=submit]{height:32px;display:inline-flex;align-items:center;justify-content:center}
.reg-control-uid{display:inline-flex;align-items:center;gap:6px}
.reg-control-uid span{font-size:var(--font-size-sm);color:var(--text-muted);flex:0 0 auto}
.reg-control-count{font-size:var(--font-size-sm);color:var(--text-muted);margin:0 0 12px}
/* 队列/状态信息芯片条 */
.reg-control-stats{display:flex;align-items:center;gap:0;flex-wrap:wrap;margin:0 0 16px;padding:9px 12px;border:1px solid var(--line-soft);border-radius:var(--radius);background:var(--bg)}
.reg-control-stat{display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-sm);color:var(--text-muted);padding-right:14px;margin-right:14px;border-right:1px solid var(--line)}
.reg-control-stat b{color:var(--text);font-weight:700}
.reg-control-dot{width:8px;height:8px;border-radius:50%;background:var(--text-subtle);flex:0 0 auto}
.reg-control-dot.ok{background:var(--brand)}
.reg-control-dot.warn{background:var(--warning)}
.reg-control-dot.bad{background:var(--danger)}
.reg-control-stat-fill{flex:1 1 auto;min-width:220px;font-size:var(--font-size-sm);color:var(--text-muted);line-height:1.6;text-align:right}
/* 表格：固定布局 + 按列宽自适应内容宽度（不拉伸容器），保证各列精确列宽；单元格截断省略号 + 悬停 title */
.reg-control-table{table-layout:fixed}
/* 后台两栏网格防溢出：由 reg_control_js 在含插件面板的页面给主列容器
   （.forum-main/.main-panel）内联 min-width:0，不使用 CSS :has() 选择器 */
.reg-control-table-wrap{overflow-x:auto;max-width:100%}
.reg-control-table th,.reg-control-table td{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.reg-control-table th{font-weight:600}
.reg-control-id{width:50px;max-width:50px}
.reg-control-table th.reg-control-id,.reg-control-table td.reg-control-id{padding-left:6px;padding-right:4px}
.reg-control-to{max-width:180px}
.reg-control-subject{width:160px;max-width:160px}
.reg-control-error{color:var(--danger);max-width:200px}
.reg-control-detail{max-width:260px}
.reg-control-username{max-width:140px}
.reg-control-email{max-width:200px}
.reg-control-empty{text-align:center;color:var(--text-subtle);padding:28px 0}
.reg-control-queue-check{margin-right:6px;accent-color:var(--brand)}
/* 统一提示条组件（中性/info/ok/warn/danger） */
.reg-control-note{position:relative;margin:0 0 14px;padding:11px 14px;border:1px solid var(--line);border-left:3px solid var(--line);border-radius:var(--radius);background:var(--panel);font-size:var(--font-size-sm);color:var(--text);line-height:1.7}
.reg-control-note.info{border-left-color:var(--info);border-color:var(--info-soft);background:var(--info-soft)}
.reg-control-note.ok{border-left-color:var(--brand);border-color:var(--brand-soft);background:var(--brand-soft)}
.reg-control-note.warn{border-left-color:var(--warning);border-color:var(--warning-soft);background:var(--warning-soft)}
.reg-control-note.danger{border-left-color:var(--danger);border-color:var(--danger-soft);background:var(--danger-soft)}
.reg-control-note h3{margin:0 0 6px;font-size:var(--font-size-md);font-weight:600;color:var(--text);display:flex;align-items:center;gap:6px}
.reg-control-note h3::before{content:"";width:6px;height:6px;border-radius:50%;flex:0 0 auto}
.reg-control-note.warn h3::before{background:var(--warning)}
.reg-control-note.danger h3::before{background:var(--danger)}
.reg-control-note.ok h3::before{background:var(--brand)}
.reg-control-note p{margin:0 0 8px}
.reg-control-note p:last-child{margin-bottom:0}
.reg-control-note .post-action-form{margin-top:10px}
/* 自检清单 */
.reg-control-checks-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.reg-control-checks-list li{display:flex;align-items:center;gap:10px;font-size:var(--font-size-sm);color:var(--text)}
.reg-control-checks-list li span{flex:0 0 auto;min-width:48px;text-align:center;padding:2px 8px;border-radius:var(--radius-sm);font-size:var(--font-size-xs)}
.reg-control-check-ok span{background:var(--brand-soft);color:var(--success)}
.reg-control-check-bad span{background:var(--danger-soft);color:var(--danger)}
/* 徽章（已验证/未验证/队列状态复用） */
.reg-control-badge{display:inline-flex;align-items:center;padding:2px 10px;border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:600;line-height:1.5}
.reg-control-badge-ok{background:var(--brand-soft);color:var(--success)}
.reg-control-badge-warn{background:var(--warning-soft);color:var(--warning)}
.reg-control-badge-info{background:var(--info-soft);color:var(--info)}
.reg-control-badge-bad{background:var(--danger-soft);color:var(--danger)}
/* 前台：注册提示与登录页链接 */
.reg-control-register-hint{font-size:var(--font-size-sm);color:var(--text-muted);margin:4px 0 0;line-height:1.6}
.reg-control-username-hint,.reg-control-password-hint{font-size:var(--font-size-sm);margin:4px 0 0;line-height:1.5;min-height:0}
.reg-control-username-hint:empty,.reg-control-password-hint:empty{display:none}
.reg-control-username-bad{color:var(--danger)}
.reg-control-username-ok{color:var(--brand)}
.reg-control-login-extra{display:flex;align-items:center;gap:4px 14px;flex-wrap:wrap;margin-top:12px;font-size:var(--font-size-sm)}
.reg-control-login-extra a{color:var(--brand)}
.reg-control-login-extra a:hover{color:var(--brand-hover)}
/* 找回第二步：表单内的「换个邮箱，重新申请」（提交按钮之后）。整页表单是 grid（justify-self 管
   水平起点）、guest_gate 弹窗内表单是纵向 flex（align-self 管横向），两个属性各管一种容器 */
.reg-control-reset-redo{justify-self:start;align-self:flex-start;font-size:var(--font-size-sm);color:var(--brand)}
.reg-control-reset-redo:hover{color:var(--brand-hover)}
/* 前台：邮箱与验证卡片 */
.reg-control-email-line{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.reg-control-email-label{font-size:var(--font-size-sm);color:var(--text-muted)}
.reg-control-email-line strong{font-size:var(--font-size-md);word-break:break-all}
.reg-control-guide-actions{display:flex;gap:10px;align-items:center;margin-top:16px;flex-wrap:wrap}
.reg-control-guide-btn{display:inline-block;padding:8px 18px;border-radius:var(--radius);background:var(--brand);color:var(--inverse-text);font-size:var(--font-size-md);font-weight:500;text-decoration:none;transition:background var(--transition-normal)}
.reg-control-guide-btn:hover{background:var(--brand-hover)}
.reg-control-guide-home{display:inline-block;padding:8px 18px;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);color:var(--text-muted);font-size:var(--font-size-md);text-decoration:none;transition:color var(--transition-normal),border-color var(--transition-normal)}
.reg-control-guide-home:hover{color:var(--brand);border-color:var(--brand)}
.reg-control-verify-resend{margin-bottom:14px}
.reg-control-email-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.reg-control-email-actions form{margin:0}
.reg-control-code-entry{display:inline-block;padding:8px 16px;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);color:var(--text-muted);font-size:var(--font-size-sm);text-decoration:none;transition:color var(--transition-normal),border-color var(--transition-normal)}
.reg-control-code-entry:hover{color:var(--brand);border-color:var(--brand)}
.reg-control-form{display:flex;flex-direction:column;gap:4px}
/* 修改密码二次验证（注入核心个人设置密码区） */
.reg-control-reauth{border:1px solid var(--line);border-left:3px solid var(--brand);border-radius:var(--radius);background:var(--bg);padding:12px 14px;margin:0 0 12px;display:flex;flex-direction:column;gap:8px}
.reg-control-reauth-title{margin:0;font-size:var(--font-size-sm);font-weight:600;color:var(--text)}
.reg-control-reauth-field{display:flex;flex-direction:column;gap:4px;font-size:var(--font-size-sm);color:var(--text-muted)}
.reg-control-reauth-field input{height:34px;box-sizing:border-box;border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 10px;font-size:var(--font-size-md);background:var(--panel);color:var(--text)}
.reg-control-reauth-field input:focus{border-color:var(--brand);outline:none}
.reg-control-reauth-or{margin:0;font-size:var(--font-size-xs);color:var(--text-subtle);text-align:left}
.reg-control-reauth-email{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
.reg-control-reauth-email input{width:100%;height:34px;box-sizing:border-box;border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 10px;font-size:var(--font-size-md);background:var(--panel);color:var(--text);letter-spacing:1px}
.reg-control-reauth-email input:focus{border-color:var(--brand);outline:none}
.reg-control-reauth-send{height:34px;padding:0 14px;white-space:nowrap}
.reg-control-reauth-send:disabled{opacity:.6;cursor:default}
.reg-control-reauth-hint{margin:0;font-size:var(--font-size-xs);color:var(--text-subtle);line-height:1.6}
/* 个人设置主页：核心密码折叠区替换为前往安全 tab 的引导（布局对齐核心 disclosure 行） */
.reg-control-pwd-moved{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;padding:8px 0;font-size:var(--font-size-md)}
.reg-control-pwd-moved span{color:var(--text);font-weight:500}
.reg-control-pwd-moved a{color:var(--brand);font-size:var(--font-size-sm);text-decoration:none}
.reg-control-pwd-moved a:hover{color:var(--brand-hover)}
/* 安全 tab 面板：新密码区与验证区贴合 */
.reg-control-security .reg-control-section{margin-top:14px}
/* 窄屏适配 */
@media (max-width:720px){
.reg-control-grid{grid-template-columns:1fr}
.reg-control-grid input[type=number]{max-width:none}
.reg-control-toolbar{flex-direction:column;align-items:stretch}
.reg-control-toolbar .reg-control-filter{flex-wrap:wrap}
.reg-control-panel .reg-control-filter select{width:100%;max-width:200px}
.reg-control-panel .reg-control-uid input{width:100%;max-width:200px}
.reg-control-stats{align-items:stretch}
.reg-control-stat{padding-right:12px;margin-right:12px}
.reg-control-stat-fill{text-align:left;min-width:100%;margin-top:6px;padding-top:6px;border-top:1px solid var(--line)}
}
/* seo_boost */
.seo-boost-note{margin:0 0 14px;color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.8}.seo-boost-note code{padding:1px 5px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--panel);font-size:var(--font-size-xs);word-break:break-all}.seo-boost-admin-form .seo-boost-admin-fields{max-width:640px}.seo-boost-admin-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px}.seo-boost-admin-tip{color:var(--text-subtle);font-size:var(--font-size-sm)}
/* sign_in */
.sign-in-card{margin-top:0}
.sign-in-help{margin:0 0 10px;color:var(--text-muted);font-size:var(--font-size-sm)}
/* 配置陷阱/风险提示（后台）：用警示色，只表达"需要处理"的数据类别 */
.sign-in-warn{margin:8px 0 0;color:var(--warning);font-size:var(--font-size-sm);font-weight:600}
/* 整页收窄并居中，避免宽屏下一行拉太开显得空旷（窄屏不受影响：860px 以下自然铺满） */
.sign-in-page{max-width:860px;margin:0 auto}
.sign-in-card .sign-in-help{margin:10px 0 0}
.sign-in-state{margin:2px 0 0;padding:16px 12px;border-radius:var(--radius);background:var(--brand-soft);text-align:center}
/* 本次获得的积分（含连签额外奖励）与当前排名在同一行展示 */
.sign-in-state-line{font-size:var(--font-size-md);font-weight:600}
.sign-in-state-meta{margin-top:6px;color:var(--text-muted);font-size:var(--font-size-sm)}
/* 两种签到方式是同一行的两个提交按钮（等宽并排，不换行）；按钮外观走核心官方样式，不做皮肤 */
.sign-in-choices{display:flex;flex-wrap:nowrap;gap:10px}
.sign-in-choices .sign-in-choice{flex:1 1 0;min-width:0;font-size:var(--font-size-md)}
.sign-in-pending{margin-top:8px;color:var(--text-subtle);font-size:var(--font-size-xs)}
/* 行间留 4px 间隙，让每条淡色底成为独立"色条"而不是连成一片 */
.sign-in-rank-list{margin:0;padding:0;list-style:none;display:grid;gap:4px}
/* 排行榜隔行淡色底：每行色号由服务端按"随机起点 + 逐行递增"给出（相邻行必不同、每次打开起点不同），
   故用 [data-sign-in-tone] 而非 :nth-child——折叠「更多」的显隐不影响配色，也无需 JS。
   三档底色都取核心语义变量（品牌淡绿 / 信息淡蓝 / 警示淡橙），无新增颜色。 */
.sign-in-rank-row{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:var(--radius-sm)}
/* 底色再调淡：把语义淡色与面板底色按 55% 混合（--brand-soft #eefaf3 → #f6fcf8、
   --info-soft #eef4ff → #f6f9ff、--warning-soft #fff7ed → #fffbf5）。
   与 --panel 混合而非写死白色，是为了将来核心若加暗色主题时能跟着面板走；
   浏览器不支持 color-mix() 时该声明被丢弃，仅退化为"无隔行底色"，不影响可读性。 */
.sign-in-rank-row[data-sign-in-tone="0"]{background:color-mix(in srgb, var(--brand-soft) 55%, var(--panel))}
.sign-in-rank-row[data-sign-in-tone="1"]{background:color-mix(in srgb, var(--info-soft) 55%, var(--panel))}
.sign-in-rank-row[data-sign-in-tone="2"]{background:color-mix(in srgb, var(--warning-soft) 55%, var(--panel))}
.sign-in-rank-no{flex:0 0 28px;width:28px;text-align:center;color:var(--text-subtle);font-size:var(--font-size-sm)}
/* 前三名名次异色（榜首橙金 / 次席蓝 / 三席绿），其余名次保持弱化灰 */
.sign-in-rank-no[data-sign-in-rank="1"]{color:var(--warning);font-weight:700}
.sign-in-rank-no[data-sign-in-rank="2"]{color:var(--info);font-weight:700}
.sign-in-rank-no[data-sign-in-rank="3"]{color:var(--brand);font-weight:700}
.sign-in-rank-avatar{display:block;flex:0 0 36px;width:36px;height:36px;border-radius:50%;overflow:hidden}
.sign-in-rank-name{flex:1 1 auto;min-width:0;overflow:hidden;color:var(--text);text-overflow:ellipsis;white-space:nowrap}
.sign-in-rank-points{flex:0 0 auto;color:var(--success);font-size:var(--font-size-sm);font-weight:600}
.sign-in-rank-row[data-sign-in-extra="1"]{display:none}
.sign-in-page[data-sign-in-expanded="1"] .sign-in-rank-row[data-sign-in-extra="1"]{display:flex}
.sign-in-more{margin-top:10px;font-size:var(--font-size-sm)}
.sign-in-more-off{display:none}
.sign-in-more[aria-expanded="true"] .sign-in-more-on{display:none}
.sign-in-more[aria-expanded="true"] .sign-in-more-off{display:inline}
.sign-in-board-note{margin:10px 0 0;color:var(--text-subtle);font-size:var(--font-size-xs)}
.sign-in-empty{margin:12px 0;color:var(--text-muted);font-size:var(--font-size-sm)}
.sign-in-section{margin-top:14px}
.sign-in-section h3{margin:0 0 6px;font-size:var(--font-size-md)}
.sign-in-grid{display:grid;grid-template-columns:1fr;gap:10px}
.sign-in-form-actions{margin-top:14px}
/* 日志页：标题靠左、筛选栏整体右对齐（标题 flex:0 0 auto + 表单 flex:1 1 auto 推右） */
.sign-in-log-top{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.sign-in-log-top h2{flex:0 0 auto;margin:0}
/* 筛选栏为 flex 行（0-2-0），胜过核心 .form-panel form{display:grid}（0-1-1） */
.sign-in-panel .sign-in-filter{display:flex;flex:1 1 auto;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px;margin:0}
.sign-in-filter-field{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;color:var(--text-muted);font-size:var(--font-size-sm);white-space:nowrap}
.sign-in-filter-field input,.sign-in-filter-field select{height:34px;box-sizing:border-box;border:1px solid var(--line);border-radius:var(--radius);padding:0 8px;font-size:var(--font-size-md);background:var(--panel);color:var(--text)}
/* 后台 legacy 作用域对抗（与 points_manager / forum_shortcut 同一套写法）：
   核心把插件后台 HTML 包进 .plugin-admin-page .plugin-admin-legacy-body，其
   input:not([type=checkbox]) / select / textarea 以 (0,3,1) 强制 width:100%、max-width:none，
   会把筛选控件拉满整行（"用户ID"框变成一整行）。此处以 (0,5,1)/(0,6,1) 显式定尺寸压回，
   不依赖 plugins.css 与 index.css 的加载顺序，也不用 !important。 */
.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter-field input:not([type=checkbox]),
.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter-field select{width:auto;min-width:0;max-width:450px}
.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter-field input.sign-in-uid-input[type=number]{width:60px;min-width:60px;flex:0 0 auto;padding:0 6px;text-align:center}
.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter-field input.sign-in-date-input[type=date]{width:150px;min-width:150px;flex:0 0 auto}
.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter-field select{min-width:80px}
.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter button{height:34px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center}
/* 紧凑数字框（60px）：隐藏原生上下箭头，把宽度留给数字 */
.sign-in-filter-field input.sign-in-uid-input{appearance:textfield;-moz-appearance:textfield}
.sign-in-filter-field input.sign-in-uid-input::-webkit-outer-spin-button,.sign-in-filter-field input.sign-in-uid-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.sign-in-count{margin:10px 0;color:var(--text-muted);font-size:var(--font-size-sm)}
/* 日志表格铺满内容区（覆盖核心 table.list{width:auto}）；用户名列给足宽度以容纳长用户名 */
.sign-in-panel .list{width:100%}
.sign-in-panel .list th.sign-in-uid-col,.sign-in-panel .list td.sign-in-uid-col{width:80px;min-width:80px}
.sign-in-panel .list th.sign-in-name-col,.sign-in-panel .list td.sign-in-name-col{width:auto;min-width:240px}
.sign-in-panel .list th.sign-in-points-col,.sign-in-panel .list td.sign-in-points-col{width:120px;min-width:120px;white-space:nowrap}
.sign-in-panel .list th.sign-in-time-col,.sign-in-panel .list td.sign-in-time-col{width:170px;min-width:170px;white-space:nowrap}
.sign-in-name-col{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 成功色只用于数据单元格；表头（含排序链接）保持表头默认色 */
.sign-in-panel .list td.sign-in-points-col{color:var(--success);font-weight:600}
/* 可点击排序表头：链接继承表头颜色，悬停/生效态用品牌色 + 箭头提示 */
.sign-in-sort{color:inherit;text-decoration:none;white-space:nowrap;cursor:pointer}
.sign-in-sort:hover,.sign-in-sort.active{color:var(--brand)}
.sign-in-empty-cell{color:var(--text-subtle);text-align:center}
.sign-in-log-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
@media (max-width:720px){.sign-in-log-top{flex-direction:column;align-items:stretch}.sign-in-panel .sign-in-filter{flex-direction:column;align-items:stretch}.sign-in-filter-field{justify-content:space-between}.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter-field input:not([type=checkbox]),.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter-field select{width:100%;min-width:0}.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter-field input.sign-in-uid-input[type=number],.plugin-admin-page .form-panel.sign-in-panel .sign-in-filter-field input.sign-in-date-input[type=date]{width:100%;min-width:0}}
/* theme_plus */
html[data-theme-plus]{--theme-plus-grid-line:var(--line-soft);--theme-plus-glass:var(--panel);--theme-plus-panel-2:var(--bg);--theme-plus-hover:var(--line-soft);--theme-plus-brand-line:var(--brand);--theme-plus-on-accent:var(--inverse-text);--theme-plus-lift-float:0 10px 30px var(--shadow-medium);--theme-plus-lift-float-up:0 -10px 30px var(--shadow-medium);--theme-plus-surface-a:var(--panel);--theme-plus-lit:transparent}@supports (color:color-mix(in srgb,red,blue)){html[data-theme-plus]{--theme-plus-grid-line:color-mix(in srgb,var(--text) 6%,transparent);--theme-plus-glass:var(--panel);--theme-plus-panel-2:var(--bg);--theme-plus-hover:color-mix(in srgb,var(--text) 4%,transparent);--theme-plus-brand-line:color-mix(in srgb,var(--brand) 42%,transparent);--theme-plus-on-accent:var(--inverse-text);--theme-plus-lift-float:0 10px 30px var(--shadow-medium);--theme-plus-lift-float-up:0 -10px 30px var(--shadow-medium);--theme-plus-surface-a:var(--panel);--theme-plus-lit:transparent}}@supports (color:color-mix(in srgb,red,blue)){html[data-theme-plus][data-theme-plus-bg="grid"]{--theme-plus-surface-a:color-mix(in srgb,var(--panel) 90%,transparent)}html[data-theme-plus][data-theme-plus-bg="glow"]{--theme-plus-surface-a:color-mix(in srgb,var(--panel) 82%,transparent)}}html[data-theme-plus]{--theme-plus-grid-cell:32px;--theme-plus-poster:20px;--theme-plus-cat-1:#e0736a;--theme-plus-cat-2:#dda64d;--theme-plus-cat-3:#63b183;--theme-plus-cat-4:#6e94d8;--theme-plus-cat-5:#a382d6;--theme-plus-cat-6:#cf85a8;}html[data-theme-plus][data-theme-plus-width="narrow"]{--theme-plus-wrap-max:1040px}html[data-theme-plus][data-theme-plus-width="standard"]{--theme-plus-wrap-max:1200px}html[data-theme-plus][data-theme-plus-width="wide"]{--theme-plus-wrap-max:1440px}html[data-theme-plus][data-theme-plus-width="full"]{--theme-plus-wrap-max:100%}html[data-theme-plus][data-theme-plus-radius="sharp"]{--radius:3px;--radius-sm:2px}html[data-theme-plus][data-theme-plus-radius="standard"]{--radius:6px;--radius-sm:4px}html[data-theme-plus][data-theme-plus-radius="round"]{--radius:14px;--radius-sm:8px}html[data-theme-plus][data-theme-plus-density="compact"]{--theme-plus-row-py:8px;--theme-plus-row-gap:8px;--theme-plus-avatar:32px}html[data-theme-plus][data-theme-plus-density="standard"]{--theme-plus-row-py:12px;--theme-plus-row-gap:10px;--theme-plus-avatar:36px}html[data-theme-plus][data-theme-plus-density="relaxed"]{--theme-plus-row-py:16px;--theme-plus-row-gap:14px;--theme-plus-avatar:40px}html[data-theme-plus][data-theme-plus-lines="1"]{--theme-plus-title-lines:1}html[data-theme-plus][data-theme-plus-lines="2"]{--theme-plus-title-lines:2}@media(max-width:720px){html[data-theme-plus][data-theme-plus-lines-mobile="1"]{--theme-plus-title-lines:1}html[data-theme-plus][data-theme-plus-lines-mobile="2"]{--theme-plus-title-lines:2}}html[data-theme-plus][data-theme-plus-bg="grid"] body,html[data-theme-plus][data-theme-plus-bg="glow"] body{background:transparent}html[data-theme-plus][data-theme-plus-bg="grid"] body::before,html[data-theme-plus][data-theme-plus-bg="glow"] body::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background-image:repeating-linear-gradient(90deg,var(--theme-plus-grid-line) 0 1px,transparent 1px var(--theme-plus-grid-cell)),repeating-linear-gradient(0deg,var(--theme-plus-grid-line) 0 1px,transparent 1px var(--theme-plus-grid-cell))}html[data-theme-plus][data-theme-plus-bg="glow"] body::before{background-image:repeating-linear-gradient(90deg,var(--theme-plus-grid-line) 0 1px,transparent 1px var(--theme-plus-grid-cell)),repeating-linear-gradient(0deg,var(--theme-plus-grid-line) 0 1px,transparent 1px var(--theme-plus-grid-cell)),radial-gradient(130% 85% at 16% -14%,color-mix(in srgb,var(--brand) 30%,transparent),transparent 60%),radial-gradient(95% 65% at 102% 106%,color-mix(in srgb,var(--brand) 18%,transparent),transparent 62%)}html[data-theme-plus] .home-shell,html[data-theme-plus] .sidebar>.card,html[data-theme-plus] .sidebar>.box{background:var(--theme-plus-surface-a)}html[data-theme-plus] .main-panel{background:transparent}html[data-theme-plus] .bar,html[data-theme-plus] .wrap,html[data-theme-plus] .footer{max-width:var(--theme-plus-wrap-max)}html[data-theme-plus] .post-list>.post-item{gap:var(--theme-plus-row-gap);padding:var(--theme-plus-row-py) 6px;background:transparent}html[data-theme-plus] .post-list>.post-item .post-avatar{width:var(--theme-plus-avatar);height:var(--theme-plus-avatar)}html[data-theme-plus] .post-list>.post-item>.post-tag.post-forum-badge{display:none}html[data-theme-plus] .post-list .post-meta .post-forum-meta{display:none}html[data-theme-plus] .post-list .post-meta{gap:10px}html[data-theme-plus] .post-list .post-title-row{display:flex;align-items:baseline}html[data-theme-plus] .post-list .post-title-row>*{flex:0 0 auto}html[data-theme-plus] .post-list .post-title-row .post-title{flex:0 1 auto;min-width:0;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:var(--theme-plus-title-lines);line-height:1.45}html[data-theme-plus] .post-list>.post-item:hover .post-title{color:var(--brand)}html[data-theme-plus] .theme-plus-cat{display:inline-flex;align-items:center;gap:6px;color:var(--text-muted);min-width:0}html[data-theme-plus] .theme-plus-cat i{width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}html[data-theme-plus] .theme-plus-cat a{color:inherit}html[data-theme-plus] .theme-plus-cat a:hover{color:var(--brand)}html[data-theme-plus] .theme-plus-cat[data-theme-plus-tone="1"] i{background:var(--theme-plus-cat-1)}html[data-theme-plus] .theme-plus-cat[data-theme-plus-tone="2"] i{background:var(--theme-plus-cat-2)}html[data-theme-plus] .theme-plus-cat[data-theme-plus-tone="3"] i{background:var(--theme-plus-cat-3)}html[data-theme-plus] .theme-plus-cat[data-theme-plus-tone="4"] i{background:var(--theme-plus-cat-4)}html[data-theme-plus] .theme-plus-cat[data-theme-plus-tone="5"] i{background:var(--theme-plus-cat-5)}html[data-theme-plus] .theme-plus-cat[data-theme-plus-tone="6"] i{background:var(--theme-plus-cat-6)}html[data-theme-plus] .theme-plus-stats{display:grid;grid-template-columns:auto auto;justify-items:end;align-items:center;gap:3px 12px;flex:none;margin-left:auto;color:var(--text-subtle);font-size:var(--font-size-sm)}html[data-theme-plus] .theme-plus-stats a,html[data-theme-plus] .theme-plus-stats span{display:inline-flex;align-items:center;gap:4px;color:inherit}html[data-theme-plus] .theme-plus-stats a:hover{color:var(--brand)}html[data-theme-plus] .theme-plus-stats [data-theme-plus-heat="1"]{color:var(--brand)}html[data-theme-plus] .theme-plus-stats [data-theme-plus-heat="2"]{color:var(--brand);font-weight:600}html[data-theme-plus] .theme-plus-stats .meta-icon{flex:none}html[data-theme-plus] .theme-plus-posters{display:inline-flex;align-items:center;grid-column:1/-1}html[data-theme-plus] .theme-plus-poster{width:var(--theme-plus-poster);height:var(--theme-plus-poster);border-radius:50%;overflow:hidden;flex:none;border:1px solid var(--line);background:var(--theme-plus-panel-2)}html[data-theme-plus] .theme-plus-poster+.theme-plus-poster{margin-left:calc(var(--theme-plus-poster) / -3)}html[data-theme-plus][data-theme-plus-hover="bar"] .post-list>.post-item{position:relative;transition:background-color var(--transition-normal)}html[data-theme-plus][data-theme-plus-hover="bar"] .post-list>.post-item::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--brand);opacity:0;transition:opacity var(--transition-normal);pointer-events:none}html[data-theme-plus][data-theme-plus-hover="bar"] .post-list>.post-item:hover{background:var(--brand-soft)}html[data-theme-plus][data-theme-plus-hover="bar"] .post-list>.post-item:hover::before{opacity:1}html[data-theme-plus][data-theme-plus-hover="block"] .post-list>.post-item{border-bottom-color:transparent}html[data-theme-plus][data-theme-plus-hover="block"] .post-list>.post-item:hover{background:var(--brand-soft);border-radius:var(--radius)}@media(prefers-reduced-motion:reduce){html[data-theme-plus][data-theme-plus-hover="bar"] .post-list>.post-item,html[data-theme-plus][data-theme-plus-hover="block"] .post-list>.post-item,html[data-theme-plus][data-theme-plus-hover="bar"] .post-list>.post-item::before{transition:none}}@media(max-width:720px){html[data-theme-plus] .post-list>.post-item{flex-wrap:wrap;padding:var(--theme-plus-row-py) 4px}html[data-theme-plus] .theme-plus-stats .theme-plus-posters{display:none}html[data-theme-plus] .theme-plus-stats .theme-plus-views{display:none}html[data-theme-plus] .theme-plus-stats{align-self:center}html[data-theme-plus] .post-list .post-title-row{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:var(--theme-plus-title-lines);line-height:1.45}html[data-theme-plus] .post-list .post-title-row .post-title{display:inline;overflow:visible;-webkit-line-clamp:none}html[data-theme-plus] .theme-plus-title-desktop{display:none}html[data-theme-plus] .post-list .post-title-row [data-topic-manage-kebab]{display:none}}@media(min-width:721px){html[data-theme-plus] .theme-plus-title-mobile{display:none}}html[data-theme-plus] .post-list.topic-post-list>.post-entry{grid-template-columns:var(--theme-plus-avatar) minmax(0,1fr);grid-template-areas:"avatar body" "content content";column-gap:var(--theme-plus-row-gap);row-gap:6px;padding:var(--theme-plus-row-py) 6px;border-bottom:1px solid var(--line-soft)}html[data-theme-plus] .post-list.topic-post-list>.post-entry:hover{background:transparent}html[data-theme-plus] .post-list.topic-post-list>.post-entry:last-child{border-bottom:none}html[data-theme-plus] .post-list.topic-post-list .post-avatar{width:var(--theme-plus-avatar);height:var(--theme-plus-avatar);align-self:start}html[data-theme-plus] .post-list.topic-post-list>.post-entry{scroll-margin-top:12px}html[data-theme-plus] .post-head{gap:10px}html[data-theme-plus] .post-floor{color:var(--text-subtle);font-size:var(--font-size-sm)}html[data-theme-plus] .post-floor:hover{color:var(--brand)}html[data-theme-plus] .post-topic-title h1{font-size:var(--font-size-xl);font-weight:600;line-height:1.35}html[data-theme-plus] .post-list.topic-post-list>.post-entry[data-slot~="topic.content_after"] .post-content{font-size:var(--font-size-lg);line-height:1.85}html[data-theme-plus] .post-list.topic-post-list>.post-entry .post-content{background:transparent}html[data-theme-plus] .reply-panel{background:var(--theme-plus-panel-2);border:1px solid var(--line-soft);border-radius:var(--radius);padding:14px 16px;margin-top:14px}html[data-theme-plus] .theme-plus-rail{position:fixed;right:12px;bottom:20px;display:none;flex-direction:column;gap:2px;max-height:min(60vh,420px);overflow:auto;scrollbar-width:thin;z-index:25;padding:6px 4px;border:1px solid var(--line-soft);border-radius:var(--radius);background:var(--theme-plus-glass);box-shadow:var(--theme-plus-lift-float),inset 0 1px 0 var(--theme-plus-lit)}@supports((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){html[data-theme-plus] .theme-plus-rail{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}html[data-theme-plus] .theme-plus-rail a{display:flex;align-items:center;justify-content:center;min-width:26px;height:24px;padding:0 5px;border-radius:var(--radius-sm);color:var(--text-subtle);font-size:var(--font-size-xs);font-variant-numeric:tabular-nums}html[data-theme-plus] .theme-plus-rail a:hover{color:var(--text);background:var(--theme-plus-hover)}html[data-theme-plus] .theme-plus-rail a.theme-plus-rail-top{color:var(--brand);height:28px;margin-bottom:6px;border-bottom:1px solid var(--line-soft);border-radius:0}html[data-theme-plus] .theme-plus-rail a.theme-plus-rail-top:hover{color:var(--brand);background:var(--brand-soft)}html[data-theme-plus] .theme-plus-rail-top .meta-icon{width:15px;height:15px;flex:none;color:currentColor}html[data-theme-plus] .theme-plus-rail a.theme-plus-active{color:var(--theme-plus-on-accent);background:var(--brand)}html[data-theme-plus] .theme-plus-rail-solo a.theme-plus-rail-top{margin-bottom:0;border-bottom:none;border-radius:var(--radius-sm)}html[data-theme-plus] .theme-plus-dock{position:fixed;left:0;right:0;bottom:0;display:none;z-index:35;border-top:1px solid var(--line-soft);background:var(--theme-plus-glass);box-shadow:var(--theme-plus-lift-float-up),inset 0 1px 0 var(--theme-plus-lit);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);padding-bottom:env(safe-area-inset-bottom)}html[data-theme-plus] .theme-plus-dock[hidden]{display:none}html[data-theme-plus] .theme-plus-dock-prog{height:2px;background:var(--line-soft)}html[data-theme-plus] .theme-plus-dock-prog i{display:block;height:100%;width:0;background:var(--brand)}html[data-theme-plus] .theme-plus-dock-row{display:flex;align-items:center;gap:6px;padding:9px 12px}html[data-theme-plus] .theme-plus-dock-now{font-size:var(--font-size-sm);color:var(--brand);font-variant-numeric:tabular-nums}html[data-theme-plus] .theme-plus-dock-total{color:var(--text-subtle);font-size:var(--font-size-xs)}html[data-theme-plus] .theme-plus-dock-sp{flex:1}html[data-theme-plus] .theme-plus-dock-step{min-width:34px;height:30px;padding:0 8px;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--panel);color:var(--text-muted);font-size:var(--font-size-md)}html[data-theme-plus] .theme-plus-dock-step:hover:not([disabled]){color:var(--brand);border-color:var(--theme-plus-brand-line)}html[data-theme-plus] .theme-plus-dock-step[disabled]{opacity:.45;cursor:default}html[data-theme-plus] .theme-plus-dock-cta{display:inline-flex;align-items:center;height:30px;padding:0 14px;border-radius:var(--radius-sm);background:var(--brand);color:var(--theme-plus-on-accent);font-size:var(--font-size-sm)}html[data-theme-plus] .theme-plus-dock-cta:hover{background:var(--brand-hover);color:var(--theme-plus-on-accent)}@media(max-width:720px){html[data-theme-plus] .theme-plus-rail.theme-plus-rail-solo.is-visible{display:flex;right:12px;bottom:calc(20px + env(safe-area-inset-bottom))}html[data-theme-plus] .theme-plus-dock{display:block}html[data-theme-plus] .wrap{padding-bottom:64px}html[data-theme-plus] .footer{padding-bottom:78px}}@media print{html[data-theme-plus] .theme-plus-rail,html[data-theme-plus] .theme-plus-dock,html[data-theme-plus] .theme-plus-tip{display:none!important}html[data-theme-plus] body::before{display:none}}@media(min-width:1260px){html[data-theme-plus][data-theme-plus-width="narrow"] .theme-plus-rail.is-visible{display:flex}}@media(min-width:1420px){html[data-theme-plus][data-theme-plus-width="standard"] .theme-plus-rail.is-visible{display:flex}}@media(min-width:1660px){html[data-theme-plus][data-theme-plus-width="wide"] .theme-plus-rail.is-visible{display:flex}}html[data-theme-plus] .theme-plus-history{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px}html[data-theme-plus] .theme-plus-history-label{color:var(--text-subtle);font-size:var(--font-size-xs)}html[data-theme-plus] .theme-plus-history-chip{display:inline-block;max-width:220px;padding:2px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:transparent;color:var(--text-muted);font-size:var(--font-size-sm);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html[data-theme-plus] .theme-plus-history-chip:hover{color:var(--brand);border-color:var(--theme-plus-brand-line)}html[data-theme-plus] .theme-plus-history-clear{margin-left:auto;padding:2px 4px;border:0;background:transparent;color:var(--text-subtle);font-size:var(--font-size-xs);cursor:pointer}html[data-theme-plus] .theme-plus-history-clear:hover{color:var(--brand)}html[data-theme-plus] .theme-plus-scope{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px}html[data-theme-plus] .theme-plus-scope-label{color:var(--text-subtle);font-size:var(--font-size-sm)}html[data-theme-plus] .theme-plus-scope-select{min-width:0;max-width:260px;height:38px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-sm)}html[data-theme-plus] .theme-plus-scope-select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--focus-ring)}html[data-theme-plus] .theme-plus-tip{position:fixed;z-index:70;pointer-events:none;max-width:calc(100vw - 24px);box-sizing:border-box;padding:5px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-sm);line-height:1.5;overflow-wrap:anywhere;box-shadow:0 6px 18px var(--shadow-medium)}html[data-theme-plus] .theme-plus-tip[hidden]{display:none}html[data-theme-plus] .theme-plus-admin-cards{columns:2;column-gap:14px;margin-bottom:2px}@media(max-width:920px){html[data-theme-plus] .theme-plus-admin-cards{columns:1}}html[data-theme-plus] .theme-plus-card{break-inside:avoid;-webkit-column-break-inside:avoid;page-break-inside:avoid;margin:0 0 14px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}html[data-theme-plus] .theme-plus-card-head{padding:10px 14px;border-bottom:1px solid var(--line-soft)}html[data-theme-plus] .theme-plus-card-head h3{margin:0;font-size:var(--font-size-md);color:var(--text)}html[data-theme-plus] .theme-plus-card-head p{margin:4px 0 0;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.55}html[data-theme-plus] .theme-plus-card-body{padding:10px 14px}html[data-theme-plus] .theme-plus-card-body .theme-plus-admin-actions{margin-top:8px}form.plugin-settings-form.theme-plus-admin-form{max-width:none}form.plugin-settings-form.theme-plus-admin-form .theme-plus-admin-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:4px}html[data-theme-plus] .theme-plus-admin-json{width:100%;font-family:var(--font-mono);font-size:var(--font-size-xs)}html[data-theme-plus] .theme-plus-admin-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}html[data-theme-plus] .theme-plus-admin-note{color:var(--text-subtle);font-size:var(--font-size-xs)}html[data-theme-plus] .theme-plus-admin-warn{margin:0 0 12px;padding:8px 12px;border:1px solid var(--brand);border-radius:var(--radius-sm);background:var(--brand-soft);color:var(--text);font-size:var(--font-size-sm)}
/* topic_manage */
/* ===== 帖子管理助手 ===== */
/* 管理操作 UI：主题/回帖三点菜单（原生 details 开合）+ 引用按钮左侧图钉 + 理由弹窗，无 hover 操作条 */
.topic-manage-btn{display:inline-flex;align-items:center;justify-content:center;min-height:24px;padding:2px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:var(--text);font-size:var(--font-size-xs);font-weight:400;line-height:1.4;cursor:pointer;transition:background var(--transition-normal),border-color var(--transition-normal),color var(--transition-normal)}
/* 主题只读切换表单内联为操作条中的一项（topic_readonly 插件提供） */
.topic-manage-readonly-form{display:inline-flex;margin:0;align-items:center}
.topic-manage-readonly-form button{margin:0}
/* 置顶回帖：图钉入口在回帖行引用按钮左侧（pin/unpin toggle）+ 卡片（主贴正文下方）；操作条与卡片均不含置顶项 */
.topic-manage-pinned-card{grid-column:1/-1;display:flex;flex-direction:column;gap:6px;margin-top:10px;padding:10px 12px;border:1px solid var(--brand);border-left-width:3px;border-radius:var(--radius-sm);background:var(--brand-soft)}
.topic-manage-pinned-card-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:var(--font-size-sm)}
.topic-manage-pinned-card-title{display:inline-flex;align-items:center;color:var(--brand)}
/* 公共图钉图标：尺寸/stroke 全部走 CSS（插件自带图标规范） */
.topic-manage-pin-svg{width:14px;height:14px;stroke:currentColor}
.topic-manage-pin-svg path{stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
/* 回帖行引用按钮左侧的图钉入口：复用原生 icon-action mask 图标模式（对齐 icon-quote，避免 ::before 裸色块）。
   直立=可点击置顶；旋转 45°=已置顶（有权限点击取消，无权限纯展示）。
   关键：核心 .icon-action(0,1,0) 压不过全局 .btn,button 的蓝底/白字/min-height:32px（quote 是 <a> 不受影响，
   button 会渲染成蓝色大方块），必须以 .topic-manage-pin-icon-form button(0,2,1) 完整复位——
   对齐 topic_readonly 对 .post-action-form button 的处理；复位后颜色仍走 currentColor，日夜模式自动适配。
   悬停转官方 --brand（与顶/踩行的顶·踩·收藏·关注·屏蔽·引用·回复同口径：静止中性、悬停只变颜色），
   且悬停不改背景——同排这些按钮都没有悬停底色。已置顶态本就是 --brand、悬停不再变化；
   取消置顶是破坏性操作，仍走 --danger（同样不铺底色） */
.topic-manage-pin-icon-form{display:inline-flex;margin:0}
.topic-manage-pin-icon-form button.topic-manage-pin-icon{min-height:0;width:24px;height:24px;padding:0;background:transparent;color:var(--text-muted);opacity:.55;font-weight:400}
.topic-manage-pin-icon-form button.topic-manage-pin-icon:hover{background:transparent;color:var(--brand);opacity:1}
/* 图钉 mask：只取 SVG alpha 通道，颜色 = 父级 currentColor（自动适配明/暗主题），写法逐字对齐官方 icon-quote */
.icon-action.topic-manage-pin-icon::before{
-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12 17v5%27/%3E%3Cpath d=%27M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1z%27/%3E%3C/svg%3E") center/14px 14px no-repeat;
mask:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12 17v5%27/%3E%3Cpath d=%27M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1z%27/%3E%3C/svg%3E") center/14px 14px no-repeat}
.icon-action.topic-manage-pin-icon-pinned{color:var(--brand);opacity:1;cursor:default}
.icon-action.topic-manage-pin-icon-pinned:hover{background:none;opacity:1}
.icon-action.topic-manage-pin-icon-pinned::before{transform:rotate(45deg)}
/* 已置顶的「纯展示」图钉：插在被置顶回帖 .post-info 的最右端。
   .post-info 是 flex 容器（flex-wrap:wrap），margin-left:auto 把标记顶到该行右缘；
   不加则紧跟时间/徽章之后。作用域限定为 .post-info 直接子级，不波及其他位置的图钉 */
.post-info>.topic-manage-pin-mark{margin-left:auto}
.topic-manage-pin-icon-form button.topic-manage-pin-icon-pinned{color:var(--brand);opacity:1;cursor:default}
.topic-manage-pin-icon-form button.topic-manage-pin-icon-pinned:hover{background:none;opacity:1}
.topic-manage-pin-icon-form button.topic-manage-pin-icon-unpin{cursor:pointer}
.topic-manage-pin-icon-form button.topic-manage-pin-icon-unpin:hover{background:transparent;color:var(--danger);opacity:1}
.topic-manage-pinned-card-op{color:var(--text-muted)}
/* 操作者名链接：悬停/聚焦显示全名气泡（面板配色，随日夜主题自动切换；结构对齐 post_edit_time_plus 的 tooltip） */
.topic-manage-pinned-card-op-name{position:relative;outline:none}
.topic-manage-pinned-card-op-tip{position:absolute;top:calc(100% + 6px);left:0;z-index:20;display:block;padding:4px 8px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text);box-shadow:0 6px 18px var(--shadow-medium);font-size:var(--font-size-xs);font-weight:400;line-height:1.4;white-space:nowrap;pointer-events:none;opacity:0;visibility:hidden;transition:var(--transition-normal)}
.topic-manage-pinned-card-op-name:hover .topic-manage-pinned-card-op-tip,.topic-manage-pinned-card-op-name:focus .topic-manage-pinned-card-op-tip,.topic-manage-pinned-card-op-name:focus-visible .topic-manage-pinned-card-op-tip{opacity:1;visibility:visible}
.topic-manage-pinned-card-author{color:var(--text);font-weight:500}
.topic-manage-pinned-card-meta{color:var(--text-muted)}
.topic-manage-pinned-card-jump{color:var(--brand)}
.topic-manage-pinned-card-jump:hover{text-decoration:underline}
.topic-manage-pinned-card-excerpt{margin:0;color:var(--text);font-size:var(--font-size-sm);line-height:1.6;word-break:break-word}
.topic-manage-btn:hover{border-color:var(--brand);background:var(--brand-soft);color:var(--success)}
.topic-manage-btn:focus-visible{outline:none;border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.topic-manage-btn-danger{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 30%,var(--line));background:color-mix(in srgb,var(--danger) 6%,var(--panel))}
.topic-manage-btn-danger:hover{border-color:var(--danger);background:var(--danger-soft);color:var(--danger)}
/* 三点管理菜单：原生 details 开合；summary 复用 icon-action 视觉（mask 三点图标，日夜模式随 currentColor）。
   配色对齐核心详情页「更多」按钮 `.post-ops-toggle`（1.10.14）：静止 --text-subtle、悬停底色 --line-soft
   并转 --brand、展开态 --brand。核心 v10.2 修订把该按钮由 --text-muted 改为 --text-subtle（配合它改用文本
   字形 ⋮），本插件原静止色 --text-muted / 悬停转 --text 就与核心同一枚「更多」入口不一致了。 */
.topic-manage-kebab{position:relative;display:inline-flex;vertical-align:middle;margin-right:2px}
.topic-manage-kebab-summary{list-style:none;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--radius-sm);color:var(--text-subtle);cursor:pointer;transition:background var(--transition-normal),color var(--transition-normal)}
.topic-manage-kebab-summary::-webkit-details-marker{display:none}
.topic-manage-kebab-summary::before{content:"";width:16px;height:16px;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='12' cy='5' r='2.2'/%3E%3Ccircle cx='12' cy='12' r='2.2'/%3E%3Ccircle cx='12' cy='19' r='2.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='12' cy='5' r='2.2'/%3E%3Ccircle cx='12' cy='12' r='2.2'/%3E%3Ccircle cx='12' cy='19' r='2.2'/%3E%3C/svg%3E") center/contain no-repeat}
.topic-manage-kebab-summary:hover{background:var(--line-soft);color:var(--brand)}
.topic-manage-kebab[open] .topic-manage-kebab-summary{background:var(--line-soft);color:var(--brand)}
/* 菜单双列网格：列宽随内容自适应（四字项约 60px，杜绝换行），行距 2px 列距 6px，容器 140px 起；
   奇数项末项只占左列——独占整行会让悬停底色铺满全行，与其余项的半行悬停不一致（1.10.8） */
.topic-manage-kebab-menu{position:absolute;z-index:60;top:calc(100% + 6px);left:0;display:grid;grid-template-columns:repeat(2,minmax(max-content,1fr));gap:2px 6px;min-width:140px;max-width:min(320px,calc(100vw - 24px));padding:6px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:0 8px 24px var(--shadow-medium)}
.topic-manage-kebab-right .topic-manage-kebab-menu{left:auto;right:0}
/* 浮层越出裁剪容器（1.10.16）：列表行住在核心 `.main-panel` 里，核心给该面板设了 `overflow:hidden`，
   菜单向下展开在列表末尾几行会被面板底边硬裁——裁剪发生在面板内，滚动也拿不回来，排在后面的条目
   （删除主题、作者处罚等）实际不可达。展开瞬间改由 JS 把菜单挂成 `position:fixed` 脱离该裁剪上下文
   （theme_plus 绕开 `.main-panel` 裁剪用的也是固定定位），再按屏幕空位定方向与坐标：下方装得下就
   向下、装不下且上方更宽裕才向上翻，水平按 left/right 锚点对齐并夹取视口，见 topic_manage_kebab_place。
   上面那条 0-1-0 只保留「JS 未介入时」的向下锚点，故不再需要 .is-up 之类的状态类。 */
/* 菜单项：复用 topic-manage-btn / readonly form，铺满单元格、去掉描边改为悬停底色 */
.topic-manage-kebab-menu .topic-manage-btn,.topic-manage-kebab-menu .topic-manage-readonly-form{width:100%}
.topic-manage-kebab-menu .topic-manage-readonly-form{display:block;margin:0}
.topic-manage-kebab-menu .topic-manage-btn{justify-content:flex-start;min-height:30px;padding:5px 8px;border-color:transparent;background:none}
.topic-manage-kebab-menu .topic-manage-btn:hover{border-color:transparent;background:var(--line-soft);color:var(--brand)}
.topic-manage-kebab-menu .topic-manage-btn:focus-visible{border-color:transparent;box-shadow:none;color:var(--brand)}
/* 宿主基线（对端扩展项）：对端菜单项多为 <button>（如「精华贴」的「设为精华」），核心全局
   `.btn,button{font-weight:700}` 会让它突显加粗，字号/行高/内边距也各说各话（本插件自带项统一
   400 / --font-size-xs / 30px / 1.4 / padding 5px 8px / 1px 透明描边）；对端按自己的尺寸取值
   （如 7px 12px、无描边）就会在同一列里整体右移 4px。此处把菜单内所有 button 的几何与字型
   压回同一基线，对端无需为宿主菜单复述样式；本插件自带项用双类名（0-2-0）声明，不受这条
   单类名（0-1-1）规则影响。透明描边与自带项一致（自带项 base 规则有 1px 描边，
   hover/焦点只换色不换宽度），否则仍差 1px 首字缩进。 */
.topic-manage-kebab-menu button{display:flex;align-items:center;justify-content:flex-start;width:100%;min-height:30px;padding:5px 8px;border:1px solid transparent;font-weight:400;font-size:var(--font-size-xs);line-height:1.4}
/* 详情页「更多」弹层双列：条目可达十余条（置顶/高亮/放大/只读/精华/评分/移动/删除/处罚…），
   核心 v10.2 的弹层是单列（.post-ops-menu.is-open 只声明 display:grid），长菜单会拉出很高一列。
   与列表三点菜单同构：两列网格、列宽随内容自适应（四字项约 60px，杜绝换行）、行距 2px 列距 6px。
   :has(.topic-manage-btn) 与下方高度兜底同一判据 —— 只在本插件确有条目时才改列数，
   纯「复制链接」这类短弹层保持核心单列。核心 JS 打开后按 offsetWidth 量宽并夹取视口位置，
   加宽不会溢出屏幕。
   :has() 有意决策豁免（1.13.6）：判据只落在自家条目是否渲染于核心 .post-ops-menu 这一
   官方扩展点之内，不探测其他插件存在性、不调整他人位置，符合规范禁令的本意。 */
.post-ops .post-ops-menu:has(.topic-manage-btn).is-open{grid-template-columns:repeat(2,minmax(max-content,1fr));gap:2px 6px}
.topic-manage-kebab-menu .topic-manage-btn-danger{color:var(--danger)}
.topic-manage-kebab-menu .topic-manage-btn-danger:hover{background:var(--danger-soft);color:var(--danger)}
/* 详情页：管理项经核心 post.ops_actions 并入「更多」弹层（placement=menu），条目直接成为
   .post-ops-menu 的子元素，核心 .post-ops .post-ops-menu>*（0-2-0）会盖掉本插件单类名（0-1-0）
   的规则。排版无需复述——核心弹层已给出 flex / 30px 行高 / 透明底 / 悬停底色；
   只有破坏性操作的红字会被压成 --text-muted，需用双类名（0-2-0，插件样式后加载）复述。 */
.topic-manage-btn.topic-manage-btn-danger{color:var(--danger)}
.topic-manage-btn.topic-manage-btn-danger:hover{background:var(--danger-soft);color:var(--danger)}
/* 弹层高度兜底：管理项可达十余条（置顶/高亮/放大/只读/移动/删除/处罚/评分…），
   核心弹层无 max-height 也无滚动，窄屏横屏下末尾项会落到视口之外而不可达。
   :has() 有意决策豁免（1.13.6）：同上——只对承载自家条目的官方扩展点弹层生效，
   不探测其他插件存在性。 */
.post-ops-menu:has(.topic-manage-btn){max-height:calc(100vh - 24px);overflow-y:auto}
/* 弹窗（复用核心 modal-backdrop / modal-panel） */
.topic-manage-modal .topic-manage-summary{margin:0 0 12px;padding:8px 10px;border-radius:var(--radius-sm);background:var(--bg);color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.6;word-break:break-all}
.topic-manage-modal .topic-manage-forum-field{margin:0 0 12px}
.topic-manage-modal .topic-manage-forum-field select{width:200px;min-height:32px;padding:5px 9px;font-size:var(--font-size-sm)}
.topic-manage-color-field{margin:0 0 12px;display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--bg)}
.topic-manage-color-field[hidden]{display:none}
.topic-manage-color-label{flex:0 0 auto;min-width:64px;font-size:var(--font-size-sm);color:var(--text-muted)}
.topic-manage-swatches{display:flex;flex-wrap:wrap;gap:8px}
button.topic-manage-swatch{box-sizing:border-box;display:inline-block;width:26px;height:26px;min-width:26px;min-height:26px;max-width:26px;max-height:26px;margin:0;padding:0;border:2px solid var(--line);border-radius:50%;cursor:pointer;outline:none;vertical-align:middle;transition:transform var(--transition-normal),border-color var(--transition-normal),box-shadow var(--transition-normal)}
.topic-manage-swatch:hover{transform:scale(1.08)}
.topic-manage-swatch.is-active{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}
.topic-manage-color-custom{display:inline-block;position:relative;width:26px;height:26px;border:2px solid var(--line);border-radius:50%;background:var(--danger);cursor:pointer;flex:0 0 auto;box-sizing:border-box;overflow:hidden;vertical-align:middle;transition:border-color var(--transition-normal),box-shadow var(--transition-normal),transform var(--transition-normal)}
.topic-manage-color-custom:hover{transform:scale(1.08);border-color:var(--brand)}
.topic-manage-color-custom input[type="color"]{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;background:transparent;cursor:pointer;opacity:0}
/* 「+」叠字颜色豁免（1.13.6）：叠加在用户自选色块之上，底色不可预知，白色 + mix-blend-mode:difference
   是对任意底色自适应的刻意手法（配合细描边阴影保可读），不宜改用语义变量（--inverse-text 在
   difference 混合下不再保证反差）；非主题色语义用途，属还原控件观感的例外。 */
.topic-manage-color-custom::after{content:"+";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.85);font-weight:600;font-size:var(--font-size-sm);line-height:1;mix-blend-mode:difference;pointer-events:none;text-shadow:0 0 1px rgba(0,0,0,.5)}
/* 设置页：前台可用禁言时长多选 */
.topic-manage-front-durations{display:grid;grid-template-columns:1fr;gap:8px;margin:0}
.topic-manage-front-durations-label{color:var(--text-muted);font-size:var(--font-size-sm)}
.topic-manage-front-durations-checks{display:flex;flex-wrap:wrap;gap:8px}
.topic-manage-front-duration-item{display:inline-flex;align-items:center;gap:5px;font-size:var(--font-size-sm);color:var(--text)}
.topic-manage-front-duration-item input[type=checkbox]{margin:0}
/* 设置项开关行与跨插件说明 */
.topic-manage-pin-admin-row,.topic-manage-front-ops-row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.topic-manage-setting-note{margin:8px 0;padding:8px 12px;border-radius:var(--radius);background:var(--bg);color:var(--text-muted);font-size:var(--font-size-sm);line-height:1.6}
/* 前台管理操作范围选择框：固定 150px、右对齐（与列表页每页条数下拉同风格） */
.topic-manage-front-ops-row select{width:150px;min-width:0;min-height:30px;margin-left:auto;padding:3px 28px 3px 8px;font-size:var(--font-size-sm)}
.topic-manage-switch{display:inline-flex;align-items:center;gap:8px}
.topic-manage-switch input[type=checkbox]{margin:0}
.topic-manage-switch-text{color:var(--text-muted);font-size:var(--font-size-sm)}
.topic-manage-muted-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center}
.topic-manage-unmute-form{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0}
.topic-manage-unmute-form input[type=text]{width:160px;min-height:30px;padding:4px 8px;font-size:var(--font-size-sm)}
.topic-manage-unmute-form button{min-height:30px;padding:4px 10px;font-size:var(--font-size-sm)}
.topic-manage-unmute-reason{display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-sm);color:var(--text-muted);white-space:nowrap}
.topic-manage-mute-form{display:block;width:100%}
.topic-manage-mute-fields{display:flex;flex-wrap:wrap;gap:8px;align-items:center;width:100%;padding:10px 12px;background:var(--bg);border:1px solid var(--line-soft);border-radius:var(--radius-sm);box-sizing:border-box}
.topic-manage-mute-fields input[type=text]{flex:1 1 150px;min-width:120px}
.topic-manage-mute-fields select{min-height:32px;padding:4px 8px;font-size:var(--font-size-sm)}
/* 禁言时长 select 固定 150×32 */
.topic-manage-mute-fields select[name="mute_seconds"]{width:150px;height:32px;min-width:150px;max-width:150px;box-sizing:border-box}
/* 提交按钮（禁言/禁止访问）独占一行 */
.topic-manage-mute-fields>button[type="submit"]{flex:0 0 100%;max-width:100%}
/* 用户输入框独占第一行；已选用户标签紧随其后；理由 select / 自定义输入 / 按钮落到下一行 */
.topic-manage-mute-fields>.topic-manage-user-input{flex:0 0 100%;width:100%;max-width:100%;min-width:0;box-sizing:border-box}
.topic-manage-mute-fields>.topic-manage-user-tags{flex:0 0 100%;width:100%;max-width:100%;order:2}
.topic-manage-mute-fields>.topic-manage-user-tags:empty{display:none}
/* 禁访表单容器独立类：用户框/理由等控件强制两行布局 */
.topic-manage-ban-fields{row-gap:8px}
.topic-manage-ban-fields>.topic-manage-user-input{flex:0 0 100%;width:100%;max-width:100%;min-width:0;box-sizing:border-box}
.topic-manage-ban-fields>.topic-manage-user-tags{flex:0 0 100%;width:100%;max-width:100%;order:2}
.topic-manage-ban-fields>.topic-manage-user-tags:empty{display:none}
/* 后台禁言/禁访理由：select + 自定义输入 */
.topic-manage-admin-reason{display:inline-flex;align-items:center;gap:6px}
/* 理由 select 与自定义输入框统一固定 96×32，避免切换时宽度跳变 */
.topic-manage-admin-reason select{width:96px;height:32px;min-width:96px;max-width:96px;box-sizing:border-box;padding:4px 8px;font-size:var(--font-size-sm)}
.topic-manage-admin-reason .topic-manage-admin-reason-input{width:96px;height:32px;min-width:96px;max-width:96px;box-sizing:border-box;padding:4px 8px;font-size:var(--font-size-sm)}
.topic-manage-admin-reason .topic-manage-admin-reason-input[hidden]{display:none}
.topic-manage-page-size{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-size:var(--font-size-sm);color:var(--text-muted)}
.topic-manage-page-size-prefix{flex:0 0 auto}
.topic-manage-page-size select{width:auto;min-width:110px;min-height:30px;padding:3px 28px 3px 8px;font-size:var(--font-size-sm);flex:0 0 auto}
.topic-manage-mute-field{margin:0 0 16px}
.topic-manage-mute-field select{width:auto;min-width:150px;min-height:32px;padding:5px 9px;font-size:var(--font-size-sm)}
/* 视觉隐藏但可供屏幕阅读器/无障碍审计识别的标签 */
.topic-manage-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* 弹窗内通用行：label 在左，控件在右（自适应宽度，非全宽） */
.topic-manage-row{display:flex;align-items:center;gap:12px;margin:0 0 14px;font-size:var(--font-size-sm)}
/* 显式让 [hidden] 真正隐藏：覆盖上面 .topic-manage-row 的 display:flex */
.topic-manage-row[hidden]{display:none}
.topic-manage-color-field[hidden]{display:none}
.topic-manage-row>span{flex:0 0 auto;min-width:72px;color:var(--text-muted);white-space:nowrap}
.topic-manage-row select,.topic-manage-row input[type=text]{flex:0 1 auto;width:auto;min-width:140px;min-height:32px;padding:5px 9px;font-size:var(--font-size-sm)}
/* 理由 select 行：select 自适应内容宽度 */
.topic-manage-reason-select-row>select{flex:0 1 auto;width:auto;min-width:200px}
/* 必填星号 */
.topic-manage-req{color:var(--danger);font-style:normal;margin-left:3px}
.topic-manage-reason-input-wrap{display:flex;align-items:flex-start;gap:12px;margin:0 0 14px;font-size:var(--font-size-sm)}
.topic-manage-reason-input-wrap>span{padding-top:7px}
.topic-manage-reason-input-wrap textarea{width:200px;min-height:72px;padding:5px 9px;font-size:var(--font-size-sm);font-family:inherit;line-height:1.5;resize:vertical}
/* 后台用户名联想下拉（fixed 定位，避免被容器裁剪） */
.topic-manage-user-suggest{position:fixed;z-index:9999;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:0 8px 24px var(--shadow-medium);max-height:240px;overflow:auto;display:none;box-sizing:border-box}
.topic-manage-user-suggest-item{display:flex;align-items:center;gap:8px;padding:7px 10px;cursor:pointer;font-size:var(--font-size-sm)}
.topic-manage-user-suggest-item:hover,.topic-manage-user-suggest-active{background:var(--brand-soft);color:var(--success)}
.topic-manage-user-sug-id{color:var(--text-subtle);font-size:var(--font-size-xs);flex:0 0 auto;font-variant-numeric:tabular-nums}
.topic-manage-user-sug-name{font-weight:600}
.topic-manage-user-suggest-empty{padding:8px 10px;color:var(--text-subtle);font-size:var(--font-size-sm)}
/* 标签化多用户输入 */
.topic-manage-user-picker{position:relative;align-items:flex-start}
.topic-manage-user-tags{display:flex;flex-wrap:wrap;gap:6px;flex:1 1 100%;order:1}
.topic-manage-user-tag{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;border:1px solid var(--brand);border-radius:999px;background:var(--brand-soft);color:var(--success);font-size:var(--font-size-sm)}
.topic-manage-user-tag .topic-manage-user-remove{border:none;background:transparent;color:inherit;cursor:pointer;font-size:var(--font-size-sm);line-height:1;padding:0;min-height:0}
.topic-manage-user-invalid{border-color:var(--danger);background:var(--danger-soft);color:var(--danger)}
.topic-manage-user-error{display:block;width:100%;color:var(--danger);font-size:var(--font-size-xs);margin-top:4px}
.topic-manage-user-input{flex:1 1 180px;min-width:160px;min-height:32px;padding:5px 9px;font-size:var(--font-size-sm)}
@media (max-width:720px){
.topic-manage-muted-row{grid-template-columns:minmax(0,1fr)}
.topic-manage-unmute-form{width:100%}
.topic-manage-unmute-form input[type=text]{flex:1 1 120px;width:auto}
.topic-manage-pinned-card{padding:8px 10px}
.topic-manage-pinned-card-head{gap:6px;font-size:var(--font-size-xs)}
.topic-manage-pinned-card-jump{display:none}
.topic-manage-pinned-card-excerpt{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
}
/* topic_op_badge */
/* ===== 楼主徽章：紧随回帖用户名之后（.post-info 为 flex 容器，随现有排布自动换行）。
   规格对齐 AI_CONTEXT §6.6-2 标题徽章统一标准（h18 / pad 0 6px / ml 6px / 999px / xs / 700）；
   文字改用 --success：--brand 配 --brand-soft 底仅 4.22:1，小字号不达 WCAG AA（--success 4.74:1）
   1.1.1：color-mix 描边前补 var(--line) 实色回退——不支持 color-mix 的旧浏览器取回退值而非丢弃声明 ===== */
.topic-op-badge{display:inline-flex;align-items:center;flex-shrink:0;height:18px;min-width:18px;margin-left:6px;padding:0 6px;border:1px solid var(--line);border:1px solid color-mix(in srgb,var(--brand) 32%,transparent);border-radius:999px;background:var(--brand-soft);color:var(--success);font-size:var(--font-size-xs);font-weight:700;line-height:1;white-space:nowrap;vertical-align:middle}
/* topic_participant_summary_plus */
.topic-participant-summary-plus{box-sizing:border-box;grid-column:1/-1;flex:0 0 100%;min-width:0;width:100%;margin-top:18px;padding:14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel)}.topic-participant-summary-plus-header{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:12px}.topic-participant-summary-plus-title{margin:0;font-size:var(--font-size-md)}.topic-participant-summary-plus-count{color:var(--text-subtle);font-size:var(--font-size-xs)}.topic-participant-summary-plus .topic-participant-summary-plus-wall{display:flex;flex-wrap:wrap;gap:10px;margin:0;padding:0;list-style:none}.topic-participant-summary-plus-person{display:inline-flex;flex-direction:column;align-items:center;flex-shrink:0;width:52px;padding:0 0 8px;color:inherit;text-decoration:none;box-sizing:border-box}.topic-participant-summary-plus-person:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:var(--radius-sm)}.topic-participant-summary-plus-avatar-wrap{position:relative;display:grid;width:36px;height:36px;place-items:center;overflow:visible;border-radius:var(--radius-sm);background:var(--brand-soft);background:color-mix(in srgb,var(--brand) 15%,var(--panel))}.topic-participant-summary-plus-avatar{display:block;width:100%;height:100%;border-radius:var(--radius-sm);object-fit:cover}.topic-participant-summary-plus-fallback{display:grid;width:100%;height:100%;place-items:center;border-radius:var(--radius-sm);color:var(--brand);font-size:var(--font-size-sm);font-weight:700}.topic-participant-summary-plus-badge{position:absolute;z-index:2;right:-6px;bottom:-6px;box-sizing:content-box;min-width:18px;height:18px;padding:0 3px;border:2px solid var(--panel);border-radius:999px;background:var(--brand);color:var(--inverse-text);font-size:var(--font-size-xs);font-variant-numeric:tabular-nums;line-height:18px;text-align:center;pointer-events:none}
/* 1.6.5：删除 hover/focus-visible 死规则——徽章基态未声明 opacity/visibility/transform，
   悬停时置 opacity:1/visibility:visible/transform:none 均为无操作值，z-index:3 也无层叠冲突可解。 */
.topic-participant-summary-plus-name{display:block;width:100%;margin-top:5px;overflow:hidden;color:var(--text-muted);font-size:var(--font-size-xs);text-align:center;text-overflow:ellipsis;white-space:nowrap}.topic-participant-summary-plus-size-lg .topic-participant-summary-plus-avatar-wrap{width:48px;height:48px}.topic-participant-summary-plus-size-lg .topic-participant-summary-plus-person{width:64px}.topic-participant-summary-plus-size-lg .topic-participant-summary-plus-name{width:100%}.topic-participant-summary-plus-size-lg .topic-participant-summary-plus-wall{gap:14px}.topic-participant-summary-plus-size-lg .topic-participant-summary-plus-person{padding-bottom:10px}.topic-participant-summary-plus-size-md .topic-participant-summary-plus-avatar-wrap{width:36px;height:36px}.topic-participant-summary-plus-size-md .topic-participant-summary-plus-person{width:52px}.topic-participant-summary-plus-size-md .topic-participant-summary-plus-name{width:100%}.topic-participant-summary-plus-size-sm .topic-participant-summary-plus-avatar-wrap{width:24px;height:24px}.topic-participant-summary-plus-size-sm .topic-participant-summary-plus-person{width:40px}.topic-participant-summary-plus-size-sm .topic-participant-summary-plus-name{width:100%;font-size:var(--font-size-xxs)}.topic-participant-summary-plus-size-sm .topic-participant-summary-plus-wall{gap:6px}.topic-participant-summary-plus-size-sm .topic-participant-summary-plus-person{padding-bottom:5px}.topic-participant-summary-plus-size-sm .topic-participant-summary-plus-badge{min-width:14px;height:14px;padding:0 2px;font-size:var(--font-size-xxs);line-height:14px}@media(max-width:720px){.topic-participant-summary-plus{padding:12px}.topic-participant-summary-plus-wall{gap:8px}.topic-participant-summary-plus-size-lg .topic-participant-summary-plus-wall{gap:10px}.topic-participant-summary-plus-size-lg .topic-participant-summary-plus-person{padding-bottom:8px;width:52px}.topic-participant-summary-plus-size-lg .topic-participant-summary-plus-avatar-wrap{width:40px;height:40px}.topic-participant-summary-plus-size-sm .topic-participant-summary-plus-wall{gap:4px}.topic-participant-summary-plus-size-sm .topic-participant-summary-plus-person{padding-bottom:4px}.topic-participant-summary-plus-person{padding-right:6px}.topic-participant-summary-plus-size-md .topic-participant-summary-plus-avatar-wrap{width:32px;height:32px}.topic-participant-summary-plus-name{width:100%;max-width:52px}}.topic-participant-summary-plus-tip{margin:0;font-size:var(--font-size-xs);color:var(--text-subtle);line-height:1.6}.topic-participant-summary-plus-tip code{padding:1px 5px;border-radius:var(--radius-sm);background:var(--bg);font-size:var(--font-size-xxs)}.topic-participant-summary-plus-settings-order-row{grid-column:1/-1}.topic-participant-summary-plus-order-options{display:flex;flex-direction:column;gap:6px}.topic-participant-summary-plus-order-opt{display:inline-flex;align-items:center;gap:5px;font-weight:400;font-size:var(--font-size-sm);cursor:pointer;white-space:nowrap;padding:2px 0;width:-webkit-fit-content;width:fit-content}.topic-participant-summary-plus-order-opt input[type=radio]{flex-shrink:0;width:auto;height:auto;margin:0}
/* 参与者卡片自绘悬停气泡（2026-10 审查整改：原原生 title 深浅两态不可控，改伪元素 + 翻转，time_display 同款） */
.topic-participant-summary-plus-person[data-topic-participant-summary-plus-tip]{position:relative}
.topic-participant-summary-plus-person[data-topic-participant-summary-plus-tip]::after{content:attr(data-topic-participant-summary-plus-tip);position:absolute;left:50%;bottom:calc(100% + 6px);transform:translateX(-50%) translateY(2px);white-space:nowrap;padding:4px 8px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text);box-shadow:0 6px 18px var(--shadow-medium);font-size:var(--font-size-xs);line-height:1.4;opacity:0;visibility:hidden;pointer-events:none;transition:var(--transition-normal);z-index:50}
.topic-participant-summary-plus-person[data-topic-participant-summary-plus-tip]:hover::after,.topic-participant-summary-plus-person[data-topic-participant-summary-plus-tip]:focus-visible::after{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
/* 翻转态（脚本判定贴容器顶边时加 tip-down）：改从下方弹出，规则须排在显示规则之后靠源序覆盖 */
.topic-participant-summary-plus-person.topic-participant-summary-plus-tip-down[data-topic-participant-summary-plus-tip]::after{bottom:auto;top:calc(100% + 6px);transform:translateX(-50%) translateY(-2px)}
.topic-participant-summary-plus-person.topic-participant-summary-plus-tip-down[data-topic-participant-summary-plus-tip]:hover::after,.topic-participant-summary-plus-person.topic-participant-summary-plus-tip-down[data-topic-participant-summary-plus-tip]:focus-visible::after{transform:translateX(-50%) translateY(0)}
/* topic_read_groups */
/* ===== 发帖/编辑表单：阅读权限卡片 ===== */
.topic-read-groups-form-help{color:var(--text-muted);font-size:var(--font-size-xs);margin-top:2px;line-height:1.5}

/* "指定用户可见"区块 */
.topic-read-groups-wl-field{margin-top:4px;display:flex;flex-direction:column;gap:6px}
.topic-read-groups-wl-check{display:flex;align-items:center;gap:9px;font-size:var(--font-size-sm);color:var(--text);cursor:pointer;user-select:none;padding:8px 12px;border-radius:var(--radius);transition:background var(--transition-normal),border-color var(--transition-normal);background:var(--brand-soft);border:1px solid color-mix(in srgb,var(--brand) 22%,transparent);line-height:1.2}
.topic-read-groups-wl-check:hover{background:color-mix(in srgb,var(--brand) 12%,var(--bg))}
.topic-read-groups-wl-check input[type="checkbox"]{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}
.topic-read-groups-wl-check .topic-read-groups-hbox{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:var(--radius-sm);border:1.8px solid color-mix(in srgb,var(--brand) 55%,var(--panel));background:var(--panel);transition:background var(--transition-normal),border-color var(--transition-normal);flex:0 0 auto}
.topic-read-groups-wl-check .topic-read-groups-hbox svg{width:12px;height:12px;color:var(--inverse-text);opacity:0;transform:scale(.6);transition:opacity var(--transition-normal),transform var(--transition-normal)}
.topic-read-groups-wl-check:has(input:checked) .topic-read-groups-hbox{background:var(--brand);border-color:var(--brand)}
.topic-read-groups-wl-check:has(input:checked) .topic-read-groups-hbox svg{opacity:1;transform:scale(1)}
.topic-read-groups-wl-check .topic-read-groups-htext{display:flex;flex-direction:column;gap:1px}
.topic-read-groups-wl-check .topic-read-groups-hmain{font-weight:500;color:var(--brand)}
.topic-read-groups-wl-body{display:flex;flex-direction:column;gap:6px;padding:0 12px 4px 33px}
.topic-read-groups-wl-collapsed{display:none}
.topic-read-groups-wl-tags{display:flex;flex-wrap:wrap;gap:6px}
.topic-read-groups-wl-tag{display:inline-flex;align-items:center;gap:5px;padding:3px 4px 3px 10px;border-radius:var(--radius);background:var(--bg);border:1px solid var(--line-soft);font-size:var(--font-size-xs);color:var(--text);line-height:1}
.topic-read-groups-wl-tag .topic-read-groups-wl-name{font-weight:500}
.topic-read-groups-wl-tag .topic-read-groups-wl-remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:none;background:transparent;color:var(--text-muted);cursor:pointer;font-size:var(--font-size-sm);line-height:1;transition:background var(--transition-normal),color var(--transition-normal)}
.topic-read-groups-wl-tag .topic-read-groups-wl-remove:hover{background:var(--danger-soft);color:var(--danger)}
.topic-read-groups-wl-tag.topic-read-groups-wl-invalid{border-color:var(--danger);background:var(--danger-soft)}
.topic-read-groups-wl-tag.topic-read-groups-wl-invalid .topic-read-groups-wl-name{color:var(--danger);font-weight:600}
.topic-read-groups-wl-input{width:100%;box-sizing:border-box;padding:8px 11px;border-radius:var(--radius);border:1px solid var(--line-soft);background:var(--panel);color:var(--text);font-size:var(--font-size-sm);transition:border-color var(--transition-normal),box-shadow var(--transition-normal)}
.topic-read-groups-wl-input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 22%,transparent)}
/* 实时联想下拉：定位在输入框正下方 */
.topic-read-groups-wl-input-wrap{position:relative}
.topic-read-groups-wl-suggest{position:fixed;z-index:9999;max-height:230px;overflow-y:auto;background:var(--panel);border:1px solid var(--line-soft);border-radius:0 0 var(--radius) var(--radius);box-shadow:0 8px 24px var(--shadow-medium);padding:4px}
.topic-read-groups-wl-suggest-item{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:var(--radius);cursor:pointer;font-size:var(--font-size-sm);color:var(--text)}
.topic-read-groups-wl-suggest-item:hover,.topic-read-groups-wl-suggest-active{background:var(--brand-soft)}
.topic-read-groups-wl-sug-id{color:var(--text-muted);font-size:var(--font-size-xs);font-variant-numeric:tabular-nums}
.topic-read-groups-wl-sug-name{font-weight:500}
.topic-read-groups-wl-error{margin-top:2px;padding:6px 10px;border-radius:var(--radius);background:var(--danger-soft);border:1px solid color-mix(in srgb,var(--danger) 35%,transparent);color:var(--danger);font-size:var(--font-size-xs);line-height:1.45}
.topic-read-groups-wl-suggest-empty{padding:10px 11px;color:var(--text-muted);font-size:var(--font-size-xs);text-align:center}

/* 「对无权限用户完全隐藏此主题（含标题）」显示口径开关 */
.topic-read-groups-hide-field{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line-soft)}
.topic-read-groups-hide-check{display:flex;align-items:center;gap:9px;font-size:var(--font-size-sm);color:var(--text);cursor:pointer;user-select:none;padding:8px 12px;border-radius:var(--radius);transition:background var(--transition-normal),border-color var(--transition-normal);background:var(--bg);border:1px solid var(--line-soft);line-height:1.2}
.topic-read-groups-hide-check:hover{background:var(--brand-soft);border-color:var(--brand)}
.topic-read-groups-hide-check input[type="checkbox"]{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}
.topic-read-groups-hide-check .topic-read-groups-hbox{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:var(--radius-sm);border:1.8px solid var(--line);background:var(--panel);transition:background var(--transition-normal),border-color var(--transition-normal);flex:0 0 auto}
.topic-read-groups-hide-check .topic-read-groups-hbox svg{width:12px;height:12px;color:var(--inverse-text);opacity:0;transform:scale(.6);transition:opacity var(--transition-normal),transform var(--transition-normal)}
.topic-read-groups-hide-check:has(input:checked) .topic-read-groups-hbox{background:var(--brand);border-color:var(--brand)}
.topic-read-groups-hide-check:has(input:checked) .topic-read-groups-hbox svg{opacity:1;transform:scale(1)}
.topic-read-groups-hide-check .topic-read-groups-htext{display:flex;flex-direction:column;gap:1px}
.topic-read-groups-hide-check .topic-read-groups-hmain{font-weight:500;color:var(--text)}
/* 后台强制规则命中：复选框锁定（disabled 不随表单提交，服务端按版块强制值生效） */
.topic-read-groups-hide-locked .topic-read-groups-hide-check{cursor:not-allowed;border-style:dashed}
.topic-read-groups-hide-locked .topic-read-groups-hide-check:hover{background:var(--bg);border-color:var(--line-soft)}

/* ===== 切换版块：面板 AJAX 局部刷新（加载态 / 失败提示 / 未启用锁定提示） ===== */
.topic-read-groups-panel-loading{opacity:.6;transition:opacity var(--transition-normal)}
.topic-read-groups-panel-error{margin-bottom:8px;padding:6px 10px;border-radius:var(--radius);background:var(--danger-soft);border:1px solid color-mix(in srgb,var(--danger) 35%,transparent);color:var(--danger);font-size:var(--font-size-xs);line-height:1.45}
.topic-read-groups-locked-note{padding:2px 0;color:var(--text-muted);font-size:var(--font-size-xs);line-height:1.6}

/* ===== 后台「按版块设置」：单表四列（版块 + 三个版块级开关）=====
   每个版块一行、一行三勾选，比「每版块一张大卡片」省竖向空间；窄屏横向滚动不换行。 */
.topic-read-groups-admin-matrix{display:grid;gap:0;border:1px solid var(--line-soft);border-radius:var(--radius);overflow-x:auto}
.topic-read-groups-admin-row{display:grid;grid-template-columns:minmax(110px,1.5fr) repeat(3,minmax(116px,1fr));gap:10px;align-items:center;padding:9px 12px;border-top:1px solid var(--line-soft)}
.topic-read-groups-admin-row:first-child{border-top:0}
.topic-read-groups-admin-row-head{background:var(--bg);font-size:var(--font-size-xs);font-weight:600;color:var(--text);white-space:nowrap}
.topic-read-groups-admin-row[data-topic-read-groups-configured="1"]{background:var(--brand-soft)}
.topic-read-groups-admin-fname{font-weight:600;color:var(--text);font-size:var(--font-size-sm)}
.topic-read-groups-admin-check{display:inline-flex;align-items:center;gap:5px;color:var(--text);font-size:var(--font-size-sm);cursor:pointer}
/* 后台「管理组豁免」区块：纵向复选清单（复用 -admin-check 视觉），说明缩进对齐复选框文案 */
.topic-read-groups-manager-switches{display:flex;flex-direction:column;gap:4px;border:1px solid var(--line-soft);border-radius:var(--radius);padding:12px 14px}

/* ===== 列表标题徽标 ===== */
.topic-read-groups-badge{display:inline-flex;align-items:center;gap:3px;height:18px;min-width:18px;margin-left:6px;padding:0 6px;border-radius:999px;font-size:var(--font-size-xs);font-weight:700;line-height:1;vertical-align:middle;white-space:nowrap}
/* 列表徽标基础：图标 + 自定义 tooltip（替代原生 title，避免悬停延迟/偶尔不显示）。
   tooltip 视觉复用官方面板样式（参照 post_edit_time_plus 悬停时间提示）：
   var(--panel) 底 + var(--line) 边框 + var(--shadow-medium) 阴影 + var(--transition-normal) 过渡，
   昼夜模式经 CSS 变量自动适配。定位取上方居中（列表行密集，下方会覆盖相邻行内容）。 */
.topic-read-groups-badge{position:relative;display:inline-flex;align-items:center;justify-content:center;cursor:help;vertical-align:middle;outline:none}
.topic-read-groups-badge::after{content:attr(data-topic-read-groups-tip);position:absolute;left:50%;bottom:calc(100% + 6px);transform:translateX(-50%) translateY(2px);white-space:nowrap;padding:4px 8px;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);color:var(--text);box-shadow:0 6px 18px var(--shadow-medium);font-size:var(--font-size-xs);line-height:1.4;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--transition-normal),visibility var(--transition-normal),transform var(--transition-normal);z-index:50}
.topic-read-groups-badge:hover::after,.topic-read-groups-badge:focus-visible::after{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0)}
/* 提示气泡贴到可裁剪容器顶边时会被削掉上半截。伪元素无法像普通浮层那样改成 fixed 逃逸裁剪，
   只能在悬停/聚焦时改从下方弹出：JS 判定后加 is-tip-down 类，样式随之翻转（此规则须排在上面的
   显示规则之后，两者特异性相同，靠先后顺序覆盖）。 */
.topic-read-groups-badge.is-tip-down::after{bottom:auto;top:calc(100% + 6px);transform:translateX(-50%) translateY(-2px)}
.topic-read-groups-badge.is-tip-down:hover::after,.topic-read-groups-badge.is-tip-down:focus-visible::after{transform:translateX(-50%) translateY(0)}
.topic-read-groups-badge-partial{padding:0 6px;background:var(--brand-soft);color:var(--success);border:1px solid color-mix(in srgb,var(--success) 18%,transparent);margin-left:6px}
.topic-read-groups-badge-denied{padding:0 6px;background:var(--danger-soft);color:var(--danger);border:1px solid color-mix(in srgb,var(--danger) 18%,transparent);margin-left:6px}
/* ===== 发帖/编辑：阅读权限区域默认折叠（<details>） ===== */
/* 面板外框 / 标题栏 / 卡片化由核心 .topic-extension-panel 体系提供（index.css 2577~2651），
   此处只保留无 JS 时（未被卡片化）的兜底样式与内容区样式。 */
.topic-read-groups-field{display:block;margin:0;padding:0;border:0;background:transparent}
.topic-read-groups-field>.topic-read-groups-summary{cursor:pointer;display:flex;align-items:center;gap:6px;padding:12px 14px;font-weight:600;color:var(--text);font-size:var(--font-size-sm);list-style:none;user-select:none;flex-wrap:wrap}
.topic-read-groups-field>.topic-read-groups-summary::-webkit-details-marker{display:none}
.topic-read-groups-field>.topic-read-groups-summary .topic-read-groups-form-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:var(--radius-sm);background:var(--brand-soft);color:var(--brand);flex:0 0 auto}
.topic-read-groups-form-icon svg{width:11px;height:11px;flex:none}
/* 后台「强制完全隐藏」命中的卡片文案标记（卡片模式下核心只取该 span 的文本，样式仅作用于未卡片化的折叠面板） */
.topic-read-groups-field>.topic-read-groups-summary .topic-read-groups-summary-flag{color:var(--danger);font-weight:500}
.topic-read-groups-field>.topic-read-groups-details-body{display:flex;flex-direction:column;gap:8px;padding:14px}
/* ===== 详情页拒绝面板 ===== */
.topic-read-groups-denied-panel{text-align:center;padding:56px 20px}
.topic-read-groups-denied-panel .topic-read-groups-denied-icon{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:50%;background:var(--danger-soft);color:var(--danger);margin-bottom:14px}
.topic-read-groups-denied-icon svg{width:26px;height:26px}
.topic-read-groups-denied-panel h2{color:var(--danger);margin:0 0 8px;font-size:var(--font-size-xl)}
.topic-read-groups-denied-panel p{color:var(--text-muted);margin:0 0 22px;font-size:var(--font-size-sm)}
.topic-read-groups-denied-links{display:flex;justify-content:center;gap:10px;flex-wrap:wrap}
.topic-read-groups-error{margin:6px 0 0;color:var(--danger);font-size:var(--font-size-sm);font-weight:600;line-height:1.5}
@media (max-width:720px){.topic-read-groups-denied-panel{padding:36px 14px}.topic-read-groups-badge{margin-left:4px}.topic-read-groups-wl-tags{gap:5px}.topic-read-groups-field>.topic-read-groups-summary{gap:4px}}
/* topic_readonly */
.topic-readonly-badge{display:inline-flex;align-items:center;gap:3px;height:18px;min-width:18px;margin-left:6px;padding:0 6px;border-radius:999px;font-size:var(--font-size-xs);font-weight:700;line-height:1;white-space:nowrap;vertical-align:middle;background:var(--warning-soft);color:var(--warning);border:1px solid color-mix(in srgb,var(--warning) 24%,transparent)}
.topic-readonly-form{display:inline-flex;align-items:center}
/* 锁图标：完全同官方 icon-quote / icon-edit 的 mask 写法。
   官方 .icon-action:before 已提供 background:currentColor 与 14×14 尺寸；
   这里只追加 mask（mask 只取 SVG 的 alpha 通道，锁颜色 = 父级 color，自动适配明/暗主题）。
   mask 的 stroke 用 currentColor，与官方逐字一致。 */
.icon-action.topic-readonly-toggle::before,
.post-action-form button.topic-readonly-toggle::before{
  content:"";
  width:14px;height:14px;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect x=%275%27 y=%2711%27 width=%2714%27 height=%2710%27 rx=%272%27/%3E%3Cpath d=%27M8 11V7a4 4 0 0 1 8 0v4%27/%3E%3C/svg%3E") center/14px 14px no-repeat;
          mask:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect x=%275%27 y=%2711%27 width=%2714%27 height=%2710%27 rx=%272%27/%3E%3Cpath d=%27M8 11V7a4 4 0 0 1 8 0v4%27/%3E%3C/svg%3E") center/14px 14px no-repeat;
}
/* 管理员"设为只读"按钮：彻底重置全局 .btn,button{color:var(--inverse-text);min-height:32px;padding:7px 13px;background:var(--brand)}。
   关键：用 .post-action-form button 提高特异性，确保 color 不被全局 button 覆盖（否则暗色下变 #111827）。 */
.post-action-form button.topic-readonly-toggle,
.post-action-form button.topic-readonly-toggle:hover{
  box-sizing:border-box;width:24px;height:24px;min-height:0;min-width:0;
  padding:0;margin:0;border:0;border-radius:var(--radius-sm);
  background:transparent;color:var(--text-muted);
  font:inherit;font-weight:400;line-height:1;cursor:pointer;
}
.post-action-form button.topic-readonly-toggle:hover{background:var(--line-soft);opacity:1;color:var(--text-muted)}
.post-action-form button.topic-readonly-toggle:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}
/* 管理员"取消只读"按钮（已锁定）：warning 色，其余与未锁定一致，hover 背景统一 */
.post-action-form button.topic-readonly-toggle.is-locked,
.post-action-form button.topic-readonly-toggle.is-locked:hover{
  box-sizing:border-box;width:24px;height:24px;min-height:0;min-width:0;
  padding:0;margin:0;border:0;border-radius:var(--radius-sm);
  background:transparent;color:var(--warning);opacity:1;
  font:inherit;font-weight:400;line-height:1;cursor:pointer;
}
.post-action-form button.topic-readonly-toggle.is-locked:hover{background:var(--line-soft);opacity:1;color:var(--warning)}
.post-action-form button.topic-readonly-toggle.is-locked:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}
/* 兼容旧兜底：嵌套 <i class="topic-readonly-icon-lock">（badge/notice 用），与 ::before 同款 mask 写法 */
.topic-readonly-icon-lock{display:inline-block;flex:0 0 auto;width:14px;height:14px;background-color:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect x=%275%27 y=%2711%27 width=%2714%27 height=%2710%27 rx=%272%27/%3E%3Cpath d=%27M8 11V7a4 4 0 0 1 8 0v4%27/%3E%3C/svg%3E") center/14px 14px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27currentColor%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect x=%275%27 y=%2711%27 width=%2714%27 height=%2710%27 rx=%272%27/%3E%3Cpath d=%27M8 11V7a4 4 0 0 1 8 0v4%27/%3E%3C/svg%3E") center/14px 14px no-repeat}
.topic-readonly-badge .topic-readonly-icon-lock{width:11px;height:11px}
.topic-readonly-notice .topic-readonly-icon-lock{width:15px;height:15px}
.topic-readonly-notice{display:flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--warning) 28%,transparent);border-radius:var(--radius-sm);background:var(--warning-soft);color:var(--warning);font-size:var(--font-size-sm);line-height:1.5}
.topic-readonly-muted textarea,.topic-readonly-muted button[type="submit"]{display:none}
.topic-readonly-tip{margin:0;font-size:var(--font-size-xs);color:var(--text-subtle);line-height:1.6}
.topic-readonly-tip code{padding:1px 5px;border-radius:var(--radius-sm);background:var(--bg);font-size:var(--font-size-xxs)}
.topic-readonly-chips{display:flex;flex-wrap:wrap;gap:8px}
.topic-readonly-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--line-soft);border-radius:999px;background:var(--panel);color:var(--text-muted);font-size:var(--font-size-xs);line-height:1;white-space:nowrap}
.topic-readonly-chip b{color:var(--text);font-size:var(--font-size-sm)}
.topic-readonly-logs .topic-readonly-log{grid-template-columns:minmax(0,1fr) auto;gap:10px}
.topic-readonly-log-badge{display:inline-flex;align-items:center;padding:3px 9px;border:1px solid var(--line-soft);border-radius:999px;background:var(--panel);color:var(--text-muted);font-size:var(--font-size-xs);font-weight:600;line-height:1;white-space:nowrap}
.topic-readonly-log-badge.locked,.topic-readonly-log-badge.edit-topic,.topic-readonly-log-badge.edit-reply{border-color:color-mix(in srgb,var(--warning) 28%,transparent);background:var(--warning-soft);color:var(--warning)}
.topic-readonly-log-badge.unlocked{border-color:color-mix(in srgb,var(--success) 28%,transparent);background:var(--success-soft);color:var(--success)}
.topic-readonly-log-badge.delete-topic,.topic-readonly-log-badge.delete-reply{border-color:color-mix(in srgb,var(--danger) 28%,transparent);background:var(--danger-soft);color:var(--danger)}
@media (max-width:720px){.topic-readonly-logs .topic-readonly-log{grid-template-columns:minmax(0,1fr)}.topic-readonly-logs .admin-row-side{justify-content:flex-start}}
/* user_panel */
/* 弹层容器：position:fixed 逃逸 .main-panel 的 overflow:hidden 裁剪上下文；坐标由 JS 计算。
   底色为淡强调色渐变（参照 forum_pin 块底 linear-gradient(135deg,var(--brand-soft),var(--panel) 70%)），
   用本地变量承载一次、容器与卡片共用，避免圆角处露出纯色边。
   text-align:left：容器挂核心 page.footer（.footer 为 text-align:center）内，行内文本会继承居中——
   浮层不应继承宿主对齐，否则加入时间/回退 UID 行/简介等短文本行被居中（1.1.6 修复） */
.user-panel-pop{position:fixed;z-index:70;width:min(300px,calc(100vw - 24px));--user-panel-surface:linear-gradient(135deg,var(--brand-soft),var(--panel) 70%);background:var(--user-panel-surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 10px 30px var(--shadow-medium);color:var(--text);font-size:var(--font-size-sm);text-align:left}
.user-panel-pop[hidden]{display:none}
/* 卡片承载同一渐变底；border-radius:inherit 使卡片圆角与容器圆角完全重合（否则方角会溢出圆角边框）。
   position:relative + isolation:isolate 自建层叠上下文，使水印的 z-index:-1 落在「卡片底色之上、正文之下」 */
.user-panel-card{display:flex;flex-direction:column;gap:10px;padding:14px;border-radius:inherit;background:var(--user-panel-surface);position:relative;isolation:isolate}
/* 右上角 UID 背景水印：强调色 40%，压在所有正文之下、纯装饰（不拦点击、不可选中、对读屏隐藏）。
   字号走语义化变量 --user-panel-uid-size（1.3.1 令牌化）：基数 36 在基础类，位数档覆写变量值 */
.user-panel-uid{position:absolute;top:8px;right:14px;z-index:-1;color:var(--brand);opacity:.4;font-size:var(--user-panel-uid-size,36px);font-weight:700;line-height:1;letter-spacing:.5px;pointer-events:none;user-select:none}
/* 位数越多字号越小：1 位 48 / 2 位 44 / 3 位 40 / 4 位 36（基准，见上）/ 5 位 32 / 6 位 26 / 7 位及以上 20 */
.user-panel-uid-1{--user-panel-uid-size:48px}
.user-panel-uid-2{--user-panel-uid-size:44px}
.user-panel-uid-3{--user-panel-uid-size:40px}
.user-panel-uid-5{--user-panel-uid-size:32px}
.user-panel-uid-6{--user-panel-uid-size:26px}
.user-panel-uid-7{--user-panel-uid-size:20px}
/* align-items:center：右侧两行（用户名+等级 / 加入时间）整体对齐头像的水平中线 */
.user-panel-head{display:flex;gap:12px;align-items:center;min-width:0}
.user-panel-avatar{width:48px;height:48px;flex:none;border-radius:var(--radius)}
.user-panel-head-main{min-width:0;display:flex;flex-direction:column;gap:2px}
.user-panel-idrow{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}
.user-panel-name{color:var(--text);font-weight:700;font-size:var(--font-size-md);text-decoration:none;word-break:break-all;transition:color var(--transition-normal)}
.user-panel-name:hover{color:var(--brand)}
/* 等级身份 chip：尺寸对齐 §6.5#2 标题徽章规格（18px 高 / min-width 18px / 0 6px 内边距 / line-height 1 /
   12px 粗体 / 999px 药丸），inline-flex 保证固定高度内文字垂直居中；行内 gap:6px 即规格中的 6px 间距。
   配色用信息语义蓝（--info 配 --info-soft；§6.5#7 蓝=条件/信息） */
.user-panel-level{display:inline-flex;align-items:center;flex:none;height:18px;min-width:18px;padding:0 6px;border-radius:999px;background:var(--info-soft);color:var(--info);font-size:var(--font-size-xs);font-weight:700;line-height:1;white-space:nowrap}
.user-panel-joined{color:var(--text-subtle);font-size:var(--font-size-xs)}
/* 回退 UID 行：长用户名/身份链压住右上角水印时由 JS 显示（服务端预置、默认 hidden），样式对齐
   加入时间行；[hidden] 必须显式声明——本行位于 flex 列容器内，未来若给该类加 display 属性会
   静默压过 UA 对 [hidden] 的 display:none */
.user-panel-uid-line{color:var(--text-subtle);font-size:var(--font-size-xs)}
.user-panel-uid-line[hidden]{display:none}
/* 简介：按后台所选行数截断（1.3.0 起，bio_lines 选 1/2/3 行）——line-clamp 多行截断自带末尾
   省略号，服务端不再手工拼 …；基础类默认钳三行兜底，行数由服务端按配置附加的档位类覆盖。
   极少数不支持 line-clamp 的环境优雅降级为完整显示（服务端 300 字符安全截断兜底防极端超长） */
.user-panel-bio{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;margin:0;border-top:1px solid var(--line-soft);padding-top:10px;color:var(--text-muted);word-break:break-word}
.user-panel-bio-1{-webkit-line-clamp:1}
.user-panel-bio-2{-webkit-line-clamp:2}
.user-panel-bio-3{-webkit-line-clamp:3}
.user-panel-medals{display:flex;flex-wrap:wrap;gap:4px}
/* 分割线节奏：勋章行紧贴头部；统计、操作、简介三段各带 1px 上分隔线（空区块不输出，不会留下多余线） */
.user-panel-stats{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 26px;border-top:1px solid var(--line-soft);padding-top:10px;color:var(--text-muted)}
/* 各项整体不换行、不参与收缩：数值缩写后仍整项换行，不截断不变形；发帖/回帖为链接，去掉默认下划线。
   inline-flex + 4px gap：图标 / 标签 / 数值三者等距排布（图标走核心 .meta-icon 的 13px 尺寸与配色） */
.user-panel-stat{display:inline-flex;align-items:center;gap:4px;flex:none;white-space:nowrap;color:inherit;text-decoration:none}
.user-panel-stat b{color:var(--text);font-weight:700}
a.user-panel-stat:hover b{color:var(--brand)}
.user-panel-actions{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;border-top:1px solid var(--line-soft);padding-top:10px}
/* 统一操作区直接子项（含其他插件生成的按钮组容器）的对齐与外边距，避免图标组与按钮基线错位 */
.user-panel-actions > *{margin:0;display:inline-flex;align-items:center}
/* 操作区链接：仅作用于本容器直接子级 a（各提供方插件生成的入口在此统一着装）。
   与 block_follow 文字形态按钮同规格：1px 描边 + 4/12 内边距 + line-height 1.5 → 四个胶囊同高同形；
   统一中性描边、悬停转品牌色，与「关注/屏蔽」的默认态一致（它们的语义色由提供方状态类自行给）。 */
.user-panel-actions > a{display:inline-flex;align-items:center;padding:4px 12px;border:1px solid var(--line);border-radius:var(--radius);color:var(--text-muted);font-size:var(--font-size-xs);font-weight:700;line-height:1.5;text-decoration:none;transition:border-color var(--transition-normal),color var(--transition-normal)}
.user-panel-actions > a:hover{border-color:var(--brand);color:var(--brand)}
.user-panel-loading,.user-panel-error{padding:14px;color:var(--text-muted)}
.user-panel-error{color:var(--danger)}
@media (max-width:720px){
    .user-panel-card{padding:12px}
}
/* ===== 个人主页侧栏注册时间条（page.before_render 锚点注入，1.2.0 自 time_display 迁入）=====
   单行居中轻量条：flex baseline 一行排布「注册时间 YYYY-MM-DD」，--line-soft 描边 + --radius 圆角；
   颜色字号全走语义变量、昼夜模式自动适配；自绘样式不依赖核心类（核心改类名不影响本条） */
.user-panel-register{display:flex;align-items:baseline;justify-content:center;gap:6px;margin:0 0 12px;padding:7px 12px;border:1px solid var(--line-soft);border-radius:var(--radius);font-size:var(--font-size-sm);line-height:1.4}
.user-panel-register span{color:var(--text-muted)}
.user-panel-register strong{color:var(--text);font-weight:600}
/* 后台设置：分组卡片（沿用本项目设置页的多列卡片视觉；类名本插件命名空间）
   用多列 columns 而非 grid：grid 行高由该行最高卡片决定，矮卡片下面会空出一大块 */
.user-panel-admin-cards{columns:2;column-gap:14px;margin-bottom:2px}
/* 后台多列转单列：920 为功能性布局阈值而非移动端断点（AI_CONTEXT 6.6-1 豁免） */
@media (max-width:920px){.user-panel-admin-cards{columns:1}}
.user-panel-admin-card{break-inside:avoid;-webkit-column-break-inside:avoid;page-break-inside:avoid;margin:0 0 14px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.user-panel-admin-card-head{padding:10px 14px;border-bottom:1px solid var(--line-soft)}
.user-panel-admin-card-head h3{margin:0;font-size:var(--font-size-md);color:var(--text)}
.user-panel-admin-card-head p{margin:4px 0 0;color:var(--text-subtle);font-size:var(--font-size-xs);line-height:1.55}
.user-panel-admin-card-body{padding:10px 14px}
/* 核心给插件设置表单限了 520px 宽；卡片布局要占满内容区（元素 + 两个类压过，不用 !important） */
form.plugin-settings-form.user-panel-admin-form{max-width:none}
.user-panel-admin-actions{margin-top:4px}
