新增: - blob_store 二进制去重存储 + blob_dedup 测试 其它: - 后端 settings/auth/media_library/upload/operations 服务与 handler 调整 - 前端品牌(BrandLockup/BrandCropModal/BrandSeoPanel)、注册、媒体库、分析详情页、Header/SiteChrome 等更新
10402 lines
259 KiB
CSS
10402 lines
259 KiB
CSS
@import "tailwindcss";
|
||
|
||
/* ============================================================
|
||
姜十三论坛 · GRAPHITE INDIGO 设计系统
|
||
冷调石墨灰阶 / 纯白卡片 / 靛蓝主色 / 近黑锌灰暗色
|
||
============================================================ */
|
||
|
||
:root {
|
||
/* 浅色(默认)——画廊白底,卡片纯白浮起 */
|
||
--bg: #fafbfc;
|
||
--panel: #ffffff;
|
||
/* 前台 main 纸面:纯白,与页头/页脚(--panel)连成一张白纸,画布只在页缘露出 */
|
||
--main-bg: #ffffff;
|
||
--panel-2: #f2f4f7;
|
||
--tint: #eceff3;
|
||
--ink: #161a22;
|
||
--ink-2: #4b5260;
|
||
--ink-3: #5b6270;
|
||
--line: #e4e7ec; /* 装饰性分隔/卡片边(非交互,配合阴影与底色高差) */
|
||
--line-2: #7c8698; /* 功能性边界:输入框/按钮/分页等可交互控件,满足 1.4.11 ≥3:1 */
|
||
|
||
--accent: #3b5bdb;
|
||
--accent-hi: #3451c8;
|
||
--accent-soft: rgba(59, 91, 219, 0.1);
|
||
--accent-on: #ffffff;
|
||
|
||
--clay: #a5420a;
|
||
--clay-soft: rgba(165, 66, 10, 0.12);
|
||
--gold: #825700;
|
||
--gold-soft: rgba(130, 87, 0, 0.13);
|
||
|
||
--danger: #c8281e;
|
||
--danger-soft: rgba(200, 40, 30, 0.09);
|
||
--ok: #137333;
|
||
--ok-soft: rgba(19, 115, 51, 0.1);
|
||
|
||
/* 等级徽章与自定义徽章扩展色板 */
|
||
--info: #1c6ea8;
|
||
--info-soft: rgba(28, 110, 168, 0.1);
|
||
--purple: #6d3fc0;
|
||
--purple-soft: rgba(109, 63, 192, 0.1);
|
||
--teal: #0f7a6e;
|
||
--teal-soft: rgba(15, 122, 110, 0.1);
|
||
|
||
/* 积分看板最近流水:金额与类型标签 */
|
||
--ledger-in: #16a34a;
|
||
--ledger-out: #dc2626;
|
||
--ledger-checkin-bg: #dcfce7;
|
||
--ledger-checkin-fg: #15803d;
|
||
--ledger-bounty-bg: #ffedd5;
|
||
--ledger-bounty-fg: #c2410c;
|
||
--ledger-file-bg: #dbeafe;
|
||
--ledger-file-fg: #1d4ed8;
|
||
--ledger-typed-bg: #f3e8ff;
|
||
--ledger-typed-fg: #7e22ce;
|
||
|
||
/* 积分存量概览:分段条与健康徽章 */
|
||
--stock-circ: #07c05f;
|
||
--stock-spent: #d1d5db;
|
||
--stock-frozen: #f59e0b;
|
||
--stock-frozen-stripe: rgba(255, 255, 255, 0.35);
|
||
--stock-badge-ok-bg: #07c05f;
|
||
--stock-badge-ok-fg: #ffffff;
|
||
--stock-badge-hot-bg: #f59e0b;
|
||
--stock-badge-hot-fg: #ffffff;
|
||
--stock-badge-low-bg: var(--tint);
|
||
--stock-badge-low-fg: var(--ink-3);
|
||
|
||
/* 工作台可点块悬停底:左栏、帖子行、右栏公告/热门/友链/关于本站、目录等共用。
|
||
改这一处即可全局换悬停色;选中态仍走 --nav-active-*。按钮/菜单等控件不要绑这个。 */
|
||
--item-hover-bg: color-mix(in srgb, var(--accent-soft) 50%, transparent);
|
||
/* 工作台语义:选中用主题色淡底 */
|
||
--nav-active-bg: var(--accent-soft);
|
||
--nav-active-ink: var(--accent);
|
||
--nav-active-line: rgba(59, 91, 219, 0.38);
|
||
--rank-1: #96620f;
|
||
--rank-2: #5d6676;
|
||
--rank-3: #a05a2c;
|
||
|
||
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.05);
|
||
--shadow: 0 2px 8px rgba(16, 24, 40, 0.05), 0 10px 28px rgba(16, 24, 40, 0.06);
|
||
--shadow-lg: 0 6px 16px rgba(16, 24, 40, 0.08), 0 20px 48px rgba(16, 24, 40, 0.12);
|
||
|
||
/* 页面画布:主题色柔光 + 发丝网格(纯 CSS,随 --accent 换肤) */
|
||
--bg-halo: color-mix(in srgb, var(--accent) 8%, transparent);
|
||
--bg-mesh: color-mix(in srgb, var(--ink) 3.2%, transparent);
|
||
--bg-grid-line: rgba(15, 23, 42, 0.05);
|
||
--bg-grid-size: 28px;
|
||
|
||
/* next/font 构建期自托管,变量由 layout.tsx 注入;
|
||
本地系统字体仅作网络字体分片就绪前的回退(PingFang/雅黑与 Noto 观感接近) */
|
||
--font-display: var(--font-jakarta), var(--font-noto-sc), -apple-system,
|
||
"PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
|
||
--font-sans: var(--font-jakarta), var(--font-noto-sc), -apple-system,
|
||
"PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
|
||
--font-mono: var(--font-jetbrains), var(--font-noto-sc), ui-monospace,
|
||
"Cascadia Code", Consolas, monospace;
|
||
|
||
--r: 12px;
|
||
--r-sm: 12px;
|
||
|
||
/* 文本控件:柔和默认边 + 贴边细聚焦(见下方 .j13-control-* / 各输入选择器) */
|
||
--control-border: var(--line);
|
||
--control-border-hover: color-mix(in srgb, var(--line-2) 40%, var(--line));
|
||
--focus-glow: color-mix(in srgb, var(--accent) 22%, transparent);
|
||
--focus-glow-danger: color-mix(in srgb, var(--danger) 18%, transparent);
|
||
|
||
/* 顶栏 56px 条 + 1px 底边;main 桌面 py-9。侧栏 sticky 必须等于
|
||
栏在 scrollY=0 时的视口 top,否则第一下滚动会先空走一截再吸住 */
|
||
--header-bar: 56px;
|
||
--header-h: calc(var(--header-bar) + 1px);
|
||
--main-pad-y: 1.25rem;
|
||
--rail-top: calc(var(--header-h) + var(--main-pad-y));
|
||
--rail-max-h: calc(100vh - var(--rail-top) - 1rem);
|
||
|
||
/* 等级徽章默认色兜底(layout.tsx 会按后台配置注入 --lv-N-* 覆盖此处;
|
||
与 lib/levels.ts 色板保持同步:灰/蓝/青/绿/红牌/黑金/鎏金,
|
||
特效档为含高光段的流动渐变,流光由高光段随 position 流动呈现) */
|
||
--lv-1-fg: #9aa3b2; --lv-1-bg: rgba(148,158,176,0.16); --lv-1-ring: transparent;
|
||
--lv-2-fg: #4d8dff; --lv-2-bg: rgba(59,118,240,0.15); --lv-2-ring: transparent;
|
||
--lv-3-fg: #12a89b; --lv-3-bg: rgba(14,148,136,0.15); --lv-3-ring: transparent;
|
||
--lv-4-fg: #27a94f; --lv-4-bg: rgba(31,156,71,0.15); --lv-4-ring: transparent;
|
||
--lv-5-fg: #ffffff; --lv-5-bg: linear-gradient(90deg, #b91c1c, #ef4444 25%, #fecaca 38%, #dc2626 52%, #991b1b 78%, #b91c1c) 0% 0% / 200% 100%; --lv-5-ring: transparent;
|
||
--lv-6-fg: #e9c46a; --lv-6-bg: linear-gradient(90deg, #16171c, #23252c 22%, #4a3d1c 36%, #23252c 52%, #16171c 78%) 0% 0% / 200% 100%; --lv-6-ring: rgba(233, 196, 106, 0.5);
|
||
--lv-7-fg: transparent; --lv-7-bg: linear-gradient(180deg, #221b0f, #100d07); --lv-7-ring: rgba(240, 200, 120, 0.45);
|
||
--lv-7-text-image: linear-gradient(90deg, #c9973f, #ffe9a8 30%, #fff6d8 46%, #f0c964 66%, #c9973f); --lv-7-text-position: 0% 0%; --lv-7-text-size: 200% 100%;
|
||
|
||
color-scheme: light;
|
||
}
|
||
|
||
.dark {
|
||
/* 近黑冷灰:面板逐层浮起,靛蓝提亮为长春花蓝 */
|
||
--bg: #0c0d10;
|
||
--panel: #181b21;
|
||
/* 暗色 main 纸面:比画布略亮一档,保持「主内容区略浮起」的层级对应 */
|
||
--main-bg: #131418;
|
||
--panel-2: #20242c;
|
||
--tint: #282d37;
|
||
--ink: #eef1f6;
|
||
--ink-2: #b6bdc9;
|
||
--ink-3: #98a1b2;
|
||
--line: rgba(238, 241, 246, 0.08); /* 装饰性分隔/卡片边 */
|
||
--line-2: rgba(238, 241, 246, 0.38); /* 功能性控件边界,1.4.11 ≥3:1 */
|
||
|
||
--accent: #8ea2ff;
|
||
--accent-hi: #a9b8ff;
|
||
--accent-soft: rgba(141, 163, 255, 0.16);
|
||
--accent-on: #10162b;
|
||
|
||
--clay: #f0875a;
|
||
--clay-soft: rgba(240, 135, 90, 0.16);
|
||
--gold: #e0b259;
|
||
--gold-soft: rgba(224, 178, 89, 0.16);
|
||
|
||
--danger: #ff6b60;
|
||
--danger-soft: rgba(255, 107, 96, 0.15);
|
||
--ok: #58d18a;
|
||
--ok-soft: rgba(88, 209, 138, 0.15);
|
||
|
||
/* 等级徽章与自定义徽章扩展色板 */
|
||
--info: #5db8f0;
|
||
--info-soft: rgba(93, 184, 240, 0.16);
|
||
--purple: #c39bf5;
|
||
--purple-soft: rgba(195, 155, 245, 0.16);
|
||
--teal: #4fd8c4;
|
||
--teal-soft: rgba(79, 216, 196, 0.16);
|
||
|
||
--ledger-in: #4ade80;
|
||
--ledger-out: #f87171;
|
||
--ledger-checkin-bg: rgba(22, 163, 74, 0.22);
|
||
--ledger-checkin-fg: #86efac;
|
||
--ledger-bounty-bg: rgba(194, 65, 12, 0.28);
|
||
--ledger-bounty-fg: #fdba74;
|
||
--ledger-file-bg: rgba(29, 78, 216, 0.28);
|
||
--ledger-file-fg: #93c5fd;
|
||
--ledger-typed-bg: rgba(126, 34, 206, 0.28);
|
||
--ledger-typed-fg: #e9d5ff;
|
||
|
||
--stock-circ: #34d399;
|
||
--stock-spent: #4b5563;
|
||
--stock-frozen: #fbbf24;
|
||
--stock-frozen-stripe: rgba(0, 0, 0, 0.22);
|
||
--stock-badge-ok-bg: #059669;
|
||
--stock-badge-ok-fg: #ecfdf5;
|
||
--stock-badge-hot-bg: #d97706;
|
||
--stock-badge-hot-fg: #fffbeb;
|
||
--stock-badge-low-bg: var(--tint);
|
||
--stock-badge-low-fg: var(--ink-3);
|
||
|
||
--item-hover-bg: color-mix(in srgb, var(--accent-soft) 50%, transparent);
|
||
/* 工作台语义:选中用主题色淡底 */
|
||
--nav-active-bg: var(--accent-soft);
|
||
--nav-active-ink: #a9b8ff;
|
||
--nav-active-line: rgba(141, 163, 255, 0.38);
|
||
--rank-1: #e3bf74;
|
||
--rank-2: #b9c1cd;
|
||
--rank-3: #e0a06e;
|
||
|
||
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4);
|
||
--shadow: 0 2px 8px rgba(0, 0, 0, 0.28), 0 12px 32px rgba(0, 0, 0, 0.22);
|
||
--shadow-lg: 0 6px 18px rgba(0, 0, 0, 0.35), 0 24px 56px rgba(0, 0, 0, 0.3);
|
||
|
||
--bg-halo: color-mix(in srgb, var(--accent) 14%, transparent);
|
||
--bg-mesh: color-mix(in srgb, var(--ink) 5%, transparent);
|
||
--bg-grid-line: rgba(238, 241, 246, 0.045);
|
||
--bg-grid-size: 28px;
|
||
|
||
/* 暗色沿用浅色同款 color-mix 公式(依赖上方已覆写的 --line / --accent 等) */
|
||
--control-border: var(--line);
|
||
--control-border-hover: color-mix(in srgb, var(--line-2) 40%, var(--line));
|
||
--focus-glow: color-mix(in srgb, var(--accent) 22%, transparent);
|
||
--focus-glow-danger: color-mix(in srgb, var(--danger) 18%, transparent);
|
||
|
||
color-scheme: dark;
|
||
}
|
||
|
||
html {
|
||
/* 恒定保留滚动条槽位:短页面(如书库)无滚动条时视口宽度不再比长页面宽 10px,
|
||
避免 Header 居中容器与右侧按钮组在切页时横移 */
|
||
scrollbar-gutter: stable;
|
||
scrollbar-color: var(--line-2) transparent;
|
||
background-color: var(--bg); /* 橡皮筋 overscroll 与画布同色 */
|
||
--j13-bg-site-image: none;
|
||
--j13-bg-site-size: cover;
|
||
--j13-bg-site-repeat: no-repeat;
|
||
--j13-bg-site-position: center;
|
||
--j13-bg-admin-image: none;
|
||
--j13-bg-admin-size: cover;
|
||
--j13-bg-admin-repeat: no-repeat;
|
||
--j13-bg-admin-position: center;
|
||
}
|
||
|
||
body {
|
||
background-color: var(--bg);
|
||
color: var(--ink);
|
||
font-family: var(--font-sans);
|
||
/* 亚像素渲染在 Windows 高分屏更实;强制 grayscale 会让 400/500 中文偏虚 */
|
||
-webkit-font-smoothing: auto;
|
||
text-rendering: optimizeLegibility;
|
||
/* 长手属性只禁伪粗(缺档字重糊成一团);放开伪斜体,让 em/斜体按钮生效。
|
||
首行兜底:不支持长手属性的老浏览器维持全禁。 */
|
||
font-synthesis: none;
|
||
font-synthesis-weight: none;
|
||
font-synthesis-style: auto;
|
||
isolation: isolate; /* 让 z-index:-1 的画布层停在内容之下、html 之上 */
|
||
}
|
||
|
||
/* 画布纹饰:固定层(不用 background-attachment:fixed,避免移动端掉帧)。
|
||
柔光 + 发丝网格均为静态 CSS,无 JS、无 SVG 滤镜、无持续动画。 */
|
||
body::before {
|
||
content: "";
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: -1;
|
||
pointer-events: none;
|
||
background:
|
||
radial-gradient(ellipse 78% 48% at 16% -14%, var(--bg-halo), transparent 62%),
|
||
radial-gradient(ellipse 52% 36% at 96% 0%, var(--bg-mesh), transparent 58%);
|
||
}
|
||
|
||
body::after {
|
||
content: "";
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: -1;
|
||
pointer-events: none;
|
||
background-image:
|
||
repeating-linear-gradient(
|
||
to right,
|
||
var(--bg-grid-line) 0,
|
||
var(--bg-grid-line) 1px,
|
||
transparent 1px,
|
||
transparent var(--bg-grid-size)
|
||
),
|
||
repeating-linear-gradient(
|
||
to bottom,
|
||
var(--bg-grid-line) 0,
|
||
var(--bg-grid-line) 1px,
|
||
transparent 1px,
|
||
transparent var(--bg-grid-size)
|
||
);
|
||
-webkit-mask-image: radial-gradient(ellipse 92% 78% at 50% 16%, #000 12%, transparent 74%);
|
||
mask-image: radial-gradient(ellipse 92% 78% at 50% 16%, #000 12%, transparent 74%);
|
||
}
|
||
|
||
@media print {
|
||
body::before,
|
||
body::after {
|
||
display: none;
|
||
}
|
||
}
|
||
|
||
@media (prefers-contrast: more) {
|
||
body::before,
|
||
body::after {
|
||
display: none;
|
||
}
|
||
}
|
||
|
||
/* 自定义背景图:改写 canvas 的 ::before 固定层,关闭发丝网格。
|
||
前台 / 后台用 data-j13-chrome 分轨,软导航只改该属性即可切换。 */
|
||
html.j13-has-site-bg[data-j13-chrome="site"] body::before {
|
||
background-color: var(--bg);
|
||
background-image: var(--j13-bg-site-image);
|
||
background-size: var(--j13-bg-site-size);
|
||
background-repeat: var(--j13-bg-site-repeat);
|
||
background-position: var(--j13-bg-site-position);
|
||
}
|
||
html.j13-has-admin-bg[data-j13-chrome="admin"] body::before {
|
||
background-color: var(--bg);
|
||
background-image: var(--j13-bg-admin-image);
|
||
background-size: var(--j13-bg-admin-size);
|
||
background-repeat: var(--j13-bg-admin-repeat);
|
||
background-position: var(--j13-bg-admin-position);
|
||
}
|
||
html.j13-has-site-bg[data-j13-chrome="site"] body::after,
|
||
html.j13-has-admin-bg[data-j13-chrome="admin"] body::after {
|
||
display: none;
|
||
}
|
||
|
||
/* 等级徽章特效(LevelBadge / .lv-badge):底色/前景由 SSR 注入的 --lv-N-* 变量驱动。
|
||
特效档背景为水平多段渐变(首尾同色)+ background-size 200%,
|
||
lv-flow 位移 0→200% 恰好一个图块周期(百分比 position 非线性:偏移=(100%-size)×p,
|
||
size=200% 时 p=200% 的偏移=-200% 即一个图块宽),循环首尾严格重合、无接缝。
|
||
.lv-text 为文字渐变层(--lv-N-text 存在时经 background-clip:text 呈现鎏金字,
|
||
同样走 lv-flow 流动;无渐变档 background 为 none,文字按 --lv-N-fg 正常着色) */
|
||
@keyframes lv-flow {
|
||
to {
|
||
background-position: 200% 0%;
|
||
}
|
||
}
|
||
.lv-badge {
|
||
position: relative;
|
||
overflow: hidden;
|
||
animation: lv-flow 6s linear infinite;
|
||
}
|
||
.lv-text {
|
||
animation: lv-flow 6s linear infinite;
|
||
}
|
||
/* 站点特效总开关(levels_fx 设置,layout SSR 注入 html[data-lv-fx]):
|
||
关闭时停用流光动画,徽章退化为静态配色 */
|
||
html[data-lv-fx="off"] .lv-badge,
|
||
html[data-lv-fx="off"] .lv-text {
|
||
animation: none;
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.lv-badge,
|
||
.lv-text {
|
||
animation: none;
|
||
}
|
||
}
|
||
|
||
/* 徽章类统一禁止鼠标选择:拖选/双击正文时避免把小胶囊文字带进选区 */
|
||
.lv-badge,
|
||
.cmt-badge,
|
||
.badge-pending,
|
||
.badge-type,
|
||
.badge-access,
|
||
.badge-status,
|
||
.badge-accepted,
|
||
.j13-board-tag {
|
||
user-select: none;
|
||
-webkit-user-select: none;
|
||
}
|
||
|
||
/* 无封面文本封面:颜色由书名派生的稳定色相 --cover-h 决定(lib/coverColor.ts),
|
||
同一本书任何页面/刷新同色;浅色=淡彩底深字,深色=暗底亮字 */
|
||
.j13-text-cover {
|
||
--cover-h: 210;
|
||
color: hsl(var(--cover-h) 45% 34%);
|
||
background:
|
||
radial-gradient(120% 140% at 20% -10%, hsl(var(--cover-h) 85% 55% / 0.2), transparent 60%),
|
||
hsl(var(--cover-h) 60% 95.5%);
|
||
}
|
||
|
||
.dark .j13-text-cover {
|
||
color: hsl(var(--cover-h) 65% 78%);
|
||
background:
|
||
radial-gradient(120% 140% at 20% -10%, hsl(var(--cover-h) 70% 62% / 0.22), transparent 60%),
|
||
hsl(var(--cover-h) 28% 16%);
|
||
}
|
||
|
||
/* 书库页标题:书香气衬线(宋体/楷体回退) */
|
||
.j13-library-title {
|
||
font-family: "Songti SC", "STSong", "SimSun", "Noto Serif CJK SC", serif;
|
||
}
|
||
|
||
/* 全站悬停即显提示气泡(配合 TipHost + data-tip,替代原生 title 延迟) */
|
||
.j13-tip-bubble {
|
||
position: fixed;
|
||
z-index: 9999;
|
||
max-width: min(280px, calc(100vw - 20px));
|
||
padding: 5px 10px;
|
||
border-radius: 8px;
|
||
font-size: 12px;
|
||
font-weight: 400;
|
||
line-height: 1.4;
|
||
letter-spacing: 0.01em;
|
||
pointer-events: none;
|
||
white-space: pre-line;
|
||
overflow-wrap: anywhere;
|
||
color: var(--accent);
|
||
background: color-mix(in srgb, var(--accent) 10%, var(--panel));
|
||
border: 1px solid color-mix(in srgb, var(--accent) 30%, var(--line));
|
||
box-shadow: var(--shadow-sm);
|
||
animation: j13-tip-in 80ms ease-out;
|
||
}
|
||
.dark .j13-tip-bubble {
|
||
color: var(--accent);
|
||
background: color-mix(in srgb, var(--accent) 16%, var(--panel));
|
||
border-color: color-mix(in srgb, var(--accent) 38%, var(--line));
|
||
}
|
||
@keyframes j13-tip-in {
|
||
from {
|
||
opacity: 0;
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.j13-tip-bubble {
|
||
animation: none;
|
||
}
|
||
}
|
||
|
||
/* ============================================================
|
||
发帖台:文档式舞台(对齐私信页体量;不改动全站 .field)
|
||
控件:白底 + 单层描边;聚焦同 j13-chat-search
|
||
============================================================ */
|
||
.j13-compose-page {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
}
|
||
/* Suspense / 客户端壳层也要把高度往下传 */
|
||
.j13-compose-page > :last-child {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
}
|
||
.j13-compose-stage {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r);
|
||
box-shadow: var(--shadow);
|
||
overflow: visible;
|
||
}
|
||
.j13-compose-toolbar {
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 1rem;
|
||
padding: 0.75rem 1.25rem;
|
||
border-bottom: 1px solid var(--line);
|
||
background: color-mix(in srgb, var(--panel) 92%, var(--panel-2));
|
||
position: sticky;
|
||
top: 3.5rem;
|
||
z-index: 20;
|
||
border-radius: var(--r) var(--r) 0 0;
|
||
}
|
||
@media (min-width: 640px) {
|
||
.j13-compose-toolbar {
|
||
padding: 0.85rem 1.75rem;
|
||
}
|
||
}
|
||
.j13-compose-toolbar-title {
|
||
margin: 0;
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
color: var(--ink);
|
||
letter-spacing: -0.01em;
|
||
}
|
||
.j13-compose-toolbar-actions {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.5rem;
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-compose-body {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
padding: 1.15rem 1.15rem 0.75rem;
|
||
gap: 0.85rem;
|
||
}
|
||
@media (min-width: 640px) {
|
||
.j13-compose-body {
|
||
padding: 1.25rem 1.4rem 0.85rem;
|
||
gap: 0.95rem;
|
||
}
|
||
}
|
||
/* 发帖分区卡片:轻分隔,不过度割裂也不糊成一片 */
|
||
.j13-compose-section {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.85rem;
|
||
padding: 1rem 1.1rem 1.1rem;
|
||
border-radius: 14px;
|
||
border: 1px solid var(--line);
|
||
background: color-mix(in srgb, var(--bg) 70%, var(--panel));
|
||
}
|
||
.j13-compose-section-title {
|
||
margin: 0;
|
||
font-size: 12px;
|
||
font-weight: 700;
|
||
letter-spacing: 0.05em;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-compose-section-writing {
|
||
background: var(--panel);
|
||
border-color: color-mix(in srgb, var(--line) 85%, var(--accent) 15%);
|
||
box-shadow: 0 1px 0 color-mix(in srgb, var(--ink) 3.5%, transparent);
|
||
flex: 1 1 auto;
|
||
min-height: 0;
|
||
}
|
||
/* 类型面板已在分区内,去掉二次描边避免套娃 */
|
||
.j13-compose-section .j13-compose-typepanel {
|
||
padding: 0;
|
||
border: 0;
|
||
border-radius: 0;
|
||
background: transparent;
|
||
}
|
||
.j13-compose-actions {
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 0.75rem 1rem;
|
||
padding: 1rem 1.5rem 1.25rem;
|
||
border-top: 1px solid var(--line);
|
||
background: var(--panel);
|
||
}
|
||
.j13-compose-actions-error {
|
||
flex: 1 1 12rem;
|
||
margin: 0;
|
||
max-width: min(100%, 28rem);
|
||
}
|
||
.j13-compose-actions-end {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.65rem;
|
||
margin-left: auto;
|
||
}
|
||
@media (min-width: 640px) {
|
||
.j13-compose-actions {
|
||
padding-left: 2rem;
|
||
padding-right: 2rem;
|
||
}
|
||
}
|
||
|
||
/* 元信息:板块固定宽 + 标签吃满剩余 + 可见性 */
|
||
.j13-compose-meta {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: flex-start;
|
||
gap: 0.85rem 1rem;
|
||
}
|
||
.j13-compose-meta-board {
|
||
width: 100%;
|
||
max-width: 220px;
|
||
flex: 0 1 220px;
|
||
}
|
||
.j13-compose-meta-tags {
|
||
flex: 1 1 240px;
|
||
min-width: 200px;
|
||
max-width: 100%;
|
||
}
|
||
.j13-compose-meta-access {
|
||
width: 100%;
|
||
max-width: 200px;
|
||
flex: 0 1 200px;
|
||
}
|
||
|
||
.j13-compose-typebar {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 6px;
|
||
}
|
||
.j13-compose-typeopt {
|
||
width: 100%;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
padding: 2px 3px 2px 2px;
|
||
border-radius: 10px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease;
|
||
}
|
||
.j13-compose-typeopt:hover:not(:has(.j13-compose-typeopt-hit:disabled)) {
|
||
border-color: color-mix(in srgb, var(--accent) 35%, var(--line));
|
||
}
|
||
.j13-compose-typeopt.is-on {
|
||
background: var(--accent-soft);
|
||
border-color: color-mix(in srgb, var(--accent) 42%, var(--line));
|
||
}
|
||
.j13-compose-typeopt.is-on.is-warn {
|
||
background: color-mix(in srgb, var(--danger-soft) 70%, var(--panel));
|
||
border-color: color-mix(in srgb, var(--danger) 36%, var(--line));
|
||
}
|
||
.j13-compose-typeopt:has(.j13-compose-typeopt-hit:disabled):not(.is-on) {
|
||
opacity: 0.45;
|
||
}
|
||
.j13-compose-typeopt-hit {
|
||
flex: 1;
|
||
min-width: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
padding: 5px 4px 5px 6px;
|
||
border: 0;
|
||
border-radius: 8px;
|
||
background: transparent;
|
||
color: inherit;
|
||
text-align: left;
|
||
cursor: pointer;
|
||
appearance: none;
|
||
}
|
||
.j13-compose-typeopt-hit:disabled {
|
||
cursor: not-allowed;
|
||
}
|
||
.j13-compose-typeopt-hit:focus-visible,
|
||
.j13-compose-typeopt-setup:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 1px;
|
||
}
|
||
.j13-compose-typeopt-ico {
|
||
width: 28px;
|
||
height: 28px;
|
||
border-radius: 8px;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
flex-shrink: 0;
|
||
background: var(--panel-2);
|
||
color: var(--ink-2);
|
||
}
|
||
.j13-compose-typeopt.is-on .j13-compose-typeopt-ico {
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
}
|
||
.j13-compose-typeopt.is-on.is-warn .j13-compose-typeopt-ico {
|
||
background: var(--danger);
|
||
color: #fff;
|
||
}
|
||
.j13-compose-typeopt-copy {
|
||
min-width: 0;
|
||
flex: 1;
|
||
}
|
||
.j13-compose-typeopt-label {
|
||
display: block;
|
||
font-size: 13px;
|
||
font-weight: 700;
|
||
line-height: 1.25;
|
||
color: var(--ink);
|
||
letter-spacing: -0.01em;
|
||
}
|
||
.j13-compose-typeopt-hint {
|
||
display: block;
|
||
margin-top: 1px;
|
||
font-size: 11.5px;
|
||
font-weight: 500;
|
||
line-height: 1.3;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-compose-typebar.is-compact {
|
||
gap: 4px;
|
||
}
|
||
.j13-compose-typeopt.is-on .j13-compose-typeopt-hint.is-status {
|
||
color: color-mix(in srgb, var(--accent) 58%, var(--ink-2));
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.j13-compose-typeopt-hint.is-warn {
|
||
color: var(--danger);
|
||
font-weight: 650;
|
||
}
|
||
.j13-compose-typeopt-setup {
|
||
flex-shrink: 0;
|
||
height: 26px;
|
||
padding: 0 9px;
|
||
margin-right: 2px;
|
||
border-radius: 999px;
|
||
border: 1px solid color-mix(in srgb, var(--accent) 32%, var(--line));
|
||
background: color-mix(in srgb, var(--accent-soft) 80%, var(--panel));
|
||
color: var(--accent);
|
||
font-size: 11.5px;
|
||
font-weight: 700;
|
||
letter-spacing: 0.02em;
|
||
line-height: 1;
|
||
white-space: nowrap;
|
||
cursor: pointer;
|
||
}
|
||
.j13-compose-typeopt-setup:hover {
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
border-color: var(--accent);
|
||
}
|
||
.j13-compose-typeopt-setup.is-warn {
|
||
border-color: color-mix(in srgb, var(--danger) 40%, var(--line));
|
||
background: color-mix(in srgb, var(--danger-soft) 85%, var(--panel));
|
||
color: var(--danger);
|
||
}
|
||
.j13-compose-typeopt-setup.is-warn:hover {
|
||
background: var(--danger);
|
||
color: #fff;
|
||
border-color: var(--danger);
|
||
}
|
||
.dark .j13-compose-typeopt.is-on.is-warn .j13-compose-typeopt-ico,
|
||
.dark .j13-compose-typeopt-setup.is-warn:hover {
|
||
color: #1a0c0b;
|
||
}
|
||
.j13-compose-typechip {
|
||
height: 34px;
|
||
padding: 0 14px;
|
||
border-radius: 999px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
color: var(--ink-2);
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease;
|
||
}
|
||
.j13-compose-typechip:hover:not(:disabled) {
|
||
border-color: color-mix(in srgb, var(--accent) 35%, var(--line));
|
||
color: var(--accent);
|
||
}
|
||
.j13-compose-typechip.is-on {
|
||
background: var(--accent-soft);
|
||
border-color: color-mix(in srgb, var(--accent) 40%, var(--line));
|
||
color: var(--accent);
|
||
}
|
||
.j13-compose-typechip:disabled:not(.is-on) {
|
||
opacity: 0.45;
|
||
cursor: not-allowed;
|
||
}
|
||
.j13-compose-typepanel {
|
||
padding: 12px 14px;
|
||
border-radius: 12px;
|
||
border: 1px dashed color-mix(in srgb, var(--accent) 28%, var(--line));
|
||
background: color-mix(in srgb, var(--accent-soft) 55%, var(--panel));
|
||
}
|
||
.j13-lottery-prize-table-wrap {
|
||
overflow-x: auto;
|
||
border-radius: 10px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
}
|
||
.j13-lottery-prize-table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
font-size: 13.5px;
|
||
}
|
||
.j13-lottery-prize-table th,
|
||
.j13-lottery-prize-table td {
|
||
padding: 8px 10px;
|
||
text-align: left;
|
||
vertical-align: middle;
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.j13-lottery-prize-table th {
|
||
font-weight: 600;
|
||
color: var(--ink-2);
|
||
background: var(--panel-2);
|
||
white-space: nowrap;
|
||
}
|
||
.j13-lottery-prize-table tbody tr:last-child td {
|
||
border-bottom: none;
|
||
}
|
||
.j13-lottery-prize-table .col-idx {
|
||
width: 2.5rem;
|
||
color: var(--ink-3);
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.j13-lottery-prize-table .col-count {
|
||
width: 6.5rem;
|
||
}
|
||
.j13-lottery-prize-table .col-actions {
|
||
width: 5.25rem;
|
||
text-align: right;
|
||
}
|
||
.j13-lottery-prize-table .col-actions > span {
|
||
display: inline-flex;
|
||
}
|
||
.j13-lottery-prize-table .col-actions .btn:disabled {
|
||
pointer-events: none;
|
||
}
|
||
.j13-lottery-prize-table .j13-compose-field {
|
||
width: 100%;
|
||
padding: 7px 10px;
|
||
font-size: 13.5px;
|
||
}
|
||
.j13-lottery-prize-table .j13-compose-field-count {
|
||
width: 100%;
|
||
max-width: 5.5rem;
|
||
}
|
||
.j13-compose-attach-row {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
padding: 10px 12px;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
}
|
||
.j13-compose-attach-section {
|
||
background: var(--panel);
|
||
border-color: color-mix(in srgb, var(--line) 80%, var(--accent) 20%);
|
||
}
|
||
.j13-compose-attach-title {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.45rem;
|
||
font-size: 13px !important;
|
||
letter-spacing: 0.02em;
|
||
color: var(--ink-2) !important;
|
||
}
|
||
.j13-compose-attach-badge {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
padding: 0.1rem 0.45rem;
|
||
border-radius: 999px;
|
||
font-size: 11.5px;
|
||
font-weight: 700;
|
||
font-variant-numeric: tabular-nums;
|
||
color: var(--accent);
|
||
background: var(--accent-soft);
|
||
}
|
||
.j13-compose-drop {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 0.35rem;
|
||
min-height: 7.5rem;
|
||
padding: 1.15rem 1rem;
|
||
border-radius: 14px;
|
||
border: 1.5px dashed color-mix(in srgb, var(--accent) 42%, var(--line));
|
||
background: color-mix(in srgb, var(--accent-soft) 55%, var(--panel));
|
||
cursor: pointer;
|
||
text-align: center;
|
||
transition: border-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;
|
||
}
|
||
.j13-compose-drop:hover,
|
||
.j13-compose-drop:focus-visible {
|
||
border-color: var(--accent);
|
||
outline: none;
|
||
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
|
||
}
|
||
.j13-compose-drop.is-over {
|
||
border-color: var(--accent);
|
||
border-style: solid;
|
||
background: color-mix(in srgb, var(--accent-soft) 85%, var(--panel));
|
||
}
|
||
.j13-compose-drop.is-disabled {
|
||
opacity: 0.55;
|
||
pointer-events: none;
|
||
}
|
||
.j13-compose-drop-icon {
|
||
color: var(--accent);
|
||
opacity: 0.85;
|
||
}
|
||
.j13-compose-drop-lead {
|
||
margin: 0;
|
||
font-size: 14px;
|
||
font-weight: 650;
|
||
color: var(--ink);
|
||
}
|
||
.j13-compose-drop-hint {
|
||
margin: 0;
|
||
font-size: 12px;
|
||
line-height: 1.45;
|
||
color: var(--ink-3);
|
||
max-width: 36rem;
|
||
}
|
||
.j13-compose-att-list,
|
||
.j13-compose-att-queue {
|
||
list-style: none;
|
||
margin: 0;
|
||
padding: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.55rem;
|
||
}
|
||
.j13-compose-att-pending {
|
||
margin-top: 0.75rem;
|
||
padding: 12px;
|
||
border-radius: 14px;
|
||
border: 1.5px solid color-mix(in srgb, var(--accent) 40%, var(--line));
|
||
background: color-mix(in srgb, var(--accent-soft) 70%, var(--panel));
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.65rem;
|
||
}
|
||
.j13-compose-att-pending-head {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 0.75rem;
|
||
flex-wrap: wrap;
|
||
}
|
||
.j13-compose-att-pending-title {
|
||
margin: 0;
|
||
font-size: 13.5px;
|
||
font-weight: 600;
|
||
color: var(--ink);
|
||
}
|
||
.j13-compose-att-upload-btn {
|
||
width: 100%;
|
||
justify-content: center;
|
||
gap: 0.45rem;
|
||
min-height: 42px;
|
||
font-size: 14.5px;
|
||
font-weight: 600;
|
||
/* 次于发布主 CTA:白底 + 实线 accent,在 soft 待传区里仍清晰 */
|
||
color: var(--accent);
|
||
background: var(--panel);
|
||
border-color: var(--accent);
|
||
border-width: 1.5px;
|
||
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.06),
|
||
0 2px 8px color-mix(in srgb, var(--accent) 14%, transparent);
|
||
}
|
||
.j13-compose-att-upload-btn:hover:not(:disabled) {
|
||
color: var(--accent-on);
|
||
background: var(--accent);
|
||
border-color: var(--accent);
|
||
}
|
||
.j13-compose-att-upload-btn:active:not(:disabled) {
|
||
background: var(--accent-hi);
|
||
border-color: var(--accent-hi);
|
||
color: var(--accent-on);
|
||
}
|
||
.j13-compose-att-card {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
padding: 10px 12px;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
}
|
||
.j13-compose-att-card.is-error {
|
||
border-color: color-mix(in srgb, var(--danger, #c44) 45%, var(--line));
|
||
}
|
||
.j13-compose-att-name {
|
||
font-size: 13.5px;
|
||
font-weight: 600;
|
||
color: var(--ink);
|
||
}
|
||
.j13-compose-att-bar {
|
||
margin-top: 6px;
|
||
height: 4px;
|
||
border-radius: 999px;
|
||
background: var(--panel-2);
|
||
overflow: hidden;
|
||
}
|
||
.j13-compose-att-bar > span {
|
||
display: block;
|
||
height: 100%;
|
||
border-radius: inherit;
|
||
background: var(--accent);
|
||
transition: width 0.2s ease;
|
||
}
|
||
.j13-ext-editor.is-disabled {
|
||
opacity: 0.55;
|
||
pointer-events: none;
|
||
}
|
||
.j13-ext-warn {
|
||
margin: 0 0 0.75rem;
|
||
padding: 0.55rem 0.75rem;
|
||
border-radius: 10px;
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
color: color-mix(in srgb, var(--gold) 85%, var(--ink));
|
||
background: color-mix(in srgb, var(--gold) 14%, var(--panel));
|
||
border: 1px solid color-mix(in srgb, var(--gold) 28%, var(--line));
|
||
}
|
||
.j13-ext-groups {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 0.4rem;
|
||
margin-bottom: 0.65rem;
|
||
}
|
||
.j13-ext-wall {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 0.4rem;
|
||
align-items: center;
|
||
min-height: 2.75rem;
|
||
padding: 0.55rem 0.65rem;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel-2);
|
||
cursor: text;
|
||
}
|
||
.j13-ext-chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.2rem;
|
||
padding: 0.2rem 0.35rem 0.2rem 0.55rem;
|
||
border-radius: 999px;
|
||
font-size: 12.5px;
|
||
font-weight: 650;
|
||
font-variant-numeric: tabular-nums;
|
||
color: var(--ink);
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
}
|
||
.j13-ext-chip-x {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 1.15rem;
|
||
height: 1.15rem;
|
||
border: 0;
|
||
border-radius: 999px;
|
||
background: transparent;
|
||
color: var(--ink-3);
|
||
cursor: pointer;
|
||
}
|
||
.j13-ext-chip-x:hover {
|
||
color: var(--ink);
|
||
background: color-mix(in srgb, var(--ink) 8%, transparent);
|
||
}
|
||
.j13-ext-input-wrap {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.25rem;
|
||
min-width: 9rem;
|
||
flex: 1 1 8rem;
|
||
}
|
||
.j13-ext-input {
|
||
flex: 1;
|
||
min-width: 0;
|
||
border: 0;
|
||
outline: none;
|
||
background: transparent;
|
||
font-size: 13px;
|
||
color: var(--ink);
|
||
padding: 0.2rem 0;
|
||
}
|
||
.j13-compose-att-paid {
|
||
color: var(--gold);
|
||
font-weight: 650;
|
||
}
|
||
.j13-compose-att-paid .j13-compose-field {
|
||
color: var(--gold);
|
||
font-weight: 700;
|
||
font-variant-numeric: tabular-nums;
|
||
border-color: color-mix(in srgb, var(--gold) 38%, var(--line-2));
|
||
}
|
||
.j13-interact-card {
|
||
padding: 14px 16px;
|
||
border-radius: 14px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
}
|
||
|
||
/* 抽奖卡:对齐截图结构,落在站点石墨/令牌体系内 */
|
||
/* 类型帖交互卡(投票 / 悬赏 / 抽奖)共用壳 */
|
||
.j13-typed-card {
|
||
padding: 16px 18px 14px;
|
||
}
|
||
.j13-typed-head {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 10px 14px;
|
||
}
|
||
.j13-typed-head-main {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 10px;
|
||
min-width: 0;
|
||
}
|
||
.j13-typed-title {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 7px;
|
||
margin: 0;
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
letter-spacing: -0.01em;
|
||
color: var(--ink);
|
||
}
|
||
.j13-typed-title svg {
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-typed-title.is-question {
|
||
color: var(--ink);
|
||
}
|
||
.j13-typed-title.is-poll {
|
||
color: var(--accent);
|
||
}
|
||
.j13-typed-title.is-bounty {
|
||
color: var(--clay);
|
||
}
|
||
.j13-typed-title.is-lottery {
|
||
color: var(--gold);
|
||
}
|
||
.j13-typed-actions {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
}
|
||
.j13-typed-actions-row {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
margin-top: 12px;
|
||
}
|
||
.j13-typed-meta,
|
||
.j13-typed-empty {
|
||
margin: 8px 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.5;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-typed-foot {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 8px 16px;
|
||
margin-top: 14px;
|
||
padding-top: 12px;
|
||
border-top: 1px solid var(--line);
|
||
font-size: 12.5px;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-typed-foot-status {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
font-weight: 550;
|
||
}
|
||
.j13-typed-foot-status svg {
|
||
flex-shrink: 0;
|
||
color: var(--ink-2);
|
||
}
|
||
.j13-typed-foot-time {
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.j13-bounty-points {
|
||
font-weight: 700;
|
||
color: var(--clay);
|
||
}
|
||
.j13-poll-options {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 8px;
|
||
margin: 12px 0 0;
|
||
padding: 0;
|
||
list-style: none;
|
||
}
|
||
.j13-poll-option {
|
||
position: relative;
|
||
display: block;
|
||
width: 100%;
|
||
text-align: left;
|
||
overflow: hidden;
|
||
padding: 10px 12px;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
transition: border-color 0.15s ease, background 0.15s ease;
|
||
}
|
||
.j13-poll-option:disabled {
|
||
cursor: default;
|
||
}
|
||
.j13-poll-option:not(:disabled):hover {
|
||
border-color: color-mix(in srgb, var(--accent) 35%, var(--line));
|
||
}
|
||
.j13-poll-option.is-on {
|
||
border-color: var(--accent);
|
||
background: var(--accent-soft);
|
||
}
|
||
.j13-poll-option-bar {
|
||
position: absolute;
|
||
inset: 0 auto 0 0;
|
||
opacity: 0.28;
|
||
background: var(--accent);
|
||
pointer-events: none;
|
||
}
|
||
.j13-poll-option-row {
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
.j13-poll-option-text {
|
||
font-size: 14px;
|
||
color: var(--ink);
|
||
}
|
||
.j13-poll-option-stat {
|
||
flex-shrink: 0;
|
||
font-size: 12.5px;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-poll-voters {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px;
|
||
margin: 6px 0 0;
|
||
padding: 0 2px;
|
||
list-style: none;
|
||
}
|
||
.j13-poll-voter {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
padding: 2px 8px 2px 3px;
|
||
border-radius: 999px;
|
||
font-size: 12px;
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
text-decoration: none;
|
||
}
|
||
.j13-poll-voter:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.j13-lottery-card {
|
||
padding: 16px 18px 14px;
|
||
}
|
||
.j13-lottery-head {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 10px 14px;
|
||
}
|
||
.j13-lottery-head-main {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 10px;
|
||
min-width: 0;
|
||
}
|
||
.j13-lottery-title {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 7px;
|
||
margin: 0;
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
letter-spacing: -0.01em;
|
||
color: var(--gold);
|
||
}
|
||
.j13-lottery-title svg {
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-lottery-actions {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
}
|
||
.j13-lottery-meta,
|
||
.j13-lottery-empty {
|
||
margin: 8px 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.5;
|
||
color: var(--ink-3);
|
||
}
|
||
/* 截止倒计时:投票 / 悬赏 / 抽奖共用 */
|
||
.j13-deadline-countdown {
|
||
margin-top: 12px;
|
||
padding: 12px 14px 11px;
|
||
border-radius: 14px;
|
||
border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--line));
|
||
background: color-mix(in srgb, var(--accent-soft) 55%, var(--panel));
|
||
}
|
||
.j13-deadline-countdown.is-expired {
|
||
border-color: color-mix(in srgb, var(--ink-3) 35%, var(--line));
|
||
background: color-mix(in srgb, var(--tint) 70%, var(--panel));
|
||
}
|
||
.j13-deadline-countdown-label {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
margin: 0 0 8px;
|
||
font-size: 12.5px;
|
||
font-weight: 650;
|
||
color: var(--accent);
|
||
}
|
||
.j13-deadline-countdown.is-expired .j13-deadline-countdown-label {
|
||
color: var(--ink-2);
|
||
}
|
||
.j13-deadline-countdown-digits {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: flex-end;
|
||
gap: 8px;
|
||
}
|
||
.j13-deadline-countdown-unit {
|
||
display: inline-flex;
|
||
align-items: baseline;
|
||
gap: 4px;
|
||
padding: 6px 10px 5px;
|
||
border-radius: 10px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
box-shadow: var(--shadow-sm);
|
||
}
|
||
.j13-deadline-countdown-unit.is-sec {
|
||
border-color: color-mix(in srgb, var(--accent) 28%, var(--line));
|
||
background: color-mix(in srgb, var(--accent-soft) 45%, var(--panel));
|
||
}
|
||
.j13-deadline-countdown-num {
|
||
font-family: var(--font-mono);
|
||
font-size: clamp(1.35rem, 3.2vw, 1.75rem);
|
||
font-weight: 750;
|
||
line-height: 1;
|
||
letter-spacing: -0.02em;
|
||
color: var(--ink);
|
||
}
|
||
.j13-deadline-countdown-suf {
|
||
font-size: 12px;
|
||
font-weight: 650;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-deadline-countdown-unit.is-sec .j13-deadline-countdown-num {
|
||
color: var(--accent);
|
||
}
|
||
.j13-deadline-countdown-expired {
|
||
margin: 0;
|
||
font-size: 1.15rem;
|
||
font-weight: 750;
|
||
letter-spacing: -0.01em;
|
||
color: var(--ink);
|
||
}
|
||
.j13-deadline-countdown-ends {
|
||
margin: 8px 0 0;
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.dark .j13-deadline-countdown-unit {
|
||
background: var(--panel-2);
|
||
box-shadow: none;
|
||
}
|
||
.j13-deadline-picker {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 10px;
|
||
}
|
||
.j13-deadline-picker-head {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: flex-start;
|
||
gap: 8px;
|
||
}
|
||
.j13-deadline-picker-label {
|
||
font-size: 13px;
|
||
font-weight: 650;
|
||
color: var(--ink);
|
||
}
|
||
.j13-deadline-picker-modes {
|
||
display: inline-flex;
|
||
align-self: flex-start;
|
||
gap: 2px;
|
||
padding: 3px;
|
||
border-radius: 999px;
|
||
background: var(--tint);
|
||
border: 1px solid color-mix(in srgb, var(--line) 80%, transparent);
|
||
}
|
||
.j13-deadline-mode {
|
||
border: 0;
|
||
background: transparent;
|
||
color: var(--ink-2);
|
||
font-size: 12.5px;
|
||
font-weight: 600;
|
||
padding: 5px 12px;
|
||
border-radius: 999px;
|
||
cursor: pointer;
|
||
transition: background 0.12s ease, color 0.12s ease, box-shadow 0.12s ease;
|
||
}
|
||
.j13-deadline-mode.is-on {
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
box-shadow: var(--shadow-sm);
|
||
}
|
||
.j13-deadline-mode:hover:not(:disabled):not(.is-on) {
|
||
color: var(--ink);
|
||
}
|
||
.j13-deadline-mode:disabled {
|
||
opacity: 0.55;
|
||
cursor: not-allowed;
|
||
}
|
||
.j13-deadline-presets,
|
||
.j13-deadline-quick-chips {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 7px;
|
||
}
|
||
.j13-deadline-chip {
|
||
height: 32px;
|
||
padding: 0 13px;
|
||
border-radius: 999px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
color: var(--ink-2);
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
font-variant-numeric: tabular-nums;
|
||
transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease;
|
||
}
|
||
.j13-deadline-chip-sm {
|
||
height: 28px;
|
||
padding: 0 10px;
|
||
font-size: 12.5px;
|
||
}
|
||
.j13-deadline-chip:hover:not(:disabled) {
|
||
border-color: color-mix(in srgb, var(--accent) 35%, var(--line));
|
||
color: var(--accent);
|
||
}
|
||
.j13-deadline-chip.is-on {
|
||
background: var(--accent-soft);
|
||
border-color: color-mix(in srgb, var(--accent) 40%, var(--line));
|
||
color: var(--accent);
|
||
}
|
||
.j13-deadline-chip:disabled {
|
||
opacity: 0.45;
|
||
cursor: not-allowed;
|
||
}
|
||
.j13-deadline-custom {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 10px;
|
||
}
|
||
.j13-deadline-fields {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: stretch;
|
||
gap: 8px;
|
||
}
|
||
.j13-deadline-field {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
/* 合适宽度:比半行窄、比内容贴边宽,留一点点击余量 */
|
||
width: 11.75rem;
|
||
max-width: 100%;
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
padding: 8px 10px;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--control-border);
|
||
background: var(--panel);
|
||
cursor: pointer;
|
||
}
|
||
.j13-deadline-field:last-child {
|
||
width: 8.75rem;
|
||
}
|
||
.j13-deadline-field-icon {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 28px;
|
||
height: 28px;
|
||
border-radius: 8px;
|
||
flex-shrink: 0;
|
||
color: var(--accent);
|
||
background: var(--accent-soft);
|
||
}
|
||
.j13-deadline-field-meta {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1px;
|
||
min-width: 0;
|
||
flex: 1 1 auto;
|
||
position: relative;
|
||
}
|
||
.j13-deadline-field-label {
|
||
font-size: 11px;
|
||
font-weight: 650;
|
||
letter-spacing: 0.04em;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-deadline-field-input {
|
||
display: block;
|
||
width: 100%;
|
||
min-width: 0;
|
||
border: 0;
|
||
padding: 0;
|
||
margin: 0;
|
||
background: transparent;
|
||
color: var(--ink);
|
||
font-size: 13.5px;
|
||
font-weight: 600;
|
||
font-variant-numeric: tabular-nums;
|
||
font-family: var(--font-sans);
|
||
outline: none;
|
||
color-scheme: light dark;
|
||
}
|
||
.j13-deadline-field-input:disabled {
|
||
opacity: 0.55;
|
||
cursor: not-allowed;
|
||
}
|
||
/* 左侧已有图标:隐藏原生指示器,避免双图标与多余空白 */
|
||
.j13-deadline-field-input::-webkit-calendar-picker-indicator {
|
||
opacity: 0;
|
||
position: absolute;
|
||
inset: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
cursor: pointer;
|
||
}
|
||
.j13-deadline-quick {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 8px 10px;
|
||
}
|
||
.j13-deadline-quick-label {
|
||
flex-shrink: 0;
|
||
font-size: 12px;
|
||
font-weight: 650;
|
||
color: var(--ink-3);
|
||
min-width: 2em;
|
||
}
|
||
.j13-deadline-preview {
|
||
margin: 0;
|
||
padding: 9px 12px;
|
||
border-radius: 10px;
|
||
background: color-mix(in srgb, var(--accent-soft) 70%, var(--panel));
|
||
border: 1px solid color-mix(in srgb, var(--accent) 18%, var(--line));
|
||
color: var(--ink-2);
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
}
|
||
.j13-deadline-preview strong {
|
||
color: var(--ink);
|
||
font-weight: 650;
|
||
}
|
||
.j13-deadline-hint {
|
||
margin: 0;
|
||
font-size: 12px;
|
||
line-height: 1.45;
|
||
color: var(--ink-3);
|
||
}
|
||
/* 奖品 / 中奖者:横向排布,放不下换行 */
|
||
.j13-lottery-prize-row,
|
||
.j13-lottery-winner-row {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: stretch;
|
||
gap: 8px 10px;
|
||
margin: 12px 0 0;
|
||
padding: 0;
|
||
list-style: none;
|
||
}
|
||
.j13-lottery-prize-row > li,
|
||
.j13-lottery-winner-row > li {
|
||
min-width: 0;
|
||
}
|
||
/* 奖品胶囊:淡金底 + 深金字 + 奖杯徽标 */
|
||
.j13-lottery-prize-chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
max-width: min(100%, 28rem);
|
||
padding: 6px 13px 6px 11px;
|
||
border-radius: 999px;
|
||
font-size: 13px;
|
||
font-weight: 650;
|
||
line-height: 1.25;
|
||
background: var(--gold-soft);
|
||
color: var(--gold);
|
||
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--gold) 28%, transparent);
|
||
}
|
||
.j13-lottery-prize-chip svg {
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-lottery-prize-chip-text {
|
||
min-width: 0;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
.j13-lottery-prize-chip-count {
|
||
margin-left: 0.3em;
|
||
font-variant-numeric: tabular-nums;
|
||
font-weight: 700;
|
||
}
|
||
.j13-lottery-winners-label {
|
||
margin: 14px 0 0;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-lottery-winner-row {
|
||
margin-top: 8px;
|
||
}
|
||
/* 中奖者:横向胶囊卡片,内容定宽、可换行 */
|
||
.j13-lottery-winner {
|
||
display: grid;
|
||
grid-template-columns: auto minmax(0, 1fr);
|
||
align-items: center;
|
||
column-gap: 10px;
|
||
width: min(100%, 15.5rem);
|
||
min-height: 52px;
|
||
padding: 8px 14px 8px 8px;
|
||
border-radius: 14px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
box-shadow: var(--shadow-sm);
|
||
}
|
||
.j13-lottery-winner-avatar {
|
||
grid-column: 1;
|
||
}
|
||
.j13-lottery-winner-body {
|
||
grid-column: 2;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 2px;
|
||
min-width: 0;
|
||
}
|
||
.j13-lottery-winner-name {
|
||
display: block;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
font-size: 13px;
|
||
font-weight: 650;
|
||
line-height: 1.25;
|
||
color: var(--ink);
|
||
text-decoration: none;
|
||
}
|
||
.j13-lottery-winner-name:hover {
|
||
color: var(--accent);
|
||
}
|
||
.j13-lottery-winner-prize {
|
||
display: block;
|
||
min-width: 0;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
font-size: 11.5px;
|
||
font-weight: 600;
|
||
color: var(--gold);
|
||
}
|
||
.dark .j13-lottery-winner {
|
||
background: var(--panel-2);
|
||
box-shadow: none;
|
||
}
|
||
.j13-lottery-foot {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 8px 16px;
|
||
margin-top: 14px;
|
||
padding-top: 12px;
|
||
border-top: 1px solid var(--line);
|
||
font-size: 12.5px;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-lottery-foot-status {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
font-weight: 550;
|
||
}
|
||
.j13-lottery-foot-status svg {
|
||
flex-shrink: 0;
|
||
color: var(--ink-2);
|
||
}
|
||
.j13-lottery-foot-time {
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.j13-interact-card.is-unsolved {
|
||
background: color-mix(in srgb, var(--danger) 7%, var(--panel));
|
||
border-color: color-mix(in srgb, var(--danger) 22%, var(--line));
|
||
}
|
||
.j13-interact-card.is-solved {
|
||
background: color-mix(in srgb, var(--ok) 8%, var(--panel));
|
||
border-color: color-mix(in srgb, var(--ok) 22%, var(--line));
|
||
}
|
||
.dark .j13-interact-card.is-unsolved {
|
||
background: color-mix(in srgb, var(--danger) 14%, var(--panel));
|
||
border-color: color-mix(in srgb, var(--danger) 32%, var(--line));
|
||
}
|
||
.dark .j13-interact-card.is-solved {
|
||
background: color-mix(in srgb, var(--ok) 14%, var(--panel));
|
||
border-color: color-mix(in srgb, var(--ok) 30%, var(--line));
|
||
}
|
||
|
||
/* 正文下方已采纳答案:与类型帖 typed-card 同框,配色克制 */
|
||
.j13-accepted-answer {
|
||
margin-top: 1.75rem;
|
||
}
|
||
.j13-accepted-answer.is-question,
|
||
.j13-accepted-answer.is-bounty {
|
||
/* 覆盖旧绿底/左边条;沿用 interact-card 面板 */
|
||
border-color: var(--line);
|
||
background: var(--panel);
|
||
box-shadow: none;
|
||
}
|
||
.j13-accepted-answer__author {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
min-width: 0;
|
||
margin-top: 12px;
|
||
}
|
||
.j13-accepted-answer__chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
flex-shrink: 0;
|
||
padding: 3px 9px;
|
||
border-radius: 999px;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
background: var(--ok-soft);
|
||
color: var(--ok);
|
||
}
|
||
.j13-accepted-answer__body {
|
||
min-width: 0;
|
||
margin-top: 12px;
|
||
padding-top: 12px;
|
||
border-top: 1px solid var(--line);
|
||
}
|
||
/* 正文下方类型特殊块(投票/悬赏/抽奖/问答状态) */
|
||
.j13-interact-below {
|
||
margin-top: 1.75rem;
|
||
}
|
||
.j13-interact-below + .j13-accepted-answer,
|
||
.j13-interact-below + .j13-question-below {
|
||
margin-top: 1rem;
|
||
}
|
||
.j13-question-below {
|
||
margin-top: 1.75rem;
|
||
}
|
||
|
||
.j13-compose-field {
|
||
width: 100%;
|
||
padding: 10px 14px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--control-border);
|
||
border-radius: 12px;
|
||
color: var(--ink);
|
||
font-size: 15px;
|
||
font-family: var(--font-sans);
|
||
}
|
||
.j13-compose-field::placeholder { color: var(--ink-3); }
|
||
.j13-compose-field:disabled {
|
||
opacity: 0.65;
|
||
cursor: not-allowed;
|
||
}
|
||
.j13-compose-field-invalid {
|
||
border-color: color-mix(in srgb, var(--danger) 55%, var(--line));
|
||
box-shadow: 0 0 0 2px var(--focus-glow-danger);
|
||
}
|
||
|
||
.j13-compose-title {
|
||
width: 100%;
|
||
padding: 0.25rem 0 0.75rem;
|
||
margin: 0;
|
||
border: 0;
|
||
border-bottom: 1px solid var(--line);
|
||
border-radius: 0;
|
||
background: transparent;
|
||
color: var(--ink);
|
||
font-family: var(--font-sans);
|
||
font-size: clamp(1.4rem, 2.5vw, 1.75rem);
|
||
font-weight: 800;
|
||
letter-spacing: -0.02em;
|
||
line-height: 1.3;
|
||
transition: border-color 0.15s ease;
|
||
}
|
||
.j13-compose-title::placeholder {
|
||
color: var(--ink-3);
|
||
font-weight: 500;
|
||
}
|
||
.j13-compose-title:focus {
|
||
outline: none;
|
||
border-bottom-color: var(--accent);
|
||
box-shadow: none;
|
||
}
|
||
|
||
/* 标签:对齐私信搜索 —— 同高、同聚焦,输入无内层描边;白底避免灰块 */
|
||
.j13-tag-field {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 6px;
|
||
min-height: 2.5rem;
|
||
padding: 4px 12px;
|
||
cursor: text;
|
||
background: var(--panel);
|
||
border: 1px solid var(--control-border);
|
||
border-radius: 12px;
|
||
}
|
||
.j13-tag-field-input,
|
||
.j13-tag-field-input:focus,
|
||
.j13-tag-field-input:focus-visible {
|
||
outline: none !important;
|
||
box-shadow: none !important;
|
||
border: 0 !important;
|
||
background: transparent !important;
|
||
}
|
||
|
||
.j13-board-picker { position: relative; }
|
||
.j13-board-trigger {
|
||
width: 100%;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
min-height: 3.25rem;
|
||
padding: 8px 10px 8px 8px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--control-border);
|
||
border-radius: 12px;
|
||
color: var(--ink);
|
||
text-align: left;
|
||
cursor: pointer;
|
||
}
|
||
.j13-board-trigger:focus { outline: none; }
|
||
.j13-board-trigger:disabled {
|
||
opacity: 0.65;
|
||
cursor: not-allowed;
|
||
}
|
||
/* 未选:沿用中性边框;仅校验失败后用固定警示红 */
|
||
.j13-board-trigger.is-invalid {
|
||
border-color: #dc2626;
|
||
background: color-mix(in srgb, #dc2626 8%, var(--panel));
|
||
}
|
||
.j13-board-trigger.is-invalid .j13-board-trigger-hint {
|
||
color: #dc2626;
|
||
font-weight: 650;
|
||
}
|
||
html.dark .j13-board-trigger.is-invalid {
|
||
border-color: #f87171;
|
||
background: color-mix(in srgb, #f87171 12%, var(--panel));
|
||
}
|
||
html.dark .j13-board-trigger.is-invalid .j13-board-trigger-hint {
|
||
color: #f87171;
|
||
}
|
||
.j13-board-trigger-copy {
|
||
min-width: 0;
|
||
flex: 1;
|
||
}
|
||
.j13-board-trigger-name {
|
||
display: block;
|
||
font-size: 13.5px;
|
||
font-weight: 700;
|
||
line-height: 1.3;
|
||
letter-spacing: -0.01em;
|
||
}
|
||
.j13-board-trigger-hint {
|
||
display: block;
|
||
margin-top: 2px;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
line-height: 1.35;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-board-trigger-ico {
|
||
width: 32px;
|
||
height: 32px;
|
||
border-radius: 9px;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 13px;
|
||
font-weight: 800;
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-board-trigger-ico.is-placeholder {
|
||
background: var(--panel-2);
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-board-option .j13-board-trigger-ico {
|
||
width: 24px;
|
||
height: 24px;
|
||
border-radius: 7px;
|
||
font-size: 11px;
|
||
}
|
||
.j13-compose-req {
|
||
margin-left: 6px;
|
||
font-size: 11px;
|
||
font-weight: 700;
|
||
letter-spacing: 0.06em;
|
||
color: var(--accent);
|
||
vertical-align: 0.05em;
|
||
}
|
||
.j13-board-menu {
|
||
position: absolute;
|
||
z-index: 40;
|
||
top: calc(100% + 6px);
|
||
left: 0;
|
||
right: 0;
|
||
min-width: 100%;
|
||
max-height: 280px;
|
||
overflow-y: auto;
|
||
padding: 6px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: 14px;
|
||
box-shadow: var(--shadow-lg);
|
||
}
|
||
.j13-board-option {
|
||
width: 100%;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
padding: 8px 10px;
|
||
border-radius: 10px;
|
||
color: var(--ink);
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
text-align: left;
|
||
cursor: pointer;
|
||
transition: background 0.12s ease;
|
||
}
|
||
.j13-board-option:hover,
|
||
.j13-board-option.is-active,
|
||
.j13-board-option.is-selected {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
.j13-board-badge {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
height: 2.5rem;
|
||
min-height: 2.5rem;
|
||
padding: 0 12px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: 12px;
|
||
color: var(--ink-2);
|
||
font-size: 14px;
|
||
font-weight: 600;
|
||
}
|
||
|
||
/* 正文画布占满剩余高度 */
|
||
.j13-compose-canvas {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
}
|
||
.j13-md-editor {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
margin-top: 0;
|
||
border: 0;
|
||
background: transparent;
|
||
overflow: visible;
|
||
}
|
||
.j13-md-editor.is-fullscreen {
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: 80;
|
||
margin: 0;
|
||
padding: 1rem 1.25rem 1.25rem;
|
||
background: var(--panel);
|
||
border: 0;
|
||
box-shadow: var(--shadow-lg);
|
||
}
|
||
.j13-md-toolbar {
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 2px;
|
||
padding: 4px 0 12px;
|
||
border-bottom: 1px solid var(--line);
|
||
background: transparent;
|
||
}
|
||
.j13-md-tool {
|
||
width: 34px;
|
||
height: 34px;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border-radius: 10px;
|
||
color: var(--ink-2);
|
||
transition: background 0.12s ease, color 0.12s ease;
|
||
/* 作为 flex 子元素时保持固定宽度,避免被压缩或按内容计算,
|
||
否则窄屏下直接挂在 .j13-md-tool-groups 内的按钮会塌缩成图标宽度(如 15px),
|
||
而被 .j13-md-popover-anchor 包裹的按钮保持 34px,导致整行按钮宽度不一致 */
|
||
flex: 0 0 auto;
|
||
}
|
||
.j13-md-tool:hover:not(:disabled) {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
.j13-md-tool:disabled { opacity: 0.4; }
|
||
.j13-md-tool.is-active {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
.j13-md-sep {
|
||
width: 1px;
|
||
height: 18px;
|
||
margin: 0 4px;
|
||
background: var(--line);
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-md-popover-anchor {
|
||
position: relative;
|
||
}
|
||
.j13-md-popover {
|
||
position: absolute;
|
||
top: calc(100% + 6px);
|
||
left: 0;
|
||
z-index: 40;
|
||
min-width: 168px;
|
||
padding: 6px;
|
||
border-radius: 12px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
box-shadow: var(--shadow-lg);
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 2px;
|
||
}
|
||
.j13-md-popover-wide {
|
||
min-width: 200px;
|
||
max-height: 280px;
|
||
}
|
||
.j13-md-popover-form {
|
||
min-width: 260px;
|
||
padding: 10px;
|
||
gap: 8px;
|
||
}
|
||
.j13-md-popover button[role="menuitem"],
|
||
.j13-md-menu-item {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
width: 100%;
|
||
text-align: left;
|
||
padding: 8px 10px;
|
||
border-radius: 8px;
|
||
border: 0;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
line-height: 1.35;
|
||
cursor: pointer;
|
||
/* 强制可读对比:避免暗色下系统 buttonface 浅底 + 浅字 */
|
||
color: var(--ink) !important;
|
||
background: transparent !important;
|
||
}
|
||
.j13-md-popover button[role="menuitem"]:hover,
|
||
.j13-md-menu-item:hover {
|
||
background: var(--panel-2) !important;
|
||
color: var(--ink) !important;
|
||
}
|
||
.j13-md-menu-item:disabled,
|
||
.j13-md-menu-item[aria-disabled="true"] {
|
||
opacity: 0.45;
|
||
cursor: not-allowed;
|
||
color: var(--ink-3) !important;
|
||
}
|
||
.j13-md-menu-item:disabled:hover,
|
||
.j13-md-menu-item[aria-disabled="true"]:hover {
|
||
background: transparent !important;
|
||
color: var(--ink-3) !important;
|
||
}
|
||
.j13-md-menu-item-hint {
|
||
margin-left: auto;
|
||
font-size: 11.5px;
|
||
font-weight: 500;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-md-popover button[role="menuitem"]:focus-visible,
|
||
.j13-md-menu-item:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 0;
|
||
}
|
||
.j13-md-popover-input {
|
||
width: 100%;
|
||
height: 34px;
|
||
padding: 0 10px;
|
||
border-radius: 8px;
|
||
border: 1px solid var(--control-border);
|
||
background: var(--bg);
|
||
color: var(--ink);
|
||
font-size: 13px;
|
||
}
|
||
.j13-md-popover-list {
|
||
max-height: 200px;
|
||
overflow-y: auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1px;
|
||
}
|
||
.j13-md-popover-list button {
|
||
text-align: left;
|
||
padding: 7px 10px;
|
||
border-radius: 8px;
|
||
border: 0;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
font-size: 12.5px;
|
||
font-family: var(--font-mono, ui-monospace, monospace);
|
||
cursor: pointer;
|
||
color: var(--ink-2) !important;
|
||
background: transparent !important;
|
||
}
|
||
.j13-md-popover-list button:hover {
|
||
background: var(--panel-2) !important;
|
||
color: var(--ink) !important;
|
||
}
|
||
/* 链接弹窗:高级选项折叠开关 + 站内帖子搜索区与结果行(标题 sans 字体 + 右侧标签) */
|
||
.j13-md-adv-toggle {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
align-self: flex-start;
|
||
padding: 2px 0;
|
||
border: 0;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
background: transparent !important;
|
||
color: var(--ink-3);
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
cursor: pointer;
|
||
}
|
||
.j13-md-adv-toggle:hover {
|
||
color: var(--ink);
|
||
}
|
||
.j13-md-link-search {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 6px;
|
||
margin-top: 2px;
|
||
padding-top: 8px;
|
||
border-top: 1px solid var(--line);
|
||
}
|
||
.j13-md-popover-list button.j13-md-post-row {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
font-family: inherit;
|
||
font-size: 12.5px;
|
||
font-weight: 500;
|
||
}
|
||
.j13-md-post-tag {
|
||
flex-shrink: 0;
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
color: var(--ink-3);
|
||
}
|
||
/* 插图统一弹窗:tab 行、拖拽上传区、错误行 */
|
||
.j13-md-mode.j13-img-tabs {
|
||
display: flex;
|
||
width: 100%;
|
||
}
|
||
.j13-img-tabs button {
|
||
flex: 1;
|
||
justify-content: center;
|
||
}
|
||
.j13-img-tabs button:disabled {
|
||
opacity: 0.5;
|
||
cursor: not-allowed;
|
||
}
|
||
.j13-img-dropzone {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 8px;
|
||
width: 100%;
|
||
padding: 36px 16px;
|
||
border-radius: 14px;
|
||
border: 1.5px dashed var(--control-border);
|
||
background: var(--panel-2);
|
||
color: var(--ink-3);
|
||
cursor: pointer;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
transition: border-color 0.15s, background 0.15s;
|
||
}
|
||
.j13-img-dropzone:hover,
|
||
.j13-img-dropzone.is-dragover {
|
||
border-color: var(--accent);
|
||
color: var(--ink-2);
|
||
}
|
||
.j13-img-dropzone:disabled {
|
||
opacity: 0.6;
|
||
cursor: progress;
|
||
}
|
||
.j13-img-dropzone-title {
|
||
font-size: 13.5px;
|
||
font-weight: 600;
|
||
color: var(--ink);
|
||
}
|
||
.j13-img-dropzone-hint {
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-img-modal-error {
|
||
margin-top: 10px;
|
||
font-size: 12.5px;
|
||
color: var(--danger, #b42318);
|
||
}
|
||
.j13-md-field {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 4px;
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-md-popover-footer {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
gap: 8px;
|
||
margin-top: 2px;
|
||
}
|
||
.btn-sm {
|
||
height: 30px;
|
||
padding: 0 12px;
|
||
font-size: 12.5px;
|
||
}
|
||
.j13-md-write-wrap {
|
||
position: relative;
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
min-width: 0;
|
||
height: 100%;
|
||
}
|
||
.j13-md-write-wrap.is-dragover .j13-md-textarea {
|
||
opacity: 0.35;
|
||
}
|
||
.j13-md-drop-mask {
|
||
position: absolute;
|
||
inset: 8px 0;
|
||
z-index: 5;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border-radius: 12px;
|
||
border: 2px dashed var(--accent);
|
||
background: color-mix(in srgb, var(--accent-soft) 80%, transparent);
|
||
color: var(--accent);
|
||
font-weight: 600;
|
||
font-size: 14px;
|
||
pointer-events: none;
|
||
}
|
||
.j13-md-mode {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
padding: 3px;
|
||
border-radius: 999px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
}
|
||
.j13-md-mode button {
|
||
height: 30px;
|
||
padding: 0 10px;
|
||
border-radius: 999px;
|
||
border: 0;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
font-size: 12.5px;
|
||
font-weight: 500;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 5px;
|
||
cursor: pointer;
|
||
color: var(--ink-2);
|
||
background: transparent;
|
||
}
|
||
.j13-md-mode button.is-on {
|
||
background: color-mix(in srgb, var(--accent) 18%, var(--panel));
|
||
color: var(--accent);
|
||
font-weight: 600;
|
||
}
|
||
.j13-md-panes {
|
||
flex: 1 1 auto;
|
||
display: grid;
|
||
grid-template-columns: 1fr;
|
||
grid-template-rows: minmax(0, 1fr);
|
||
min-height: 0;
|
||
gap: 0;
|
||
}
|
||
.j13-md-panes > [hidden] {
|
||
display: none !important;
|
||
}
|
||
.j13-md-textarea {
|
||
flex: 1 1 auto;
|
||
width: 100%;
|
||
min-height: 320px;
|
||
height: 100%;
|
||
resize: none;
|
||
border: 0 !important;
|
||
border-radius: 0 !important;
|
||
box-shadow: none !important;
|
||
background: transparent !important;
|
||
padding: 1rem 0 0.75rem !important;
|
||
color: var(--ink);
|
||
font-family: var(--font-sans);
|
||
font-size: 15.5px !important;
|
||
line-height: 1.8 !important;
|
||
}
|
||
.j13-md-editor.is-fullscreen .j13-md-textarea,
|
||
.j13-md-editor.is-fullscreen .j13-md-preview {
|
||
min-height: 0;
|
||
}
|
||
.j13-md-textarea::placeholder { color: var(--ink-3); }
|
||
.j13-md-textarea:focus,
|
||
.j13-md-textarea:focus-visible {
|
||
outline: none !important;
|
||
box-shadow: none !important;
|
||
border: 0 !important;
|
||
}
|
||
.j13-md-preview {
|
||
flex: 1 1 auto;
|
||
min-height: 320px;
|
||
height: 100%;
|
||
overflow-y: auto;
|
||
padding: 0.65rem 0 0.75rem;
|
||
background: transparent;
|
||
min-width: 0;
|
||
}
|
||
.j13-md-preview-label {
|
||
font-size: 11.5px;
|
||
font-weight: 600;
|
||
letter-spacing: 0.04em;
|
||
text-transform: uppercase;
|
||
margin-bottom: 0.35rem;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-md-panes.is-preview .j13-md-preview-label,
|
||
.j13-md-panes.is-write .j13-md-preview-label {
|
||
display: none;
|
||
}
|
||
.j13-md-foot {
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
padding: 10px 0 0;
|
||
font-size: 12.5px;
|
||
color: var(--ink-2);
|
||
border-top: 1px solid var(--line);
|
||
background: transparent;
|
||
}
|
||
.j13-md-foot-hint {
|
||
min-width: 0;
|
||
}
|
||
.j13-md-foot-actions {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: flex-end;
|
||
gap: 10px;
|
||
margin-left: auto;
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-md-count {
|
||
color: var(--ink-2);
|
||
font-size: 12.5px;
|
||
}
|
||
.j13-md-upload,
|
||
.j13-md-error {
|
||
margin: 8px 0 0;
|
||
font-size: 13px;
|
||
line-height: 1.45;
|
||
}
|
||
.j13-md-upload {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 8px;
|
||
color: var(--ink-2);
|
||
}
|
||
.j13-md-upload button {
|
||
color: var(--accent);
|
||
font-weight: 600;
|
||
font-size: 13px;
|
||
}
|
||
.j13-md-upload button:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.j13-md-error {
|
||
color: var(--danger);
|
||
}
|
||
.j13-md-editor.is-comment:not(.is-fullscreen) .j13-md-textarea {
|
||
min-height: 96px;
|
||
max-height: 320px;
|
||
height: 96px;
|
||
overflow-y: auto;
|
||
padding: 0.5rem 0 0.35rem !important;
|
||
line-height: 1.65 !important;
|
||
}
|
||
.j13-md-editor.is-comment:not(.is-fullscreen) .j13-md-preview {
|
||
min-height: 96px;
|
||
max-height: 320px;
|
||
height: auto;
|
||
overflow-y: auto;
|
||
}
|
||
.j13-md-editor.is-comment .j13-md-toolbar {
|
||
flex-wrap: nowrap;
|
||
gap: 2px;
|
||
padding: 2px 0 8px;
|
||
}
|
||
.j13-md-editor.is-comment .j13-md-tool-groups {
|
||
flex-wrap: nowrap;
|
||
}
|
||
.j13-md-editor.is-comment .j13-md-mode button {
|
||
height: 32px;
|
||
padding: 0 8px;
|
||
}
|
||
/* 窄屏(手机端)编辑工具栏:收成单行核心工具 + 「更多」菜单(评论栏与正文编辑器共用)。
|
||
空间不足时允许「编写/预览」折到第二行,不能让固定宽按钮溢出后与模式切换重叠 */
|
||
.j13-md-editor.is-narrow .j13-md-toolbar {
|
||
flex-wrap: wrap;
|
||
gap: 2px;
|
||
row-gap: 6px;
|
||
padding: 2px 0 8px;
|
||
}
|
||
.j13-md-editor.is-narrow .j13-md-tool-groups {
|
||
flex-wrap: nowrap;
|
||
/* 默认 min-width:0 会让本组被压缩、内部按钮溢出到模式切换下方;
|
||
内容宽度作为最小宽,放不下时把右侧切换挤到下一行 */
|
||
min-width: max-content;
|
||
}
|
||
.j13-md-editor.is-narrow .j13-md-toolbar-end {
|
||
/* 单行时左侧 flex-1 已把它顶到右侧;折行后在第二行保持右对齐 */
|
||
margin-left: auto;
|
||
}
|
||
.j13-md-editor.is-narrow .j13-md-tool {
|
||
width: 30px;
|
||
height: 30px;
|
||
}
|
||
.j13-md-editor.is-narrow .j13-md-sep {
|
||
/* 窄屏下 1px 分隔符视觉几乎不可见却占 5px 横向空间,
|
||
反而打断按钮间均匀间距;改由 gap-0.5 统一控制间距 */
|
||
display: none;
|
||
}
|
||
.j13-md-editor.is-narrow .j13-md-mode button {
|
||
height: 28px;
|
||
padding: 0 7px;
|
||
font-size: 12px;
|
||
}
|
||
/* 「更多」内嵌的代码块/表情/隐藏内容弹层:相对更多按钮居中,避免贴边溢出屏幕 */
|
||
.j13-md-popover-center {
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
}
|
||
/* 窄屏左锚点表单弹层(链接等)宽度收敛,保证完整落在屏内 */
|
||
.j13-md-editor.is-narrow .j13-md-popover-form {
|
||
min-width: 232px;
|
||
}
|
||
|
||
/* 正文内嵌隐藏块 */
|
||
.j13-hide-block {
|
||
margin: 1.1rem 0;
|
||
border-radius: 14px;
|
||
border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--line));
|
||
background: color-mix(in srgb, var(--accent-soft) 55%, var(--panel));
|
||
overflow: hidden;
|
||
}
|
||
.j13-hide-block-bar {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
padding: 8px 14px;
|
||
border-bottom: 1px solid color-mix(in srgb, var(--accent) 14%, var(--line));
|
||
}
|
||
.j13-hide-badge {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
height: 22px;
|
||
padding: 0 9px;
|
||
border-radius: 999px;
|
||
font-size: 11.5px;
|
||
font-weight: 600;
|
||
color: var(--accent-on);
|
||
background: var(--accent);
|
||
}
|
||
.j13-hide-block-body {
|
||
padding: 12px 16px 14px;
|
||
}
|
||
.j13-hide-block-body > :first-child { margin-top: 0; }
|
||
.j13-hide-block-body > :last-child { margin-bottom: 0; }
|
||
.j13-hide-gate {
|
||
margin: 1.1rem 0;
|
||
border-radius: 14px;
|
||
padding: 1.35rem 1.25rem;
|
||
text-align: center;
|
||
background: var(--accent-soft);
|
||
border: 1px dashed color-mix(in srgb, var(--accent) 35%, transparent);
|
||
}
|
||
.j13-hide-gate-icon {
|
||
margin: 0 auto 0.55rem;
|
||
color: var(--accent);
|
||
}
|
||
.j13-hide-gate-title {
|
||
font-weight: 700;
|
||
font-size: 15px;
|
||
color: var(--ink);
|
||
margin-bottom: 0.25rem;
|
||
}
|
||
.j13-hide-gate-desc {
|
||
margin-bottom: 0.9rem;
|
||
font-size: 13px;
|
||
}
|
||
.j13-hide-gate-actions {
|
||
display: flex;
|
||
justify-content: center;
|
||
gap: 8px;
|
||
flex-wrap: wrap;
|
||
}
|
||
.j13-hide-pwd-wrap {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 8px;
|
||
width: 100%;
|
||
max-width: 360px;
|
||
margin: 0 auto;
|
||
}
|
||
.j13-hide-pwd-form {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
flex-wrap: wrap;
|
||
justify-content: center;
|
||
width: 100%;
|
||
}
|
||
.j13-hide-pwd-input {
|
||
flex: 1 1 160px;
|
||
min-width: 140px;
|
||
height: 36px;
|
||
padding: 0 12px;
|
||
border-radius: 10px;
|
||
border: 1px solid var(--control-border);
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
font-size: 14px;
|
||
}
|
||
.j13-hide-pwd-input.is-invalid {
|
||
border-color: var(--danger);
|
||
box-shadow: 0 0 0 2px var(--focus-glow-danger);
|
||
}
|
||
.j13-hide-pwd-error {
|
||
margin: 0;
|
||
width: 100%;
|
||
text-align: center;
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
line-height: 1.4;
|
||
color: var(--danger);
|
||
}
|
||
|
||
/* 帖子附件:积分数独立成列,付费卡用金色语义 */
|
||
.j13-att {
|
||
margin-top: 2rem;
|
||
padding-top: 1.35rem;
|
||
border-top: 1px solid var(--line);
|
||
}
|
||
.j13-att-head {
|
||
display: flex;
|
||
align-items: baseline;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
margin-bottom: 12px;
|
||
}
|
||
.j13-att-title {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 7px;
|
||
margin: 0;
|
||
font-size: 15px;
|
||
font-weight: 800;
|
||
letter-spacing: -0.01em;
|
||
color: var(--ink);
|
||
}
|
||
.j13-att-title svg {
|
||
color: var(--accent);
|
||
}
|
||
.j13-att-list {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 10px;
|
||
margin: 0;
|
||
padding: 0;
|
||
list-style: none;
|
||
}
|
||
.j13-att-card {
|
||
appearance: none;
|
||
display: grid;
|
||
grid-template-columns: 46px minmax(0, 1fr) auto auto;
|
||
align-items: center;
|
||
column-gap: 14px;
|
||
row-gap: 10px;
|
||
width: 100%;
|
||
min-width: 0;
|
||
padding: 14px 16px;
|
||
border-radius: 14px;
|
||
text-align: left;
|
||
text-decoration: none;
|
||
color: inherit;
|
||
font: inherit;
|
||
cursor: default;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
box-shadow: var(--shadow-sm);
|
||
transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s, background 0.15s;
|
||
}
|
||
.j13-att-card:hover {
|
||
transform: translateY(-1px);
|
||
box-shadow: var(--shadow);
|
||
border-color: color-mix(in srgb, var(--accent) 28%, var(--line));
|
||
}
|
||
.j13-att-card:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.j13-att-card.is-paid {
|
||
border-color: color-mix(in srgb, var(--gold) 34%, var(--line));
|
||
background: color-mix(in srgb, var(--gold-soft) 48%, var(--panel));
|
||
}
|
||
.j13-att-card.is-paid:hover {
|
||
border-color: color-mix(in srgb, var(--gold) 52%, var(--line));
|
||
}
|
||
.j13-att-card.is-unlocked {
|
||
border-color: color-mix(in srgb, var(--ok) 30%, var(--line));
|
||
background: color-mix(in srgb, var(--ok-soft) 42%, var(--panel));
|
||
}
|
||
.j13-att-card.is-unlocked:hover {
|
||
border-color: color-mix(in srgb, var(--ok) 46%, var(--line));
|
||
}
|
||
.j13-att-card.is-busy {
|
||
opacity: 0.92;
|
||
}
|
||
.j13-att-card.is-fresh {
|
||
animation: j13-att-unlock 0.7s ease-out;
|
||
}
|
||
.j13-att-type {
|
||
width: 46px;
|
||
height: 46px;
|
||
border-radius: 12px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
flex-shrink: 0;
|
||
font-size: 11px;
|
||
font-weight: 800;
|
||
letter-spacing: 0.04em;
|
||
font-variant-numeric: tabular-nums;
|
||
color: var(--ink-2);
|
||
background: var(--tint);
|
||
}
|
||
.j13-att-type[data-kind="image"] {
|
||
color: var(--accent);
|
||
background: var(--accent-soft);
|
||
}
|
||
.j13-att-type[data-kind="archive"] {
|
||
color: var(--gold);
|
||
background: var(--gold-soft);
|
||
}
|
||
.j13-att-type[data-kind="doc"] {
|
||
color: var(--clay);
|
||
background: var(--clay-soft);
|
||
}
|
||
.j13-att-type[data-kind="media"] {
|
||
color: var(--ok);
|
||
background: var(--ok-soft);
|
||
}
|
||
.j13-att-main {
|
||
min-width: 0;
|
||
overflow: hidden;
|
||
}
|
||
.j13-att-name {
|
||
display: block;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
font-size: 14.5px;
|
||
font-weight: 700;
|
||
line-height: 1.3;
|
||
color: var(--ink);
|
||
}
|
||
.j13-att-meta {
|
||
display: block;
|
||
margin-top: 3px;
|
||
font-size: 12px;
|
||
line-height: 1.4;
|
||
color: var(--ink-3);
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.j13-att-price {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
min-width: 5.25rem;
|
||
padding: 8px 12px 7px;
|
||
border-radius: 12px;
|
||
line-height: 1;
|
||
background: var(--panel);
|
||
border: 1px solid color-mix(in srgb, var(--gold) 42%, var(--line));
|
||
box-shadow: var(--shadow-sm);
|
||
}
|
||
.j13-att-price-num {
|
||
font-size: 28px;
|
||
font-weight: 800;
|
||
letter-spacing: -0.04em;
|
||
font-variant-numeric: tabular-nums;
|
||
color: var(--gold);
|
||
line-height: 1;
|
||
}
|
||
.j13-att-price-unit {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 3px;
|
||
margin-top: 5px;
|
||
font-size: 11.5px;
|
||
font-weight: 650;
|
||
color: var(--gold);
|
||
}
|
||
.j13-att-price.is-unlocked {
|
||
border-color: color-mix(in srgb, var(--ok) 42%, var(--line));
|
||
}
|
||
.j13-att-price.is-unlocked .j13-att-price-unit {
|
||
color: var(--ok);
|
||
}
|
||
.j13-att-price.is-free {
|
||
min-width: auto;
|
||
padding: 8px 12px;
|
||
border-color: var(--line);
|
||
}
|
||
.j13-att-price.is-free .j13-att-price-unit {
|
||
margin-top: 0;
|
||
font-size: 13.5px;
|
||
font-weight: 700;
|
||
color: var(--ink-2);
|
||
}
|
||
.j13-att-cta {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 6px;
|
||
height: 34px;
|
||
padding: 0 14px;
|
||
border-radius: 999px;
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
line-height: 1;
|
||
flex-shrink: 0;
|
||
cursor: pointer;
|
||
border: 1px solid var(--line-2);
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
white-space: nowrap;
|
||
font-family: inherit;
|
||
text-decoration: none;
|
||
appearance: none;
|
||
}
|
||
a.j13-att-cta:hover {
|
||
color: var(--ink);
|
||
}
|
||
.j13-att-cta:hover:not(:disabled):not(.is-primary) {
|
||
border-color: var(--accent);
|
||
color: var(--accent);
|
||
}
|
||
.j13-att-cta:disabled {
|
||
opacity: 0.5;
|
||
cursor: not-allowed;
|
||
}
|
||
.j13-att-cta.is-primary {
|
||
border-color: transparent;
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.12),
|
||
0 2px 8px color-mix(in srgb, var(--accent) 26%, transparent);
|
||
}
|
||
.j13-att-cta.is-primary:hover:not(:disabled) {
|
||
background: var(--accent-hi);
|
||
color: var(--accent-on);
|
||
}
|
||
.j13-att-pay {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 4px;
|
||
}
|
||
.j13-att-pay-file {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 12px;
|
||
padding: 10px 12px;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel-2);
|
||
}
|
||
.j13-att-pay-name {
|
||
margin: 0;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
font-size: 14px;
|
||
font-weight: 700;
|
||
color: var(--ink);
|
||
}
|
||
.j13-att-pay-hero {
|
||
text-align: center;
|
||
padding: 18px 8px 6px;
|
||
}
|
||
.j13-att-pay-num {
|
||
display: block;
|
||
font-size: 48px;
|
||
font-weight: 800;
|
||
letter-spacing: -0.05em;
|
||
font-variant-numeric: tabular-nums;
|
||
color: var(--gold);
|
||
line-height: 1;
|
||
}
|
||
.j13-att-pay-unit {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 4px;
|
||
margin-top: 8px;
|
||
font-size: 13px;
|
||
font-weight: 650;
|
||
color: var(--gold);
|
||
}
|
||
@keyframes j13-att-unlock {
|
||
0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--ok) 38%, transparent); }
|
||
100% { box-shadow: 0 0 0 12px transparent; }
|
||
}
|
||
@media (max-width: 560px) {
|
||
.j13-att-card {
|
||
grid-template-columns: 46px minmax(0, 1fr) auto;
|
||
}
|
||
.j13-att-cta {
|
||
grid-column: 1 / -1;
|
||
width: 100%;
|
||
height: 40px;
|
||
}
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.j13-att-card,
|
||
.j13-att-card.is-fresh {
|
||
transition: none;
|
||
animation: none;
|
||
}
|
||
.j13-att-card:hover {
|
||
transform: none;
|
||
}
|
||
}
|
||
|
||
.j13-compose-shell {
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r);
|
||
box-shadow: var(--shadow);
|
||
overflow: visible;
|
||
}
|
||
|
||
|
||
/* 发帖/编辑工作台:锁一屏、隐藏页脚,高度全部给编辑画布 */
|
||
body:has([data-compose-viewport]) {
|
||
height: 100dvh;
|
||
max-height: 100dvh;
|
||
overflow: hidden;
|
||
}
|
||
body:has([data-compose-viewport]) > footer {
|
||
display: none;
|
||
}
|
||
|
||
/* 全站页脚:左 / 中 / 右三栏链接(版权固定在左栏) */
|
||
.site-footer-inner {
|
||
display: grid;
|
||
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
|
||
align-items: center;
|
||
gap: 0.5rem 1rem;
|
||
}
|
||
.site-footer-zone {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.35rem 0.75rem;
|
||
min-width: 0;
|
||
}
|
||
.site-footer-zone-left {
|
||
justify-self: start;
|
||
justify-content: flex-start;
|
||
}
|
||
.site-footer-zone-center {
|
||
justify-self: center;
|
||
justify-content: center;
|
||
}
|
||
.site-footer-zone-right {
|
||
justify-self: end;
|
||
justify-content: flex-end;
|
||
}
|
||
.site-footer-meta {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.35rem 0.75rem;
|
||
min-width: 0;
|
||
}
|
||
.site-footer-links {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.35rem 0.75rem;
|
||
min-width: 0;
|
||
}
|
||
/* <1024px(移动/平板,底部公共菜单显示区间):三区堆叠、统一左对齐连成整体,
|
||
避免「左中右各自断开」的残缺观感;底栏避让统一由 footer 承担(:has 判定),
|
||
#main 只留常规小 padding-bottom,无底栏页面(如全部通知)底部也有间隙 */
|
||
@media (max-width: 1023px) {
|
||
body:has([data-j13-tabbar]) .site-footer {
|
||
padding-bottom: calc(4.75rem + env(safe-area-inset-bottom));
|
||
}
|
||
.site-footer-inner {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: stretch;
|
||
gap: 0.5rem;
|
||
}
|
||
.site-footer-zone,
|
||
.site-footer-zone-left,
|
||
.site-footer-zone-center,
|
||
.site-footer-zone-right {
|
||
justify-self: unset;
|
||
justify-content: flex-start;
|
||
width: 100%;
|
||
}
|
||
.site-footer-zone:empty {
|
||
display: none;
|
||
}
|
||
}
|
||
|
||
/* 通知下拉(移动端底部面板)避让底部公共菜单:面板在 sticky header 的层叠上下文内,
|
||
z-index 抬不过底栏,只能在底栏存在时整体抬高(与 footer 的避让值一致),
|
||
露出被遮住的「查看全部通知」入口 */
|
||
@media (max-width: 1023.98px) {
|
||
body:has([data-j13-tabbar]) .j13-notif-sheet {
|
||
bottom: calc(4.75rem + env(safe-area-inset-bottom));
|
||
}
|
||
}
|
||
|
||
body:has([data-compose-viewport]) #main {
|
||
flex: 1 1 0;
|
||
min-height: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
padding-top: 0.55rem;
|
||
padding-bottom: 0.55rem;
|
||
overflow: hidden;
|
||
}
|
||
body:has([data-compose-viewport]) #main > [data-compose-viewport] {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
}
|
||
|
||
/* 发帖工作台:左画布 + 右设置栏(窄屏设置收入抽屉) */
|
||
.j13-compose-stage.is-studio {
|
||
overflow: hidden;
|
||
}
|
||
.j13-compose-stage.is-studio:not(:has(.j13-compose-studio)) {
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.j13-compose-stage.is-studio .j13-compose-toolbar {
|
||
position: relative;
|
||
top: auto;
|
||
z-index: 8;
|
||
padding: 0.7rem 1rem 0.7rem 0.85rem;
|
||
background: var(--panel);
|
||
border-radius: var(--r) var(--r) 0 0;
|
||
}
|
||
.j13-compose-toolbar-lead {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.65rem;
|
||
min-width: 0;
|
||
}
|
||
.j13-compose-toolbar-copy {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.1rem;
|
||
min-width: 0;
|
||
}
|
||
.j13-compose-toolbar-sub {
|
||
margin: 0;
|
||
font-size: 12px;
|
||
line-height: 1.3;
|
||
color: var(--ink-3);
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
.j13-compose-back {
|
||
width: 34px;
|
||
height: 34px;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border-radius: 10px;
|
||
color: var(--ink-2);
|
||
background: transparent;
|
||
border: 0;
|
||
flex-shrink: 0;
|
||
transition: background 0.12s ease, color 0.12s ease;
|
||
}
|
||
.j13-compose-back:hover,
|
||
.j13-compose-back:focus-visible {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
.j13-compose-toolbar-hint {
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
max-width: 14rem;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
.j13-compose-rail-toggle {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.35rem;
|
||
}
|
||
.j13-compose-rail-toggle-count {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
min-width: 1.15rem;
|
||
height: 1.15rem;
|
||
padding: 0 0.3rem;
|
||
border-radius: 999px;
|
||
font-size: 11px;
|
||
font-weight: 700;
|
||
color: var(--accent);
|
||
background: var(--accent-soft);
|
||
}
|
||
.j13-compose-draft {
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 0.75rem;
|
||
padding: 0.7rem 1.1rem;
|
||
font-size: 13px;
|
||
color: var(--ink);
|
||
background: var(--accent-soft);
|
||
border-bottom: 1px solid color-mix(in srgb, var(--accent) 18%, transparent);
|
||
}
|
||
.j13-compose-banner-error {
|
||
flex-shrink: 0;
|
||
margin: 0;
|
||
border-radius: 0;
|
||
border-left: 0;
|
||
border-right: 0;
|
||
}
|
||
.j13-compose-studio {
|
||
flex: 1 1 auto;
|
||
min-height: 0;
|
||
display: grid;
|
||
grid-template-columns: minmax(0, 1fr);
|
||
grid-template-rows: minmax(0, 1fr);
|
||
position: relative;
|
||
}
|
||
.j13-compose-studio-canvas {
|
||
min-width: 0;
|
||
min-height: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
padding: 0.2rem 1.15rem 0.7rem;
|
||
overflow: hidden;
|
||
}
|
||
.j13-compose-title-row {
|
||
display: flex;
|
||
align-items: flex-end;
|
||
gap: 0.75rem;
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-compose-title-count {
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
padding-bottom: 0.8rem;
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-compose-stage.is-studio .j13-compose-canvas,
|
||
.j13-compose-stage.is-studio .j13-md-editor {
|
||
flex: 1 1 auto;
|
||
min-height: 0;
|
||
overflow: hidden;
|
||
}
|
||
.j13-compose-stage.is-studio .j13-md-textarea,
|
||
.j13-compose-stage.is-studio .j13-md-preview {
|
||
min-height: 0;
|
||
}
|
||
.j13-compose-rail-backdrop {
|
||
display: none;
|
||
}
|
||
.j13-compose-studio-rail {
|
||
min-height: 0;
|
||
min-width: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1.15rem;
|
||
padding: 1rem 1.05rem 1.35rem;
|
||
overflow-y: auto;
|
||
background: color-mix(in srgb, var(--bg) 62%, var(--panel));
|
||
border-left: 1px solid var(--line);
|
||
}
|
||
.j13-compose-rail-head {
|
||
display: none;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 0.75rem;
|
||
margin: -0.15rem 0 0.15rem;
|
||
}
|
||
.j13-compose-rail-head-title {
|
||
margin: 0;
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
color: var(--ink);
|
||
}
|
||
.j13-compose-rail-block {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.7rem;
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-compose-studio-rail .j13-compose-meta {
|
||
flex-direction: column;
|
||
gap: 0.85rem;
|
||
}
|
||
.j13-compose-studio-rail .j13-compose-meta-board,
|
||
.j13-compose-studio-rail .j13-compose-meta-tags {
|
||
width: 100%;
|
||
max-width: none;
|
||
flex: none;
|
||
}
|
||
.j13-compose-studio-rail .j13-compose-typebar {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 6px;
|
||
}
|
||
.j13-compose-studio-rail .j13-compose-section {
|
||
padding: 0;
|
||
border: 0;
|
||
background: transparent;
|
||
border-radius: 0;
|
||
}
|
||
.j13-compose-studio-rail .j13-compose-drop {
|
||
min-height: 5.5rem;
|
||
padding: 0.8rem 0.7rem;
|
||
}
|
||
.j13-compose-studio-rail .j13-compose-drop-lead {
|
||
font-size: 13px;
|
||
}
|
||
.j13-compose-studio-rail .j13-compose-typepanel {
|
||
padding: 0.85rem 0.9rem;
|
||
}
|
||
.j13-compose-typemodal-body {
|
||
max-height: min(78vh, 42rem);
|
||
overflow-y: auto;
|
||
/* 滚动容器会裁剪 box-shadow 聚焦圈(2px),四周各留 2px */
|
||
padding: 2px;
|
||
}
|
||
.j13-compose-typemodal-body .j13-compose-typepanel {
|
||
padding: 0;
|
||
border: 0;
|
||
border-radius: 0;
|
||
background: transparent;
|
||
}
|
||
|
||
@media (max-width: 1279px) {
|
||
.j13-compose-rail-backdrop {
|
||
display: block;
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: 69;
|
||
border: 0;
|
||
padding: 0;
|
||
cursor: pointer;
|
||
background: color-mix(in srgb, var(--ink) 28%, transparent);
|
||
}
|
||
.j13-compose-studio-rail {
|
||
position: fixed;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
left: auto;
|
||
width: min(100%, 24.5rem);
|
||
z-index: 70;
|
||
border-left: 1px solid var(--line);
|
||
box-shadow: var(--shadow-lg);
|
||
transform: translateX(100%);
|
||
visibility: hidden;
|
||
pointer-events: none;
|
||
transition: transform 0.22s ease, visibility 0.22s ease;
|
||
}
|
||
.j13-compose-studio-rail.is-open {
|
||
transform: translateX(0);
|
||
visibility: visible;
|
||
pointer-events: auto;
|
||
}
|
||
.j13-compose-rail-head {
|
||
display: flex;
|
||
}
|
||
}
|
||
@media (min-width: 1280px) {
|
||
.j13-compose-studio {
|
||
grid-template-columns: minmax(0, 1fr) minmax(18.5rem, 21.5rem);
|
||
}
|
||
.j13-compose-studio-canvas {
|
||
padding: 0.25rem 1.5rem 0.85rem 1.6rem;
|
||
}
|
||
.j13-compose-rail-toggle {
|
||
display: none;
|
||
}
|
||
.j13-compose-rail-head {
|
||
display: none;
|
||
}
|
||
.j13-compose-rail-backdrop {
|
||
display: none !important;
|
||
}
|
||
}
|
||
@media (max-width: 639px) {
|
||
.j13-compose-toolbar-hint {
|
||
display: none;
|
||
}
|
||
.j13-compose-studio-canvas {
|
||
padding-left: 0.9rem;
|
||
padding-right: 0.9rem;
|
||
}
|
||
}
|
||
|
||
/* 聊天页:整页锁在视口内,避免「页面滚动 + 对话区滚动」双滚动条 */
|
||
body:has([data-chat-viewport]) {
|
||
height: 100dvh;
|
||
/* 覆盖 body 上的 min-h-screen(100vh):min-height 优先级高于 height/max-height,
|
||
否则移动端 body 实际高 100vh,比可见视口高出地址栏高度,输入框会被推出屏幕 */
|
||
min-height: 0;
|
||
max-height: 100dvh;
|
||
overflow: hidden;
|
||
}
|
||
body:has([data-chat-viewport]) > footer {
|
||
display: none;
|
||
}
|
||
body:has([data-chat-viewport]) #main {
|
||
flex: 1 1 0;
|
||
min-height: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
/* 覆盖 root layout 的 py-7/sm:py-9,只留紧凑间距 */
|
||
padding-top: 0.75rem;
|
||
padding-bottom: 0.75rem;
|
||
overflow: hidden;
|
||
}
|
||
|
||
/* 消息列表页显示底栏时,锁视口布局底部避让(/chat/[id] 无底栏不受影响) */
|
||
@media (max-width: 1023.98px) {
|
||
body:has([data-j13-tabbar]) #main:has([data-chat-viewport]) {
|
||
padding-bottom: calc(4.75rem + env(safe-area-inset-bottom));
|
||
}
|
||
}
|
||
|
||
/* ── 管理后台独立壳:全高侧栏 + 顶栏 + 可滚主区(不依赖公开 Header/Footer) ── */
|
||
body:has([data-admin-viewport]) {
|
||
height: 100dvh;
|
||
max-height: 100dvh;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.admin-shell {
|
||
display: flex;
|
||
height: 100dvh;
|
||
max-height: 100dvh;
|
||
min-height: 0;
|
||
overflow: hidden;
|
||
background: transparent; /* 透出全站画布层 */
|
||
}
|
||
|
||
.admin-rail {
|
||
width: 15.5rem;
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
overflow-y: auto;
|
||
overflow-x: hidden;
|
||
padding: 1rem 0.75rem 1.25rem;
|
||
background: var(--panel);
|
||
border-right: 1px solid var(--line);
|
||
}
|
||
|
||
/* 桌面常驻侧栏;窄屏改用抽屉,避免与 .admin-rail 的 display 冲突 */
|
||
.admin-rail-desktop {
|
||
display: none;
|
||
}
|
||
|
||
@media (min-width: 1024px) {
|
||
.admin-rail-desktop {
|
||
display: flex;
|
||
}
|
||
}
|
||
|
||
@media (min-width: 1280px) {
|
||
.admin-rail {
|
||
width: 16.5rem;
|
||
}
|
||
}
|
||
|
||
.admin-drawer-panel {
|
||
position: relative;
|
||
z-index: 1;
|
||
display: flex;
|
||
width: min(18rem, 86vw);
|
||
height: 100%;
|
||
box-shadow: var(--shadow-lg);
|
||
animation: admin-drawer-in 0.18s ease-out;
|
||
/* 覆盖 .admin-rail 的上下内边距并叠加刘海/手势区避让 */
|
||
padding-top: calc(1rem + env(safe-area-inset-top, 0px));
|
||
padding-bottom: calc(1.25rem + env(safe-area-inset-bottom, 0px));
|
||
}
|
||
|
||
.admin-rail-brand {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.625rem;
|
||
padding: 0.35rem 0.5rem 1rem;
|
||
margin-bottom: 0.35rem;
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
|
||
.admin-rail-brand-mark {
|
||
width: 2.25rem;
|
||
height: 2.25rem;
|
||
border-radius: 0.75rem;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
flex-shrink: 0;
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
}
|
||
|
||
.admin-rail-nav {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1rem;
|
||
padding: 0.75rem 0 0.25rem;
|
||
flex: 1;
|
||
}
|
||
|
||
.admin-rail-group-title {
|
||
font-size: 11px;
|
||
font-weight: 600;
|
||
letter-spacing: 0.04em;
|
||
text-transform: uppercase;
|
||
color: var(--ink-3);
|
||
padding: 0 0.65rem 0.4rem;
|
||
margin: 0;
|
||
}
|
||
|
||
.admin-rail-link {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.625rem;
|
||
padding: 0.55rem 0.75rem;
|
||
border-radius: 0.75rem;
|
||
font-size: 13.5px;
|
||
font-weight: 500;
|
||
color: var(--ink-2);
|
||
transition: background-color 0.15s ease, color 0.15s ease;
|
||
}
|
||
|
||
.admin-rail-link:hover {
|
||
background: var(--panel-2);
|
||
color: var(--ink);
|
||
}
|
||
|
||
.admin-rail-link.is-active {
|
||
background: var(--nav-active-bg);
|
||
color: var(--nav-active-ink);
|
||
}
|
||
|
||
.admin-rail-link.is-active svg {
|
||
color: var(--nav-active-ink);
|
||
}
|
||
|
||
.admin-rail-link:not(.is-active) svg {
|
||
color: var(--ink-3);
|
||
}
|
||
|
||
.admin-main-col {
|
||
flex: 1 1 0;
|
||
min-width: 0;
|
||
min-height: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.admin-topbar {
|
||
height: 3.5rem;
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 0.75rem;
|
||
padding: 0 1rem;
|
||
/* 半透明 + 毛玻璃:后台画布镂空透出全站画布层,顶栏与画布融为一体 */
|
||
background: color-mix(in srgb, var(--bg) 88%, transparent);
|
||
backdrop-filter: blur(14px);
|
||
-webkit-backdrop-filter: blur(14px);
|
||
border-bottom: 1px solid var(--line);
|
||
z-index: 30;
|
||
}
|
||
|
||
@media (min-width: 640px) {
|
||
.admin-topbar {
|
||
padding: 0 1.5rem;
|
||
}
|
||
}
|
||
|
||
.admin-topbar-left,
|
||
.admin-topbar-right {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.5rem;
|
||
min-width: 0;
|
||
}
|
||
|
||
.admin-topbar-back {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.4rem;
|
||
padding: 0.4rem 0.75rem;
|
||
border-radius: 999px;
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
color: var(--ink-2);
|
||
transition: background-color 0.15s ease, color 0.15s ease;
|
||
}
|
||
|
||
.admin-topbar-back:hover {
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
}
|
||
|
||
.admin-topbar-user {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.5rem;
|
||
border-radius: 999px;
|
||
padding: 0.2rem 0.55rem 0.2rem 0.2rem;
|
||
border: 1px solid var(--line);
|
||
transition: border-color 0.15s ease, background-color 0.15s ease;
|
||
}
|
||
|
||
.admin-canvas {
|
||
flex: 1 1 0;
|
||
min-height: 0;
|
||
overflow-y: auto;
|
||
overflow-x: hidden;
|
||
padding: 1.25rem 1rem 2rem;
|
||
}
|
||
|
||
/* 内容管理:桌面禁整页滚动,三栏底部落在视口内 */
|
||
@media (min-width: 1024px) {
|
||
.admin-canvas:has(.admin-content-page) {
|
||
display: flex;
|
||
flex-direction: column;
|
||
overflow: hidden;
|
||
padding-bottom: 1.25rem;
|
||
}
|
||
}
|
||
|
||
@media (min-width: 640px) {
|
||
.admin-canvas {
|
||
padding: 1.5rem 1.5rem 2.5rem;
|
||
}
|
||
}
|
||
|
||
@media (min-width: 1024px) {
|
||
.admin-canvas {
|
||
padding: 1.75rem 2rem 2.75rem;
|
||
}
|
||
.admin-canvas:has(.admin-content-page) {
|
||
padding-bottom: 1.25rem;
|
||
}
|
||
}
|
||
|
||
/* 用户管理吸顶:顶内边距挪到 .admin-users-page,sticky 才能贴紧顶栏而不提前定住 */
|
||
.admin-canvas:has(.admin-users-stick) {
|
||
padding-top: 0;
|
||
}
|
||
|
||
/* 公告/单页编辑器吸顶操作栏:同上,必须留在未分层区域才能压过 .admin-canvas 的媒体查询内边距 */
|
||
.admin-canvas:has(.admin-doc-editor) {
|
||
padding-top: 0;
|
||
}
|
||
|
||
/* 用户积分表头吸顶:同 admin-users-stick,画布顶内边距必须归零 sticky 才能贴紧顶栏
|
||
(内边距挪到 .admin-points-users-tab;标记类仅在用户积分标签激活时挂载,不影响其他标签) */
|
||
.admin-canvas:has(.admin-points-users-tab) {
|
||
padding-top: 0;
|
||
}
|
||
|
||
/* 移动端导航抽屉 */
|
||
.admin-drawer {
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: 60;
|
||
display: flex;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.admin-drawer-backdrop {
|
||
position: absolute;
|
||
inset: 0;
|
||
border: 0;
|
||
padding: 0;
|
||
cursor: pointer;
|
||
background: color-mix(in srgb, var(--ink) 32%, transparent);
|
||
animation: admin-fade-in 0.18s ease-out;
|
||
}
|
||
|
||
@keyframes admin-drawer-in {
|
||
from {
|
||
transform: translateX(-100%);
|
||
opacity: 0.85;
|
||
}
|
||
to {
|
||
transform: translateX(0);
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
@keyframes admin-drawer-out {
|
||
from {
|
||
transform: translateX(0);
|
||
opacity: 1;
|
||
}
|
||
to {
|
||
transform: translateX(-100%);
|
||
opacity: 0.85;
|
||
}
|
||
}
|
||
|
||
@keyframes admin-fade-in {
|
||
from {
|
||
opacity: 0;
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
@keyframes admin-fade-out {
|
||
from {
|
||
opacity: 1;
|
||
}
|
||
to {
|
||
opacity: 0;
|
||
}
|
||
}
|
||
|
||
/* 退场:面板滑出 + 背板淡出,结束后由组件卸载 */
|
||
.admin-drawer.is-closing .admin-drawer-backdrop {
|
||
animation: admin-fade-out 0.18s ease-in forwards;
|
||
}
|
||
|
||
.admin-drawer.is-closing .admin-drawer-panel {
|
||
animation: admin-drawer-out 0.18s ease-in forwards;
|
||
}
|
||
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.admin-drawer-panel,
|
||
.admin-drawer-backdrop,
|
||
.admin-drawer.is-closing .admin-drawer-panel,
|
||
.admin-drawer.is-closing .admin-drawer-backdrop {
|
||
animation: none;
|
||
}
|
||
}
|
||
|
||
::selection {
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
}
|
||
|
||
::-webkit-scrollbar {
|
||
width: 10px;
|
||
height: 10px;
|
||
}
|
||
::-webkit-scrollbar-thumb {
|
||
background: var(--line-2);
|
||
border-radius: 99px;
|
||
border: 3px solid var(--bg);
|
||
}
|
||
|
||
/* 链接重置放入 base 层:避免未分层规则击败 components 层的 .btn-primary 等类
|
||
(Tailwind v4 中未分层样式优先级高于任何 @layer) */
|
||
@layer base {
|
||
/* 必须在 base 层:未分层的 * 选择器会击败 @layer components 中所有
|
||
border-color(.field/.btn-line/.pager-btn 等曾因此实际渲染成 --line) */
|
||
*,
|
||
::before,
|
||
::after {
|
||
border-color: var(--line);
|
||
}
|
||
a {
|
||
color: inherit;
|
||
text-decoration: none;
|
||
}
|
||
}
|
||
|
||
h1, h2, h3, h4 {
|
||
font-family: var(--font-display);
|
||
letter-spacing: -0.015em;
|
||
}
|
||
|
||
:focus-visible {
|
||
outline: 2.5px solid var(--accent);
|
||
outline-offset: 2px;
|
||
border-radius: 6px;
|
||
}
|
||
|
||
/* skip-link / 点击主栏空白会聚焦 #main(tabIndex=-1)。
|
||
本文件 :focus-visible 未分层,会压过 Tailwind .outline-none,画出整栏主题色描边。 */
|
||
#main:focus,
|
||
#main:focus-visible,
|
||
.admin-canvas:focus,
|
||
.admin-canvas:focus-visible {
|
||
outline: none;
|
||
}
|
||
|
||
/* ---------- 文本控件:统一柔边 + 贴边 2px 聚焦(消双层嵌套) ----------
|
||
未分层,才能压过上方全局 :focus-visible 的 outline-offset。 */
|
||
input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="image"]):not([type="hidden"]):focus,
|
||
input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="image"]):not([type="hidden"]):focus-visible,
|
||
textarea:focus,
|
||
textarea:focus-visible,
|
||
select:focus,
|
||
select:focus-visible {
|
||
outline: none;
|
||
}
|
||
|
||
.field,
|
||
.j13-compose-field,
|
||
.j13-search-field,
|
||
.j13-md-popover-input,
|
||
.j13-hide-pwd-input,
|
||
.j13-tl-field,
|
||
.j13-tl-urls,
|
||
.j13-tl-select,
|
||
.admin-doc-number {
|
||
border-color: var(--control-border);
|
||
transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
|
||
}
|
||
.field:hover:not(:focus):not(:disabled),
|
||
.j13-compose-field:hover:not(:focus):not(:disabled),
|
||
.j13-search-field:hover:not(:focus):not(:disabled),
|
||
.j13-md-popover-input:hover:not(:focus):not(:disabled),
|
||
.j13-hide-pwd-input:hover:not(:focus):not(:disabled),
|
||
.j13-tl-field:hover:not(:focus):not(:disabled),
|
||
.j13-tl-urls:hover:not(:focus):not(:disabled),
|
||
.j13-tl-select:hover:not(:focus):not(:disabled),
|
||
.admin-doc-number:hover:not(:focus):not(:disabled) {
|
||
border-color: var(--control-border-hover);
|
||
}
|
||
.field:focus,
|
||
.j13-compose-field:focus,
|
||
.j13-search-field:focus,
|
||
.j13-search-field:focus-visible,
|
||
.j13-md-popover-input:focus,
|
||
.j13-hide-pwd-input:focus,
|
||
.j13-tl-field:focus,
|
||
.j13-tl-urls:focus,
|
||
.j13-tl-select:focus,
|
||
.admin-doc-number:focus {
|
||
outline: none !important;
|
||
border-color: var(--accent);
|
||
box-shadow: 0 0 0 2px var(--focus-glow);
|
||
}
|
||
|
||
/* 壳层:边框画在父级,内层输入取消描边 */
|
||
.admin-field-shell,
|
||
.admin-stepper,
|
||
.j13-tag-field,
|
||
.j13-board-trigger,
|
||
.j13-deadline-field,
|
||
.j13-chat-search,
|
||
.j13-chat-composer,
|
||
.admin-doc-slug {
|
||
border-color: var(--control-border);
|
||
transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
|
||
}
|
||
.admin-field-shell:hover:not(:focus-within),
|
||
.admin-stepper:hover:not(:focus-within),
|
||
.j13-tag-field:hover:not(:focus-within),
|
||
.j13-board-trigger:hover:not(:disabled):not(:focus-visible):not([aria-expanded="true"]),
|
||
.j13-deadline-field:hover:not(:focus-within),
|
||
.j13-chat-search:hover:not(:focus-within),
|
||
.j13-chat-composer:hover:not(:focus-within),
|
||
.admin-doc-slug:hover:not(:focus-within) {
|
||
border-color: var(--control-border-hover);
|
||
}
|
||
.admin-field-shell:focus-within,
|
||
.admin-stepper:focus-within,
|
||
.j13-tag-field:focus-within,
|
||
.j13-deadline-field:focus-within,
|
||
.j13-chat-search:focus-within,
|
||
.j13-chat-composer:focus-within,
|
||
.admin-doc-slug:focus-within,
|
||
.j13-board-trigger:focus-visible,
|
||
.j13-board-trigger[aria-expanded="true"] {
|
||
outline: none !important;
|
||
border-color: var(--accent) !important;
|
||
box-shadow: 0 0 0 2px var(--focus-glow);
|
||
}
|
||
|
||
.j13-chat-search-input,
|
||
.j13-chat-search-input:focus,
|
||
.j13-chat-search-input:focus-visible {
|
||
outline: none !important;
|
||
box-shadow: none !important;
|
||
}
|
||
|
||
.j13-chat-composer-input,
|
||
.j13-chat-composer-input:focus,
|
||
.j13-chat-composer-input:focus-visible {
|
||
outline: none !important;
|
||
box-shadow: none !important;
|
||
}
|
||
/* 富输入区(contentEditable):表情图片与 @ 胶囊直接在输入框内渲染 */
|
||
.j13-chat-rich-input {
|
||
white-space: pre-wrap;
|
||
overflow-wrap: break-word;
|
||
word-break: break-word;
|
||
overflow-y: auto;
|
||
cursor: text;
|
||
min-height: 36px;
|
||
max-height: 128px;
|
||
color: var(--ink);
|
||
caret-color: var(--ink);
|
||
}
|
||
.j13-chat-rich-input:empty::before {
|
||
content: attr(data-placeholder);
|
||
color: var(--ink-3);
|
||
pointer-events: none;
|
||
}
|
||
.j13-input-emoji {
|
||
display: inline-block;
|
||
width: 20px;
|
||
height: 20px;
|
||
object-fit: contain;
|
||
/* 与汉字视觉居中:汉字字面中心在基线上方 ≈0.385em,vertical-align = 0.385×字号 − 图高/2
|
||
20px 图 @14px 字号:5.4 − 10 = −4.6(负值=图片下沉;middle 会以 x-height 对齐导致偏下) */
|
||
vertical-align: -4.6px;
|
||
margin: 0 1px;
|
||
cursor: default;
|
||
user-select: none;
|
||
-webkit-user-select: none;
|
||
-webkit-touch-callout: none;
|
||
}
|
||
/* 输入框内的 @ 胶囊:与镜像期一致的蓝色文字风格,contenteditable=false 原子整体 */
|
||
.j13-chat-rich-input .j13-mention-token {
|
||
display: inline;
|
||
padding: 0;
|
||
margin: 0;
|
||
line-height: inherit;
|
||
font-weight: 500;
|
||
border-radius: 0;
|
||
box-shadow: none;
|
||
background: transparent !important;
|
||
color: var(--accent) !important;
|
||
cursor: text;
|
||
}
|
||
|
||
.admin-field-shell,
|
||
.admin-stepper {
|
||
background: var(--bg);
|
||
border: 1px solid var(--control-border);
|
||
border-radius: 12px;
|
||
}
|
||
.admin-field-shell:focus-within,
|
||
.admin-stepper:focus-within {
|
||
background: var(--panel);
|
||
}
|
||
.admin-field-input,
|
||
.admin-field-input:focus,
|
||
.admin-field-input:focus-visible,
|
||
.admin-stepper-input,
|
||
.admin-stepper-input:focus,
|
||
.admin-stepper-input:focus-visible {
|
||
outline: none !important;
|
||
box-shadow: none !important;
|
||
border: 0 !important;
|
||
background: transparent !important;
|
||
}
|
||
.admin-stepper-btn:focus,
|
||
.admin-stepper-btn:focus-visible {
|
||
outline: none !important;
|
||
box-shadow: none !important;
|
||
}
|
||
.admin-field-shell.is-invalid {
|
||
border-color: var(--danger) !important;
|
||
}
|
||
.admin-field-shell.is-invalid:focus-within {
|
||
box-shadow: 0 0 0 2px var(--focus-glow-danger);
|
||
}
|
||
|
||
/* 顶栏搜索:pill 圆角,聚焦同款贴边细环 */
|
||
.j13-search-field {
|
||
width: 100%;
|
||
border: 1px solid var(--control-border);
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
}
|
||
.j13-search-field:focus,
|
||
.j13-search-field:focus-visible {
|
||
background: var(--panel);
|
||
}
|
||
/* 聊天界面滚动容器:隐藏滚动条(飞书式无滚动条外观,滚动能力保留) */
|
||
.j13-chat-scroll {
|
||
scrollbar-width: none;
|
||
-ms-overflow-style: none;
|
||
}
|
||
.j13-chat-scroll::-webkit-scrollbar {
|
||
display: none;
|
||
width: 0;
|
||
height: 0;
|
||
}
|
||
.j13-mention-token {
|
||
display: inline-block;
|
||
padding: 2px 8px;
|
||
margin: 0 2px;
|
||
border-radius: 999px;
|
||
line-height: 1.35;
|
||
vertical-align: baseline;
|
||
/* 主题强调色加深 + 对比色字,胶囊形 */
|
||
background: color-mix(in srgb, var(--accent) 82%, #000);
|
||
color: #fff !important;
|
||
font-weight: 500;
|
||
text-decoration: none !important;
|
||
cursor: pointer;
|
||
transition: filter 0.12s ease, opacity 0.12s ease;
|
||
box-decoration-break: clone;
|
||
-webkit-box-decoration-break: clone;
|
||
}
|
||
a.j13-mention-token:hover {
|
||
filter: brightness(1.08);
|
||
opacity: 0.95;
|
||
}
|
||
.dark .j13-mention-token {
|
||
/* 暗色下 accent 偏亮,用实心 accent + 配套字色 */
|
||
background: var(--accent);
|
||
color: var(--accent-on) !important;
|
||
}
|
||
|
||
@layer components {
|
||
/* ----- 小标签(旧名 .kicker 保留兼容) ----- */
|
||
.kicker {
|
||
font-family: var(--font-sans);
|
||
font-size: 12.5px;
|
||
font-weight: 500;
|
||
letter-spacing: 0.02em;
|
||
color: var(--ink-3);
|
||
}
|
||
|
||
/* ----- 卡片 ----- */
|
||
.panel {
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r);
|
||
box-shadow: var(--shadow-sm);
|
||
}
|
||
/* 阅读型页面(公文壳 / 书库读页)手机端中栏去块化:
|
||
直接子级 panel 贴边铺满(-mx-4 抵消 #main 移动端 px-4),与帖子详情页移动端同款;
|
||
仅作用于直接子级,正文内的条目卡等嵌套 panel 不受影响 */
|
||
@media (max-width: 639.98px) {
|
||
.j13-doc-bleed > .panel {
|
||
margin-left: -1rem;
|
||
margin-right: -1rem;
|
||
border-radius: 0;
|
||
border-left-width: 0;
|
||
border-right-width: 0;
|
||
box-shadow: none;
|
||
}
|
||
}
|
||
.hover-lift {
|
||
transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
|
||
}
|
||
.hover-lift:hover {
|
||
transform: translateY(-2px);
|
||
box-shadow: var(--shadow);
|
||
border-color: var(--line-2);
|
||
}
|
||
|
||
/* 整行可点:标题链接的 ::after 铺满最近的 relative 行容器,
|
||
行内其他交互元素加 .above-link 抬到点击层之上 */
|
||
.stretch-link::after {
|
||
content: "";
|
||
position: absolute;
|
||
inset: 0;
|
||
z-index: 1;
|
||
}
|
||
/* 标题本身在 overflow 里会被裁半圈;焦点画在铺满整行的 ::after 内侧 */
|
||
.stretch-link:focus-visible {
|
||
outline: none;
|
||
}
|
||
.stretch-link:focus-visible::after {
|
||
box-shadow: inset 0 0 0 2.5px var(--accent);
|
||
}
|
||
.above-link {
|
||
position: relative;
|
||
z-index: 2;
|
||
}
|
||
|
||
/* ----- 按钮(胶囊) ----- */
|
||
.btn {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 7px;
|
||
padding: 10px 20px;
|
||
border-radius: 999px;
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
line-height: 1;
|
||
border: 1px solid transparent;
|
||
cursor: pointer;
|
||
transition: background 0.15s, border-color 0.15s, color 0.15s,
|
||
transform 0.12s ease, box-shadow 0.15s;
|
||
white-space: nowrap;
|
||
}
|
||
.btn:active { transform: scale(0.97); }
|
||
.btn:disabled { opacity: 0.5; cursor: not-allowed; }
|
||
|
||
.btn-primary {
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
/* 阴影色跟随动态主题色(color-mix 引用令牌,换肤自动生效) */
|
||
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.12),
|
||
0 2px 8px color-mix(in srgb, var(--accent) 26%, transparent);
|
||
}
|
||
.btn-primary:hover:not(:disabled) {
|
||
background: var(--accent-hi);
|
||
transform: translateY(-1px);
|
||
box-shadow: 0 2px 6px rgba(16, 24, 40, 0.1),
|
||
0 8px 20px color-mix(in srgb, var(--accent) 34%, transparent);
|
||
}
|
||
.btn-primary:active:not(:disabled) {
|
||
transform: translateY(0);
|
||
}
|
||
/* 与 btn-primary 同款,历史类名兼容 */
|
||
.btn-accent {
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.12),
|
||
0 2px 8px color-mix(in srgb, var(--accent) 26%, transparent);
|
||
}
|
||
.btn-accent:hover:not(:disabled) {
|
||
background: var(--accent-hi);
|
||
transform: translateY(-1px);
|
||
box-shadow: 0 2px 6px rgba(16, 24, 40, 0.1),
|
||
0 8px 20px color-mix(in srgb, var(--accent) 34%, transparent);
|
||
}
|
||
.btn-accent:active:not(:disabled) {
|
||
transform: translateY(0);
|
||
}
|
||
|
||
.btn-line {
|
||
background: var(--panel);
|
||
border-color: var(--line-2);
|
||
color: var(--ink);
|
||
}
|
||
.btn-line:hover:not(:disabled) {
|
||
border-color: var(--accent);
|
||
color: var(--accent);
|
||
}
|
||
|
||
.btn-danger {
|
||
background: var(--danger-soft);
|
||
color: var(--danger);
|
||
}
|
||
.btn-danger:hover:not(:disabled) {
|
||
background: var(--danger);
|
||
color: #fff;
|
||
}
|
||
.dark .btn-danger:hover:not(:disabled) {
|
||
/* 暗色 danger 为亮红,白字仅 2.79:1,改用深色文字 */
|
||
color: #1a0c0b;
|
||
}
|
||
|
||
.btn-sm { padding: 7px 14px; font-size: 13px; }
|
||
|
||
/* ----- 成功操作(审核通过等) ----- */
|
||
.btn-ok {
|
||
background: var(--ok-soft);
|
||
color: var(--ok);
|
||
}
|
||
.btn-ok:hover:not(:disabled) {
|
||
background: var(--ok);
|
||
color: #fff;
|
||
}
|
||
.dark .btn-ok:hover:not(:disabled) {
|
||
color: #0a1a10;
|
||
}
|
||
|
||
/* ============================================================
|
||
管理后台控件(仅 /admin;颜色全部走令牌)
|
||
============================================================ */
|
||
.admin-switch {
|
||
position: relative;
|
||
flex-shrink: 0;
|
||
width: 2.75rem;
|
||
height: 1.625rem;
|
||
border-radius: 999px;
|
||
border: none;
|
||
padding: 0;
|
||
cursor: pointer;
|
||
transition: background 0.15s ease;
|
||
background: var(--line-2);
|
||
}
|
||
.admin-switch[aria-checked="true"] {
|
||
background: var(--accent);
|
||
}
|
||
.admin-switch:disabled {
|
||
opacity: 0.6;
|
||
cursor: not-allowed;
|
||
}
|
||
.admin-switch:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.admin-switch-knob {
|
||
position: absolute;
|
||
top: 0.125rem;
|
||
left: 0.125rem;
|
||
width: 1.375rem;
|
||
height: 1.375rem;
|
||
border-radius: 999px;
|
||
background: var(--panel);
|
||
box-shadow: var(--shadow-sm);
|
||
transition: transform 0.15s ease;
|
||
}
|
||
.admin-switch[aria-checked="true"] .admin-switch-knob {
|
||
transform: translateX(1.125rem);
|
||
}
|
||
|
||
.admin-seg {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.375rem;
|
||
padding: 0.5rem 0.875rem;
|
||
border-radius: 999px;
|
||
border: none;
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
line-height: 1.35;
|
||
cursor: pointer;
|
||
transition: background 0.15s ease, color 0.15s ease;
|
||
color: var(--ink-2);
|
||
background: var(--panel-2);
|
||
}
|
||
.admin-seg:hover:not(:disabled):not([aria-selected="true"]):not([aria-pressed="true"]) {
|
||
color: var(--ink);
|
||
background: var(--tint);
|
||
}
|
||
.admin-seg[aria-selected="true"],
|
||
.admin-seg[aria-pressed="true"],
|
||
.admin-seg[aria-current="page"] {
|
||
background: var(--nav-active-bg);
|
||
color: var(--nav-active-ink);
|
||
}
|
||
.admin-seg:disabled {
|
||
opacity: 0.5;
|
||
cursor: not-allowed;
|
||
}
|
||
.admin-seg:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.admin-seg-count {
|
||
min-width: 1.25rem;
|
||
padding: 0 0.375rem;
|
||
border-radius: 999px;
|
||
font-size: 11px;
|
||
font-variant-numeric: tabular-nums;
|
||
line-height: 1.7;
|
||
background: var(--panel);
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-seg[aria-selected="true"] .admin-seg-count,
|
||
.admin-seg[aria-pressed="true"] .admin-seg-count,
|
||
.admin-seg[aria-current="page"] .admin-seg-count {
|
||
color: var(--nav-active-ink);
|
||
}
|
||
.admin-seg-sm {
|
||
padding: 0.375rem 0.75rem;
|
||
font-size: 12.5px;
|
||
}
|
||
|
||
/* 站点设置:限宽左对齐,不写入后台公共主容器(画布保持镂空,与其他管理页一致) */
|
||
@media (min-width: 1920px) {
|
||
.admin-canvas:has(.admin-settings-page) {
|
||
padding-left: 3rem; /* 宽屏距主导航最多约 48px;1024+ 默认 2rem */
|
||
}
|
||
}
|
||
.admin-settings-page {
|
||
width: 100%;
|
||
max-width: 1120px;
|
||
margin-inline: 0;
|
||
container-type: inline-size;
|
||
container-name: settings-page;
|
||
}
|
||
.admin-settings-page > .mb-5 {
|
||
margin-bottom: 1.25rem;
|
||
}
|
||
.admin-settings-work {
|
||
display: grid;
|
||
grid-template-columns: 10rem minmax(0, 1fr);
|
||
gap: 1.5rem;
|
||
align-items: start;
|
||
}
|
||
.admin-settings-nav-col {
|
||
min-width: 0;
|
||
position: sticky;
|
||
top: 0;
|
||
align-self: start;
|
||
z-index: 5;
|
||
/* 画布镂空后导航改白色卡片:盖住滚动内容,并与右侧设置组卡片同语言 */
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r);
|
||
padding: 0.5rem 0.4rem;
|
||
margin-block: -0.15rem;
|
||
}
|
||
.admin-settings-nav {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.15rem;
|
||
}
|
||
.admin-settings-nav-link {
|
||
display: flex;
|
||
align-items: center;
|
||
width: 100%;
|
||
min-height: 2.25rem;
|
||
padding: 0.4rem 0.7rem;
|
||
border-radius: 0.65rem;
|
||
font-size: 13.5px;
|
||
font-weight: 500;
|
||
line-height: 1.35;
|
||
color: var(--ink-2);
|
||
text-align: left;
|
||
border: none;
|
||
background: transparent;
|
||
cursor: pointer;
|
||
font-family: inherit;
|
||
text-decoration: none;
|
||
}
|
||
.admin-settings-nav-link:hover {
|
||
background: var(--panel-2);
|
||
color: var(--ink);
|
||
}
|
||
.admin-settings-nav-link:visited {
|
||
color: var(--ink-2);
|
||
}
|
||
.admin-settings-nav-link[aria-current="page"],
|
||
.admin-settings-nav-link[aria-current="page"]:visited {
|
||
background: var(--nav-active-bg);
|
||
color: var(--nav-active-ink);
|
||
font-weight: 600;
|
||
}
|
||
.admin-settings-nav-link:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.admin-settings-nav-soon {
|
||
margin-top: 0.5rem;
|
||
padding-top: 0.5rem;
|
||
border-top: 1px solid var(--line);
|
||
}
|
||
.admin-settings-nav-soon-summary {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.35rem;
|
||
width: 100%;
|
||
min-height: 2rem;
|
||
padding: 0.3rem 0.7rem;
|
||
border-radius: 0.5rem;
|
||
font-size: 12px;
|
||
font-weight: 550;
|
||
line-height: 1.35;
|
||
color: var(--ink-3);
|
||
cursor: pointer;
|
||
list-style: none;
|
||
font-family: inherit;
|
||
}
|
||
.admin-settings-nav-soon-summary::-webkit-details-marker,
|
||
.admin-settings-nav-soon-summary::marker {
|
||
display: none;
|
||
content: "";
|
||
}
|
||
.admin-settings-nav-soon-summary::before {
|
||
content: "";
|
||
width: 0.35rem;
|
||
height: 0.35rem;
|
||
border-right: 1.5px solid currentColor;
|
||
border-bottom: 1.5px solid currentColor;
|
||
transform: rotate(-45deg);
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-settings-nav-soon[open] .admin-settings-nav-soon-summary::before {
|
||
transform: rotate(45deg);
|
||
}
|
||
.admin-settings-nav-soon-summary:hover {
|
||
background: var(--panel-2);
|
||
color: var(--ink-2);
|
||
}
|
||
.admin-settings-nav-soon-summary:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.admin-settings-nav-soon-list {
|
||
margin: 0.15rem 0 0;
|
||
padding: 0 0.7rem 0.2rem;
|
||
list-style: none;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.15rem;
|
||
}
|
||
.admin-settings-nav-soon-list li {
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
color: var(--ink-3);
|
||
pointer-events: none;
|
||
}
|
||
.admin-settings-main {
|
||
min-width: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1.25rem;
|
||
container-type: inline-size;
|
||
container-name: settings-form;
|
||
}
|
||
.admin-settings-stack {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1.25rem;
|
||
min-width: 0;
|
||
}
|
||
.admin-settings-group {
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r);
|
||
overflow: hidden;
|
||
}
|
||
.admin-settings-group-head {
|
||
padding: 1.25rem 1.25rem 0.75rem;
|
||
}
|
||
.admin-settings-group-title {
|
||
margin: 0;
|
||
font-size: 15px;
|
||
font-weight: 650;
|
||
color: var(--ink);
|
||
}
|
||
.admin-settings-group-desc {
|
||
margin: 0.3rem 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.5;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-settings-group-body {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1rem;
|
||
padding: 0 1.25rem 1.25rem;
|
||
}
|
||
.admin-settings-group-footer {
|
||
padding: 0 1.25rem 1.25rem;
|
||
}
|
||
.admin-settings-group:has(.admin-settings-group-footer) .admin-settings-group-body {
|
||
padding-bottom: 0.75rem;
|
||
}
|
||
#settings-identity,
|
||
#settings-brand,
|
||
#settings-footer {
|
||
scroll-margin-top: 1rem;
|
||
}
|
||
.admin-identity-studio {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.95rem;
|
||
max-width: min(36rem, 100%);
|
||
}
|
||
.admin-identity-url {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: baseline;
|
||
gap: 0.3rem 0.65rem;
|
||
padding: 0.55rem 0.75rem;
|
||
border-radius: 10px;
|
||
background: var(--panel-2);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
.admin-identity-url-label {
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
color: var(--ink-3);
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-identity-url-value {
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
color: var(--ink-2);
|
||
overflow-wrap: anywhere;
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||
}
|
||
.admin-identity-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||
gap: 0.95rem 0.85rem;
|
||
}
|
||
.admin-identity-field .admin-field-head {
|
||
margin-bottom: 0.35rem;
|
||
}
|
||
.admin-identity-title-preview {
|
||
margin: -0.35rem 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-identity-title-preview strong {
|
||
font-weight: 600;
|
||
color: var(--ink-2);
|
||
}
|
||
.admin-identity-keywords-head {
|
||
display: flex;
|
||
align-items: baseline;
|
||
justify-content: space-between;
|
||
gap: 0.75rem;
|
||
margin-bottom: 0.35rem;
|
||
}
|
||
.admin-identity-keywords-box {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.55rem;
|
||
padding: 0.65rem 0.75rem;
|
||
border-radius: 12px;
|
||
background: var(--panel);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
.admin-identity-keywords-box .admin-settings-keywords {
|
||
margin-bottom: 0;
|
||
}
|
||
.admin-identity-keywords-add {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.5rem;
|
||
}
|
||
@container settings-form (max-width: 559px) {
|
||
.admin-identity-grid {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
}
|
||
.admin-settings-meta-bar {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: baseline;
|
||
gap: 0.35rem 0.75rem;
|
||
padding: 0.65rem 0.85rem;
|
||
border-radius: 12px;
|
||
background: var(--panel-2);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
.admin-settings-meta-bar-label {
|
||
font-size: 12.5px;
|
||
font-weight: 600;
|
||
color: var(--ink-2);
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-settings-meta-bar-value {
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
color: var(--ink);
|
||
overflow-wrap: anywhere;
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||
}
|
||
.admin-settings-title-preview {
|
||
margin: 0.45rem 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-settings-title-preview strong {
|
||
font-weight: 600;
|
||
color: var(--ink);
|
||
}
|
||
.admin-settings-row-secondary .admin-settings-row-name {
|
||
color: var(--ink-2);
|
||
font-weight: 500;
|
||
}
|
||
.admin-brand-studio {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1rem;
|
||
max-width: min(44rem, 100%);
|
||
}
|
||
.admin-brand-studio-preview {
|
||
border-radius: 12px;
|
||
overflow: hidden;
|
||
background: var(--panel-2);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
.admin-brand-studio-chrome {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.35rem;
|
||
padding: 0.45rem 0.75rem;
|
||
border-bottom: 1px solid var(--line);
|
||
background: color-mix(in srgb, var(--panel) 70%, var(--panel-2));
|
||
}
|
||
.admin-brand-studio-chrome span {
|
||
width: 0.55rem;
|
||
height: 0.55rem;
|
||
border-radius: 999px;
|
||
background: var(--line-2);
|
||
}
|
||
.admin-brand-studio-toolbar {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 0.75rem 1.25rem;
|
||
align-items: center;
|
||
}
|
||
.admin-brand-studio-field {
|
||
display: inline-flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.45rem 0.65rem;
|
||
}
|
||
.admin-brand-studio-kicker {
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
color: var(--ink-3);
|
||
letter-spacing: 0.02em;
|
||
}
|
||
.admin-brand-size-row {
|
||
display: inline-flex;
|
||
flex-wrap: wrap;
|
||
gap: 0.35rem;
|
||
}
|
||
.admin-brand-size-chip {
|
||
appearance: none;
|
||
border: 0;
|
||
font: inherit;
|
||
display: inline-flex;
|
||
flex-direction: column;
|
||
align-items: flex-start;
|
||
gap: 0.1rem;
|
||
padding: 0.35rem 0.7rem;
|
||
border-radius: 0.65rem;
|
||
background: var(--panel);
|
||
color: var(--ink-2);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
cursor: pointer;
|
||
line-height: 1.25;
|
||
}
|
||
.admin-brand-size-chip-label {
|
||
font-size: 12.5px;
|
||
font-weight: 600;
|
||
}
|
||
.admin-brand-size-chip-px {
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
font-variant-numeric: tabular-nums;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-brand-size-chip.is-on {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
box-shadow: inset 0 0 0 1px var(--accent);
|
||
}
|
||
.admin-brand-size-chip.is-on .admin-brand-size-chip-px {
|
||
color: color-mix(in srgb, var(--accent) 75%, var(--ink-3));
|
||
}
|
||
.admin-brand-size-chip:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.admin-brand-studio-assets {
|
||
display: grid;
|
||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||
gap: 0.75rem;
|
||
}
|
||
.admin-brand-asset {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.55rem;
|
||
min-width: 0;
|
||
padding: 0.65rem;
|
||
border-radius: 12px;
|
||
background: var(--panel-2);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
.admin-brand-asset.is-compact .admin-brand-swatch {
|
||
height: 4.25rem;
|
||
}
|
||
.admin-brand-asset-meta {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.4rem;
|
||
}
|
||
.admin-brand-asset-label {
|
||
font-size: 12.5px;
|
||
font-weight: 600;
|
||
color: var(--ink);
|
||
}
|
||
.admin-brand-asset-actions {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.3rem;
|
||
}
|
||
/* 品牌图固定对外地址:点击复制,友链引用用 */
|
||
.admin-brand-alias {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.3rem;
|
||
min-width: 0;
|
||
padding: 0.2rem 0.45rem;
|
||
border-radius: 8px;
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
font-size: 11.5px;
|
||
color: var(--ink-2);
|
||
text-align: left;
|
||
}
|
||
.admin-brand-alias:hover {
|
||
color: var(--ink);
|
||
box-shadow: inset 0 0 0 1px var(--accent, var(--line));
|
||
}
|
||
.admin-brand-alias-url {
|
||
min-width: 0;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
font-family: var(--font-jetbrains), ui-monospace, monospace;
|
||
}
|
||
.admin-settings-row {
|
||
display: grid;
|
||
grid-template-columns: 10.75rem minmax(0, 1fr);
|
||
gap: 0.35rem 1.5rem;
|
||
align-items: start;
|
||
}
|
||
.admin-settings-row.is-wide {
|
||
grid-template-columns: minmax(0, 1fr);
|
||
}
|
||
.admin-settings-row.is-wide .admin-settings-row-label {
|
||
padding-top: 0;
|
||
}
|
||
.admin-settings-row-label {
|
||
min-width: 0;
|
||
padding-top: 0.5rem;
|
||
}
|
||
.admin-settings-row-name {
|
||
display: block;
|
||
font-size: 14px;
|
||
font-weight: 550;
|
||
line-height: 1.4;
|
||
color: var(--ink);
|
||
overflow-wrap: anywhere;
|
||
}
|
||
.admin-settings-row-hint {
|
||
margin: 0.25rem 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-settings-row-hint.is-below {
|
||
margin-top: 0.4rem;
|
||
}
|
||
.admin-settings-row-error {
|
||
margin: 0.35rem 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
color: var(--danger);
|
||
}
|
||
.admin-settings-row-control {
|
||
min-width: 0;
|
||
}
|
||
.admin-settings-control-text {
|
||
max-width: min(32.5rem, 100%);
|
||
}
|
||
.admin-settings-control-long {
|
||
max-width: min(40rem, 100%);
|
||
}
|
||
.admin-settings-control-select {
|
||
max-width: min(22.5rem, 100%);
|
||
}
|
||
.admin-settings-control-num {
|
||
max-width: min(11.25rem, 100%);
|
||
}
|
||
.admin-settings-actions {
|
||
display: grid;
|
||
grid-template-columns: 10.75rem minmax(0, 1fr);
|
||
gap: 0.35rem 1.5rem;
|
||
align-items: center;
|
||
}
|
||
.admin-settings-actions-inner {
|
||
grid-column: 2;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.75rem 1rem;
|
||
min-width: 0;
|
||
}
|
||
.admin-settings-actions-status {
|
||
margin: 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.4;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-settings-actions-status.is-error {
|
||
color: var(--danger);
|
||
font-weight: 500;
|
||
overflow-wrap: anywhere;
|
||
}
|
||
.ops-savebar .admin-settings-actions-inner {
|
||
flex-direction: column;
|
||
align-items: flex-start;
|
||
}
|
||
.ops-savebar .admin-settings-actions-status.is-error {
|
||
order: -1;
|
||
width: 100%;
|
||
max-width: 40rem;
|
||
padding: 10px 12px;
|
||
border: 1px solid color-mix(in srgb, var(--danger) 30%, transparent);
|
||
background: var(--danger-soft);
|
||
border-radius: var(--r-sm);
|
||
font-size: 13px;
|
||
line-height: 1.5;
|
||
}
|
||
.admin-settings-actions-btns {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.5rem;
|
||
}
|
||
.admin-settings-actions .btn:disabled {
|
||
opacity: 0.72;
|
||
}
|
||
.admin-settings-instant {
|
||
font-size: 12.5px;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-settings-divider {
|
||
height: 1px;
|
||
background: var(--line);
|
||
margin: 0.1rem 0;
|
||
}
|
||
.admin-brand-lockup-preview-bar {
|
||
min-height: 68px;
|
||
padding: 0.35rem 1rem 0.85rem;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
.admin-brand-swatch {
|
||
height: 5rem;
|
||
border-radius: 10px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
padding: 0.65rem;
|
||
overflow: hidden;
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-brand-swatch img {
|
||
/* 按槽位高度铺满,宽度按比例自适应;超宽时由 max-width + contain 收边 */
|
||
height: 100%;
|
||
width: auto;
|
||
max-width: 100%;
|
||
object-fit: contain;
|
||
}
|
||
.admin-brand-swatch-light {
|
||
background: #f4f6f3;
|
||
color: #3d4a44;
|
||
box-shadow: inset 0 0 0 1px rgba(15, 23, 42, 0.08);
|
||
}
|
||
.admin-brand-swatch-dark {
|
||
background: #1a221e;
|
||
color: #c5d0ca;
|
||
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
|
||
}
|
||
.admin-brand-swatch-neutral {
|
||
background: var(--panel);
|
||
color: var(--ink-3);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
@container settings-form (max-width: 719px) {
|
||
.admin-brand-studio-assets {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
}
|
||
#settings-identity .admin-settings-actions,
|
||
#settings-brand .admin-settings-actions,
|
||
#settings-url-style .admin-settings-actions,
|
||
#settings-footer .admin-settings-actions,
|
||
#settings-header-nav .admin-settings-actions,
|
||
#settings-mobile-tabbar .admin-settings-actions {
|
||
grid-template-columns: minmax(0, 1fr);
|
||
}
|
||
#settings-identity .admin-settings-actions-inner,
|
||
#settings-brand .admin-settings-actions-inner,
|
||
#settings-url-style .admin-settings-actions-inner,
|
||
#settings-footer .admin-settings-actions-inner,
|
||
#settings-header-nav .admin-settings-actions-inner,
|
||
#settings-mobile-tabbar .admin-settings-actions-inner {
|
||
grid-column: 1;
|
||
}
|
||
.admin-settings-keywords {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 0.4rem;
|
||
margin-bottom: 0.65rem;
|
||
}
|
||
.admin-settings-kw {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.25rem;
|
||
max-width: 100%;
|
||
border-radius: 999px;
|
||
padding: 0.2rem 0.65rem;
|
||
font-size: 12.5px;
|
||
color: var(--ink);
|
||
background: var(--panel-2);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
overflow-wrap: anywhere;
|
||
}
|
||
.admin-footer-studio {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.85rem;
|
||
max-width: min(56rem, 100%);
|
||
}
|
||
.admin-footer-align-toggle {
|
||
display: inline-flex;
|
||
align-items: stretch;
|
||
width: 100%;
|
||
border-radius: 999px;
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
background: var(--panel-2);
|
||
overflow: hidden;
|
||
}
|
||
.admin-footer-align-opt {
|
||
appearance: none;
|
||
border: 0;
|
||
flex: 1 1 0;
|
||
background: transparent;
|
||
color: var(--ink-3);
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
padding: 0.4rem 0.2rem;
|
||
text-align: center;
|
||
cursor: pointer;
|
||
}
|
||
.admin-footer-align-opt.is-on {
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
.admin-footer-align-opt:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: -2px;
|
||
}
|
||
.admin-footer-preview {
|
||
display: grid;
|
||
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
|
||
align-items: center;
|
||
gap: 0.5rem 1rem;
|
||
padding: 0.7rem 0.95rem;
|
||
border-radius: 12px;
|
||
background: var(--panel-2);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
.admin-footer-preview-zone {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.35rem 0.75rem;
|
||
min-width: 0;
|
||
}
|
||
.admin-footer-preview-zone-left {
|
||
justify-self: start;
|
||
justify-content: flex-start;
|
||
}
|
||
.admin-footer-preview-zone-center {
|
||
justify-self: center;
|
||
justify-content: center;
|
||
}
|
||
.admin-footer-preview-zone-right {
|
||
justify-self: end;
|
||
justify-content: flex-end;
|
||
}
|
||
.admin-footer-preview-copy {
|
||
font-size: 12.5px;
|
||
color: var(--ink-3);
|
||
white-space: nowrap;
|
||
}
|
||
.admin-footer-preview-links {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.35rem 0.85rem;
|
||
min-width: 0;
|
||
}
|
||
.admin-footer-preview-link {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.2rem;
|
||
font-size: 12.5px;
|
||
color: var(--ink-2);
|
||
overflow-wrap: anywhere;
|
||
}
|
||
.admin-footer-preview-empty {
|
||
color: var(--ink-3);
|
||
}
|
||
@media (max-width: 640px) {
|
||
.admin-footer-preview {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: stretch;
|
||
}
|
||
.admin-footer-preview-zone-left {
|
||
justify-content: flex-start;
|
||
}
|
||
.admin-footer-preview-zone-center {
|
||
justify-content: center;
|
||
}
|
||
.admin-footer-preview-zone-right {
|
||
justify-content: flex-end;
|
||
}
|
||
}
|
||
.admin-footer-table {
|
||
border: 1px solid var(--line);
|
||
border-radius: 12px;
|
||
overflow: hidden;
|
||
background: var(--panel);
|
||
}
|
||
.admin-footer-table-head,
|
||
.admin-footer-table-row {
|
||
display: grid;
|
||
/* 操作列固定宽:勿用 auto,否则表头空、行内图标会把「位置」列挤偏 */
|
||
grid-template-columns: 2rem minmax(0, 0.85fr) minmax(0, 1.25fr) 6.75rem 8.5rem 5.5rem;
|
||
gap: 0.5rem;
|
||
align-items: center;
|
||
padding: 0.55rem 0.75rem;
|
||
}
|
||
.admin-footer-empty {
|
||
margin: 0;
|
||
padding: 1rem 0.85rem;
|
||
font-size: 12.5px;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-footer-col-align {
|
||
min-width: 0;
|
||
width: 100%;
|
||
}
|
||
.admin-footer-table-head .admin-footer-col-align {
|
||
text-align: center;
|
||
}
|
||
.admin-footer-table-head {
|
||
background: var(--panel-2);
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
color: var(--ink-3);
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.admin-footer-table-row {
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.admin-footer-table-row:last-child {
|
||
border-bottom: 0;
|
||
}
|
||
.admin-footer-col-idx {
|
||
text-align: center;
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.admin-footer-col-open {
|
||
min-width: 0;
|
||
width: 100%;
|
||
}
|
||
.admin-footer-table-head .admin-footer-col-open {
|
||
text-align: center;
|
||
}
|
||
.admin-footer-col-ops {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: flex-end;
|
||
gap: 0.1rem;
|
||
width: 100%;
|
||
}
|
||
.admin-footer-open-toggle {
|
||
display: inline-flex;
|
||
align-items: stretch;
|
||
width: 100%;
|
||
padding: 2px;
|
||
border-radius: 0.55rem;
|
||
background: var(--panel-2);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
.admin-footer-open-opt {
|
||
appearance: none;
|
||
border: 0;
|
||
flex: 1 1 0;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 0.2rem;
|
||
min-height: 1.7rem;
|
||
padding: 0.15rem 0.35rem;
|
||
border-radius: 0.4rem;
|
||
font: inherit;
|
||
font-size: 11.5px;
|
||
font-weight: 550;
|
||
line-height: 1.2;
|
||
color: var(--ink-3);
|
||
background: transparent;
|
||
cursor: pointer;
|
||
white-space: nowrap;
|
||
}
|
||
.admin-footer-open-opt.is-on {
|
||
color: var(--ink);
|
||
background: var(--panel);
|
||
box-shadow: 0 0 0 1px var(--line), 0 1px 2px color-mix(in srgb, var(--ink) 8%, transparent);
|
||
}
|
||
.admin-footer-open-opt:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 1px;
|
||
}
|
||
@container settings-form (max-width: 719px) {
|
||
.admin-footer-table-head {
|
||
display: none;
|
||
}
|
||
.admin-footer-table-row {
|
||
display: grid;
|
||
grid-template-columns: 1.75rem minmax(0, 1fr) auto;
|
||
grid-template-areas:
|
||
"idx label ops"
|
||
"idx url ops"
|
||
"idx align ops"
|
||
"idx open ops";
|
||
gap: 0.4rem 0.5rem;
|
||
padding: 0.75rem;
|
||
}
|
||
.admin-footer-col-idx {
|
||
grid-area: idx;
|
||
align-self: start;
|
||
padding-top: 0.55rem;
|
||
}
|
||
.admin-footer-table-row > .admin-footer-cell-label {
|
||
grid-area: label;
|
||
}
|
||
.admin-footer-table-row > .admin-footer-cell-url {
|
||
grid-area: url;
|
||
}
|
||
.admin-footer-col-align {
|
||
grid-area: align;
|
||
}
|
||
.admin-footer-col-open {
|
||
grid-area: open;
|
||
}
|
||
.admin-footer-open-toggle {
|
||
max-width: 11rem;
|
||
}
|
||
.admin-footer-col-ops {
|
||
grid-area: ops;
|
||
flex-direction: column;
|
||
align-self: start;
|
||
}
|
||
}
|
||
|
||
/* 链接风格(伪静态)三选卡 */
|
||
.admin-url-style-card {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: stretch;
|
||
padding: 0.8rem 0.85rem;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
text-align: left;
|
||
cursor: pointer;
|
||
font: inherit;
|
||
color: inherit;
|
||
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
||
}
|
||
.admin-url-style-card.is-on {
|
||
border-color: color-mix(in srgb, var(--accent) 55%, var(--line));
|
||
box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 45%, transparent);
|
||
}
|
||
.admin-url-style-card:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 1px;
|
||
}
|
||
.admin-url-style-dot {
|
||
width: 0.85rem;
|
||
height: 0.85rem;
|
||
border-radius: 999px;
|
||
border: 1px solid var(--line-2);
|
||
background: var(--panel-2);
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-url-style-dot.is-on {
|
||
border-color: var(--accent);
|
||
background: radial-gradient(circle, var(--accent) 0 42%, transparent 46%);
|
||
}
|
||
.admin-url-style-examples {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.25rem;
|
||
margin-top: 0.6rem;
|
||
padding: 0.55rem 0.6rem;
|
||
border-radius: 8px;
|
||
background: var(--panel-2);
|
||
}
|
||
.admin-url-style-example {
|
||
display: flex;
|
||
align-items: baseline;
|
||
justify-content: space-between;
|
||
gap: 0.6rem;
|
||
font-size: 11px;
|
||
}
|
||
.admin-url-style-example code {
|
||
font-size: 11px;
|
||
color: var(--ink-2);
|
||
overflow-wrap: anywhere;
|
||
}
|
||
.admin-url-style-notes {
|
||
list-style: disc;
|
||
padding-left: 1.1rem;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.2rem;
|
||
color: var(--ink-3);
|
||
}
|
||
|
||
@container settings-page (max-width: 1039px) {
|
||
.admin-settings-work {
|
||
grid-template-columns: minmax(0, 1fr);
|
||
gap: 1rem;
|
||
}
|
||
.admin-settings-nav-col {
|
||
/* 窄屏菜单在上方,吸顶并留一点底边分隔 */
|
||
padding-bottom: 0.65rem;
|
||
margin-bottom: -0.15rem;
|
||
box-shadow: 0 1px 0 var(--line);
|
||
}
|
||
.admin-settings-nav {
|
||
flex-direction: row;
|
||
flex-wrap: wrap;
|
||
gap: 0.35rem;
|
||
}
|
||
.admin-settings-nav-link {
|
||
width: auto;
|
||
min-height: 2rem;
|
||
padding: 0.3rem 0.7rem;
|
||
background: var(--panel-2);
|
||
}
|
||
.admin-settings-nav-soon {
|
||
flex: 1 1 100%;
|
||
margin-top: 0.15rem;
|
||
padding-top: 0.5rem;
|
||
}
|
||
.admin-settings-nav-soon-list {
|
||
flex-direction: row;
|
||
flex-wrap: wrap;
|
||
gap: 0.35rem 0.85rem;
|
||
padding: 0.15rem 0.15rem 0;
|
||
}
|
||
}
|
||
|
||
@container settings-form (max-width: 719px) {
|
||
.admin-settings-row,
|
||
.admin-settings-actions {
|
||
grid-template-columns: minmax(0, 1fr);
|
||
gap: 0.35rem;
|
||
}
|
||
.admin-settings-row-label {
|
||
padding-top: 0;
|
||
}
|
||
.admin-settings-actions-inner {
|
||
grid-column: 1;
|
||
}
|
||
}
|
||
|
||
.admin-field-shell.has-count .admin-field-input {
|
||
padding-right: 0.5rem;
|
||
}
|
||
.admin-field-count.is-infield {
|
||
flex-shrink: 0;
|
||
padding: 0 10px 0 4px;
|
||
}
|
||
.admin-field-shell.is-area.has-count {
|
||
position: relative;
|
||
}
|
||
.admin-field-shell.is-area .admin-field-count.is-infield {
|
||
position: absolute;
|
||
top: 8px;
|
||
right: 10px;
|
||
padding: 0;
|
||
z-index: 1;
|
||
}
|
||
.admin-field-shell.is-area.has-count .admin-field-input {
|
||
padding-right: 3.5rem;
|
||
padding-top: 10px;
|
||
}
|
||
|
||
.j13-brand-slot {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
flex-shrink: 0;
|
||
overflow: hidden;
|
||
}
|
||
.j13-brand-slot[data-size="auto"] {
|
||
width: auto;
|
||
max-width: 176px;
|
||
}
|
||
.j13-brand-slot[data-size="auto"] > .j13-brand-logo {
|
||
width: auto;
|
||
max-width: 176px;
|
||
object-fit: contain;
|
||
}
|
||
.j13-brand-slot[data-frame="1"] {
|
||
border-radius: 8px;
|
||
background: color-mix(in srgb, var(--panel) 70%, transparent);
|
||
box-shadow: inset 0 0 0 1px var(--line);
|
||
}
|
||
.j13-brand-logo {
|
||
width: 100%;
|
||
height: 100%;
|
||
max-width: none;
|
||
object-fit: contain;
|
||
display: block;
|
||
}
|
||
.j13-brand-slot[data-fit="cover"] > .j13-brand-logo:not(.j13-brand-logo-tile) {
|
||
object-fit: cover;
|
||
}
|
||
.j13-brand-slot[data-fit="stretch"] > .j13-brand-logo:not(.j13-brand-logo-tile) {
|
||
object-fit: fill;
|
||
}
|
||
.j13-brand-logo-tile {
|
||
background-repeat: repeat;
|
||
background-size: auto;
|
||
background-position: left top;
|
||
}
|
||
.j13-brand-bubble {
|
||
width: 36px;
|
||
height: 36px;
|
||
}
|
||
.j13-brand-logo-dark {
|
||
display: none;
|
||
}
|
||
html.dark .j13-brand-logo-light {
|
||
display: none;
|
||
}
|
||
html.dark .j13-brand-logo-dark {
|
||
display: block;
|
||
}
|
||
|
||
.admin-icon-btn {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 2rem;
|
||
height: 2rem;
|
||
border-radius: 999px;
|
||
border: none;
|
||
padding: 0;
|
||
cursor: pointer;
|
||
color: var(--ink-3);
|
||
background: transparent;
|
||
transition: background 0.15s ease, color 0.15s ease;
|
||
}
|
||
.admin-icon-btn:hover:not(:disabled) {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
.admin-icon-btn.is-danger:hover:not(:disabled) {
|
||
background: var(--danger-soft);
|
||
color: var(--danger);
|
||
}
|
||
.admin-icon-btn.is-danger.is-active,
|
||
.admin-icon-btn.is-danger[aria-pressed="true"] {
|
||
color: var(--danger);
|
||
}
|
||
.admin-icon-btn.is-accent {
|
||
color: var(--accent);
|
||
}
|
||
.admin-icon-btn:disabled {
|
||
opacity: 0.5;
|
||
cursor: not-allowed;
|
||
}
|
||
.admin-icon-btn:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
|
||
/* 单页/公告管理:限宽左对齐,不套用设置页 1120px;画布保持镂空,与其他管理页一致 */
|
||
.admin-doc-page {
|
||
width: 100%;
|
||
margin-inline: 0;
|
||
min-width: 0;
|
||
}
|
||
.admin-doc-list {
|
||
max-width: 1240px;
|
||
}
|
||
/* 编辑器本身通栏:吸顶栏背景/分隔线才能横贯整个画布,不在 1440px 处被切断 */
|
||
.admin-doc-editor {
|
||
container-type: inline-size;
|
||
container-name: doc-editor;
|
||
}
|
||
/* 编辑器吸顶操作栏:返回/标题/状态 + 发布状态/撤销/保存,滚动时始终可见。
|
||
画布镂空透出全站画布层,操作栏用白色块(同用户管理吸顶栏),滚动时干净盖住内容 */
|
||
.admin-doc-sticky {
|
||
position: sticky;
|
||
top: 0;
|
||
z-index: 20;
|
||
margin-inline: -1rem;
|
||
padding: 0.6rem 1rem;
|
||
background: var(--panel);
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
@media (min-width: 640px) {
|
||
.admin-doc-sticky {
|
||
margin-inline: -1.5rem;
|
||
padding-inline: 1.5rem;
|
||
}
|
||
}
|
||
@media (min-width: 1024px) {
|
||
.admin-doc-sticky {
|
||
margin-inline: -2rem;
|
||
padding-inline: 2rem;
|
||
}
|
||
}
|
||
/* 栏内内容与下方 1440px 内容区对齐(编辑器已通栏) */
|
||
.admin-doc-sticky-inner {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 0.5rem 1rem;
|
||
flex-wrap: wrap;
|
||
max-width: 1440px;
|
||
margin-right: auto;
|
||
}
|
||
.admin-doc-sticky-title {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.55rem;
|
||
flex: 1 1 auto;
|
||
min-width: 0;
|
||
}
|
||
.admin-doc-sticky-icon {
|
||
width: 2rem;
|
||
height: 2rem;
|
||
border-radius: 0.65rem;
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-doc-sticky-title h1 {
|
||
margin: 0;
|
||
font-size: 17px;
|
||
line-height: 1.3;
|
||
font-weight: 750;
|
||
letter-spacing: -0.01em;
|
||
color: var(--ink);
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
.admin-doc-back {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 0.3rem;
|
||
min-width: 2rem;
|
||
min-height: 2rem;
|
||
padding: 0 0.6rem;
|
||
border: 1px solid var(--line);
|
||
border-radius: 999px;
|
||
background: var(--panel);
|
||
font-size: 12.5px;
|
||
color: var(--ink-2);
|
||
text-decoration: none;
|
||
flex-shrink: 0;
|
||
transition: border-color 0.15s ease, color 0.15s ease;
|
||
}
|
||
.admin-doc-back:hover {
|
||
color: var(--accent);
|
||
border-color: var(--accent);
|
||
}
|
||
.admin-doc-back:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
@media (max-width: 420px) {
|
||
.admin-doc-back-text {
|
||
display: none;
|
||
}
|
||
}
|
||
.admin-doc-sticky-actions {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.45rem 0.55rem;
|
||
flex-wrap: wrap;
|
||
}
|
||
.admin-doc-sticky-actions .btn {
|
||
min-height: 2.25rem;
|
||
}
|
||
.admin-doc-status {
|
||
margin: 0 0 0 0.15rem;
|
||
font-size: 12.5px;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-doc-status.is-error {
|
||
color: var(--danger);
|
||
}
|
||
.admin-doc-split {
|
||
display: grid;
|
||
grid-template-columns: minmax(0, 1fr);
|
||
gap: 1.25rem;
|
||
align-items: start;
|
||
max-width: 1440px;
|
||
}
|
||
.admin-doc-main {
|
||
min-width: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1rem;
|
||
}
|
||
.admin-doc-label {
|
||
display: block;
|
||
margin: 0 0 0.4rem;
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
line-height: 1.4;
|
||
color: var(--ink-2);
|
||
}
|
||
.admin-doc-label-value {
|
||
margin-left: 0.4rem;
|
||
font-weight: 600;
|
||
color: var(--ink-3);
|
||
}
|
||
/* 主栏标题输入:正文中最大的输入项,突出「先起标题」 */
|
||
.admin-doc-title .admin-field-input {
|
||
font-size: 16.5px;
|
||
font-weight: 650;
|
||
letter-spacing: -0.01em;
|
||
min-height: 2.9rem;
|
||
}
|
||
.admin-doc-hint {
|
||
margin: 0.35rem 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.5;
|
||
color: var(--ink-3);
|
||
overflow-wrap: anywhere;
|
||
}
|
||
/* 编辑页主栏整块铺纯白(含标题与正文编辑区):画布镂空后编辑区域需要干净的白底,
|
||
右栏设置卡同为白卡,两卡之间露出纹饰画布 */
|
||
.admin-doc-editor .admin-doc-main {
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: 12px;
|
||
padding: 1.1rem 1.1rem 1.2rem;
|
||
}
|
||
/* 编辑器自带白卡边框在纯白主栏内会形成双层描边,扁平化融入主卡 */
|
||
.admin-doc-editor .admin-doc-main .j13-md-editor:not(.is-fullscreen) {
|
||
background: transparent;
|
||
border: 0;
|
||
border-radius: 0;
|
||
padding: 0;
|
||
}
|
||
/* 板块管理:低信息密度列表 —— 策略/状态/帖数并入板块元信息行,6 列并 3 列并限宽,
|
||
避免宽屏下名称列吞掉全部富余空间而显得空旷 */
|
||
.boards-panel {
|
||
max-width: 60rem;
|
||
}
|
||
.boards-head,
|
||
.boards-row {
|
||
display: grid;
|
||
grid-template-columns: 44px minmax(0, 1fr) auto;
|
||
gap: 0.75rem;
|
||
align-items: center;
|
||
padding-inline: 1rem;
|
||
}
|
||
.boards-head {
|
||
padding-block: 0.65rem;
|
||
font-size: 11.5px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.05em;
|
||
color: var(--ink-3);
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.boards-row {
|
||
padding-block: 0.8rem;
|
||
}
|
||
.boards-row + .boards-row {
|
||
border-top: 1px solid var(--line);
|
||
}
|
||
.boards-actions {
|
||
justify-self: end;
|
||
}
|
||
.boards-meta {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.45rem;
|
||
margin-top: 0.4rem;
|
||
}
|
||
.boards-meta-posts {
|
||
font-size: 11.5px;
|
||
color: var(--ink-3);
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
@media (max-width: 640px) {
|
||
.boards-head {
|
||
display: none;
|
||
}
|
||
.boards-row {
|
||
grid-template-columns: 40px minmax(0, 1fr);
|
||
}
|
||
.boards-actions {
|
||
grid-column: 2;
|
||
justify-self: start;
|
||
}
|
||
}
|
||
.admin-doc-md .j13-md-editor:not(.is-fullscreen) {
|
||
height: clamp(16rem, calc(100dvh - 22rem), 40rem);
|
||
min-height: 0;
|
||
border: 1px solid var(--line);
|
||
border-radius: 12px;
|
||
padding: 0.35rem 0.85rem 0.15rem;
|
||
background: var(--panel);
|
||
}
|
||
.admin-doc-md .j13-md-textarea,
|
||
.admin-doc-md .j13-md-preview {
|
||
min-height: 0;
|
||
overflow-y: auto;
|
||
}
|
||
.admin-doc-rail {
|
||
min-width: 0;
|
||
border: 1px solid var(--line);
|
||
border-radius: 12px;
|
||
background: var(--panel);
|
||
padding: 0.9rem 1rem 1.05rem;
|
||
}
|
||
.admin-doc-rail > summary {
|
||
cursor: pointer;
|
||
font-size: 14px;
|
||
font-weight: 650;
|
||
color: var(--ink);
|
||
list-style: none;
|
||
min-height: 2.25rem;
|
||
display: flex;
|
||
align-items: center;
|
||
position: relative;
|
||
padding-right: 1.5rem;
|
||
user-select: none;
|
||
}
|
||
.admin-doc-rail > summary::-webkit-details-marker {
|
||
display: none;
|
||
}
|
||
/* 折叠箭头:桌面双栏时 summary 隐藏,仅移动端单栏可见 */
|
||
.admin-doc-rail > summary::after {
|
||
content: "";
|
||
position: absolute;
|
||
right: 0.35rem;
|
||
top: 50%;
|
||
width: 0.42rem;
|
||
height: 0.42rem;
|
||
border-right: 1.5px solid var(--ink-3);
|
||
border-bottom: 1.5px solid var(--ink-3);
|
||
transform: translateY(-70%) rotate(45deg);
|
||
transition: transform 0.15s ease;
|
||
}
|
||
.admin-doc-rail[open] > summary::after {
|
||
transform: translateY(-30%) rotate(-135deg);
|
||
}
|
||
.admin-doc-rail-body {
|
||
display: flex;
|
||
flex-direction: column;
|
||
padding-top: 0.25rem;
|
||
}
|
||
/* 设置项分组:细分隔线代替卡片套卡片 */
|
||
.admin-doc-rail-body > * + * {
|
||
margin-top: 1.05rem;
|
||
padding-top: 1.05rem;
|
||
border-top: 1px solid var(--line);
|
||
}
|
||
.admin-doc-field {
|
||
min-width: 0;
|
||
}
|
||
.admin-doc-slug {
|
||
display: flex;
|
||
align-items: center;
|
||
min-height: 2.5rem;
|
||
border: 1px solid var(--control-border);
|
||
border-radius: 0.7rem;
|
||
background: var(--panel);
|
||
overflow: hidden;
|
||
}
|
||
.admin-doc-slug.is-invalid {
|
||
border-color: var(--danger);
|
||
}
|
||
.admin-doc-slug-prefix {
|
||
flex-shrink: 0;
|
||
padding-left: 0.75rem;
|
||
font-size: 14px;
|
||
color: var(--ink-3);
|
||
font-family: var(--font-mono, ui-monospace, monospace);
|
||
}
|
||
.admin-doc-slug-input {
|
||
flex: 1 1 auto;
|
||
min-width: 0;
|
||
height: 2.5rem;
|
||
border: 0;
|
||
background: transparent;
|
||
padding: 0 0.75rem 0 0.15rem;
|
||
font-size: 14px;
|
||
color: var(--ink);
|
||
font-family: var(--font-mono, ui-monospace, monospace);
|
||
}
|
||
.admin-doc-slug-input:focus {
|
||
outline: none;
|
||
}
|
||
.admin-doc-copy {
|
||
margin-top: 0.55rem;
|
||
min-height: 2.25rem;
|
||
}
|
||
.admin-doc-switchline {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.6rem;
|
||
min-height: 2.25rem;
|
||
font-size: 14px;
|
||
color: var(--ink);
|
||
}
|
||
.admin-doc-colors {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 0.45rem;
|
||
}
|
||
/* 标签胶囊实时预览:色块下方一条安静的展示条,与前台同款 j13-anno-tag */
|
||
.admin-doc-tagpreview {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.55rem;
|
||
margin-top: 0.7rem;
|
||
padding: 0.6rem 0.75rem;
|
||
border-radius: 0.7rem;
|
||
background: var(--bg);
|
||
}
|
||
.admin-doc-tagpreview::after {
|
||
content: attr(data-note);
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-doc-colors .j13-anno-dot {
|
||
width: 2.25rem;
|
||
height: 2.25rem;
|
||
}
|
||
.admin-doc-number {
|
||
width: 7.5rem;
|
||
height: 2.5rem;
|
||
padding: 0 0.75rem;
|
||
border: 1px solid var(--control-border);
|
||
border-radius: 0.7rem;
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
font-size: 14px;
|
||
}
|
||
.admin-doc-table-wrap {
|
||
min-width: 0;
|
||
}
|
||
.admin-doc-table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
font-size: 14px;
|
||
color: var(--ink);
|
||
}
|
||
.admin-doc-table th {
|
||
text-align: left;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
color: var(--ink-3);
|
||
padding: 0.55rem 0.85rem;
|
||
border-bottom: 1px solid var(--line);
|
||
white-space: nowrap;
|
||
}
|
||
.admin-doc-table td {
|
||
padding: 0.75rem 0.85rem;
|
||
border-bottom: 1px solid var(--line);
|
||
vertical-align: top;
|
||
font-size: 13.5px;
|
||
color: var(--ink-2);
|
||
}
|
||
.admin-doc-table tr:last-child td {
|
||
border-bottom: 0;
|
||
}
|
||
.admin-doc-title {
|
||
display: inline;
|
||
font-size: 14.5px;
|
||
font-weight: 650;
|
||
color: var(--ink);
|
||
text-decoration: none;
|
||
overflow-wrap: anywhere;
|
||
}
|
||
.admin-doc-title:hover {
|
||
color: var(--accent);
|
||
}
|
||
.admin-doc-title:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.admin-doc-path {
|
||
margin: 0.2rem 0 0;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.4rem;
|
||
}
|
||
.admin-doc-path code {
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
font-family: var(--font-mono, ui-monospace, monospace);
|
||
}
|
||
.admin-doc-excerpt {
|
||
margin: 0.25rem 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
color: var(--ink-3);
|
||
display: -webkit-box;
|
||
-webkit-line-clamp: 2;
|
||
-webkit-box-orient: vertical;
|
||
overflow: hidden;
|
||
}
|
||
.admin-doc-row-actions {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.15rem;
|
||
}
|
||
.admin-doc-textbtn {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 0.25rem;
|
||
min-height: 2.25rem;
|
||
min-width: 2.25rem;
|
||
padding: 0 0.55rem;
|
||
border: 0;
|
||
border-radius: 0.55rem;
|
||
background: transparent;
|
||
color: var(--ink-2);
|
||
font-size: 13.5px;
|
||
font-weight: 550;
|
||
text-decoration: none;
|
||
cursor: pointer;
|
||
font-family: inherit;
|
||
}
|
||
.admin-doc-textbtn:hover {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
.admin-doc-textbtn:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.admin-doc-more {
|
||
position: relative;
|
||
}
|
||
.admin-doc-menu {
|
||
position: absolute;
|
||
right: 0;
|
||
top: calc(100% + 0.2rem);
|
||
z-index: 5;
|
||
min-width: 7.5rem;
|
||
padding: 0.3rem;
|
||
border: 1px solid var(--line);
|
||
border-radius: 0.7rem;
|
||
background: var(--panel);
|
||
box-shadow: var(--shadow);
|
||
}
|
||
.admin-doc-menu.is-up {
|
||
top: auto;
|
||
bottom: calc(100% + 0.2rem);
|
||
}
|
||
.admin-doc-menu-item {
|
||
display: flex;
|
||
width: 100%;
|
||
min-height: 2.25rem;
|
||
align-items: center;
|
||
padding: 0 0.7rem;
|
||
border: 0;
|
||
border-radius: 0.45rem;
|
||
background: transparent;
|
||
color: var(--ink);
|
||
font-size: 13.5px;
|
||
cursor: pointer;
|
||
font-family: inherit;
|
||
text-align: left;
|
||
}
|
||
.admin-doc-menu-item.is-danger {
|
||
color: var(--danger);
|
||
}
|
||
.admin-doc-menu-item:hover:not(:disabled) {
|
||
background: var(--danger-soft);
|
||
}
|
||
.admin-doc-menu-item:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 1px;
|
||
}
|
||
.admin-doc-menu-item:disabled {
|
||
opacity: 0.5;
|
||
cursor: not-allowed;
|
||
}
|
||
|
||
/* 双栏阈值取 72rem:保证吸顶操作栏单行放下,右侧设置栏再入列 */
|
||
@container doc-editor (min-width: 72rem) {
|
||
.admin-doc-split {
|
||
grid-template-columns: minmax(0, 1fr) 20rem;
|
||
column-gap: 1.75rem;
|
||
}
|
||
.admin-doc-main {
|
||
grid-column: 1;
|
||
grid-row: 1;
|
||
}
|
||
.admin-doc-rail {
|
||
grid-column: 2;
|
||
grid-row: 1;
|
||
align-self: start;
|
||
position: sticky;
|
||
/* 吸顶操作栏(约 3.7rem)之下留出呼吸空隙 */
|
||
top: 4.5rem;
|
||
max-height: calc(100dvh - 10rem);
|
||
overflow: auto;
|
||
}
|
||
.admin-doc-rail > summary {
|
||
display: none;
|
||
}
|
||
.admin-doc-rail:not([open]) > .admin-doc-rail-body {
|
||
display: flex;
|
||
}
|
||
/* 现代浏览器(Chrome 131+)对关闭的 details 用 content-visibility 隐藏内容,
|
||
上一条 display 规则救不回来;桌面双栏强制可见,防止移动端折叠后拉宽窗口设置凭空消失 */
|
||
.admin-doc-rail:not([open])::details-content {
|
||
content-visibility: visible;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 760px) {
|
||
.admin-doc-table thead {
|
||
position: absolute;
|
||
width: 1px;
|
||
height: 1px;
|
||
overflow: hidden;
|
||
clip: rect(0 0 0 0);
|
||
}
|
||
.admin-doc-table,
|
||
.admin-doc-table tbody,
|
||
.admin-doc-table tr,
|
||
.admin-doc-table td {
|
||
display: block;
|
||
width: 100%;
|
||
}
|
||
.admin-doc-table tr {
|
||
padding: 0.35rem 0 0.6rem;
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.admin-doc-table td {
|
||
border-bottom: 0;
|
||
padding: 0.3rem 0.85rem;
|
||
}
|
||
.admin-doc-table td::before {
|
||
content: attr(data-label);
|
||
display: block;
|
||
margin-bottom: 0.15rem;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-doc-table tr:last-child {
|
||
border-bottom: 0;
|
||
}
|
||
}
|
||
|
||
.admin-status {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.25rem;
|
||
padding: 0.125rem 0.5rem;
|
||
border-radius: 999px;
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
line-height: 1.55;
|
||
white-space: nowrap;
|
||
}
|
||
.admin-status.is-ok {
|
||
background: var(--ok-soft);
|
||
color: var(--ok);
|
||
}
|
||
.admin-status.is-warn {
|
||
background: var(--gold-soft);
|
||
color: var(--gold);
|
||
}
|
||
.admin-status.is-danger {
|
||
background: var(--danger-soft);
|
||
color: var(--danger);
|
||
}
|
||
.admin-status.is-muted {
|
||
background: var(--tint);
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-status.is-accent {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
|
||
.ledger-row {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
height: 64px;
|
||
padding: 12px 20px;
|
||
border-top: 1px solid var(--line);
|
||
}
|
||
.ledger-row:first-child {
|
||
border-top: none;
|
||
}
|
||
.ledger-kind-icon {
|
||
width: 30px;
|
||
height: 30px;
|
||
border-radius: 999px;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
flex-shrink: 0;
|
||
font-size: 14px;
|
||
line-height: 1;
|
||
}
|
||
.ledger-kind-tag {
|
||
font-size: 11px;
|
||
padding: 2px 8px;
|
||
border-radius: 4px;
|
||
font-weight: 500;
|
||
line-height: 1.4;
|
||
white-space: nowrap;
|
||
flex-shrink: 0;
|
||
}
|
||
.ledger-kind-icon.is-checkin,
|
||
.ledger-kind-tag.is-checkin {
|
||
background: var(--ledger-checkin-bg);
|
||
color: var(--ledger-checkin-fg);
|
||
}
|
||
.ledger-kind-icon.is-bounty,
|
||
.ledger-kind-tag.is-bounty {
|
||
background: var(--ledger-bounty-bg);
|
||
color: var(--ledger-bounty-fg);
|
||
}
|
||
.ledger-kind-icon.is-file,
|
||
.ledger-kind-tag.is-file {
|
||
background: var(--ledger-file-bg);
|
||
color: var(--ledger-file-fg);
|
||
}
|
||
.ledger-kind-icon.is-typed,
|
||
.ledger-kind-tag.is-typed {
|
||
background: var(--ledger-typed-bg);
|
||
color: var(--ledger-typed-fg);
|
||
}
|
||
.ledger-kind-icon.is-system,
|
||
.ledger-kind-tag.is-system {
|
||
background: var(--tint);
|
||
color: var(--ink-2);
|
||
}
|
||
.ledger-amount {
|
||
width: 80px;
|
||
flex-shrink: 0;
|
||
text-align: right;
|
||
font-size: 15px;
|
||
font-weight: 600;
|
||
font-variant-numeric: tabular-nums;
|
||
line-height: 1.2;
|
||
}
|
||
|
||
/* 积分存量概览 */
|
||
.stock-card {
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 160px;
|
||
padding: 20px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: 12px;
|
||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
|
||
}
|
||
.stock-card-body {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 12px;
|
||
}
|
||
.stock-badge {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
font-size: 11px;
|
||
font-weight: 600;
|
||
line-height: 1.3;
|
||
padding: 4px 10px;
|
||
border-radius: 999px;
|
||
white-space: nowrap;
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.stock-badge.is-low {
|
||
background: var(--stock-badge-low-bg);
|
||
color: var(--stock-badge-low-fg);
|
||
}
|
||
.stock-badge.is-ok {
|
||
background: var(--stock-badge-ok-bg);
|
||
color: var(--stock-badge-ok-fg);
|
||
}
|
||
.stock-badge.is-hot {
|
||
background: var(--stock-badge-hot-bg);
|
||
color: var(--stock-badge-hot-fg);
|
||
}
|
||
.stock-bar {
|
||
display: flex;
|
||
height: 10px;
|
||
border-radius: 8px;
|
||
overflow: hidden;
|
||
background: var(--tint);
|
||
}
|
||
.stock-bar-seg {
|
||
height: 100%;
|
||
min-width: 0;
|
||
}
|
||
.stock-bar-seg.is-circ {
|
||
background: var(--stock-circ);
|
||
}
|
||
.stock-bar-seg.is-spent {
|
||
background: var(--stock-spent);
|
||
}
|
||
.stock-bar-seg.is-frozen {
|
||
background-color: var(--stock-frozen);
|
||
background-image: repeating-linear-gradient(
|
||
-45deg,
|
||
var(--stock-frozen-stripe) 0 3px,
|
||
transparent 3px 7px
|
||
);
|
||
}
|
||
|
||
.admin-toolbar {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.75rem;
|
||
padding: 0.75rem 1rem;
|
||
border-bottom: 1px solid var(--line);
|
||
background: var(--panel);
|
||
}
|
||
@media (min-width: 640px) {
|
||
.admin-toolbar {
|
||
padding: 0.875rem 1.25rem;
|
||
}
|
||
}
|
||
|
||
/* 用户管理:搜索栏 + 列头贴齐 admin-topbar(滚动容器是 .admin-canvas) */
|
||
.admin-users-page {
|
||
padding-top: 1.25rem;
|
||
}
|
||
@media (min-width: 640px) {
|
||
.admin-users-page {
|
||
padding-top: 1.5rem;
|
||
}
|
||
}
|
||
@media (min-width: 1024px) {
|
||
.admin-users-page {
|
||
padding-top: 1.75rem;
|
||
}
|
||
}
|
||
.admin-users-stick {
|
||
position: sticky;
|
||
top: 0;
|
||
z-index: 20;
|
||
background: var(--panel);
|
||
box-shadow: var(--shadow-sm);
|
||
}
|
||
|
||
/* 用户积分标签:画布顶内边距挪到这里(见未分层区 canvas:has 规则),吸顶 th 才能贴齐 admin-topbar */
|
||
.admin-points-users-tab {
|
||
padding-top: 1.25rem;
|
||
}
|
||
@media (min-width: 640px) {
|
||
.admin-points-users-tab {
|
||
padding-top: 1.5rem;
|
||
}
|
||
}
|
||
@media (min-width: 1024px) {
|
||
.admin-points-users-tab {
|
||
padding-top: 1.75rem;
|
||
}
|
||
}
|
||
|
||
/* 内容管理页:窄屏可整页滚;桌面高度由上方未分层的 canvas:has 规则锁定 */
|
||
.admin-content-page {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.75rem;
|
||
min-height: 0;
|
||
}
|
||
@media (min-width: 1024px) {
|
||
.admin-content-page {
|
||
flex: 1 1 auto;
|
||
min-height: 0;
|
||
height: 100%;
|
||
}
|
||
}
|
||
.admin-content-page > .mb-5 {
|
||
margin-bottom: 0 !important;
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-content-page > .mb-5 h1 {
|
||
font-size: 1.25rem;
|
||
}
|
||
@media (min-width: 640px) {
|
||
.admin-content-page > .mb-5 h1 {
|
||
font-size: 1.375rem;
|
||
}
|
||
}
|
||
.admin-content-page > .mb-5 .meta {
|
||
margin-top: 0.25rem;
|
||
}
|
||
|
||
/* 内容管理:PC 左中右三栏等高;仅列表区滚动 */
|
||
.admin-content-triptych {
|
||
display: grid;
|
||
gap: 0.85rem;
|
||
align-items: stretch;
|
||
min-height: 18rem;
|
||
}
|
||
@media (min-width: 1024px) {
|
||
.admin-content-triptych {
|
||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||
gap: 1rem;
|
||
flex: 1 1 auto;
|
||
min-height: 0;
|
||
height: auto;
|
||
}
|
||
}
|
||
/* 书库管理:左列表右编辑;桌面整页不滚(复用 admin-content-page 的 canvas 锁定),
|
||
两栏各自内部滚动;窄屏按 data-view 切换单栏 */
|
||
.admin-library-split {
|
||
display: grid;
|
||
gap: 0.85rem;
|
||
align-items: stretch;
|
||
min-height: 18rem;
|
||
}
|
||
@media (min-width: 1024px) {
|
||
.admin-library-split {
|
||
grid-template-columns: minmax(15rem, 21rem) minmax(0, 1fr);
|
||
gap: 1rem;
|
||
flex: 1 1 auto;
|
||
min-height: 0;
|
||
height: auto;
|
||
}
|
||
}
|
||
@media (max-width: 1023.98px) {
|
||
.admin-library-split[data-view="editor"] .admin-library-list {
|
||
display: none;
|
||
}
|
||
.admin-library-split[data-view="list"] .admin-library-editor {
|
||
display: none;
|
||
}
|
||
}
|
||
.admin-messages-panel {
|
||
flex: 1 1 auto;
|
||
min-height: 0;
|
||
}
|
||
/* 私聊监管:方向条与正文同一卡片,无间隙 */
|
||
.admin-dm-row {
|
||
min-width: 0;
|
||
}
|
||
.admin-dm-card {
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-width: 0;
|
||
border-radius: 0.55rem;
|
||
background: var(--panel-2);
|
||
border: 1px solid var(--line);
|
||
overflow: hidden;
|
||
}
|
||
.admin-dm-card-head {
|
||
padding: 0.4rem 0.65rem;
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.admin-dm-card-body {
|
||
padding: 0.55rem 0.7rem 0.65rem;
|
||
}
|
||
.admin-dm-pair-meta {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.45rem;
|
||
flex: 1 1 auto;
|
||
min-width: 0;
|
||
}
|
||
.admin-dm-pair-names {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.35rem;
|
||
min-width: 0;
|
||
flex: 1 1 auto;
|
||
}
|
||
.admin-dm-person {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.35rem;
|
||
min-width: 0;
|
||
}
|
||
.admin-dm-person-name {
|
||
font-size: 12.5px;
|
||
font-weight: 600;
|
||
letter-spacing: 0.01em;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
max-width: 7.5rem;
|
||
}
|
||
.admin-dm-arrow {
|
||
flex-shrink: 0;
|
||
font-weight: 500;
|
||
color: var(--ink-3);
|
||
font-size: 11px;
|
||
}
|
||
.admin-content-col {
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-height: 0;
|
||
overflow: hidden;
|
||
}
|
||
@media (min-width: 1024px) {
|
||
.admin-content-col {
|
||
height: 100%;
|
||
}
|
||
}
|
||
.admin-content-col-head,
|
||
.admin-content-col-toolbar,
|
||
.admin-content-col-pager {
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-content-col-body {
|
||
flex: 1 1 auto;
|
||
min-height: 0;
|
||
overflow-y: auto;
|
||
overscroll-behavior: contain;
|
||
}
|
||
.admin-content-col-toolbar {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0.55rem;
|
||
padding: 0.65rem 0.75rem;
|
||
border-bottom: 1px solid var(--line);
|
||
background: var(--panel);
|
||
}
|
||
.admin-content-action {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.3rem;
|
||
padding: 0.28rem 0.55rem;
|
||
border-radius: 8px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
color: var(--ink-2);
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
line-height: 1.2;
|
||
cursor: pointer;
|
||
transition: background 0.12s ease, border-color 0.12s ease, color 0.12s ease;
|
||
}
|
||
.admin-content-action:hover:not(:disabled) {
|
||
background: var(--panel-2);
|
||
color: var(--ink);
|
||
border-color: var(--line-2);
|
||
}
|
||
.admin-content-action:disabled {
|
||
opacity: 0.55;
|
||
cursor: not-allowed;
|
||
}
|
||
.admin-content-action.is-danger {
|
||
color: var(--danger);
|
||
border-color: color-mix(in srgb, var(--danger) 28%, var(--line));
|
||
background: color-mix(in srgb, var(--danger) 6%, var(--panel));
|
||
}
|
||
.admin-content-action.is-danger:hover:not(:disabled) {
|
||
background: color-mix(in srgb, var(--danger) 12%, var(--panel));
|
||
}
|
||
.admin-content-action.is-ok {
|
||
color: var(--ok);
|
||
border-color: color-mix(in srgb, var(--ok) 28%, var(--line));
|
||
background: color-mix(in srgb, var(--ok) 6%, var(--panel));
|
||
}
|
||
.admin-content-clamp {
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
-webkit-line-clamp: 3;
|
||
overflow: hidden;
|
||
word-break: break-word;
|
||
}
|
||
.admin-content-clamp.is-open {
|
||
display: block;
|
||
-webkit-line-clamp: unset;
|
||
}
|
||
/* 三栏宽度下状态条横向滚动,避免折行难看 */
|
||
.admin-content-col-toolbar .admin-content-status-scroll {
|
||
width: 100%;
|
||
overflow-x: auto;
|
||
-webkit-overflow-scrolling: touch;
|
||
scrollbar-width: thin;
|
||
}
|
||
.admin-content-col-toolbar .admin-content-status-scroll > div {
|
||
flex-wrap: nowrap !important;
|
||
}
|
||
.admin-content-col-toolbar .admin-content-status-scroll .admin-seg {
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-content-kind {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.2rem;
|
||
padding: 0.2rem;
|
||
border-radius: 999px;
|
||
background: var(--panel-2);
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-content-kind-btn {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.375rem;
|
||
padding: 0.4rem 0.8rem;
|
||
border: none;
|
||
border-radius: 999px;
|
||
background: transparent;
|
||
color: var(--ink-3);
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
line-height: 1.3;
|
||
cursor: pointer;
|
||
transition: background 0.15s ease, color 0.15s ease;
|
||
}
|
||
.admin-content-kind-btn:hover:not([aria-selected="true"]) {
|
||
color: var(--ink);
|
||
}
|
||
.admin-content-kind-btn[aria-selected="true"] {
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
box-shadow: 0 0 0 1px var(--line);
|
||
}
|
||
.admin-content-kind-btn:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.admin-content-kind-count {
|
||
min-width: 1.15rem;
|
||
padding: 0 0.35rem;
|
||
border-radius: 999px;
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
font-variant-numeric: tabular-nums;
|
||
line-height: 1.65;
|
||
background: var(--panel);
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-content-kind-btn[aria-selected="true"] .admin-content-kind-count {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
|
||
.admin-field-head {
|
||
display: flex;
|
||
align-items: baseline;
|
||
justify-content: space-between;
|
||
gap: 0.75rem;
|
||
margin-bottom: 0.5rem;
|
||
}
|
||
.admin-field-head .field-label {
|
||
margin-bottom: 0;
|
||
}
|
||
.admin-field-count {
|
||
font-size: 12px;
|
||
font-variant-numeric: tabular-nums;
|
||
color: var(--ink-3);
|
||
flex-shrink: 0;
|
||
}
|
||
.admin-field-shell {
|
||
display: flex;
|
||
align-items: center;
|
||
width: 100%;
|
||
}
|
||
.admin-field-shell.is-area {
|
||
display: block;
|
||
}
|
||
.admin-field-input {
|
||
width: 100%;
|
||
min-width: 0;
|
||
padding: 10px 12px;
|
||
color: var(--ink);
|
||
font-size: 14px;
|
||
line-height: 1.5;
|
||
font-family: var(--font-sans);
|
||
}
|
||
.admin-field-input::placeholder {
|
||
color: var(--ink-3);
|
||
}
|
||
.admin-field-input:disabled {
|
||
opacity: 0.6;
|
||
cursor: not-allowed;
|
||
}
|
||
textarea.admin-field-input {
|
||
display: block;
|
||
font-family: var(--font-sans);
|
||
font-size: 14px;
|
||
line-height: 1.7;
|
||
resize: vertical;
|
||
}
|
||
.admin-search-shell {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.625rem;
|
||
min-height: 2.875rem;
|
||
height: 2.875rem;
|
||
padding: 0 0.875rem;
|
||
}
|
||
.admin-search-shell .admin-field-input {
|
||
padding: 0;
|
||
height: 100%;
|
||
font-size: 14px;
|
||
line-height: 1.4;
|
||
}
|
||
|
||
.admin-stepper {
|
||
display: inline-flex;
|
||
align-items: stretch;
|
||
flex-shrink: 0;
|
||
height: 2.5rem;
|
||
overflow: hidden;
|
||
}
|
||
.admin-stepper.is-disabled {
|
||
opacity: 0.6;
|
||
}
|
||
.admin-stepper-btn {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 2.25rem;
|
||
border: none;
|
||
padding: 0;
|
||
background: transparent;
|
||
color: var(--ink-2);
|
||
cursor: pointer;
|
||
}
|
||
.admin-stepper-btn:hover:not(:disabled) {
|
||
background: var(--tint);
|
||
color: var(--ink);
|
||
}
|
||
.admin-stepper-btn:disabled {
|
||
opacity: 0.35;
|
||
cursor: not-allowed;
|
||
}
|
||
.admin-stepper-input {
|
||
width: 3.25rem;
|
||
min-width: 0;
|
||
padding: 0;
|
||
margin: 0;
|
||
text-align: center;
|
||
color: var(--ink);
|
||
font-size: 14px;
|
||
font-weight: 600;
|
||
font-variant-numeric: tabular-nums;
|
||
font-family: var(--font-sans);
|
||
}
|
||
.admin-stepper-unit {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
padding-right: 0.25rem;
|
||
font-size: 12.5px;
|
||
color: var(--ink-3);
|
||
user-select: none;
|
||
}
|
||
|
||
/* ----- 点赞按钮:未赞描边态,hover 同色系填充;已赞为浅底实心态 ----- */
|
||
.j13-like {
|
||
border-color: var(--line-2);
|
||
color: var(--ink-2);
|
||
background: var(--panel);
|
||
transition:
|
||
border-color 0.15s ease,
|
||
color 0.15s ease,
|
||
background-color 0.15s ease,
|
||
box-shadow 0.15s ease;
|
||
}
|
||
.j13-like svg {
|
||
transition: transform 0.15s ease;
|
||
}
|
||
.j13-like:hover:not(:disabled),
|
||
.j13-like.is-liked {
|
||
border-color: var(--accent);
|
||
color: var(--accent);
|
||
background: var(--accent-soft);
|
||
}
|
||
/* 已赞态 hover 再加深一档,并给同色系投影;心形轻微放大(不改变布局) */
|
||
.j13-like:hover:not(:disabled) {
|
||
box-shadow: 0 2px 10px color-mix(in srgb, var(--accent) 22%, transparent);
|
||
}
|
||
.j13-like.is-liked:hover:not(:disabled) {
|
||
background: color-mix(in srgb, var(--accent) 17%, transparent);
|
||
}
|
||
.j13-like:hover:not(:disabled) svg {
|
||
transform: scale(1.15);
|
||
}
|
||
.j13-like:active:not(:disabled) svg {
|
||
transform: scale(0.95);
|
||
}
|
||
.j13-like:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.j13-like,
|
||
.j13-like svg {
|
||
transition: none;
|
||
}
|
||
.j13-like:hover:not(:disabled) svg,
|
||
.j13-like:active:not(:disabled) svg {
|
||
transform: none;
|
||
}
|
||
}
|
||
|
||
/* ----- 表单 ----- */
|
||
.field-label {
|
||
display: block;
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
color: var(--ink-2);
|
||
margin-bottom: 8px;
|
||
}
|
||
.field {
|
||
width: 100%;
|
||
padding: 12px 15px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--control-border);
|
||
border-radius: var(--r-sm);
|
||
color: var(--ink);
|
||
font-size: 15px;
|
||
font-family: var(--font-sans);
|
||
}
|
||
/* 占位符不使用 opacity:透明度与底色合成后浅色仅 3.7:1,实色 ink-3 达 5.72:1 */
|
||
.field::placeholder { color: var(--ink-3); }
|
||
textarea.field {
|
||
font-family: var(--font-sans);
|
||
font-size: 15px;
|
||
line-height: 1.75;
|
||
resize: vertical;
|
||
}
|
||
|
||
/* ----- 标签 / 徽标 ----- */
|
||
.chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
font-size: 12.5px;
|
||
font-weight: 500;
|
||
padding: 4px 12px;
|
||
background: var(--tint);
|
||
color: var(--ink-2);
|
||
border-radius: 999px;
|
||
white-space: nowrap;
|
||
transition: background 0.15s, color 0.15s;
|
||
}
|
||
a.chip:hover {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
/* 置顶 / 推荐:图标徽章(无文字,配 title/aria-label),全站统一,节省标题空间 */
|
||
.badge-pin,
|
||
.badge-rec {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 20px;
|
||
height: 20px;
|
||
border-radius: 6px;
|
||
}
|
||
.badge-pin {
|
||
background: var(--clay-soft);
|
||
color: var(--clay);
|
||
}
|
||
.badge-rec {
|
||
background: var(--gold-soft);
|
||
color: var(--gold);
|
||
}
|
||
.badge-pending {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
padding: 4px 11px;
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
border-radius: 999px;
|
||
white-space: nowrap;
|
||
}
|
||
.badge-type {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
padding: 4px 11px;
|
||
/* 固定靛紫,不跟主题 accent,避免与状态徽章撞色 */
|
||
background: color-mix(in srgb, #5b5bd6 12%, var(--panel));
|
||
color: #4f46b8;
|
||
border-radius: 999px;
|
||
white-space: nowrap;
|
||
}
|
||
.dark .badge-type {
|
||
background: rgba(165, 180, 252, 0.16);
|
||
color: #a5b4fc;
|
||
}
|
||
.badge-access {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
padding: 4px 11px;
|
||
background: var(--tint);
|
||
color: var(--ink-2);
|
||
border-radius: 999px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/* 类型帖状态徽章:浅色区分,避免同一灰;状态色固定,不跟主题 */
|
||
.badge-status {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
padding: 4px 11px;
|
||
border-radius: 999px;
|
||
white-space: nowrap;
|
||
}
|
||
.badge-status-unsolved {
|
||
/* 淡红:待解决,与推荐金 / 已解决绿区分 */
|
||
background: color-mix(in srgb, #c8281e 11%, var(--panel));
|
||
color: #b91c1c;
|
||
}
|
||
.badge-status-solved {
|
||
background: color-mix(in srgb, var(--ok) 16%, var(--panel));
|
||
color: var(--ok);
|
||
}
|
||
.badge-status-open {
|
||
/* 进行中:天空蓝,不跟主题 accent,亦区别于类型徽章 */
|
||
background: color-mix(in srgb, #0284c7 12%, var(--panel));
|
||
color: #0369a1;
|
||
}
|
||
/* 已结束 / 已过期 / 已开奖 / 已截止:统一灰胶囊(标识已到期) */
|
||
.badge-status-closed {
|
||
background: color-mix(in srgb, #5b6b8c 12%, var(--panel));
|
||
color: #5b6b8c;
|
||
}
|
||
.dark .badge-status-unsolved {
|
||
background: rgba(255, 107, 96, 0.14);
|
||
color: #fca5a5;
|
||
}
|
||
.dark .badge-status-solved {
|
||
background: color-mix(in srgb, var(--ok) 22%, transparent);
|
||
color: var(--ok);
|
||
}
|
||
.dark .badge-status-open {
|
||
background: rgba(56, 189, 248, 0.14);
|
||
color: #7dd3fc;
|
||
}
|
||
.dark .badge-status-closed {
|
||
background: rgba(170, 182, 207, 0.14);
|
||
color: #aab6cf;
|
||
}
|
||
|
||
/* 评论区成就徽标:实心底,比类型/状态浅底更醒目 */
|
||
.badge-accepted {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
padding: 4px 11px;
|
||
border-radius: 999px;
|
||
white-space: nowrap;
|
||
background: var(--ok);
|
||
color: #ffffff;
|
||
}
|
||
.dark .badge-accepted {
|
||
background: var(--ok);
|
||
color: #0c1a10;
|
||
}
|
||
.badge-winner {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
padding: 4px 11px;
|
||
border-radius: 999px;
|
||
white-space: nowrap;
|
||
/* 中奖:明亮类金色(不用偏棕的 --gold 实心白字) */
|
||
background: color-mix(in srgb, #d4a017 22%, var(--panel));
|
||
color: #8a6d00;
|
||
box-shadow: inset 0 0 0 1px color-mix(in srgb, #d4a017 42%, transparent);
|
||
}
|
||
.dark .badge-winner {
|
||
background: color-mix(in srgb, #e8c56b 26%, transparent);
|
||
color: #f5dfa0;
|
||
box-shadow: inset 0 0 0 1px color-mix(in srgb, #e8c56b 48%, transparent);
|
||
}
|
||
|
||
/* 站点公告列表 */
|
||
.j13-anno-list {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 8px;
|
||
margin-top: 10px;
|
||
}
|
||
.j13-anno-item {
|
||
display: flex;
|
||
align-items: flex-start;
|
||
gap: 0;
|
||
padding: 11px 12px 11px 0;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--line);
|
||
background: transparent;
|
||
transition: background 0.15s ease, border-color 0.15s ease;
|
||
overflow: hidden;
|
||
}
|
||
.j13-anno-item::before {
|
||
content: "";
|
||
flex-shrink: 0;
|
||
width: 3px;
|
||
align-self: stretch;
|
||
margin-right: 11px;
|
||
border-radius: 0 2px 2px 0;
|
||
background: color-mix(in srgb, var(--accent) 55%, transparent);
|
||
}
|
||
.j13-anno-item:hover,
|
||
.j13-anno-item:focus-visible {
|
||
background: var(--item-hover-bg);
|
||
border-color: color-mix(in srgb, var(--accent) 28%, var(--line));
|
||
}
|
||
.j13-anno-item:hover::before,
|
||
.j13-anno-item:focus-visible::before {
|
||
background: var(--accent);
|
||
}
|
||
.j13-anno-item-body {
|
||
min-width: 0;
|
||
flex: 1;
|
||
padding-right: 2px;
|
||
}
|
||
.j13-anno-item-title {
|
||
display: block;
|
||
font-size: 13px;
|
||
font-weight: 400;
|
||
line-height: 1.45;
|
||
color: var(--ink);
|
||
}
|
||
.j13-anno-item:hover .j13-anno-item-title,
|
||
.j13-anno-item:focus-visible .j13-anno-item-title {
|
||
color: var(--accent);
|
||
}
|
||
.j13-anno-item-meta {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
margin-top: 6px;
|
||
}
|
||
/* 板块胶囊:仅标识,不可点(列表行点击由 stretch-link 进帖) */
|
||
.j13-board-tag {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
padding: 0 7px;
|
||
border-radius: 6px;
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
line-height: 1.65;
|
||
background: var(--tint);
|
||
color: var(--ink-2);
|
||
white-space: nowrap;
|
||
pointer-events: none;
|
||
user-select: none;
|
||
}
|
||
|
||
/* 站点公告标签:预设色板(浅/暗成对,文字与底色均满足 AA 对比度) */
|
||
.j13-anno-tag {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
max-width: 132px;
|
||
padding: 2px 10px;
|
||
border-radius: 999px;
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
line-height: 1.55;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
.j13-anno-tag.is-blue { background: rgba(52, 81, 200, 0.12); color: #3451c8; }
|
||
.j13-anno-tag.is-green { background: rgba(19, 115, 51, 0.12); color: #137333; }
|
||
.j13-anno-tag.is-orange { background: rgba(165, 66, 10, 0.12); color: #a5420a; }
|
||
.j13-anno-tag.is-red { background: rgba(200, 40, 30, 0.1); color: #c8281e; }
|
||
.j13-anno-tag.is-purple { background: rgba(109, 71, 192, 0.12); color: #6d47c0; }
|
||
.j13-anno-tag.is-gray { background: rgba(82, 96, 122, 0.13); color: #52607a; }
|
||
.j13-anno-tag.is-teal { background: rgba(15, 118, 110, 0.12); color: #0f766e; }
|
||
.j13-anno-tag.is-cyan { background: rgba(14, 116, 144, 0.12); color: #0e7490; }
|
||
.j13-anno-tag.is-pink { background: rgba(190, 24, 93, 0.11); color: #be185d; }
|
||
.j13-anno-tag.is-amber { background: rgba(180, 83, 9, 0.12); color: #b45309; }
|
||
.j13-anno-tag.is-indigo { background: rgba(67, 56, 202, 0.12); color: #4338ca; }
|
||
.j13-anno-tag.is-rose { background: rgba(190, 18, 60, 0.11); color: #be123c; }
|
||
.dark .j13-anno-tag.is-blue { background: rgba(169, 184, 255, 0.18); color: #a9b8ff; }
|
||
.dark .j13-anno-tag.is-green { background: rgba(88, 209, 138, 0.16); color: #58d18a; }
|
||
.dark .j13-anno-tag.is-orange { background: rgba(240, 135, 90, 0.17); color: #f0875a; }
|
||
.dark .j13-anno-tag.is-red { background: rgba(255, 107, 96, 0.16); color: #ff6b60; }
|
||
.dark .j13-anno-tag.is-purple { background: rgba(192, 168, 245, 0.18); color: #c0a8f5; }
|
||
.dark .j13-anno-tag.is-gray { background: rgba(170, 182, 207, 0.17); color: #aab6cf; }
|
||
.dark .j13-anno-tag.is-teal { background: rgba(94, 234, 212, 0.16); color: #5eead4; }
|
||
.dark .j13-anno-tag.is-cyan { background: rgba(103, 232, 249, 0.16); color: #67e8f9; }
|
||
.dark .j13-anno-tag.is-pink { background: rgba(251, 113, 133, 0.16); color: #fb7185; }
|
||
.dark .j13-anno-tag.is-amber { background: rgba(252, 211, 77, 0.16); color: #fcd34d; }
|
||
.dark .j13-anno-tag.is-indigo { background: rgba(165, 180, 252, 0.18); color: #a5b4fc; }
|
||
.dark .j13-anno-tag.is-rose { background: rgba(251, 113, 133, 0.16); color: #fb7185; }
|
||
|
||
/* 后台颜色选择器圆点 */
|
||
.j13-anno-dot {
|
||
width: 22px;
|
||
height: 22px;
|
||
border-radius: 999px;
|
||
border: 2px solid transparent;
|
||
cursor: pointer;
|
||
padding: 0;
|
||
transition: transform 0.12s ease, box-shadow 0.12s ease;
|
||
}
|
||
.j13-anno-dot:hover { transform: scale(1.12); }
|
||
.j13-anno-dot[aria-pressed="true"],
|
||
.j13-anno-dot[aria-checked="true"] {
|
||
border-color: var(--panel);
|
||
box-shadow: 0 0 0 2px var(--accent);
|
||
}
|
||
.j13-anno-dot.is-blue { background: #3451c8; }
|
||
.j13-anno-dot.is-green { background: #137333; }
|
||
.j13-anno-dot.is-orange { background: #a5420a; }
|
||
.j13-anno-dot.is-red { background: #c8281e; }
|
||
.j13-anno-dot.is-purple { background: #6d47c0; }
|
||
.j13-anno-dot.is-gray { background: #52607a; }
|
||
.j13-anno-dot.is-teal { background: #0f766e; }
|
||
.j13-anno-dot.is-cyan { background: #0e7490; }
|
||
.j13-anno-dot.is-pink { background: #be185d; }
|
||
.j13-anno-dot.is-amber { background: #b45309; }
|
||
.j13-anno-dot.is-indigo { background: #4338ca; }
|
||
.j13-anno-dot.is-rose { background: #be123c; }
|
||
.dark .j13-anno-dot.is-blue { background: #a9b8ff; }
|
||
.dark .j13-anno-dot.is-green { background: #58d18a; }
|
||
.dark .j13-anno-dot.is-orange { background: #f0875a; }
|
||
.dark .j13-anno-dot.is-red { background: #ff6b60; }
|
||
.dark .j13-anno-dot.is-purple { background: #c0a8f5; }
|
||
.dark .j13-anno-dot.is-gray { background: #aab6cf; }
|
||
.dark .j13-anno-dot.is-teal { background: #5eead4; }
|
||
.dark .j13-anno-dot.is-cyan { background: #67e8f9; }
|
||
.dark .j13-anno-dot.is-pink { background: #fb7185; }
|
||
.dark .j13-anno-dot.is-amber { background: #fcd34d; }
|
||
.dark .j13-anno-dot.is-indigo { background: #a5b4fc; }
|
||
.dark .j13-anno-dot.is-rose { background: #fb7185; }
|
||
|
||
/* ----- 正文时间线:日志行样式(非标题墙);日徽章为唯一强层级 ----- */
|
||
.j13-timeline {
|
||
position: relative;
|
||
margin: 1rem 0 1.25rem;
|
||
padding: 0.1rem 0 0.1rem 0.1rem;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 1.15rem;
|
||
}
|
||
/* 连续主干:贯穿所有日分组,避免按日分段导致竖线"断树" */
|
||
.j13-timeline::before {
|
||
content: "";
|
||
position: absolute;
|
||
left: 0.38rem;
|
||
top: 0.55rem;
|
||
bottom: 0.55rem;
|
||
width: 1.5px;
|
||
border-radius: 1px;
|
||
background: color-mix(in srgb, var(--ok) 45%, var(--line));
|
||
z-index: 0;
|
||
}
|
||
.j13-timeline-day {
|
||
position: relative;
|
||
padding-left: 1.15rem;
|
||
}
|
||
.j13-timeline-day-label {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.45rem;
|
||
margin: 0;
|
||
padding: 0.32rem 0.75rem 0.32rem 0.6rem;
|
||
border-radius: 999px;
|
||
background: var(--ok-soft);
|
||
color: var(--ok);
|
||
font-size: 14px;
|
||
font-weight: 700;
|
||
letter-spacing: 0.015em;
|
||
font-variant-numeric: tabular-nums;
|
||
line-height: 1.35;
|
||
position: relative;
|
||
z-index: 1;
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-timeline-day-label time {
|
||
color: var(--ok);
|
||
}
|
||
.j13-timeline-day-count {
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
color: var(--ink-3);
|
||
letter-spacing: 0;
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.j13-timeline-day-count::after {
|
||
content: " 项";
|
||
}
|
||
.j13-timeline-items {
|
||
list-style: none !important;
|
||
margin: 0;
|
||
padding: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 0;
|
||
}
|
||
.j13-timeline-item {
|
||
position: relative;
|
||
list-style: none !important;
|
||
}
|
||
.j13-timeline-item::marker {
|
||
content: none;
|
||
}
|
||
.j13-timeline-dot {
|
||
position: absolute;
|
||
left: -1.15rem;
|
||
top: 0.85rem;
|
||
width: 0.5rem;
|
||
height: 0.5rem;
|
||
margin-left: 0.28rem;
|
||
border-radius: 999px;
|
||
background: var(--ok);
|
||
border: 1.5px solid var(--panel);
|
||
box-shadow: 0 0 0 1px color-mix(in srgb, var(--ok) 40%, var(--line));
|
||
transform: translateX(-50%);
|
||
z-index: 1;
|
||
}
|
||
.j13-timeline-card {
|
||
min-width: 0;
|
||
padding: 0.55rem 0.15rem 0.55rem 0.2rem;
|
||
border-radius: 0;
|
||
background: transparent;
|
||
border: none;
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.j13-timeline-item:last-child .j13-timeline-card {
|
||
border-bottom: none;
|
||
padding-bottom: 0.15rem;
|
||
}
|
||
.j13-timeline-head {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-wrap: wrap;
|
||
gap: 0.45rem;
|
||
}
|
||
.j13-timeline-summary {
|
||
margin: 0;
|
||
flex: 1 1 auto;
|
||
min-width: 0;
|
||
font-size: 15px;
|
||
font-weight: 800;
|
||
line-height: 1.4;
|
||
color: var(--ink);
|
||
letter-spacing: 0.01em;
|
||
word-break: break-word;
|
||
}
|
||
/* 当天非首条:版本号紧贴左侧,与首条版本号对齐(不重复日期) */
|
||
.j13-timeline-item:not(.is-first-in-day) .j13-timeline-summary {
|
||
margin-left: 0;
|
||
}
|
||
/* 首条目卡片上方留一点呼吸,与日期胶囊拉开层次 */
|
||
.j13-timeline-item.is-first-in-day .j13-timeline-card {
|
||
padding-top: 0.15rem;
|
||
}
|
||
.j13-timeline-chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.05em;
|
||
flex-shrink: 0;
|
||
margin-top: 0.12rem;
|
||
padding: 0.05rem 0.35rem;
|
||
border-radius: 4px;
|
||
font-size: 10.5px;
|
||
font-weight: 600;
|
||
letter-spacing: 0.01em;
|
||
line-height: 1.4;
|
||
text-transform: lowercase;
|
||
background: var(--tint);
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-timeline-chip-scope {
|
||
font-weight: 500;
|
||
opacity: 0.8;
|
||
}
|
||
.j13-timeline-chip.is-feat,
|
||
.j13-timeline-chip.is-polish {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
.j13-timeline-chip.is-fix {
|
||
background: var(--danger-soft);
|
||
color: var(--danger);
|
||
}
|
||
.j13-timeline-chip.is-docs,
|
||
.j13-timeline-chip.is-chore,
|
||
.j13-timeline-chip.is-refactor,
|
||
.j13-timeline-chip.is-style,
|
||
.j13-timeline-chip.is-perf,
|
||
.j13-timeline-chip.is-test {
|
||
background: var(--tint);
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-timeline-src {
|
||
flex-shrink: 0;
|
||
margin-top: 0.15rem;
|
||
opacity: 0.55;
|
||
color: var(--ink-3);
|
||
transition: color 0.15s ease, opacity 0.15s ease;
|
||
}
|
||
.j13-timeline-src:hover {
|
||
opacity: 1;
|
||
color: var(--accent);
|
||
}
|
||
.j13-timeline-body {
|
||
margin-top: 0.25rem;
|
||
padding-left: 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.55;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-timeline-body > :first-child { margin-top: 0; }
|
||
.j13-timeline-body > :last-child { margin-bottom: 0; }
|
||
.j13-timeline-body p {
|
||
margin: 0.2rem 0;
|
||
}
|
||
|
||
/* 时间线编辑器 */
|
||
.j13-tl-import {
|
||
padding: 0.85rem 0.95rem;
|
||
border-radius: 10px;
|
||
background: var(--tint);
|
||
border: 1px solid var(--line);
|
||
}
|
||
.j13-tl-urls,
|
||
.j13-tl-field,
|
||
.j13-tl-select {
|
||
width: 100%;
|
||
border: 1px solid var(--control-border);
|
||
border-radius: 8px;
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
font-size: 13px;
|
||
padding: 0.45rem 0.6rem;
|
||
}
|
||
.j13-tl-urls {
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||
resize: vertical;
|
||
min-height: 4.5rem;
|
||
}
|
||
.j13-tl-select {
|
||
width: auto;
|
||
padding: 0.25rem 0.45rem;
|
||
}
|
||
.j13-tl-edit-card {
|
||
padding: 0.75rem;
|
||
border-radius: 10px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
transition: border-color 0.15s ease, background 0.15s ease, opacity 0.15s ease;
|
||
}
|
||
.j13-tl-edit-card:hover {
|
||
border-color: var(--control-border-hover);
|
||
}
|
||
/* 已排除条目:降饱和度 + 虚线边,提示不会写入正文 */
|
||
.j13-tl-edit-card.is-excluded {
|
||
opacity: 0.55;
|
||
background: var(--tint);
|
||
border-style: dashed;
|
||
}
|
||
.j13-tl-tag {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
padding: 0.05rem 0.4rem;
|
||
border-radius: 4px;
|
||
font-size: 10.5px;
|
||
font-weight: 600;
|
||
line-height: 1.4;
|
||
letter-spacing: 0.01em;
|
||
background: var(--ink-3);
|
||
color: var(--panel);
|
||
}
|
||
.j13-tl-count {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
padding: 0.05rem 0.45rem;
|
||
border-radius: 999px;
|
||
font-size: 11.5px;
|
||
font-weight: 600;
|
||
line-height: 1.4;
|
||
font-variant-numeric: tabular-nums;
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
.j13-tl-count.is-muted {
|
||
background: var(--tint);
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-tl-empty {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 0.6rem;
|
||
padding: 1.6rem 1rem;
|
||
border: 1px dashed var(--line-2);
|
||
border-radius: 10px;
|
||
background: var(--tint);
|
||
color: var(--ink-3);
|
||
font-size: 13px;
|
||
text-align: center;
|
||
}
|
||
.j13-tl-hint {
|
||
margin-top: 0.35rem;
|
||
font-size: 11.5px;
|
||
color: var(--ink-3);
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.j13-tl-banner {
|
||
margin-top: 0.5rem;
|
||
padding: 0.45rem 0.65rem;
|
||
border-radius: 8px;
|
||
font-size: 12.5px;
|
||
line-height: 1.5;
|
||
border: 1px solid transparent;
|
||
}
|
||
.j13-tl-banner.is-warn,
|
||
.j13-tl-banner.is-err {
|
||
background: var(--danger-soft);
|
||
color: var(--danger);
|
||
border-color: color-mix(in srgb, var(--danger) 25%, transparent);
|
||
}
|
||
|
||
/* ----- 分页 ----- */
|
||
.pager-btn {
|
||
background: var(--panel);
|
||
border-color: var(--line-2);
|
||
color: var(--ink-2);
|
||
}
|
||
.pager-btn:hover {
|
||
border-color: var(--accent);
|
||
color: var(--accent);
|
||
transform: translateY(-1px);
|
||
}
|
||
/* 当前页:主题色实心底,字色走 --accent-on 保证对比 */
|
||
.pager-btn.is-current,
|
||
.pager-btn.is-current:hover {
|
||
background: var(--accent);
|
||
border-color: var(--accent);
|
||
color: var(--accent-on);
|
||
font-weight: 600;
|
||
transform: none;
|
||
}
|
||
.pager-btn.is-current:hover {
|
||
background: var(--accent-hi);
|
||
border-color: var(--accent-hi);
|
||
}
|
||
|
||
/* ----- 辅助 ----- */
|
||
.meta {
|
||
font-family: var(--font-sans);
|
||
font-size: 12.5px;
|
||
color: var(--ink-3);
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.link-accent { color: var(--accent); }
|
||
.link-accent:hover { color: var(--accent-hi); }
|
||
|
||
.alert-error {
|
||
padding: 12px 15px;
|
||
border: 1px solid color-mix(in srgb, var(--danger) 30%, transparent);
|
||
background: var(--danger-soft);
|
||
color: var(--danger);
|
||
border-radius: var(--r-sm);
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
}
|
||
.alert-ok {
|
||
padding: 12px 15px;
|
||
border: 1px solid color-mix(in srgb, var(--ok) 30%, transparent);
|
||
background: var(--ok-soft);
|
||
color: var(--ok);
|
||
border-radius: var(--r-sm);
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
}
|
||
|
||
/* ============================================================
|
||
工作台组件(WORKSPACE EDITION)
|
||
============================================================ */
|
||
|
||
/* 信息流小 tab:描边小圆角按钮,选中为 accent 浅底描边(布局类走 Tailwind,此处不写 display) */
|
||
.j13-tab {
|
||
appearance: none;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
border-radius: 999px;
|
||
padding: 4.5px 12px;
|
||
font-family: var(--font-sans);
|
||
font-size: 12.5px;
|
||
font-weight: 500;
|
||
line-height: 1.35;
|
||
color: var(--ink-3);
|
||
cursor: pointer;
|
||
white-space: nowrap;
|
||
transition: background 0.16s ease, color 0.16s ease, border-color 0.16s ease;
|
||
}
|
||
.j13-tab:hover {
|
||
color: var(--ink);
|
||
border-color: var(--line-2);
|
||
background: var(--item-hover-bg);
|
||
}
|
||
.j13-tab[aria-selected="true"] {
|
||
background: var(--nav-active-bg);
|
||
border-color: var(--nav-active-line);
|
||
color: var(--nav-active-ink);
|
||
font-weight: 600;
|
||
}
|
||
.j13-tab:active {
|
||
transform: scale(0.97);
|
||
}
|
||
|
||
/* 帖子流「有新内容」提示条(三期) */
|
||
.j13-feed-new-tip:hover {
|
||
filter: brightness(0.97);
|
||
}
|
||
.j13-feed-new-tip:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.j13-feed-new-tip {
|
||
transition: none;
|
||
}
|
||
}
|
||
|
||
/* 侧栏导航项:无选中态的悬停/聚焦与榜单、公告一致,走 --item-hover-bg */
|
||
.j13-raillink {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
padding: 8px 10px;
|
||
border: 1px solid transparent;
|
||
border-radius: var(--r-sm);
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
color: var(--ink-2);
|
||
transition: background 0.16s ease, color 0.16s ease, border-color 0.16s ease;
|
||
}
|
||
.j13-raillink:hover,
|
||
.j13-raillink:focus-visible {
|
||
background: var(--item-hover-bg);
|
||
color: var(--ink);
|
||
}
|
||
.j13-raillink[aria-current="page"],
|
||
.j13-raillink[aria-current="page"]:hover,
|
||
.j13-raillink[aria-current="page"]:focus-visible {
|
||
background: var(--nav-active-bg);
|
||
border-color: var(--nav-active-line);
|
||
color: var(--nav-active-ink);
|
||
font-weight: 600;
|
||
}
|
||
|
||
/* 板块导航行:默认独立卡片;落入 j13-module 后收成内嵌列表 */
|
||
.j13-bcard {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
width: 100%;
|
||
padding: 9px 10px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r-sm);
|
||
transition: border-color 0.16s ease, background 0.16s ease;
|
||
}
|
||
/* 悬停/选中必须叠在不透明 --panel 上:半透明 accent-soft 会把网格透出来 */
|
||
.j13-bcard:hover,
|
||
.j13-bcard:focus-visible {
|
||
border-color: var(--nav-active-line);
|
||
background: color-mix(in srgb, var(--accent) 10%, var(--panel));
|
||
}
|
||
.j13-bcard:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.j13-bcard[aria-current="page"],
|
||
.j13-bcard[aria-current="page"]:hover,
|
||
.j13-bcard[aria-current="page"]:focus-visible {
|
||
border-color: var(--nav-active-line);
|
||
background: color-mix(in srgb, var(--accent) 12%, var(--panel));
|
||
}
|
||
.j13-bcard-name {
|
||
color: var(--ink);
|
||
font-size: 13.5px;
|
||
font-weight: 500;
|
||
}
|
||
.j13-bcard[aria-current="page"] .j13-bcard-name {
|
||
color: var(--nav-active-ink);
|
||
}
|
||
.j13-bcard-ico {
|
||
width: 34px;
|
||
height: 34px;
|
||
border-radius: 10px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 13px;
|
||
font-weight: 800;
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-module .j13-bcard {
|
||
background: transparent;
|
||
border-color: transparent;
|
||
padding: 7px 8px;
|
||
border-radius: 10px;
|
||
}
|
||
.j13-module .j13-bcard:hover,
|
||
.j13-module .j13-bcard:focus-visible {
|
||
border-color: transparent;
|
||
background: color-mix(in srgb, var(--accent) 10%, var(--panel));
|
||
}
|
||
/* 滚动容器会把外扩 outline 裁成半圈:描边改画在条目内侧 */
|
||
.j13-module .j13-bcard:focus-visible {
|
||
outline: 2.5px solid var(--accent);
|
||
outline-offset: -2px;
|
||
}
|
||
.j13-module .j13-bcard[aria-current="page"],
|
||
.j13-module .j13-bcard[aria-current="page"]:hover,
|
||
.j13-module .j13-bcard[aria-current="page"]:focus-visible {
|
||
border-color: var(--nav-active-line);
|
||
background: color-mix(in srgb, var(--accent) 12%, var(--panel));
|
||
}
|
||
.j13-module .j13-bcard[aria-current="page"]:focus-visible {
|
||
outline: 2.5px solid var(--accent);
|
||
outline-offset: -2px;
|
||
}
|
||
.j13-module .j13-bcard-ico {
|
||
width: 30px;
|
||
height: 30px;
|
||
border-radius: 8px;
|
||
font-size: 12px;
|
||
}
|
||
.j13-board-list {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 8px;
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.j13-bcard {
|
||
transition: none;
|
||
}
|
||
}
|
||
|
||
/* 工作台模块卡 */
|
||
.j13-module {
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r);
|
||
box-shadow: var(--shadow-sm);
|
||
padding: 16px;
|
||
}
|
||
.j13-module-title {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 7px;
|
||
font-size: 13.5px;
|
||
font-weight: 600;
|
||
letter-spacing: 0.02em;
|
||
color: var(--ink);
|
||
}
|
||
|
||
/* 赞助商 logo 网格:悬停 / 聚焦显示赞助说明 */
|
||
.j13-sponsors-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||
gap: 10px;
|
||
}
|
||
.j13-sponsor {
|
||
position: relative;
|
||
list-style: none;
|
||
}
|
||
.j13-sponsor-hit {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
height: 76px;
|
||
padding: 10px;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel-2);
|
||
outline: none;
|
||
transition: border-color 0.15s ease, background 0.15s ease;
|
||
}
|
||
.j13-sponsor-hit:hover,
|
||
.j13-sponsor-hit:focus-visible {
|
||
border-color: var(--accent);
|
||
background: var(--panel);
|
||
}
|
||
.j13-sponsor-logo {
|
||
max-width: 100%;
|
||
max-height: 52px;
|
||
width: auto;
|
||
height: auto;
|
||
object-fit: contain;
|
||
}
|
||
|
||
/* 自助购买广告位:紧凑单栏卡片,色跟随主题 accent */
|
||
.j13-ads-card {
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: 14px;
|
||
box-shadow: var(--shadow);
|
||
}
|
||
.j13-ads-card-head {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
padding: 14px 18px;
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
}
|
||
.j13-ads-card-head p {
|
||
opacity: 0.88;
|
||
}
|
||
.j13-ads-chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 6px;
|
||
min-height: 40px;
|
||
padding: 0 12px;
|
||
border-radius: 10px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
font-size: 13.5px;
|
||
font-weight: 600;
|
||
line-height: 1.2;
|
||
transition: background 0.12s ease, border-color 0.12s ease, color 0.12s ease, box-shadow 0.12s ease;
|
||
}
|
||
.j13-ads-chip:hover:not(.is-on) {
|
||
border-color: color-mix(in srgb, var(--accent) 40%, var(--line));
|
||
background: var(--accent-soft);
|
||
}
|
||
.j13-ads-chip.is-compact {
|
||
min-height: 36px;
|
||
padding: 0 4px;
|
||
font-size: 12.5px;
|
||
}
|
||
.j13-ads-chip.is-priced {
|
||
flex-direction: column;
|
||
gap: 2px;
|
||
min-height: 0;
|
||
padding: 6px 4px;
|
||
line-height: 1.15;
|
||
}
|
||
.j13-ads-chip-price {
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
line-height: 1;
|
||
opacity: 0.75;
|
||
white-space: nowrap;
|
||
}
|
||
.j13-ads-chip.is-on {
|
||
border-color: var(--accent);
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
box-shadow: 0 1px 2px color-mix(in srgb, var(--accent) 28%, transparent);
|
||
}
|
||
.j13-ads-chip:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
}
|
||
.j13-ads-field {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
min-height: 42px;
|
||
padding: 0 12px 0 10px;
|
||
border-radius: 10px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
}
|
||
.j13-ads-field:hover {
|
||
border-color: color-mix(in srgb, var(--line-2) 35%, var(--line));
|
||
}
|
||
.j13-ads-field:focus-within {
|
||
border-color: var(--accent);
|
||
box-shadow: 0 0 0 3px var(--focus-glow);
|
||
}
|
||
.j13-ads-field-ico {
|
||
display: inline-flex;
|
||
color: var(--ink-3);
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-ads-input {
|
||
flex: 1;
|
||
min-width: 0;
|
||
width: 100%;
|
||
height: 40px;
|
||
border: 0;
|
||
outline: none;
|
||
background: transparent;
|
||
color: var(--ink);
|
||
font-size: 13.5px;
|
||
}
|
||
.j13-ads-input::placeholder {
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-ads-submit {
|
||
display: flex;
|
||
width: 100%;
|
||
align-items: center;
|
||
justify-content: center;
|
||
min-height: 44px;
|
||
border: 0;
|
||
border-radius: 10px;
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
letter-spacing: 0.02em;
|
||
cursor: pointer;
|
||
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.1),
|
||
0 2px 8px color-mix(in srgb, var(--accent) 26%, transparent);
|
||
transition: background 0.12s ease, transform 0.12s ease, box-shadow 0.12s ease;
|
||
}
|
||
.j13-ads-submit:hover:not(:disabled) {
|
||
background: var(--accent-hi);
|
||
transform: translateY(-1px);
|
||
box-shadow: 0 2px 6px rgba(16, 24, 40, 0.1),
|
||
0 8px 18px color-mix(in srgb, var(--accent) 32%, transparent);
|
||
}
|
||
.j13-ads-submit:active:not(:disabled) {
|
||
transform: translateY(0);
|
||
}
|
||
.j13-ads-submit:disabled {
|
||
opacity: 0.45;
|
||
cursor: not-allowed;
|
||
box-shadow: none;
|
||
transform: none;
|
||
}
|
||
|
||
/* 自助推广:购买广告位胶囊按钮 */
|
||
.j13-ad-buy-btn {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
padding: 2px 11px;
|
||
border-radius: 999px;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
line-height: 1.5;
|
||
white-space: nowrap;
|
||
color: var(--accent);
|
||
background: color-mix(in srgb, var(--accent-soft) 70%, var(--panel));
|
||
border: 1px solid color-mix(in srgb, var(--accent) 32%, var(--line));
|
||
transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
|
||
}
|
||
.j13-ad-buy-btn:hover {
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
border-color: var(--accent);
|
||
}
|
||
|
||
/* 自助推广侧栏占位:空槽可点去购买 */
|
||
.j13-ad-slot {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 100%;
|
||
border-radius: 8px;
|
||
border: 1px dashed color-mix(in srgb, var(--accent) 35%, var(--line));
|
||
background: color-mix(in srgb, var(--accent-soft) 55%, var(--panel));
|
||
color: var(--ink-3);
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
letter-spacing: 0.02em;
|
||
transition: border-color 0.15s ease, color 0.15s ease, background 0.15s ease, transform 0.18s ease;
|
||
}
|
||
.j13-ad-slot:hover {
|
||
border-color: var(--accent);
|
||
color: var(--accent);
|
||
background: var(--accent-soft);
|
||
}
|
||
/* 自助推广:图片宽 = 两列文字总宽(248 = 121+6+121) */
|
||
.j13-ad-promo {
|
||
width: 248px;
|
||
max-width: 100%;
|
||
margin-inline: auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 10px;
|
||
}
|
||
.j13-ad-slot-image {
|
||
width: 100%;
|
||
height: 60px;
|
||
max-width: none;
|
||
margin-inline: 0;
|
||
min-height: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
.j13-ad-image {
|
||
display: block;
|
||
width: 100%;
|
||
height: 60px;
|
||
max-width: none;
|
||
margin-inline: 0;
|
||
object-fit: cover;
|
||
border-radius: 8px;
|
||
box-sizing: border-box;
|
||
}
|
||
.j13-ad-image-link {
|
||
display: block;
|
||
width: 100%;
|
||
max-width: none;
|
||
margin-inline: 0;
|
||
overflow: hidden;
|
||
border-radius: 8px;
|
||
border: 1px solid var(--line);
|
||
transition: opacity 0.15s ease, transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
|
||
}
|
||
.j13-ad-image-link:hover {
|
||
opacity: 1;
|
||
border-color: color-mix(in srgb, var(--accent) 55%, var(--line));
|
||
box-shadow: 0 6px 16px -4px color-mix(in srgb, var(--accent) 32%, transparent);
|
||
}
|
||
.j13-ad-text-grid {
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 6px;
|
||
width: 100%;
|
||
min-width: 0;
|
||
}
|
||
.j13-ad-text-grid > li {
|
||
min-width: 0;
|
||
}
|
||
.j13-ad-slot-text {
|
||
min-height: 34px;
|
||
padding: 0 6px;
|
||
font-size: 11.5px;
|
||
border-radius: 6px;
|
||
}
|
||
.j13-ad-text {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 100%;
|
||
min-width: 0;
|
||
overflow: hidden;
|
||
border-radius: 6px;
|
||
padding: 8px 0;
|
||
text-decoration: none;
|
||
white-space: nowrap;
|
||
line-height: 1.2;
|
||
transition: opacity 0.15s ease, transform 0.18s ease, box-shadow 0.18s ease;
|
||
}
|
||
.j13-ad-text.is-overflow {
|
||
justify-content: flex-start;
|
||
}
|
||
.j13-ad-text:hover,
|
||
.j13-ad-text:focus-visible {
|
||
opacity: 1;
|
||
box-shadow: 0 4px 12px -3px color-mix(in srgb, var(--accent) 30%, transparent);
|
||
}
|
||
.j13-ad-text:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 1px;
|
||
}
|
||
.j13-ad-text-track {
|
||
display: inline-flex;
|
||
}
|
||
.j13-ad-text-track.is-overflow {
|
||
width: max-content;
|
||
transform: translateX(0);
|
||
transition: transform 0.4s ease;
|
||
}
|
||
.j13-ad-text:hover .j13-ad-text-track.is-overflow,
|
||
.j13-ad-text:focus-visible .j13-ad-text-track.is-overflow {
|
||
animation: j13-ad-marquee 10s linear infinite;
|
||
}
|
||
.j13-ad-text-run {
|
||
display: inline-block;
|
||
padding: 0 12px;
|
||
font-size: 12.5px;
|
||
font-weight: 400;
|
||
}
|
||
@keyframes j13-ad-marquee {
|
||
from {
|
||
transform: translateX(0);
|
||
}
|
||
to {
|
||
transform: translateX(-50%);
|
||
}
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.j13-ad-text-track {
|
||
animation: none;
|
||
width: 100%;
|
||
justify-content: center;
|
||
}
|
||
.j13-ad-text-run[aria-hidden] {
|
||
display: none;
|
||
}
|
||
.j13-ad-text-run {
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
max-width: 100%;
|
||
}
|
||
}
|
||
@media (prefers-reduced-motion: no-preference) {
|
||
.j13-ad-image-link:hover,
|
||
.j13-ad-text:hover {
|
||
transform: translateY(-2px);
|
||
}
|
||
.j13-ad-slot:hover {
|
||
transform: translateY(-1px);
|
||
}
|
||
}
|
||
|
||
/* ── 后台「推广与赞助」工作台 ── */
|
||
/* 复用站点设置骨架(.admin-settings-*):左粘性菜单 + 右内容,此处仅补充区块样式 */
|
||
/* 锚点跳转时为粘性导航留出避让空间,避免遮挡标题 */
|
||
[data-section] {
|
||
scroll-margin-top: 64px;
|
||
}
|
||
|
||
/* 申购行:缩略 + 信息 + 操作同一行,操作始终紧邻数据 */
|
||
.j13-ads-adrow {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 12px;
|
||
padding: 10px 12px;
|
||
background: var(--surface);
|
||
border: 1px solid var(--line);
|
||
border-radius: 12px;
|
||
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
||
}
|
||
.j13-ads-adrow:hover {
|
||
border-color: color-mix(in srgb, var(--accent) 35%, var(--line));
|
||
box-shadow: 0 4px 14px -6px color-mix(in srgb, var(--ink) 18%, transparent);
|
||
}
|
||
@media (max-width: 640px) {
|
||
.j13-ads-adrow {
|
||
flex-wrap: wrap;
|
||
}
|
||
.j13-ads-adrow > div:last-child {
|
||
width: 100%;
|
||
justify-content: flex-end;
|
||
padding-top: 2px;
|
||
}
|
||
}
|
||
.j13-ads-thumb {
|
||
width: 88px;
|
||
height: 44px;
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
overflow: hidden;
|
||
background: var(--panel-2);
|
||
border: 1px solid var(--line);
|
||
border-radius: 8px;
|
||
}
|
||
.j13-ads-thumb img {
|
||
max-width: 100%;
|
||
max-height: 100%;
|
||
}
|
||
|
||
/* 编辑器行(时长档位) */
|
||
.j13-ads-row {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 8px;
|
||
padding: 8px 10px;
|
||
background: var(--surface);
|
||
border: 1px solid var(--line);
|
||
border-radius: 10px;
|
||
}
|
||
|
||
/* 收款码 / 赞助商编辑器:左侧预览 + 右侧字段 */
|
||
.j13-ads-editor {
|
||
display: flex;
|
||
gap: 14px;
|
||
align-items: flex-start;
|
||
padding: 14px;
|
||
background: var(--surface);
|
||
border: 1px solid var(--line);
|
||
border-radius: 12px;
|
||
transition: opacity 0.15s ease, border-color 0.15s ease;
|
||
}
|
||
.j13-ads-editor.is-off {
|
||
opacity: 0.6;
|
||
}
|
||
.j13-ads-qrbox {
|
||
width: 96px;
|
||
height: 96px;
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
overflow: hidden;
|
||
background: #fff;
|
||
border: 1px dashed var(--line);
|
||
border-radius: 10px;
|
||
transition: border-color 0.15s ease, transform 0.15s ease;
|
||
}
|
||
.j13-ads-qrbox:hover {
|
||
border-color: var(--accent);
|
||
border-style: solid;
|
||
}
|
||
.j13-ads-logo {
|
||
width: 120px;
|
||
height: 56px;
|
||
max-width: 100%;
|
||
background: #fff;
|
||
}
|
||
@media (max-width: 520px) {
|
||
.j13-ads-editor {
|
||
flex-direction: column;
|
||
}
|
||
.j13-ads-qrbox,
|
||
.j13-ads-logo {
|
||
width: 100%;
|
||
max-width: 140px;
|
||
margin-inline: auto;
|
||
}
|
||
}
|
||
|
||
/* 关于本站:右栏底部署录式目录,与内容模块区分开 */
|
||
.j13-about-lead {
|
||
margin-top: 8px;
|
||
font-size: 12.5px;
|
||
line-height: 1.55;
|
||
color: var(--ink-2);
|
||
}
|
||
.j13-about-list {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 6px;
|
||
margin-top: 12px;
|
||
}
|
||
.j13-about-item {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
min-width: 0;
|
||
padding: 9px 10px;
|
||
background: var(--panel-2);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r-sm);
|
||
transition: background 0.16s ease, border-color 0.16s ease;
|
||
}
|
||
.j13-about-item:hover,
|
||
.j13-about-item:focus-visible {
|
||
background: var(--item-hover-bg);
|
||
border-color: var(--nav-active-line);
|
||
}
|
||
.j13-about-item:focus-visible {
|
||
outline-offset: -2px;
|
||
}
|
||
.j13-about-ico {
|
||
width: 30px;
|
||
height: 30px;
|
||
border-radius: 9px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
flex-shrink: 0;
|
||
background: var(--panel);
|
||
color: var(--accent);
|
||
border: 1px solid var(--line);
|
||
}
|
||
.j13-about-item:hover .j13-about-ico,
|
||
.j13-about-item:focus-visible .j13-about-ico {
|
||
border-color: var(--nav-active-line);
|
||
}
|
||
.j13-about-body {
|
||
flex: 1;
|
||
min-width: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 2px;
|
||
}
|
||
.j13-about-name {
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
line-height: 1.35;
|
||
color: var(--ink);
|
||
}
|
||
.j13-about-excerpt {
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
-webkit-line-clamp: 2;
|
||
overflow: hidden;
|
||
font-size: 12px;
|
||
line-height: 1.5;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-about-chev {
|
||
flex-shrink: 0;
|
||
color: var(--ink-3);
|
||
transition: color 0.16s ease, transform 0.16s ease;
|
||
}
|
||
.j13-about-item:hover .j13-about-chev,
|
||
.j13-about-item:focus-visible .j13-about-chev {
|
||
color: var(--accent);
|
||
transform: translateX(2px);
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.j13-about-item,
|
||
.j13-about-chev {
|
||
transition: none;
|
||
}
|
||
.j13-about-item:hover .j13-about-chev,
|
||
.j13-about-item:focus-visible .j13-about-chev {
|
||
transform: none;
|
||
}
|
||
}
|
||
|
||
/* 统计数字格:白底细线,避免灰块 */
|
||
.j13-stat {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 3px;
|
||
min-width: 0;
|
||
padding: 11px 13px;
|
||
background: transparent;
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r-sm);
|
||
}
|
||
.j13-stat .j13-stat-num {
|
||
font-size: 22px;
|
||
font-weight: 500;
|
||
line-height: 1.15;
|
||
letter-spacing: -0.015em;
|
||
color: var(--ink);
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.j13-stat .j13-stat-lab {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/* 站点数据:无灰底瓦片,细线分隔 */
|
||
.j13-pulse {
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 0;
|
||
margin-top: 10px;
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r-sm);
|
||
overflow: hidden;
|
||
}
|
||
.j13-pulse-cell {
|
||
min-width: 0;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
text-align: center;
|
||
padding: 14px 12px;
|
||
background: transparent;
|
||
border: 0;
|
||
border-radius: 0;
|
||
}
|
||
.j13-pulse-cell:nth-child(odd) {
|
||
border-right: 1px solid var(--line);
|
||
}
|
||
.j13-pulse-cell:nth-child(-n + 2):nth-last-child(n + 3) {
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.j13-pulse-lab {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 5px;
|
||
font-size: 11.5px;
|
||
font-weight: 400;
|
||
color: var(--ink-3);
|
||
white-space: nowrap;
|
||
}
|
||
.j13-pulse-num {
|
||
margin-top: 6px;
|
||
font-size: 18px;
|
||
font-weight: 500;
|
||
line-height: 1.05;
|
||
letter-spacing: -0.015em;
|
||
color: var(--ink);
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.j13-pulse-foot {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 3px;
|
||
margin-top: 6px;
|
||
font-size: 10.5px;
|
||
font-weight: 400;
|
||
line-height: 1;
|
||
color: var(--ink-3);
|
||
font-variant-numeric: tabular-nums;
|
||
white-space: nowrap;
|
||
}
|
||
.j13-pulse-foot.is-up {
|
||
color: var(--ok);
|
||
font-weight: 400;
|
||
}
|
||
.j13-pulse-dot {
|
||
position: relative;
|
||
width: 6px;
|
||
height: 6px;
|
||
border-radius: 9999px;
|
||
background: var(--ok);
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-pulse-dot::after {
|
||
content: "";
|
||
position: absolute;
|
||
inset: -3px;
|
||
border-radius: 9999px;
|
||
background: var(--ok);
|
||
opacity: 0.4;
|
||
animation: j13-ping 1.8s cubic-bezier(0, 0, 0.2, 1) infinite;
|
||
}
|
||
@keyframes j13-ping {
|
||
0% { transform: scale(0.6); opacity: 0.5; }
|
||
70%, 100% { transform: scale(1.9); opacity: 0; }
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.j13-pulse-dot::after {
|
||
animation: none;
|
||
opacity: 0.25;
|
||
}
|
||
}
|
||
/* 卡内签到条:分隔线 + 紧凑按钮 */
|
||
.j13-pulse-checkin {
|
||
margin-top: 10px;
|
||
padding-top: 11px;
|
||
border-top: 1px solid var(--line);
|
||
}
|
||
.j13-pulse-checkin-btn {
|
||
gap: 4px;
|
||
padding: 6px 11px;
|
||
font-size: 12px;
|
||
white-space: nowrap;
|
||
}
|
||
.j13-pulse-checkin-done {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
padding: 6px 11px;
|
||
border-radius: 9999px;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
white-space: nowrap;
|
||
}
|
||
.j13-checkin-flow:focus-visible {
|
||
outline-offset: 1px;
|
||
}
|
||
|
||
/* 热门榜单 */
|
||
.j13-rank {
|
||
position: relative;
|
||
display: flex;
|
||
align-items: flex-start;
|
||
gap: 10px;
|
||
padding: 8px 8px;
|
||
border-radius: 10px;
|
||
transition: background 0.16s ease;
|
||
}
|
||
/* 榜单行:无选中态的导航项,悬停/聚焦走 --item-hover-bg */
|
||
.j13-rank:hover,
|
||
.j13-rank:focus-visible {
|
||
background: var(--item-hover-bg);
|
||
}
|
||
.j13-rank:focus-visible {
|
||
outline-offset: -2px;
|
||
}
|
||
.j13-rank-title {
|
||
display: block;
|
||
color: var(--ink);
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
line-height: 1.375;
|
||
transition: color 0.16s ease;
|
||
}
|
||
.j13-rank:hover .j13-rank-title,
|
||
.j13-rank:focus-visible .j13-rank-title {
|
||
color: var(--accent);
|
||
}
|
||
.j13-rank .j13-rank-no {
|
||
width: 18px;
|
||
padding-top: 2px;
|
||
text-align: center;
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
font-variant-numeric: tabular-nums;
|
||
color: var(--ink-3);
|
||
flex-shrink: 0;
|
||
}
|
||
.j13-rank:nth-child(1) .j13-rank-no { color: var(--rank-1); }
|
||
.j13-rank:nth-child(2) .j13-rank-no { color: var(--rank-2); }
|
||
.j13-rank:nth-child(3) .j13-rank-no { color: var(--rank-3); }
|
||
|
||
/* 精选置顶卡 */
|
||
.j13-feature {
|
||
position: relative;
|
||
display: block;
|
||
padding: 15px 17px;
|
||
background: linear-gradient(135deg, var(--panel) 0%, var(--panel-2) 100%);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r);
|
||
box-shadow: var(--shadow-sm);
|
||
transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
|
||
}
|
||
.j13-feature:hover {
|
||
transform: translateY(-2px);
|
||
box-shadow: var(--shadow);
|
||
border-color: color-mix(in srgb, var(--accent) 32%, var(--line));
|
||
}
|
||
|
||
/* 移动端横向板块条(滚动条隐藏,保留触控惯性) */
|
||
.j13-chips {
|
||
display: flex;
|
||
gap: 5px;
|
||
overflow-x: auto;
|
||
scrollbar-width: none;
|
||
-webkit-overflow-scrolling: touch;
|
||
padding-bottom: 2px;
|
||
}
|
||
.j13-chips::-webkit-scrollbar {
|
||
display: none;
|
||
}
|
||
.j13-chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
flex-shrink: 0;
|
||
padding: 7px 12px;
|
||
/* 无框 chip:透明边框占位,选中/悬停切底色时尺寸不跳 */
|
||
border: 1px solid transparent;
|
||
background: transparent;
|
||
border-radius: 10px;
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
color: var(--ink-2);
|
||
white-space: nowrap;
|
||
transition: background 0.16s ease, color 0.16s ease;
|
||
}
|
||
.j13-chip:hover,
|
||
.j13-chip:focus-visible {
|
||
background: var(--item-hover-bg);
|
||
color: var(--accent);
|
||
}
|
||
.j13-chip[aria-current="page"],
|
||
.j13-chip[aria-current="page"]:hover,
|
||
.j13-chip[aria-current="page"]:focus-visible {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
font-weight: 600;
|
||
}
|
||
.j13-chip:focus-visible {
|
||
outline-offset: -2px;
|
||
}
|
||
/* 板块条两端渐隐:提示「可左右滑动」,滚动到头时对应侧隐藏 */
|
||
.j13-chip-fade {
|
||
position: absolute;
|
||
top: 0;
|
||
bottom: 0;
|
||
width: 2.5rem;
|
||
pointer-events: none;
|
||
opacity: 0;
|
||
transition: opacity 0.18s ease;
|
||
}
|
||
.j13-chip-fade.is-on {
|
||
opacity: 1;
|
||
}
|
||
.j13-chip-fade-left {
|
||
left: 0;
|
||
border-radius: 1rem 0 0 1rem;
|
||
background: linear-gradient(
|
||
to right,
|
||
color-mix(in srgb, var(--main-bg) 92%, transparent) 20%,
|
||
transparent
|
||
);
|
||
}
|
||
.j13-chip-fade-right {
|
||
right: 0;
|
||
border-radius: 0 1rem 1rem 0;
|
||
background: linear-gradient(
|
||
to left,
|
||
color-mix(in srgb, var(--main-bg) 92%, transparent) 20%,
|
||
transparent
|
||
);
|
||
}
|
||
|
||
/* overflow:hidden 的列表面板:整行链接外描边会被圆角裁切 */
|
||
.panel.overflow-hidden > a:focus-visible {
|
||
outline-offset: -2px;
|
||
}
|
||
|
||
/* 帖子详情侧栏内的滚动承载区(目录 / 作者帖子列表):
|
||
配合栏容器的 max-height 独立滚动,细滚动条、不产生滚动链 */
|
||
.j13-rail-scroll {
|
||
min-height: 3.5rem;
|
||
overflow-y: auto;
|
||
overscroll-behavior: contain;
|
||
scrollbar-width: thin;
|
||
}
|
||
.j13-rail-scroll::-webkit-scrollbar {
|
||
width: 6px;
|
||
}
|
||
.j13-rail-scroll::-webkit-scrollbar-thumb {
|
||
background: var(--line-2);
|
||
border-radius: 99px;
|
||
border: none;
|
||
}
|
||
.j13-rail-scroll::-webkit-scrollbar-track {
|
||
background: transparent;
|
||
}
|
||
.j13-rail-scroll :focus-visible {
|
||
outline-offset: -2px;
|
||
}
|
||
|
||
/* 文章目录项:悬停/聚焦与侧栏其他可点块统一走 --item-hover-bg */
|
||
.j13-toc-link {
|
||
display: block;
|
||
padding: 6px 4px 6px 12px;
|
||
margin-left: -1px;
|
||
font-size: 12.5px;
|
||
line-height: 1.375;
|
||
color: var(--ink-2);
|
||
border-left: 2px solid transparent;
|
||
border-radius: 0 8px 8px 0;
|
||
transition: color 0.16s ease, background 0.16s ease, border-color 0.16s ease;
|
||
}
|
||
.j13-toc-link.is-h3 {
|
||
padding-left: 20px;
|
||
}
|
||
.j13-toc-link:hover,
|
||
.j13-toc-link:focus-visible {
|
||
color: var(--accent);
|
||
background: var(--item-hover-bg);
|
||
}
|
||
.j13-toc-link.is-active,
|
||
.j13-toc-link.is-active:hover,
|
||
.j13-toc-link.is-active:focus-visible {
|
||
color: var(--accent);
|
||
font-weight: 600;
|
||
border-left-color: var(--accent);
|
||
background: transparent;
|
||
}
|
||
}
|
||
|
||
/* 书库全书搜索:正文命中样式由 BookSearch 运行时注入 ::highlight() 规则
|
||
(构建器 CSS 压缩器不识别该伪元素);.j13-find-mark 仅用于搜索弹窗片段预览 */
|
||
.j13-find-mark {
|
||
background: color-mix(in srgb, var(--accent) 24%, transparent);
|
||
color: inherit;
|
||
border-radius: 3px;
|
||
padding: 0 0.1em;
|
||
}
|
||
|
||
/* ============================================================
|
||
Markdown 正文
|
||
============================================================ */
|
||
.prose-content { font-size: 16.5px; line-height: 1.85; color: var(--ink); }
|
||
/* 时间线嵌在 prose 内:压住 ul/p 默认,避免列表圆点与段落撑大 */
|
||
.prose-content .j13-timeline-items,
|
||
.prose-content .j13-timeline-item {
|
||
list-style: none;
|
||
padding-left: 0;
|
||
margin: 0;
|
||
}
|
||
.prose-content .j13-timeline-summary {
|
||
margin: 0;
|
||
font-size: 15px;
|
||
font-weight: 800;
|
||
line-height: 1.4;
|
||
color: var(--ink);
|
||
letter-spacing: 0.01em;
|
||
}
|
||
.prose-content .j13-timeline-body,
|
||
.prose-content .j13-timeline-body p {
|
||
font-size: 12.5px;
|
||
line-height: 1.55;
|
||
color: var(--ink-3);
|
||
}
|
||
/* 条目卡嵌在 prose 内:压住字段值/摘要的段落与列表外边距(未分层规则才能胜过
|
||
.prose-content p 的 0.9rem 外边距),否则字段内容被推低、与左侧标签错位 */
|
||
.prose-content .j13-entry-card dd p,
|
||
.prose-content .j13-entry-card .j13-entry-summary p {
|
||
margin: 0;
|
||
}
|
||
.prose-content .j13-entry-card dd ul,
|
||
.prose-content .j13-entry-card dd ol {
|
||
margin: 0.35rem 0;
|
||
}
|
||
.prose-content .j13-entry-card dd li {
|
||
margin: 0.15rem 0;
|
||
}
|
||
/* 条目卡标题字号:移动端收小(约 h3 水平),sm 起与 prose h2 同大;
|
||
卡内 h2 用 inline style 引用该变量,避免被上面的 .prose-content h2 压过 */
|
||
.j13-entry-card h2 {
|
||
--entry-title-size: 1.18rem;
|
||
}
|
||
@media (min-width: 640px) {
|
||
.j13-entry-card h2 {
|
||
--entry-title-size: 1.4rem;
|
||
}
|
||
}
|
||
|
||
/* ----- 正文短代码:[details] 折叠 / [bilibili][youtube] 视频 / ==高亮== / [kbd] 键帽 ----- */
|
||
.prose-content .j13-md-details {
|
||
margin: 1rem 0;
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r-sm);
|
||
background: var(--panel);
|
||
overflow: hidden;
|
||
}
|
||
.prose-content .j13-md-details > summary {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 0.4rem;
|
||
padding: 0.55rem 0.9rem;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
font-weight: 600;
|
||
font-size: 0.95em;
|
||
color: var(--ink);
|
||
list-style: none;
|
||
}
|
||
.prose-content .j13-md-details > summary::-webkit-details-marker {
|
||
display: none;
|
||
}
|
||
.prose-content .j13-md-details > summary:hover {
|
||
background: var(--tint);
|
||
}
|
||
.prose-content .j13-md-details[open] > summary {
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.prose-content .j13-md-details .j13-md-details-caret {
|
||
flex-shrink: 0;
|
||
color: var(--ink-3);
|
||
transition: transform 0.18s ease;
|
||
}
|
||
.prose-content .j13-md-details[open] .j13-md-details-caret {
|
||
transform: rotate(180deg);
|
||
}
|
||
.prose-content .j13-md-details-body {
|
||
padding: 0.35rem 0.9rem 0.6rem;
|
||
}
|
||
.prose-content .j13-md-details-body > :first-child {
|
||
margin-top: 0.35rem;
|
||
}
|
||
.prose-content .j13-md-details-body > :last-child {
|
||
margin-bottom: 0.35rem;
|
||
}
|
||
|
||
/* 视频嵌入:16:9 容器 + 懒加载 iframe 铺满 */
|
||
.j13-md-video {
|
||
position: relative;
|
||
aspect-ratio: 16 / 9;
|
||
margin: 1rem 0;
|
||
border-radius: var(--r-sm);
|
||
overflow: hidden;
|
||
background: var(--tint);
|
||
border: 1px solid var(--line);
|
||
}
|
||
.j13-md-video iframe {
|
||
position: absolute;
|
||
inset: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
border: 0;
|
||
}
|
||
|
||
/* ==高亮==:荧光笔。UA 默认黄底黑字在暗色下刺眼,显式覆盖 */
|
||
.prose-content mark {
|
||
background: color-mix(in srgb, #fde047 55%, transparent);
|
||
color: inherit;
|
||
padding: 0.05em 0.25em;
|
||
border-radius: 4px;
|
||
-webkit-box-decoration-break: clone;
|
||
box-decoration-break: clone;
|
||
}
|
||
.dark .prose-content mark {
|
||
background: color-mix(in srgb, #facc15 30%, transparent);
|
||
color: #fef9c3;
|
||
}
|
||
|
||
/* [kbd] 键帽:等宽 + 下边加厚模拟按键立体 */
|
||
.prose-content kbd {
|
||
display: inline-block;
|
||
padding: 0.1em 0.45em;
|
||
border: 1px solid var(--line-2);
|
||
border-bottom-width: 2px;
|
||
border-radius: 6px;
|
||
background: var(--panel);
|
||
color: var(--ink);
|
||
font-family: var(--font-mono);
|
||
font-size: 0.82em;
|
||
line-height: 1.45;
|
||
vertical-align: baseline;
|
||
}
|
||
|
||
/* 编辑器「文字颜色」弹窗:前景/背景两行,每行预设 + 色轮 + hex 输入 */
|
||
.j13-md-color-popover {
|
||
width: 288px;
|
||
}
|
||
.j13-md-color-row {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 5px;
|
||
margin-bottom: 10px;
|
||
}
|
||
.j13-md-color-row-label {
|
||
font-size: 12px;
|
||
color: var(--ink-3);
|
||
font-weight: 600;
|
||
}
|
||
.j13-md-color-row-items {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-wrap: wrap;
|
||
gap: 5px;
|
||
}
|
||
.j13-md-color-none {
|
||
height: 26px;
|
||
padding: 0 9px;
|
||
border-radius: 8px;
|
||
border: 1px solid var(--line);
|
||
background: transparent;
|
||
color: var(--ink-3);
|
||
font-size: 12px;
|
||
cursor: pointer;
|
||
}
|
||
.j13-md-color-none.is-active {
|
||
border-color: var(--accent);
|
||
color: var(--accent);
|
||
font-weight: 600;
|
||
}
|
||
.j13-md-color-dot {
|
||
width: 26px;
|
||
height: 26px;
|
||
border-radius: 8px;
|
||
border: 1px solid var(--line-2);
|
||
cursor: pointer;
|
||
padding: 0;
|
||
}
|
||
.j13-md-color-dot.is-active {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 1px;
|
||
}
|
||
/* 自定义取色器触发按钮:彩虹渐变底 + 吸管图标 */
|
||
.j13-md-color-wheel {
|
||
width: 26px;
|
||
height: 26px;
|
||
border-radius: 8px;
|
||
border: 1px solid var(--line-2);
|
||
padding: 0;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
cursor: pointer;
|
||
flex-shrink: 0;
|
||
color: #fff;
|
||
background: conic-gradient(
|
||
from 210deg,
|
||
#f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00
|
||
);
|
||
}
|
||
.j13-md-color-wheel svg {
|
||
filter: drop-shadow(0 1px 1.5px rgba(0, 0, 0, 0.65));
|
||
}
|
||
.j13-md-color-wheel:hover {
|
||
transform: scale(1.08);
|
||
}
|
||
.j13-md-color-wheel.is-active {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 1px;
|
||
}
|
||
.j13-md-color-hex {
|
||
flex: 1 1 90px;
|
||
min-width: 90px;
|
||
font-family: var(--font-mono);
|
||
font-size: 12px;
|
||
}
|
||
/* 内联 HSV 取色器:在弹层文档流内展开,只撑开不浮层,不遮挡预览 */
|
||
.j13-md-hsv {
|
||
margin-top: 8px;
|
||
}
|
||
.j13-md-hsv-sv {
|
||
position: relative;
|
||
height: 110px;
|
||
border-radius: 8px;
|
||
overflow: hidden;
|
||
cursor: crosshair;
|
||
touch-action: none;
|
||
border: 1px solid var(--line);
|
||
}
|
||
.j13-md-hsv-sv-thumb {
|
||
position: absolute;
|
||
width: 12px;
|
||
height: 12px;
|
||
border-radius: 50%;
|
||
border: 2px solid #fff;
|
||
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.45);
|
||
transform: translate(-50%, -50%);
|
||
pointer-events: none;
|
||
}
|
||
.j13-md-hsv-hue {
|
||
position: relative;
|
||
height: 12px;
|
||
border-radius: 6px;
|
||
margin-top: 8px;
|
||
cursor: pointer;
|
||
touch-action: none;
|
||
border: 1px solid var(--line);
|
||
background: linear-gradient(
|
||
to right,
|
||
#f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00
|
||
);
|
||
}
|
||
.j13-md-hsv-hue-thumb {
|
||
position: absolute;
|
||
top: 50%;
|
||
width: 10px;
|
||
height: 18px;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
border: 1px solid rgba(0, 0, 0, 0.35);
|
||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
|
||
transform: translate(-50%, -50%);
|
||
pointer-events: none;
|
||
}
|
||
/* 实时预览置于弹层顶部:取色器在行内展开时始终可见,未选背景时透明棋盘格 */
|
||
.j13-md-color-preview {
|
||
display: flex;
|
||
justify-content: center;
|
||
padding: 7px 10px;
|
||
margin-bottom: 10px;
|
||
border: 1px dashed var(--line);
|
||
border-radius: 8px;
|
||
background:
|
||
repeating-conic-gradient(var(--tint) 0% 25%, transparent 0% 50%) 0 0 / 14px 14px;
|
||
}
|
||
.j13-md-color-preview span {
|
||
padding: 2px 10px;
|
||
border-radius: 6px;
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
}
|
||
.prose-content h1 { font-size: 1.75rem; font-weight: 800; margin: 1.6rem 0 0.8rem; }
|
||
.prose-content h2 {
|
||
font-size: 1.4rem;
|
||
font-weight: 700;
|
||
margin: 1.9rem 0 0.7rem;
|
||
padding-bottom: 0.45rem;
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.prose-content h3 { font-size: 1.18rem; font-weight: 700; margin: 1.5rem 0 0.6rem; }
|
||
.prose-content p { margin: 0.9rem 0; }
|
||
.prose-content ul { list-style: disc; padding-left: 1.5rem; margin: 0.9rem 0; }
|
||
.prose-content ol { list-style: decimal; padding-left: 1.5rem; margin: 0.9rem 0; }
|
||
.prose-content li { margin: 0.35rem 0; }
|
||
.prose-content code {
|
||
font-family: var(--font-mono);
|
||
background: var(--tint);
|
||
padding: 0.12rem 0.45rem;
|
||
border-radius: 6px;
|
||
font-size: 0.86em;
|
||
}
|
||
.prose-content pre,
|
||
.prose-content .md-code-pre,
|
||
.prose-content .md-code-shiki-host pre {
|
||
background: transparent !important;
|
||
border: none;
|
||
padding: 0.85rem 1.05rem;
|
||
border-radius: 0;
|
||
overflow-x: auto;
|
||
margin: 0;
|
||
font-family: var(--font-mono);
|
||
font-size: 0.84em;
|
||
line-height: 1.65;
|
||
}
|
||
.prose-content pre code,
|
||
.prose-content .md-code-pre code,
|
||
.prose-content .md-code-shiki-host code {
|
||
background: none;
|
||
padding: 0;
|
||
border-radius: 0;
|
||
font-size: inherit;
|
||
color: inherit;
|
||
min-width: 100%;
|
||
}
|
||
/* grid 代码行:勿设 min-height,否则会把行距撑得很大并在底部留白 */
|
||
.prose-content pre code[style*="grid"] {
|
||
display: grid;
|
||
width: max-content;
|
||
min-width: 100%;
|
||
}
|
||
.prose-content pre code[style*="grid"] > [data-line],
|
||
.prose-content .md-code-shiki-host code > .line,
|
||
.prose-content .md-code-shiki-host code > [data-line] {
|
||
line-height: 1.65;
|
||
}
|
||
/* 空行仍占一行高度(pretty-code onVisitLine 会塞空格) */
|
||
.prose-content pre code[style*="grid"] > [data-line]:empty::after,
|
||
.prose-content .md-code-shiki-host code > .line:empty::after {
|
||
content: " ";
|
||
white-space: pre;
|
||
}
|
||
.prose-content blockquote {
|
||
border-left: 3px solid var(--accent);
|
||
background: var(--accent-soft);
|
||
border-radius: 0 var(--r-sm) var(--r-sm) 0;
|
||
padding: 0.7rem 1.1rem;
|
||
color: var(--ink-2);
|
||
margin: 1.2rem 0;
|
||
}
|
||
.prose-content a {
|
||
color: var(--accent);
|
||
text-decoration: underline;
|
||
text-underline-offset: 3px;
|
||
font-weight: 500;
|
||
overflow-wrap: anywhere;
|
||
}
|
||
/* 正文内嵌按钮链接:未分层的 .prose-content a 会盖掉 @layer 的 .btn-primary 字色 */
|
||
.prose-content a.btn,
|
||
.prose-content a.btn-primary,
|
||
.prose-content a.btn-accent {
|
||
color: var(--accent-on) !important;
|
||
text-decoration: none;
|
||
font-weight: 500;
|
||
}
|
||
.prose-content a.btn-line {
|
||
color: var(--ink) !important;
|
||
text-decoration: none;
|
||
}
|
||
.prose-content img,
|
||
.prose-content .md-content-img {
|
||
max-width: 100%;
|
||
border-radius: var(--r-sm);
|
||
border: 1px solid var(--line);
|
||
cursor: zoom-in;
|
||
transition: opacity 0.15s ease, box-shadow 0.15s ease;
|
||
}
|
||
.prose-content .md-content-img:hover {
|
||
opacity: 0.92;
|
||
box-shadow: 0 4px 18px color-mix(in srgb, var(--ink) 12%, transparent);
|
||
}
|
||
.prose-content .md-img-fallback {
|
||
display: inline-block;
|
||
padding: 0.55rem 0.85rem;
|
||
border-radius: var(--r-sm);
|
||
border: 1px dashed var(--line);
|
||
background: var(--panel-2);
|
||
color: var(--ink-2);
|
||
font-size: 0.9em;
|
||
}
|
||
.prose-content hr { border: none; border-top: 1px solid var(--line); margin: 2.2rem 0; }
|
||
.prose-content strong { font-weight: 700; }
|
||
.prose-content del { color: var(--ink-2); text-decoration: line-through; }
|
||
|
||
/* GFM 表格 */
|
||
.prose-content table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
margin: 1.2rem 0;
|
||
font-size: 0.95em;
|
||
overflow-x: auto;
|
||
display: block;
|
||
}
|
||
.prose-content thead { background: var(--panel-2); }
|
||
.prose-content th,
|
||
.prose-content td {
|
||
border: 1px solid var(--line);
|
||
padding: 0.55rem 0.85rem;
|
||
text-align: left;
|
||
vertical-align: top;
|
||
}
|
||
.prose-content th { font-weight: 700; color: var(--ink); }
|
||
.prose-content tr:nth-child(even) td { background: color-mix(in srgb, var(--tint) 55%, transparent); }
|
||
|
||
/* GFM 任务列表 */
|
||
.prose-content ul.contains-task-list { list-style: none; padding-left: 0.25rem; }
|
||
.prose-content li.task-list-item { display: flex; align-items: flex-start; gap: 0.5rem; }
|
||
.prose-content li.task-list-item input[type="checkbox"] {
|
||
margin-top: 0.4em;
|
||
accent-color: var(--accent);
|
||
pointer-events: none;
|
||
}
|
||
|
||
/* rehype-pretty-code figure 外壳 */
|
||
.prose-content figure[data-rehype-pretty-code-figure] {
|
||
margin: 1.15rem 0;
|
||
}
|
||
.prose-content figure[data-rehype-pretty-code-figure] > .md-code-block {
|
||
margin: 0;
|
||
}
|
||
|
||
/* 代码块壳:工具栏 + 折叠 */
|
||
.prose-content .md-code-block {
|
||
margin: 1.15rem 0;
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r-sm);
|
||
background: var(--panel-2);
|
||
overflow: hidden;
|
||
/* 收起后 scrollIntoView(start) 时避开 sticky 顶栏 */
|
||
scroll-margin-top: 5.5rem;
|
||
}
|
||
.prose-content .md-code-toolbar {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 0.75rem;
|
||
padding: 0.4rem 0.75rem;
|
||
border-bottom: 1px solid var(--line);
|
||
background: color-mix(in srgb, var(--panel) 70%, var(--panel-2));
|
||
}
|
||
.prose-content .md-code-lang {
|
||
font-size: 11.5px;
|
||
font-weight: 600;
|
||
letter-spacing: 0.02em;
|
||
text-transform: lowercase;
|
||
color: var(--ink-2);
|
||
font-family: var(--font-mono);
|
||
}
|
||
.prose-content .md-code-copy {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 0.3rem;
|
||
padding: 0.2rem 0.55rem;
|
||
border-radius: 6px;
|
||
border: 1px solid transparent;
|
||
background: transparent;
|
||
color: var(--ink-2);
|
||
font-size: 12px;
|
||
cursor: pointer;
|
||
transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
|
||
}
|
||
.prose-content .md-code-copy:hover {
|
||
color: var(--ink);
|
||
background: var(--tint);
|
||
border-color: var(--line);
|
||
}
|
||
.prose-content .md-code-body {
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
.prose-content .md-code-body:not(.md-code-collapsed) {
|
||
overflow-x: auto;
|
||
}
|
||
.prose-content .md-code-collapsed {
|
||
overflow: hidden;
|
||
}
|
||
.prose-content .md-code-fade {
|
||
position: absolute;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
height: 2.75rem;
|
||
pointer-events: none;
|
||
background: linear-gradient(to bottom, transparent, var(--panel-2));
|
||
transition: opacity 0.28s ease;
|
||
}
|
||
@media (prefers-reduced-motion: reduce) {
|
||
.prose-content .md-code-body {
|
||
transition: none !important;
|
||
}
|
||
}
|
||
html.j13-reduce-motion .prose-content .md-code-body {
|
||
transition: none !important;
|
||
}
|
||
.prose-content .md-code-fold {
|
||
display: flex;
|
||
width: 100%;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 0.35rem;
|
||
padding: 0.45rem 0.75rem;
|
||
border: none;
|
||
border-top: 1px solid var(--line);
|
||
background: color-mix(in srgb, var(--panel) 55%, var(--panel-2));
|
||
color: var(--accent);
|
||
font-size: 12.5px;
|
||
font-weight: 600;
|
||
cursor: pointer;
|
||
}
|
||
.prose-content .md-code-fold:hover {
|
||
background: var(--accent-soft);
|
||
}
|
||
|
||
/* Shiki 双主题:跟随 html.dark
|
||
注意:rehype-pretty-code 会去掉 pre 上的 .shiki class,
|
||
因此同时用 data-theme / 代码块容器命中,才能让 --shiki-* 变量真正上色 */
|
||
.prose-content .shiki,
|
||
.prose-content .shiki span,
|
||
.prose-content .md-code-block pre,
|
||
.prose-content .md-code-block pre span,
|
||
.prose-content .md-code-shiki-host .shiki,
|
||
.prose-content .md-code-shiki-host .shiki span,
|
||
.prose-content pre[data-theme],
|
||
.prose-content pre[data-theme] span {
|
||
color: var(--shiki-light, var(--ink));
|
||
background-color: transparent !important;
|
||
}
|
||
.prose-content .shiki,
|
||
.prose-content .md-code-block pre,
|
||
.prose-content .md-code-shiki-host .shiki,
|
||
.prose-content pre[data-theme] {
|
||
background: transparent !important;
|
||
}
|
||
html.dark .prose-content .shiki,
|
||
html.dark .prose-content .shiki span,
|
||
html.dark .prose-content .md-code-block pre,
|
||
html.dark .prose-content .md-code-block pre span,
|
||
html.dark .prose-content .md-code-shiki-host .shiki,
|
||
html.dark .prose-content .md-code-shiki-host .shiki span,
|
||
html.dark .prose-content pre[data-theme],
|
||
html.dark .prose-content pre[data-theme] span {
|
||
color: var(--shiki-dark, var(--ink)) !important;
|
||
font-style: var(--shiki-dark-font-style) !important;
|
||
font-weight: var(--shiki-dark-font-weight) !important;
|
||
text-decoration: var(--shiki-dark-text-decoration) !important;
|
||
}
|
||
|
||
/* 图箱 */
|
||
.md-lightbox {
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: 1200;
|
||
display: flex;
|
||
flex-direction: column;
|
||
background: rgba(0, 0, 0, 0.82);
|
||
backdrop-filter: blur(2px);
|
||
}
|
||
.md-lightbox-stage {
|
||
flex: 1;
|
||
min-height: 0;
|
||
width: 100%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
overflow: hidden;
|
||
touch-action: none;
|
||
}
|
||
.md-lightbox-stage.is-zoomed { cursor: grab; }
|
||
.md-lightbox-stage.is-panning { cursor: grabbing; }
|
||
.md-lightbox-figure {
|
||
margin: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.md-lightbox-img {
|
||
max-width: min(92vw, 1200px);
|
||
max-height: calc(100vh - 8.5rem);
|
||
object-fit: contain;
|
||
border-radius: 8px;
|
||
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.45);
|
||
user-select: none;
|
||
transform-origin: center center;
|
||
transition: transform 0.15s ease, filter 0.15s ease;
|
||
}
|
||
.md-lightbox-img.is-odd-rot {
|
||
max-width: calc(100vh - 8.5rem);
|
||
max-height: min(92vw, 1200px);
|
||
}
|
||
.md-lightbox-stage.is-panning .md-lightbox-img,
|
||
.md-lightbox-img.is-snap {
|
||
transition: none;
|
||
}
|
||
.md-lightbox-footer {
|
||
position: absolute;
|
||
bottom: 1rem;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
z-index: 2;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 0.5rem;
|
||
max-width: calc(100vw - 2rem);
|
||
}
|
||
.md-lightbox-caption {
|
||
color: rgba(255, 255, 255, 0.85);
|
||
font-size: 13px;
|
||
text-align: center;
|
||
max-width: 40rem;
|
||
line-height: 1.5;
|
||
margin: 0;
|
||
text-shadow: 0 1px 8px rgba(0, 0, 0, 0.55);
|
||
}
|
||
.md-lightbox-toolbar {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 2px;
|
||
padding: 5px;
|
||
border-radius: 999px;
|
||
background: rgba(0, 0, 0, 0.48);
|
||
backdrop-filter: blur(10px);
|
||
max-width: 100%;
|
||
overflow-x: auto;
|
||
}
|
||
.md-lightbox-tool,
|
||
.md-lightbox-zoom-label {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border: none;
|
||
border-radius: 999px;
|
||
background: transparent;
|
||
color: #fff;
|
||
cursor: pointer;
|
||
transition: background 0.15s ease;
|
||
}
|
||
.md-lightbox-tool {
|
||
width: 36px;
|
||
height: 36px;
|
||
flex-shrink: 0;
|
||
}
|
||
.md-lightbox-zoom-label {
|
||
min-width: 3.25rem;
|
||
height: 36px;
|
||
padding: 0 0.35rem;
|
||
font-size: 12px;
|
||
font-variant-numeric: tabular-nums;
|
||
letter-spacing: 0.02em;
|
||
}
|
||
.md-lightbox-tool:hover,
|
||
.md-lightbox-zoom-label:hover {
|
||
background: rgba(255, 255, 255, 0.14);
|
||
}
|
||
.md-lightbox-tool.is-on {
|
||
background: rgba(255, 255, 255, 0.22);
|
||
}
|
||
.md-lightbox-tool:disabled,
|
||
.md-lightbox-zoom-label:disabled {
|
||
opacity: 0.35;
|
||
cursor: default;
|
||
background: transparent;
|
||
}
|
||
.md-lightbox-tool:focus-visible,
|
||
.md-lightbox-zoom-label:focus-visible {
|
||
outline: 2px solid rgba(255, 255, 255, 0.7);
|
||
outline-offset: 1px;
|
||
}
|
||
.md-lightbox-sep {
|
||
width: 1px;
|
||
height: 16px;
|
||
margin: 0 4px;
|
||
background: rgba(255, 255, 255, 0.22);
|
||
flex-shrink: 0;
|
||
}
|
||
.md-lightbox-close,
|
||
.md-lightbox-nav {
|
||
position: absolute;
|
||
z-index: 3;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border: none;
|
||
border-radius: 999px;
|
||
background: rgba(255, 255, 255, 0.12);
|
||
color: #fff;
|
||
cursor: pointer;
|
||
transition: background 0.15s ease;
|
||
}
|
||
.md-lightbox-close:hover,
|
||
.md-lightbox-nav:hover {
|
||
background: rgba(255, 255, 255, 0.22);
|
||
}
|
||
.md-lightbox-close {
|
||
top: 1rem;
|
||
right: 1rem;
|
||
width: 42px;
|
||
height: 42px;
|
||
}
|
||
.md-lightbox-nav {
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
width: 46px;
|
||
height: 46px;
|
||
}
|
||
.md-lightbox-prev { left: 1rem; }
|
||
.md-lightbox-next { right: 1rem; }
|
||
.md-lightbox-counter {
|
||
color: rgba(255, 255, 255, 0.8);
|
||
font-size: 12.5px;
|
||
font-variant-numeric: tabular-nums;
|
||
letter-spacing: 0.04em;
|
||
padding: 0 0.55rem;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/* 评论区的 Markdown 紧凑排版:继承 prose-content 全部规则,仅收紧行距与间距 */
|
||
.prose-comment { font-size: 15.5px; line-height: 1.7; overflow-wrap: anywhere; }
|
||
.prose-comment p { margin: 0.35rem 0; }
|
||
.prose-comment blockquote { margin: 0.5rem 0; padding: 0.45rem 0.9rem; }
|
||
.prose-comment .md-code-block { margin: 0.6rem 0; }
|
||
.prose-comment h1, .prose-comment h2, .prose-comment h3, .prose-comment h4 {
|
||
font-size: 1em;
|
||
margin: 0.6rem 0 0.3rem;
|
||
border-bottom: none;
|
||
font-weight: 700;
|
||
}
|
||
|
||
/* 移动端浮动操作条内的点赞按钮:放大到 44px 触控标准 */
|
||
.j13-bar-like .j13-like {
|
||
height: 44px;
|
||
padding: 0 14px;
|
||
font-size: 13px;
|
||
}
|
||
|
||
/* 长文回顶:右下角浮钮 */
|
||
.j13-back-top {
|
||
position: fixed;
|
||
right: 1rem;
|
||
bottom: 1.25rem;
|
||
z-index: 45;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 2.75rem;
|
||
height: 2.75rem;
|
||
border-radius: 999px;
|
||
border: 1px solid var(--accent);
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
box-shadow: 0 1px 2px rgba(16, 24, 40, 0.12),
|
||
0 4px 14px color-mix(in srgb, var(--accent) 32%, transparent);
|
||
cursor: pointer;
|
||
transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease,
|
||
box-shadow 0.15s ease;
|
||
}
|
||
.j13-back-top:hover,
|
||
.j13-back-top:focus-visible {
|
||
background: var(--accent-hi);
|
||
border-color: var(--accent-hi);
|
||
color: var(--accent-on);
|
||
outline: none;
|
||
}
|
||
@media (min-width: 640px) {
|
||
.j13-back-top {
|
||
right: 1.35rem;
|
||
bottom: 1.5rem;
|
||
}
|
||
}
|
||
@media (min-width: 1024px) {
|
||
.j13-back-top {
|
||
bottom: 1.5rem;
|
||
}
|
||
}
|
||
/* 移动端抬高避开底部公共菜单(lg 以下显示底栏);置于最后以覆盖上面的 bottom */
|
||
@media (max-width: 1023px) {
|
||
.j13-back-top {
|
||
bottom: calc(4.75rem + env(safe-area-inset-bottom));
|
||
}
|
||
}
|
||
|
||
/* 移动端聚焦评论框(主评论/回复/编辑)时隐藏回顶浮钮:
|
||
虚拟键盘弹起后浮钮会贴近输入区造成遮挡与误触,失焦后自动恢复 */
|
||
@media (max-width: 1023px) {
|
||
body:has(#comments .j13-md-textarea:focus) .j13-back-top {
|
||
display: none;
|
||
}
|
||
}
|
||
|
||
/* 首页移动端:板块条白底上贴页头(#main 顶部不留白,板块条与帖子框连成一张白纸) */
|
||
@media (max-width: 1023px) {
|
||
body:has(.j13-fluid-home) #main {
|
||
padding-top: 0;
|
||
}
|
||
}
|
||
|
||
/* 首页桌面:顶部留白 20px → 8px,中栏信息流上移贴页头;
|
||
main 变 flex 列、三栏区 flex:1 撑满 main——分隔线不随帖子数量缩短,
|
||
从页头下沿贯通到页脚上沿;
|
||
sticky 侧栏的 --rail-top/--rail-max-h 在 #main 上重算(custom property
|
||
在声明处求值,:root 的 --rail-max-h 不会因子级重定义 --rail-top 而更新) */
|
||
@media (min-width: 1024px) {
|
||
body:has(.j13-fluid-home) #main {
|
||
padding-top: 0.5rem;
|
||
--rail-top: calc(var(--header-h) + 0.5rem);
|
||
--rail-max-h: calc(100vh - var(--rail-top) - 1rem);
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
.j13-fluid-home {
|
||
display: flex;
|
||
flex-direction: column;
|
||
flex: 1;
|
||
}
|
||
}
|
||
|
||
/* ============================================================
|
||
前台 main 纸面 + 首页三栏「白纸一体」
|
||
main 铺 --main-bg(浅色纯白 / 暗色比画布略亮一档),左右外缘
|
||
1px --line 描边与页头下边线围合成框;站长配置了自定义站点
|
||
背景图时让位(保持透出画布)。左栏无框化,内容直接坐在纸面上;
|
||
右栏保留卡片板块感(j13-module 原样)。
|
||
============================================================ */
|
||
html:not(.j13-has-site-bg) #main {
|
||
background: var(--main-bg);
|
||
border-left: 1px solid var(--line);
|
||
border-right: 1px solid var(--line);
|
||
}
|
||
|
||
/* 左栏模块去框:j13-module 退化为无底小节,内容直接坐在纸面上 */
|
||
.j13-rail-left .j13-module {
|
||
background: transparent;
|
||
border: 0;
|
||
border-radius: 0;
|
||
box-shadow: none;
|
||
padding: 0;
|
||
}
|
||
/* 左栏小节分隔:任意块相邻时画发丝线(含站长自定义工具块) */
|
||
.j13-rail-left > * + * {
|
||
margin-top: 1.25rem;
|
||
padding-top: 1.25rem;
|
||
border-top: 1px solid var(--line);
|
||
}
|
||
/* 左栏小节标题:纸面小节标(弱化为 meta 级),标题图标随之缩小 */
|
||
.j13-rail-left .j13-module-title {
|
||
font-size: 12px;
|
||
letter-spacing: 0.05em;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-rail-left .j13-module-title > svg {
|
||
width: 14px;
|
||
height: 14px;
|
||
}
|
||
/* 栏内图标无底色:只留彩色字形本身(收成图标实际大小,避免隐形占位拉大间距) */
|
||
.j13-rail-left .j13-bcard-ico {
|
||
background: transparent !important; /* 覆盖「全部讨论/管理面板」图标的内联底色 */
|
||
border-radius: 0;
|
||
width: 20px;
|
||
height: 20px;
|
||
font-size: 13px;
|
||
}
|
||
/* 首页三栏竖向分隔线:与页头下边线同色同宽,居中于栏间距(gap-6 / xl:gap-7),
|
||
画在中栏伪元素上与左右栏共用一条;类名跟随左右栏显隐,避免悬空线。
|
||
上接页头下边线(抵消 #main 顶部 0.5rem)、下接页脚上沿(抵消 #main 底部
|
||
--main-pad-y):中栏 self-stretch 撑满行高(左右栏保持 items-start 不破坏 sticky) */
|
||
.j13-home-sep-l,
|
||
.j13-home-sep-r {
|
||
position: relative;
|
||
}
|
||
@media (min-width: 1024px) {
|
||
.j13-home-sep-l::before,
|
||
.j13-home-sep-r::after {
|
||
content: "";
|
||
position: absolute;
|
||
top: -0.5rem;
|
||
bottom: calc(-1 * var(--main-pad-y));
|
||
width: 1px;
|
||
background: var(--line);
|
||
}
|
||
.j13-home-sep-l::before {
|
||
left: calc(-0.75rem - 0.5px);
|
||
}
|
||
.j13-home-sep-r::after {
|
||
right: calc(-0.75rem - 0.5px);
|
||
}
|
||
}
|
||
@media (min-width: 1280px) {
|
||
.j13-home-sep-l::before {
|
||
left: calc(-0.875rem - 0.5px);
|
||
}
|
||
.j13-home-sep-r::after {
|
||
right: calc(-0.875rem - 0.5px);
|
||
}
|
||
}
|
||
/* 左栏分组标题:小号灰字,纸面风格的段落断点 */
|
||
.j13-rail-left .j13-rail-group {
|
||
padding: 10px 8px 4px;
|
||
font-size: 11px;
|
||
font-weight: 500;
|
||
color: var(--ink-3);
|
||
letter-spacing: 0.02em;
|
||
}
|
||
.j13-rail-left .j13-rail-group:first-child {
|
||
padding-top: 2px;
|
||
}
|
||
/* 左栏板块导航:当前项 accent 竖条 + 浅色底 */
|
||
.j13-rail-left .j13-module .j13-bcard {
|
||
position: relative;
|
||
}
|
||
.j13-rail-left .j13-module .j13-bcard[aria-current="page"],
|
||
.j13-rail-left .j13-module .j13-bcard[aria-current="page"]:hover,
|
||
.j13-rail-left .j13-module .j13-bcard[aria-current="page"]:focus-visible {
|
||
background: var(--nav-active-bg);
|
||
border-color: transparent;
|
||
}
|
||
.j13-rail-left .j13-module .j13-bcard[aria-current="page"]::before {
|
||
content: "";
|
||
position: absolute;
|
||
left: 0;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
width: 3px;
|
||
height: 55%;
|
||
border-radius: 2px;
|
||
background: var(--accent);
|
||
}
|
||
|
||
/* 中栏排序 Tab:描边胶囊改下划线式,active 下划线压在首行发丝线上 */
|
||
.j13-feed-head [role="tablist"] {
|
||
align-items: stretch;
|
||
}
|
||
.j13-feed-head .j13-tab {
|
||
position: relative;
|
||
border: 0;
|
||
background: transparent;
|
||
border-radius: 0;
|
||
/* 上下对称,Tab 文字与右侧 meta(self-center)垂直居中对齐;下划线仍贴行底 */
|
||
padding: 7px 2px;
|
||
}
|
||
.j13-feed-head .j13-tab::after {
|
||
content: "";
|
||
position: absolute;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
height: 2px;
|
||
border-radius: 1px 1px 0 0;
|
||
background: transparent;
|
||
}
|
||
.j13-feed-head .j13-tab:hover,
|
||
.j13-feed-head .j13-tab:focus-visible {
|
||
background: transparent;
|
||
border: 0;
|
||
}
|
||
.j13-feed-head .j13-tab[aria-selected="true"] {
|
||
background: transparent;
|
||
border: 0;
|
||
}
|
||
.j13-feed-head .j13-tab[aria-selected="true"]::after {
|
||
background: var(--accent);
|
||
}
|
||
|
||
/* 评论楼层树
|
||
主评论全宽;子回复默认折叠。视觉缩进最多两级,更深靠「回复谁」说明。 */
|
||
|
||
.cmt-item {
|
||
padding: 16px 0;
|
||
border-top: 1px solid var(--line);
|
||
min-width: 0;
|
||
}
|
||
.cmt-item:first-child {
|
||
border-top: none;
|
||
padding-top: 2px;
|
||
}
|
||
.cmt-meta {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 6px 8px;
|
||
min-width: 0;
|
||
margin-bottom: 6px;
|
||
}
|
||
.cmt-meta-lead {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 6px 8px;
|
||
min-width: 0;
|
||
flex: 1 1 auto;
|
||
}
|
||
.cmt-name-link {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
.cmt-name {
|
||
display: block;
|
||
max-width: 16em;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
font-size: 14.5px;
|
||
font-weight: 600;
|
||
line-height: 1.35;
|
||
color: var(--ink);
|
||
}
|
||
.cmt-time {
|
||
font-size: 12.5px;
|
||
line-height: 1.4;
|
||
color: var(--ink-2);
|
||
background: none;
|
||
border: 0;
|
||
padding: 0;
|
||
cursor: default;
|
||
}
|
||
.cmt-time:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 2px;
|
||
border-radius: 4px;
|
||
}
|
||
.cmt-edited {
|
||
font-size: 12.5px;
|
||
font-weight: 600;
|
||
color: var(--ink-2);
|
||
background: none;
|
||
border: 0;
|
||
padding: 0;
|
||
}
|
||
button.cmt-edited {
|
||
cursor: pointer;
|
||
text-decoration: underline;
|
||
text-underline-offset: 2px;
|
||
}
|
||
/* 评论编辑历史:git diff 风格修订视图 */
|
||
.cmt-diff {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 4px;
|
||
}
|
||
.cmt-diff-stat {
|
||
display: flex;
|
||
gap: 8px;
|
||
font-size: 11.5px;
|
||
font-weight: 600;
|
||
line-height: 1;
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
.cmt-diff-stat-add {
|
||
color: var(--ok);
|
||
}
|
||
.cmt-diff-stat-del {
|
||
color: var(--danger);
|
||
}
|
||
.cmt-diff-body {
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
|
||
font-size: 12.5px;
|
||
line-height: 1.55;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: 6px;
|
||
padding: 4px 0;
|
||
}
|
||
.cmt-diff-line {
|
||
display: flex;
|
||
gap: 8px;
|
||
padding: 0 10px;
|
||
white-space: pre-wrap;
|
||
word-break: break-word;
|
||
min-height: 1.55em;
|
||
}
|
||
.cmt-diff-sign {
|
||
flex-shrink: 0;
|
||
width: 1ch;
|
||
user-select: none;
|
||
opacity: 0.65;
|
||
}
|
||
.cmt-diff-text {
|
||
min-width: 0;
|
||
flex: 1;
|
||
}
|
||
.cmt-diff-line.is-del {
|
||
background: color-mix(in srgb, var(--danger-soft) 60%, transparent);
|
||
}
|
||
.cmt-diff-line.is-add {
|
||
background: color-mix(in srgb, var(--ok-soft) 60%, transparent);
|
||
}
|
||
.cmt-diff-line.is-ctx {
|
||
color: var(--ink-2);
|
||
}
|
||
.cmt-diff-chg {
|
||
border-radius: 3px;
|
||
padding: 0 1px;
|
||
background: color-mix(in srgb, var(--danger) 24%, transparent);
|
||
color: inherit;
|
||
}
|
||
.cmt-diff-line.is-add .cmt-diff-chg {
|
||
background: color-mix(in srgb, var(--ok) 24%, transparent);
|
||
}
|
||
.cmt-diff-fold {
|
||
padding: 2px 10px;
|
||
font-size: 11.5px;
|
||
text-align: center;
|
||
color: var(--ink-2);
|
||
background: color-mix(in srgb, var(--ink) 3%, transparent);
|
||
}
|
||
.cmt-badge {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
height: 18px;
|
||
padding: 0 6px;
|
||
border-radius: 999px;
|
||
font-size: 11px;
|
||
font-weight: 600;
|
||
line-height: 1;
|
||
color: var(--accent);
|
||
background: var(--accent-soft);
|
||
flex-shrink: 0;
|
||
}
|
||
.cmt-actions {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 2px 10px;
|
||
margin-top: 8px;
|
||
min-width: 0;
|
||
}
|
||
.cmt-more {
|
||
position: relative;
|
||
}
|
||
.cmt-more-btn,
|
||
.cmt-reply-btn {
|
||
min-height: 32px;
|
||
padding: 0 4px;
|
||
}
|
||
.cmt-more-btn {
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
color: var(--ink-2);
|
||
background: none;
|
||
border: 0;
|
||
cursor: pointer;
|
||
border-radius: 8px;
|
||
}
|
||
.cmt-more-btn:hover,
|
||
.cmt-more-btn[aria-expanded="true"] {
|
||
color: var(--accent);
|
||
}
|
||
.cmt-more-menu {
|
||
position: absolute;
|
||
z-index: 30;
|
||
top: calc(100% + 4px);
|
||
left: 0;
|
||
min-width: 148px;
|
||
padding: 4px;
|
||
border-radius: 12px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
box-shadow: var(--shadow-lg);
|
||
}
|
||
.cmt-more-menu button {
|
||
display: flex;
|
||
width: 100%;
|
||
text-align: left;
|
||
padding: 8px 10px;
|
||
border: 0;
|
||
border-radius: 8px;
|
||
background: transparent;
|
||
color: var(--ink);
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
cursor: pointer;
|
||
}
|
||
.cmt-more-menu button:hover,
|
||
.cmt-more-menu button:focus-visible {
|
||
background: var(--panel-2);
|
||
outline: none;
|
||
}
|
||
.cmt-more-menu button.is-danger {
|
||
color: var(--danger);
|
||
}
|
||
.cmt-more-sep {
|
||
height: 1px;
|
||
margin: 4px 6px;
|
||
background: var(--line);
|
||
}
|
||
.cmt-posted-note {
|
||
margin-top: 10px;
|
||
font-size: 13px;
|
||
color: var(--ink-2);
|
||
}
|
||
.cmt-posted-note a {
|
||
color: var(--accent);
|
||
font-weight: 600;
|
||
}
|
||
.cmt-submit {
|
||
height: 38px;
|
||
padding: 0 16px;
|
||
font-size: 14px;
|
||
}
|
||
.cmt-submit:disabled {
|
||
background: var(--tint);
|
||
color: var(--ink-2);
|
||
box-shadow: none;
|
||
opacity: 1;
|
||
}
|
||
|
||
/* 子回复行:紧凑布局,头像 32px */
|
||
.cmt-reply-row {
|
||
padding: 14px 0;
|
||
border-top: 1px solid var(--line);
|
||
min-width: 0;
|
||
}
|
||
.cmt-reply-row:first-child {
|
||
border-top: none;
|
||
padding-top: 0;
|
||
}
|
||
|
||
/* 子回复昵称 */
|
||
.cmt-reply-name {
|
||
font-size: 14px;
|
||
font-weight: 600;
|
||
color: var(--ink);
|
||
}
|
||
|
||
/* 楼层号标签(主评论昵称旁) */
|
||
.cmt-floor-label {
|
||
font-size: 11.5px;
|
||
font-weight: 500;
|
||
color: var(--ink-3);
|
||
text-decoration: none;
|
||
padding: 1px 6px;
|
||
border-radius: 6px;
|
||
background: var(--tint);
|
||
transition: color 0.15s;
|
||
}
|
||
.cmt-floor-label:hover {
|
||
color: var(--accent);
|
||
}
|
||
|
||
/* 回复文字按钮:放在时间右侧,抖音风格 */
|
||
.cmt-reply-btn {
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
color: var(--ink-2);
|
||
background: none;
|
||
border: none;
|
||
padding: 0 4px;
|
||
min-height: 32px;
|
||
cursor: pointer;
|
||
border-radius: 8px;
|
||
}
|
||
.cmt-reply-btn:hover {
|
||
color: var(--accent);
|
||
}
|
||
|
||
/* 右三角箭头(回复子评论时) */
|
||
.cmt-reply-arrow {
|
||
color: var(--ink-3);
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
/* 被回复者名称(可点击跳转) */
|
||
.cmt-reply-target {
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
color: var(--ink-2);
|
||
text-decoration: none;
|
||
white-space: nowrap;
|
||
}
|
||
.cmt-reply-target:hover {
|
||
color: var(--accent);
|
||
}
|
||
|
||
/* 子回复容器:背景与主评论区分,圆角 */
|
||
.cmt-replies-wrap {
|
||
margin-top: 8px;
|
||
padding: 4px 12px;
|
||
background: var(--panel-2);
|
||
border-radius: 12px;
|
||
}
|
||
|
||
/* 孙评论及更深:小幅缩进 + 细引导线 */
|
||
.cmt-children {
|
||
margin-top: 2px;
|
||
padding-left: 10px;
|
||
border-left: 1px solid var(--line);
|
||
}
|
||
.cmt-children .cmt-children .cmt-children {
|
||
padding-left: 0;
|
||
border-left: 0;
|
||
}
|
||
|
||
/* 展开/收起按钮 */
|
||
.cmt-fold-btn {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
font-size: 12.5px;
|
||
font-weight: 500;
|
||
color: var(--accent);
|
||
padding: 4px 10px;
|
||
border-radius: 99px;
|
||
background: var(--accent-soft);
|
||
border: none;
|
||
cursor: pointer;
|
||
transition: background 0.15s;
|
||
}
|
||
.cmt-fold-btn:hover {
|
||
background: color-mix(in srgb, var(--accent) 18%, transparent);
|
||
}
|
||
|
||
/* 评论内联回复表单:与楼层块同级全宽显示(DOM 见 CommentSection 列表 map)。
|
||
前侧间距由 .cmt-item 的 padding-bottom 提供 */
|
||
.cmt-reply-form {
|
||
padding: 12px 14px;
|
||
border-radius: 14px;
|
||
background: var(--panel-2);
|
||
}
|
||
|
||
/* 评论区编辑器:矮输入区,底栏含提交 */
|
||
.cmt-md-editor {
|
||
border: 1px solid var(--line);
|
||
border-radius: 12px;
|
||
padding: 0.25rem 0.75rem 0.55rem;
|
||
background: var(--panel);
|
||
container-type: inline-size;
|
||
}
|
||
.cmt-md-editor .j13-md-editor:not(.is-fullscreen) {
|
||
min-height: 0;
|
||
}
|
||
.cmt-md-editor .j13-md-toolbar {
|
||
padding-bottom: 8px;
|
||
}
|
||
.cmt-md-editor .j13-md-foot {
|
||
font-size: 12.5px;
|
||
padding-top: 8px;
|
||
flex-wrap: wrap;
|
||
}
|
||
@container (max-width: 420px) {
|
||
/* 手机端评论栏:工具按钮收到 30px(与 is-narrow 一致),「编写/预览」收成图标,
|
||
保证核心工具与「更多」单行排开不与模式切换重叠;
|
||
极端窄宽(<340px)放不下时,模式切换整体换到第二行而不是压在「更多」上 */
|
||
.cmt-md-editor .j13-md-editor.is-comment .j13-md-toolbar {
|
||
flex-wrap: wrap;
|
||
row-gap: 6px;
|
||
}
|
||
.cmt-md-editor .j13-md-editor.is-comment .j13-md-tool {
|
||
width: 30px;
|
||
height: 30px;
|
||
}
|
||
.cmt-md-editor .j13-md-editor.is-comment .j13-md-tool-groups {
|
||
flex: 1 0 auto;
|
||
min-width: min-content;
|
||
}
|
||
.cmt-md-editor .j13-md-toolbar-end {
|
||
margin-left: auto;
|
||
}
|
||
.cmt-md-editor .j13-md-mode button {
|
||
width: 30px;
|
||
padding: 0;
|
||
gap: 0;
|
||
justify-content: center;
|
||
}
|
||
.cmt-md-editor .j13-md-mode-text {
|
||
display: none;
|
||
}
|
||
}
|
||
|
||
/* 软删占位:匿名马赛克(不含真实头像/昵称) */
|
||
.cmt-mosaic-avatar {
|
||
position: relative;
|
||
display: inline-flex;
|
||
border-radius: 9999px;
|
||
overflow: hidden;
|
||
pointer-events: none;
|
||
user-select: none;
|
||
flex-shrink: 0;
|
||
}
|
||
.cmt-mosaic-avatar-fill {
|
||
display: block;
|
||
width: 100%;
|
||
height: 100%;
|
||
background: color-mix(in srgb, var(--ink-3) 50%, var(--panel));
|
||
}
|
||
.cmt-mosaic-avatar::after {
|
||
content: "";
|
||
position: absolute;
|
||
inset: 0;
|
||
border-radius: inherit;
|
||
background-image:
|
||
repeating-linear-gradient(
|
||
0deg,
|
||
color-mix(in srgb, var(--ink) 18%, transparent) 0 1px,
|
||
transparent 1px 3px
|
||
),
|
||
repeating-linear-gradient(
|
||
90deg,
|
||
color-mix(in srgb, var(--ink) 18%, transparent) 0 1px,
|
||
transparent 1px 3px
|
||
);
|
||
mix-blend-mode: soft-light;
|
||
pointer-events: none;
|
||
}
|
||
.cmt-mosaic-name {
|
||
position: relative;
|
||
display: inline-block;
|
||
width: 4.5rem;
|
||
height: 14px;
|
||
border-radius: 4px;
|
||
overflow: hidden;
|
||
background: color-mix(in srgb, var(--ink-3) 40%, var(--panel));
|
||
pointer-events: none;
|
||
user-select: none;
|
||
vertical-align: middle;
|
||
}
|
||
.cmt-mosaic-name::after {
|
||
content: "";
|
||
position: absolute;
|
||
inset: 0;
|
||
background-image:
|
||
repeating-linear-gradient(
|
||
0deg,
|
||
color-mix(in srgb, var(--ink) 18%, transparent) 0 1px,
|
||
transparent 1px 3px
|
||
),
|
||
repeating-linear-gradient(
|
||
90deg,
|
||
color-mix(in srgb, var(--ink) 18%, transparent) 0 1px,
|
||
transparent 1px 3px
|
||
);
|
||
mix-blend-mode: soft-light;
|
||
pointer-events: none;
|
||
}
|
||
.cmt-tombstone {
|
||
border-radius: 12px;
|
||
padding: 10px 12px;
|
||
background: var(--panel-2);
|
||
border: 1px dashed color-mix(in srgb, var(--ink-3) 45%, var(--line));
|
||
}
|
||
.cmt-tombstone-title {
|
||
font-size: 13px;
|
||
font-weight: 600;
|
||
color: var(--ink-2);
|
||
}
|
||
.cmt-tombstone-reason {
|
||
margin-top: 6px;
|
||
font-size: 12.5px;
|
||
line-height: 1.5;
|
||
color: var(--ink-3);
|
||
}
|
||
.cmt-tombstone-tag {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
margin-top: 8px;
|
||
padding: 2px 8px;
|
||
border-radius: 9999px;
|
||
font-size: 11px;
|
||
font-weight: 600;
|
||
background: color-mix(in srgb, var(--danger) 12%, var(--panel));
|
||
color: var(--danger);
|
||
}
|
||
.cmt-tombstone-tag-self {
|
||
background: color-mix(in srgb, var(--ink-3) 16%, var(--panel));
|
||
color: var(--ink-3);
|
||
}
|
||
.cmt-tombstone-audit {
|
||
margin-top: 8px;
|
||
padding: 8px 10px;
|
||
border-radius: 10px;
|
||
border: 1px dashed color-mix(in srgb, var(--accent) 40%, var(--line));
|
||
background: color-mix(in srgb, var(--accent-soft) 55%, var(--panel));
|
||
}
|
||
.cmt-tombstone-audit-label {
|
||
display: inline-block;
|
||
font-size: 11px;
|
||
font-weight: 700;
|
||
letter-spacing: 0.02em;
|
||
color: var(--accent);
|
||
}
|
||
.cmt-tombstone-orig {
|
||
margin-top: 8px;
|
||
padding: 8px 10px;
|
||
border-radius: 10px;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
}
|
||
.cmt-tombstone-orig .prose-comment {
|
||
font-size: 13px;
|
||
opacity: 0.92;
|
||
}
|
||
.cmt-tombstone-mod {
|
||
margin-top: 8px;
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 8px;
|
||
font-size: 12.5px;
|
||
color: var(--ink-2);
|
||
}
|
||
.cmt-tombstone-mod a {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
color: var(--accent);
|
||
font-weight: 600;
|
||
}
|
||
.cmt-tombstone-mod a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
/* 评论管理操作:紧凑文字按钮组,取代孤立图标 */
|
||
.cmt-mod-actions {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 2px;
|
||
padding: 2px;
|
||
border-radius: 10px;
|
||
background: var(--panel-2);
|
||
border: 1px solid var(--line);
|
||
}
|
||
.cmt-mod-btn {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 4px;
|
||
padding: 5px 10px;
|
||
border-radius: 8px;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
line-height: 1;
|
||
color: var(--ink-2);
|
||
transition: background 0.15s, color 0.15s;
|
||
}
|
||
.cmt-mod-btn:hover:not(:disabled) {
|
||
background: color-mix(in srgb, var(--danger) 10%, var(--panel));
|
||
color: var(--danger);
|
||
}
|
||
.cmt-mod-btn:disabled {
|
||
opacity: 0.5;
|
||
}
|
||
.cmt-mod-btn-danger:hover:not(:disabled) {
|
||
background: color-mix(in srgb, var(--danger) 16%, var(--panel));
|
||
color: var(--danger);
|
||
}
|
||
|
||
@media (max-width: 640px) {
|
||
.cmt-replies-wrap {
|
||
padding: 4px 8px;
|
||
}
|
||
.cmt-children,
|
||
.cmt-children .cmt-children {
|
||
padding-left: 0;
|
||
border-left: 0;
|
||
}
|
||
.cmt-reply-btn,
|
||
.cmt-more-btn,
|
||
.cmt-more-menu button {
|
||
min-height: 44px;
|
||
}
|
||
.cmt-name {
|
||
max-width: 9.5em;
|
||
}
|
||
}
|
||
|
||
@media (prefers-reduced-motion: reduce) {
|
||
* { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }
|
||
}
|
||
|
||
/* 站点关闭界面动画总开关(与系统 reduce 等效) */
|
||
html.j13-reduce-motion * {
|
||
animation-duration: 0.01ms !important;
|
||
transition-duration: 0.01ms !important;
|
||
}
|
||
|
||
/* 仅关闭装饰入场子开关 */
|
||
html.j13-reduce-chrome .j13-fade-up,
|
||
html.j13-reduce-chrome .j13-toast-in,
|
||
html.j13-reduce-chrome .j13-heart-pop,
|
||
html.j13-reduce-chrome .j13-pulse-dot,
|
||
html.j13-reduce-chrome .j13-tip-bubble,
|
||
html.j13-reduce-chrome .j13-tip-in,
|
||
html.j13-reduce-chrome .j13-att-card.is-fresh {
|
||
animation: none !important;
|
||
transition: none !important;
|
||
}
|
||
|
||
/* 头像/板块配色(浅/暗各自保证可读) */
|
||
.av-0 { background: rgba(52, 81, 200, 0.12); color: #3451c8; }
|
||
.av-1 { background: rgba(10, 99, 117, 0.12); color: #0a6375; }
|
||
.av-2 { background: rgba(109, 71, 192, 0.12); color: #6d47c0; }
|
||
.av-3 { background: rgba(27, 99, 158, 0.12); color: #1b639e; }
|
||
.av-4 { background: rgba(12, 102, 95, 0.13); color: #0c665f; }
|
||
.av-5 { background: rgba(171, 56, 93, 0.12); color: #ab385d; }
|
||
.av-6 { background: rgba(133, 88, 0, 0.14); color: #855800; }
|
||
.av-7 { background: rgba(82, 96, 122, 0.13); color: #52607a; }
|
||
.av-8 { background: rgba(5, 150, 105, 0.13); color: #059669; }
|
||
.av-9 { background: rgba(2, 132, 199, 0.13); color: #0284c7; }
|
||
.av-10 { background: rgba(67, 56, 202, 0.13); color: #4338ca; }
|
||
.av-11 { background: rgba(190, 24, 93, 0.13); color: #be185d; }
|
||
.av-12 { background: rgba(180, 83, 9, 0.14); color: #b45309; }
|
||
.av-13 { background: rgba(77, 124, 3, 0.14); color: #4d7c03; }
|
||
.av-14 { background: rgba(157, 23, 158, 0.13); color: #9d179e; }
|
||
.av-15 { background: rgba(159, 0, 51, 0.13); color: #9f0033; }
|
||
.dark .av-0 { background: rgba(169, 184, 255, 0.18); color: #a9b8ff; }
|
||
.dark .av-1 { background: rgba(92, 201, 224, 0.18); color: #5cc9e0; }
|
||
.dark .av-2 { background: rgba(192, 168, 245, 0.18); color: #c0a8f5; }
|
||
.dark .av-3 { background: rgba(125, 184, 238, 0.18); color: #7db8ee; }
|
||
.dark .av-4 { background: rgba(94, 211, 189, 0.18); color: #5ed3bd; }
|
||
.dark .av-5 { background: rgba(240, 147, 181, 0.18); color: #f093b5; }
|
||
.dark .av-6 { background: rgba(224, 178, 89, 0.18); color: #e0b259; }
|
||
.dark .av-7 { background: rgba(170, 182, 207, 0.18); color: #aab6cf; }
|
||
.dark .av-8 { background: rgba(110, 231, 183, 0.18); color: #6ee7b7; }
|
||
.dark .av-9 { background: rgba(125, 211, 252, 0.18); color: #7dd3fc; }
|
||
.dark .av-10 { background: rgba(165, 180, 252, 0.18); color: #a5b4fc; }
|
||
.dark .av-11 { background: rgba(251, 113, 133, 0.18); color: #fb7185; }
|
||
.dark .av-12 { background: rgba(252, 211, 77, 0.18); color: #fcd34d; }
|
||
.dark .av-13 { background: rgba(190, 242, 100, 0.18); color: #bef264; }
|
||
.dark .av-14 { background: rgba(232, 121, 249, 0.18); color: #e879f9; }
|
||
.dark .av-15 { background: rgba(248, 113, 113, 0.18); color: #f87171; }
|
||
|
||
/* ============================================================
|
||
微交互
|
||
============================================================ */
|
||
@keyframes j13-toast-in {
|
||
from { opacity: 0; transform: translateY(10px) scale(0.98); }
|
||
to { opacity: 1; transform: translateY(0) scale(1); }
|
||
}
|
||
.j13-toast-in { animation: j13-toast-in 0.2s cubic-bezier(0.2, 0.9, 0.3, 1.2); }
|
||
|
||
@keyframes j13-heart-pop {
|
||
0% { transform: scale(1); }
|
||
45% { transform: scale(1.4); }
|
||
100% { transform: scale(1); }
|
||
}
|
||
.j13-heart-pop { animation: j13-heart-pop 0.18s ease-out; }
|
||
|
||
@keyframes j13-fade-up {
|
||
from { opacity: 0; transform: translateY(10px); }
|
||
to { opacity: 1; transform: translateY(0); }
|
||
}
|
||
.j13-fade-up { animation: j13-fade-up 0.2s ease-out both; }
|
||
|
||
/* 深链/目录跳转落点高亮:先铺主题色浅底再渐隐(lib/flash.ts 挂载,超时自动摘除) */
|
||
@keyframes j13-flash-fade {
|
||
from { background-color: var(--accent-soft); }
|
||
to { background-color: transparent; }
|
||
}
|
||
.j13-flash-target {
|
||
animation: j13-flash-fade 1.8s ease-out both;
|
||
border-radius: 10px;
|
||
}
|
||
|
||
/* 跳到主内容 */
|
||
.skip-link {
|
||
position: fixed;
|
||
top: 10px;
|
||
left: 10px;
|
||
z-index: 10001;
|
||
padding: 10px 18px;
|
||
font-size: 13.5px;
|
||
font-weight: 500;
|
||
background: var(--accent);
|
||
color: var(--accent-on);
|
||
border-radius: 999px;
|
||
transform: translateY(-200%);
|
||
transition: transform 0.18s ease;
|
||
}
|
||
.skip-link:focus-visible {
|
||
transform: translateY(0);
|
||
outline: none;
|
||
}
|
||
|
||
/* 单页编辑器:未分层才能盖过 .j13-md-textarea 的 min-height: 320px */
|
||
.admin-doc-md .j13-md-editor:not(.is-fullscreen) {
|
||
height: clamp(16rem, calc(100dvh - 22rem), 40rem);
|
||
min-height: 0;
|
||
}
|
||
.admin-doc-md .j13-md-textarea,
|
||
.admin-doc-md .j13-md-preview {
|
||
min-height: 0;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
/* Operational settings reuse the existing theme tokens in both themes. */
|
||
.ops-panel { width: 100%; display: grid; gap: 1rem; }
|
||
.ops-fields { border: 0; padding: 0; min-width: 0; display: grid; gap: 1rem; }
|
||
.ops-summary, .ops-actions { display: flex; gap: 0.65rem; align-items: center; flex-wrap: wrap; }
|
||
.ops-actions { margin-top: 0.35rem; }
|
||
.ops-summary { color: var(--ink-3); font-size: 12.5px; }
|
||
.ops-panel .field {
|
||
padding: 0.45rem 0.7rem;
|
||
font-size: 13.5px;
|
||
line-height: 1.4;
|
||
border-radius: 0.5rem;
|
||
}
|
||
.ops-panel textarea.field {
|
||
font-size: 13.5px;
|
||
line-height: 1.55;
|
||
}
|
||
.ops-secret { display: flex; flex-direction: column; align-items: flex-start; gap: 0.4rem; max-width: min(22rem, 100%); }
|
||
.ops-secret .field { width: 100%; }
|
||
.ops-secret-card { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; width: 100%; padding: 0.55rem 0.75rem; border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--tint); }
|
||
.ops-secret-card.is-remove { background: var(--danger-soft); border-color: color-mix(in srgb, var(--danger) 28%, transparent); }
|
||
.ops-secret-title { margin: 0; font-size: 13px; font-weight: 600; color: var(--ink); }
|
||
.ops-secret-card.is-remove .ops-secret-title { color: var(--danger); }
|
||
.ops-secret-note { margin: 2px 0 0; font-size: 12px; line-height: 1.4; color: var(--ink-3); }
|
||
.ops-secret-card.is-remove .ops-secret-note { color: var(--danger); }
|
||
.ops-secret-actions { display: flex; align-items: center; gap: 0.25rem; flex-shrink: 0; }
|
||
.ops-text-btn { appearance: none; border: 0; background: none; padding: 0.35rem 0.45rem; font: inherit; font-size: 12.5px; line-height: 1.2; color: var(--ink-2); cursor: pointer; }
|
||
.ops-text-btn:hover { color: var(--ink); }
|
||
.ops-text-btn.is-danger { color: var(--danger); }
|
||
.ops-text-btn.is-danger:hover { text-decoration: underline; }
|
||
.ops-text-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 4px; }
|
||
.ops-savebar .admin-settings-group-body { padding-top: 1rem; }
|
||
.ops-preview { padding: 0.85rem 1.1rem 1.1rem; background: var(--panel); border: 1px solid var(--line); border-radius: var(--r); }
|
||
.ops-preview summary { cursor: pointer; font-size: 13.5px; font-weight: 600; color: var(--ink); }
|
||
.ops-template { width: 100%; max-width: 100%; min-height: 12rem; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12.5px; line-height: 1.55; }
|
||
.ops-input { width: 100%; max-width: 22rem; }
|
||
.ops-number { width: 7.5rem; }
|
||
.ops-select {
|
||
width: 100%;
|
||
max-width: 18rem;
|
||
appearance: none;
|
||
background-color: var(--panel);
|
||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%236b7280' d='M1.2 1.3L6 6.1l4.8-4.8 1.1 1.1L6 8.3.1 2.4z'/%3E%3C/svg%3E");
|
||
background-repeat: no-repeat;
|
||
background-position: right 0.7rem center;
|
||
background-size: 0.7rem;
|
||
padding-right: 2rem;
|
||
cursor: pointer;
|
||
}
|
||
.ops-select:focus {
|
||
outline: none;
|
||
border-color: var(--accent);
|
||
box-shadow: 0 0 0 2px var(--focus-glow);
|
||
}
|
||
.ops-datetime { display: flex; flex-direction: column; gap: 0.35rem; max-width: min(22rem, 100%); }
|
||
.ops-datetime-input { width: 100%; max-width: 16rem; }
|
||
.ops-datetime-actions { display: flex; align-items: center; gap: 0.5rem; }
|
||
.ops-hint { color: var(--ink-3); font-size: 12px; line-height: 1.5; margin: 0; overflow-wrap: anywhere; }
|
||
.ops-mail-vars-lead {
|
||
margin: 0.35rem 0 0;
|
||
font-size: 12.5px;
|
||
line-height: 1.5;
|
||
color: var(--ink-3);
|
||
}
|
||
.ops-mail-vars {
|
||
display: grid;
|
||
gap: 0.35rem 1rem;
|
||
margin: 0.45rem 0 0;
|
||
padding: 0.55rem 0.7rem;
|
||
border-radius: 0.5rem;
|
||
background: var(--panel-2);
|
||
border: 1px solid var(--line);
|
||
font-size: 12.5px;
|
||
line-height: 1.45;
|
||
}
|
||
.ops-mail-vars > div {
|
||
display: grid;
|
||
grid-template-columns: minmax(7.5rem, max-content) minmax(0, 1fr);
|
||
gap: 0.25rem 0.75rem;
|
||
align-items: baseline;
|
||
}
|
||
.ops-mail-vars dt {
|
||
margin: 0;
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
color: var(--ink);
|
||
white-space: nowrap;
|
||
}
|
||
.ops-mail-vars dd {
|
||
margin: 0;
|
||
color: var(--ink-3);
|
||
}
|
||
@media (max-width: 520px) {
|
||
.ops-mail-vars > div {
|
||
grid-template-columns: minmax(0, 1fr);
|
||
gap: 0.1rem;
|
||
}
|
||
}
|
||
.ops-alert { margin: 0; padding: 0.65rem 0.85rem; border-radius: var(--r-sm); background: var(--danger-soft); color: var(--danger); font-size: 13px; }
|
||
.ops-advanced { padding: 0.35rem 0; }
|
||
.ops-advanced summary { cursor: pointer; margin-bottom: 0.65rem; font-size: 13px; color: var(--ink-2); display: inline-flex; align-items: center; gap: 0.35rem; }
|
||
.ops-busy { display: inline-flex; align-items: center; gap: 0.4rem; margin: 0; font-size: 13px; color: var(--ink-2); }
|
||
.ops-tool-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fill, minmax(11.5rem, 1fr));
|
||
gap: 0.65rem;
|
||
}
|
||
.ops-tool-card {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: flex-start;
|
||
gap: 0.25rem;
|
||
text-align: left;
|
||
padding: 0.85rem 0.95rem;
|
||
border-radius: 0.75rem;
|
||
border: 1px solid var(--line);
|
||
background: var(--panel-2);
|
||
color: var(--ink);
|
||
font-family: inherit;
|
||
cursor: pointer;
|
||
}
|
||
.ops-tool-card:hover:not(:disabled) {
|
||
border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
|
||
background: var(--accent-soft);
|
||
}
|
||
.ops-tool-card:disabled { opacity: 0.55; cursor: not-allowed; }
|
||
.ops-tool-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
||
.ops-tool-title { font-size: 13.5px; font-weight: 600; }
|
||
.ops-tool-desc { font-size: 12px; color: var(--ink-3); line-height: 1.4; }
|
||
.ops-result-panel {
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--r);
|
||
background: var(--panel);
|
||
overflow: hidden;
|
||
}
|
||
.ops-result-head {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 0.75rem;
|
||
padding: 0.65rem 0.9rem;
|
||
border-bottom: 1px solid var(--line);
|
||
font-size: 13px;
|
||
}
|
||
.ops-result-body {
|
||
max-height: 18rem;
|
||
overflow: auto;
|
||
padding: 0.65rem 0.9rem;
|
||
}
|
||
.ops-records {
|
||
max-height: 22rem;
|
||
overflow: auto;
|
||
border: 1px solid var(--line);
|
||
border-radius: 0.75rem;
|
||
background: var(--panel);
|
||
}
|
||
.ops-record { border-bottom: 1px solid var(--line); margin: 0; padding: 0; }
|
||
.ops-record:last-child { border-bottom: 0; }
|
||
.ops-record-summary {
|
||
display: grid;
|
||
grid-template-columns: minmax(5rem, 8rem) minmax(0, 1fr) auto;
|
||
gap: 0.5rem 0.85rem;
|
||
align-items: center;
|
||
padding: 0.55rem 0.85rem;
|
||
cursor: pointer;
|
||
list-style: none;
|
||
font-size: 13px;
|
||
}
|
||
.ops-record-summary::-webkit-details-marker { display: none; }
|
||
.ops-record-kind { font-weight: 600; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||
.ops-record-extra { color: var(--ink-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||
.ops-record-when { white-space: nowrap; }
|
||
.ops-record-body {
|
||
max-height: 12rem;
|
||
overflow: auto;
|
||
padding: 0 0.85rem 0.75rem;
|
||
border-top: 1px dashed var(--line);
|
||
}
|
||
.ops-results { font-size: 12.5px; padding: 0; margin: 0; overflow-wrap: anywhere; }
|
||
.ops-results > div { display: grid; grid-template-columns: 7.5rem minmax(0,1fr); gap: 0.35rem 0.75rem; margin: 0.3rem 0; }
|
||
.ops-results dt { color: var(--ink-3); margin: 0; }
|
||
.ops-results dd { margin: 0; color: var(--ink); }
|
||
.ops-results-list { margin: 0; padding-left: 1.1rem; }
|
||
.ops-truncate { display: inline; }
|
||
.ops-filter { display: grid; gap: 0.75rem; }
|
||
.ops-filter-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
|
||
.ops-filter-toolbar .ops-input { max-width: 16rem; flex: 1 1 12rem; }
|
||
.ops-filter-bulk { display: flex; flex-wrap: wrap; align-items: center; gap: 0.45rem; }
|
||
.ops-filter-table {
|
||
border: 1px solid var(--line);
|
||
border-radius: 0.75rem;
|
||
overflow: hidden;
|
||
background: var(--panel);
|
||
}
|
||
.ops-filter-head,
|
||
.ops-filter-row {
|
||
display: grid;
|
||
grid-template-columns: 2rem minmax(6rem, 1fr) minmax(7rem, 1.2fr) 4.5rem 3.5rem auto;
|
||
gap: 0.5rem;
|
||
align-items: center;
|
||
padding: 0.55rem 0.75rem;
|
||
}
|
||
.ops-filter-head {
|
||
background: var(--panel-2);
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
color: var(--ink-3);
|
||
border-bottom: 1px solid var(--line);
|
||
}
|
||
.ops-filter-row { border-bottom: 1px solid var(--line); font-size: 13px; }
|
||
.ops-filter-row:last-child { border-bottom: 0; }
|
||
.ops-filter-check { display: inline-flex; align-items: center; justify-content: center; }
|
||
.ops-filter-word { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
|
||
.ops-filter-state { font-size: 12px; color: var(--ink-3); }
|
||
.ops-filter-state.is-on { color: var(--ok, #137333); font-weight: 550; }
|
||
.ops-filter-row-actions { display: inline-flex; align-items: center; gap: 0.25rem; justify-content: flex-end; }
|
||
.ops-filter-empty { padding: 0.85rem; }
|
||
.ops-filter-pager { display: flex; align-items: center; gap: 0.65rem; }
|
||
.ops-filter-import summary { list-style: none; }
|
||
.ops-filter-import-opt { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 13px; margin: 0.5rem 0; }
|
||
.ops-filter-editor { display: grid; gap: 0.85rem; }
|
||
.ops-filter-editor label { display: grid; gap: 0.35rem; font-size: 13px; color: var(--ink-2); }
|
||
.ops-filter-editor fieldset { border: 1px solid var(--line); border-radius: 0.65rem; padding: 0.65rem 0.85rem; margin: 0; }
|
||
.ops-filter-editor legend { padding: 0 0.25rem; font-size: 12.5px; color: var(--ink-3); }
|
||
@media (max-width: 720px) {
|
||
.ops-results > div { grid-template-columns: 5.5rem minmax(0,1fr); }
|
||
.ops-filter-head { display: none; }
|
||
.ops-filter-row {
|
||
grid-template-columns: 2rem minmax(0, 1fr) auto;
|
||
grid-template-areas:
|
||
"check word actions"
|
||
"check meta actions";
|
||
}
|
||
.ops-filter-check { grid-area: check; }
|
||
.ops-filter-word { grid-area: word; }
|
||
.ops-filter-row-actions { grid-area: actions; }
|
||
.ops-filter-row > .meta,
|
||
.ops-filter-state { grid-area: meta; }
|
||
.ops-record-summary { grid-template-columns: minmax(0, 1fr); }
|
||
.ops-secret-card { flex-direction: column; align-items: flex-start; }
|
||
}
|
||
.ops-mail-preview {
|
||
width: 100%;
|
||
height: 120px;
|
||
border: 1px solid var(--line);
|
||
border-radius: 8px;
|
||
background: #fff;
|
||
margin-top: 0.65rem;
|
||
overflow: hidden;
|
||
display: block;
|
||
}
|
||
.settings-nav-item small { margin-left:8px; }
|
||
|
||
/* ===== 访问统计:横向 Tab 导航 ===== */
|
||
.admin-analytics-page {
|
||
width: 100%;
|
||
max-width: 1120px;
|
||
}
|
||
.admin-analytics-tabs {
|
||
display: flex;
|
||
align-items: stretch;
|
||
gap: 0.15rem;
|
||
overflow-x: auto;
|
||
scrollbar-width: thin;
|
||
border-bottom: 1px solid var(--line);
|
||
margin-bottom: 1.25rem;
|
||
padding: 0 0.25rem;
|
||
}
|
||
.admin-analytics-tab {
|
||
position: relative;
|
||
white-space: nowrap;
|
||
padding: 0.55rem 0.9rem;
|
||
font-size: 13.5px;
|
||
font-weight: 500;
|
||
line-height: 1.35;
|
||
color: var(--ink-2);
|
||
text-decoration: none;
|
||
border-radius: 0.6rem 0.6rem 0 0;
|
||
transition: background 0.15s ease, color 0.15s ease;
|
||
}
|
||
.admin-analytics-tab:hover {
|
||
background: var(--panel-2);
|
||
color: var(--ink);
|
||
}
|
||
.admin-analytics-tab:visited {
|
||
color: var(--ink-2);
|
||
}
|
||
.admin-analytics-tab[aria-current="page"],
|
||
.admin-analytics-tab[aria-current="page"]:visited {
|
||
color: var(--nav-active-ink);
|
||
background: var(--nav-active-bg);
|
||
font-weight: 600;
|
||
}
|
||
.admin-analytics-tab[aria-current="page"]::after {
|
||
content: "";
|
||
position: absolute;
|
||
left: 0.5rem;
|
||
right: 0.5rem;
|
||
bottom: 0;
|
||
height: 2px;
|
||
background: var(--accent);
|
||
border-radius: 2px 2px 0 0;
|
||
}
|
||
.admin-analytics-tab:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: -2px;
|
||
}
|
||
|
||
/* ── 侧栏管理:站长自定义工具容器(Shadow DOM 宿主) ──
|
||
不附加面板底色/边框,视觉完全交给工具自带的 HTML/CSS;
|
||
仅保证在侧栏列内不横向溢出,工具内容隔离在 shadow 内(见 widgetRuntime)。 */
|
||
.j13-widget-body {
|
||
min-width: 0;
|
||
}
|
||
|
||
/* ── 抖音表情(douyin-emoji):编辑器弹层面板 / 聊天面板 / 行内图片 ── */
|
||
.j13-emoji-picker {
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-width: 0;
|
||
}
|
||
.j13-emoji-tabs {
|
||
display: flex;
|
||
gap: 2px;
|
||
padding: 0 0 6px;
|
||
border-bottom: 1px solid var(--line);
|
||
margin-bottom: 6px;
|
||
}
|
||
.j13-emoji-tabs button {
|
||
padding: 4px 10px;
|
||
border-radius: 8px;
|
||
border: 0;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
font-size: 12.5px;
|
||
font-weight: 500;
|
||
cursor: pointer;
|
||
color: var(--ink-2);
|
||
background: transparent;
|
||
transition: background 0.12s ease, color 0.12s ease;
|
||
}
|
||
.j13-emoji-tabs button:hover {
|
||
background: var(--panel-2);
|
||
color: var(--ink);
|
||
}
|
||
.j13-emoji-tabs button.is-on {
|
||
background: var(--accent-soft);
|
||
color: var(--accent);
|
||
}
|
||
/* 分组滚动容器:整体滚动,分组小标题随内容排列 */
|
||
.j13-emoji-scroll {
|
||
max-height: 264px;
|
||
overflow-y: auto;
|
||
overscroll-behavior: contain;
|
||
}
|
||
.j13-emoji-group + .j13-emoji-group {
|
||
margin-top: 4px;
|
||
}
|
||
.j13-emoji-group-label {
|
||
padding: 6px 2px 4px;
|
||
font-size: 11.5px;
|
||
color: var(--ink-3);
|
||
}
|
||
.j13-emoji-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fill, 36px);
|
||
justify-content: space-between;
|
||
gap: 2px;
|
||
}
|
||
.j13-emoji-cell {
|
||
width: 36px;
|
||
height: 36px;
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border: 0;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
border-radius: 8px;
|
||
background: transparent;
|
||
cursor: pointer;
|
||
transition: background 0.12s ease;
|
||
}
|
||
.j13-emoji-cell:hover {
|
||
background: var(--panel-2);
|
||
}
|
||
.j13-emoji-cell:focus-visible {
|
||
outline: 2px solid var(--accent);
|
||
outline-offset: 0;
|
||
}
|
||
.j13-emoji-cell img {
|
||
width: 28px;
|
||
height: 28px;
|
||
object-fit: contain;
|
||
pointer-events: none;
|
||
}
|
||
.j13-emoji-empty {
|
||
grid-column: 1 / -1;
|
||
text-align: center;
|
||
padding: 18px 0;
|
||
}
|
||
/* Markdown 正文中的表情:当作文字表情而非媒体图片——
|
||
显式关闭 .prose-content img 的边框/放大手势/hover 阴影;
|
||
垂直方向贴合文字视觉中线 */
|
||
.md-content-img.j13-md-emoji,
|
||
.prose-content img.j13-md-emoji {
|
||
display: inline-block;
|
||
width: 28px;
|
||
height: 28px;
|
||
object-fit: contain;
|
||
/* 与汉字视觉居中:28px 图 @16.5px 正文:6.35 − 14 = −7.7(推导同 .j13-input-emoji) */
|
||
vertical-align: -7.7px;
|
||
margin: 0 1px;
|
||
border: 0;
|
||
border-radius: 0;
|
||
cursor: default;
|
||
user-select: none;
|
||
-webkit-user-select: none;
|
||
-webkit-touch-callout: none;
|
||
}
|
||
/* 聊天消息气泡中的表情:视为文字表情而非图片——
|
||
不可选中、不可拖拽、长按/右键不出现图片操作(保存/拷贝图像等);
|
||
垂直方向贴合文字视觉中线 */
|
||
.j13-chat-emoji {
|
||
display: inline-block;
|
||
width: 28px;
|
||
height: 28px;
|
||
object-fit: contain;
|
||
/* 与汉字视觉居中:28px 图 @14px 字号:5.4 − 14 = −8.6(推导同 .j13-input-emoji) */
|
||
vertical-align: -8.6px;
|
||
margin: 0 1px;
|
||
cursor: default;
|
||
user-select: none;
|
||
-webkit-user-select: none;
|
||
-webkit-touch-callout: none;
|
||
}
|
||
/* 纯表情消息的贴纸大图 */
|
||
.j13-chat-emoji-lg {
|
||
width: 96px;
|
||
height: 96px;
|
||
vertical-align: middle;
|
||
}
|
||
/* 编辑器弹层里的表情面板容器 */
|
||
.j13-md-emoji-popover {
|
||
width: 320px;
|
||
max-width: calc(100vw - 32px);
|
||
}
|
||
/* 聊天输入区上方的表情面板 */
|
||
.j13-chat-emoji-panel {
|
||
position: absolute;
|
||
bottom: calc(100% + 8px);
|
||
left: 0;
|
||
z-index: 40;
|
||
width: 320px;
|
||
max-width: calc(100vw - 48px);
|
||
padding: 10px;
|
||
border-radius: 14px;
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
box-shadow: var(--shadow-lg);
|
||
}
|
||
|