@charset "utf-8";
/* ==========================================================================
   吧啦查 · 社区版改版（v2）
   --------------------------------------------------------------------------
   设计来源：外部原型「吧啦查社区版改版原型」（muse ai 生成，2026-10-23 提供）
   —— 米黄纸感底 + 朱红点缀 + 宋体字标 + 卡片式帖子流。

   隔离约定：
     1) 所有新增类名一律 `v2-` 前缀，不与 style.css 的 .post/.tag/.logo/.avatar
        /.modal/.member/.toast 等既有选择器发生任何交叠；
     2) 本文件在 style.css 之后加载，只对少数全局容器（body / .wrapper / .main）
        做覆盖，其余一律靠 v2- 新命名空间；
     3) 旧页面（/tag /search /u /tags /favorites）结构不动，仅通过文末
        「主题桥接」把容器换成卡片外观，保证与新版外壳不割裂。
   ========================================================================== */

:root{
	--v2-paper:#f6f1e5;
	--v2-paper-2:#efe7d6;
	--v2-card:#fffdf7;
	--v2-card-2:#faf5ea;
	--v2-ink:#211d16;
	--v2-ink-2:#4a4436;
	/* 原型原值 #8a8171 对白卡仅 3.78:1、对纸底 3.41:1，12.5px 小字不达标；
	   压到 #6f6857 后 5.44 / 4.91，仍比 --v2-ink-2 明显轻一档，层级不变。 */
	--v2-ink-3:#5f5949;
	--v2-ink-4:#6f6857;
	--v2-line:#e3d9c3;
	--v2-line-2:#d5c9ab;
	--v2-red:#a93428;
	--v2-red-dark:#8c2a20;
	--v2-red-soft:#f7e6e1;
	--v2-green:#4e6343;
	--v2-green-soft:#e7ecdd;
	--v2-shadow:0 1px 2px rgba(60,48,20,.06),0 8px 24px rgba(60,48,20,.05);
	--v2-header-bg:rgba(246,241,229,.94);
}

/* 宋体字标与标题栈。Windows 无思源宋体时退到 SimSun，
   Mac/iOS 命中 Songti SC，两者都是宋体骨架，风格一致。 */
.v2-serif{
	font-family:"Songti SC","STSong","Noto Serif SC","Source Han Serif SC","SimSun",serif;
}

/* 第 1 节：全局容器覆盖（只改这几处，其余交给 v2- 命名空间） */
body{
	background:
		radial-gradient(1200px 500px at 85% -80px, rgba(169,52,40,.05), transparent 60%),
		var(--v2-paper);
	color:var(--v2-ink);
	-webkit-font-smoothing:antialiased;
}
/* 旧顶栏是 position:fixed，.main 靠 76px 上边距避让；新顶栏是 sticky 在文档流内，必须归零 */
.main{
	margin:0 auto 20px auto;
}
/* 旧外壳 min-width:980px 是横向滚动的来源之一，且与响应式断点冲突 */
.wrapper{
	min-width:0;
}
/* 首页要用 1180 宽栅格，其余页面仍是 960。
   用 :has() 按内容判定，避免在 #main 上挂类——pjax 只替换 #main 的内部 HTML，
   不更新容器属性，挂类会在切换页面后残留成错的宽度。
   注意：这里只放宽宽度，内边距留给 .v2-layout / .v2-tabs-inner 自己承担，
   这样即使浏览器不支持 :has()（回落到 960），栏与栏的左缘仍然对齐。
   左右内边距必须归零：style.css 在 ≤1000px 又给 .main 加了内边距，
   与 .v2-layout 的 14px 叠加后，顶栏文字比卡片文字左移 10px（实测 360px 下 left 14 vs 24）。 */
.main:has(.v2-layout){
	width:auto;
	max-width:1180px;
	padding-left:0;
	padding-right:0;
}

/* ==========================================================================
   第 2 节：顶栏
   ========================================================================== */
.v2-header{
	position:sticky;
	top:0;
	z-index:50;
	background:var(--v2-header-bg);
	-webkit-backdrop-filter:blur(10px);
	backdrop-filter:blur(10px);
	border-bottom:1px solid var(--v2-line-2);
}
.v2-header-inner{
	max-width:1180px;
	margin:0 auto;
	padding:0 20px;
	height:64px;
	display:flex;
	align-items:center;
	gap:18px;
	/* 站点没有全局 box-sizing 重置。父级是通栏的 .v2-header，
	   width:auto 会先撑到 1240 再被 max-width 夹住内容盒 → 实测总宽 1220，
	   文字左缘比卡片左缘左移 20px。声明 border-box 后总宽恒为 1180。 */
	box-sizing:border-box;
}
.v2-logo{
	display:flex;
	align-items:baseline;
	gap:9px;
	flex-shrink:0;
	color:var(--v2-ink);
	text-decoration:none;
}
.v2-logo-seal{
	width:36px;
	height:36px;
	border-radius:6px;
	background:var(--v2-red);
	color:#fdf6ec;
	display:grid;
	place-items:center;
	font-size:20px;
	line-height:1;
	align-self:center;
	box-shadow:inset 0 0 0 1.5px rgba(253,246,236,.55);
}
.v2-logo-name{
	font-size:26px;
	font-weight:800;
	letter-spacing:.05em;
	line-height:1.1;
}
.v2-logo-name em{
	font-style:normal;
	color:var(--v2-red);
}
.v2-logo-sub{
	font-size:11.5px;
	color:var(--v2-ink-4);
	letter-spacing:.14em;
	white-space:nowrap;
}
.v2-search{
	flex:1;
	max-width:460px;
	margin:0 auto;
	display:flex;
	align-items:center;
	gap:8px;
	background:var(--v2-card);
	border:1px solid var(--v2-line-2);
	border-radius:999px;
	padding:0 6px 0 16px;
	height:40px;
	/* flex 项默认 min-width:auto = 内容最小宽（实测 252px），会把不收缩的
	   .v2-actions 顶出视口：768px 下整条顶栏 scrollWidth 822、溢出 54px。
	   声明 min-width:0 后搜索框可被压缩，顶栏不再横向溢出。 */
	min-width:0;
	transition:border-color .15s,box-shadow .15s;
}
.v2-search:focus-within{
	border-color:var(--v2-red);
	box-shadow:0 0 0 3px var(--v2-red-soft);
}
.v2-search .v2-search-icon{
	flex-shrink:0;
	color:var(--v2-ink-4);
}
.v2-search input{
	flex:1;
	min-width:0;
	border:0;
	outline:0;
	background:transparent;
	color:var(--v2-ink);
	font-size:14px;
	font-family:inherit;
	height:38px;
	padding:0;
}
.v2-search input::placeholder{
	color:var(--v2-ink-4);
}
.v2-search button{
	border:0;
	background:var(--v2-ink);
	color:var(--v2-paper);
	border-radius:999px;
	padding:5px 14px;
	font-size:13px;
	flex-shrink:0;
	font-family:inherit;
	cursor:pointer;
}
.v2-search button:hover{
	background:#3a3529;
}
.v2-actions{
	display:flex;
	align-items:center;
	gap:14px;
	flex-shrink:0;
}
.v2-auth{
	font-size:13.5px;
	color:var(--v2-ink-2);
	white-space:nowrap;
	display:flex;
	align-items:center;
	gap:6px;
}
.v2-auth a{
	color:var(--v2-ink-2);
	text-decoration:none;
}
.v2-auth a:hover{
	color:var(--v2-red);
}
.v2-auth .v2-dot{
	color:var(--v2-ink-4);
}
/* 顶栏文字入口（审核 / 发帖）。与 .v2-auth 分开，避免一个 <a> 承担容器的 flex 语义 */
.v2-link{
	font-size:13.5px;
	color:var(--v2-ink-2);
	text-decoration:none;
	white-space:nowrap;
}
.v2-link:hover{
	color:var(--v2-red);
}
.v2-link.v2-on,
.v2-auth a.v2-on{
	color:var(--v2-red);
	font-weight:600;
}
.v2-btn-post{
	border:0;
	background:var(--v2-red);
	color:#fdf6ec;
	border-radius:6px;
	padding:9px 20px;
	font-size:14px;
	font-weight:600;
	letter-spacing:.04em;
	display:inline-flex;
	align-items:center;
	gap:7px;
	box-shadow:0 2px 8px rgba(169,52,40,.28);
	text-decoration:none;
	font-family:inherit;
	white-space:nowrap;
	cursor:pointer;
}
.v2-btn-post:hover{
	background:var(--v2-red-dark);
	color:#fdf6ec;
}
.v2-btn-post svg{
	flex-shrink:0;
}
/* 顶栏内的图标入口（设置 / 通知 / 管理）。保留原 icon 雪碧图的类名依赖 */
.v2-iconlink{
	display:inline-flex;
	align-items:center;
	justify-content:center;
	width:30px;
	height:30px;
	border-radius:6px;
	position:relative;
}
.v2-iconlink:hover{
	background:var(--v2-red-soft);
}
.v2-iconlink.buttons-active{
	background:var(--v2-red-soft);
}
/* pjax 进度条：旧版占 .emptyProgressBar 的 3px 静态高度，会把顶栏撑到 68px，
   连带 sticky 的 Tab 栏留出 3px 缝。改为绝对定位贴在顶栏底边，不参与高度计算。 */
.v2-header .emptyProgressBar{
	position:absolute;
	left:0;
	right:0;
	bottom:-1px;
	height:3px;
}
.v2-header .progressBar{
	height:3px;
	background:transparent;
}
.v2-header .progressBar .bar1{
	background-color:var(--v2-red);
}

/* ==========================================================================
   第 3 节：Tab 栏
   ========================================================================== */
.v2-tabs{
	position:sticky;
	/* 65 = 顶栏 64px 高 + 1px 底边框，差 1px 会被顶栏盖住或露出缝 */
	top:65px;
	z-index:40;
	background:var(--v2-header-bg);
	-webkit-backdrop-filter:blur(10px);
	backdrop-filter:blur(10px);
	border-bottom:1px solid var(--v2-line);
}
.v2-tabs-inner{
	max-width:1180px;
	margin:0 auto;
	padding:0 20px;
	display:flex;
	align-items:center;
	gap:4px;
	overflow-x:auto;
	scrollbar-width:none;
}
.v2-tabs-inner::-webkit-scrollbar{
	display:none;
}
.v2-tab{
	border:0;
	background:transparent;
	color:var(--v2-ink-2);
	padding:11px 16px;
	font-size:14.5px;
	white-space:nowrap;
	position:relative;
	text-decoration:none;
	display:inline-block;
	font-family:inherit;
	cursor:pointer;
}
.v2-tab:hover{
	color:var(--v2-ink);
}
.v2-tab.active{
	color:var(--v2-red);
	font-weight:700;
}
.v2-tab.active::after{
	content:"";
	position:absolute;
	left:14px;
	right:14px;
	bottom:-1px;
	height:2.5px;
	background:var(--v2-red);
	border-radius:2px 2px 0 0;
}
.v2-tab .v2-count{
	font-size:11px;
	background:var(--v2-red-soft);
	color:var(--v2-red);
	border-radius:999px;
	padding:0 6px;
	margin-left:4px;
	font-weight:600;
}
.v2-tabs-note{
	margin-left:auto;
	font-size:12.5px;
	color:var(--v2-ink-4);
	white-space:nowrap;
	padding-left:16px;
}

/* ==========================================================================
   第 4 节：栅格与帖子流
   ========================================================================== */
.v2-layout{
	max-width:1180px;
	margin:0 auto;
	padding:22px 20px 10px;
	display:grid;
	grid-template-columns:minmax(0,1fr) 300px;
	gap:26px;
	align-items:start;
	font-size:15px;
	line-height:1.65;
	color:var(--v2-ink);
}
.v2-feed-head{
	display:flex;
	align-items:baseline;
	justify-content:space-between;
	/* 左右留 0：容器已有内边距，再给 2px 会让标题比顶栏logo和卡片左缘各偏 2px */
	margin:2px 0 14px;
}
.v2-feed-head h2{
	margin:0;
	font-size:19px;
	letter-spacing:.03em;
	font-weight:700;
}
.v2-feed-head .v2-sub{
	font-size:12.5px;
	color:var(--v2-ink-4);
}
.v2-feed-head .v2-sub b{
	color:var(--v2-ink-2);
	font-weight:600;
}

/* 面包屑：/tag 与 /search 这类"从某处下来的"页面用，首页不需要 */
.v2-crumb{
	margin:0 0 10px;
	font-size:12.5px;
	color:var(--v2-ink-4);
	letter-spacing:.02em;
}
.v2-crumb a{
	color:var(--v2-ink-3);
	text-decoration:none;
	border-bottom:1px solid transparent;
	padding-bottom:1px;
}
.v2-crumb a:hover{
	color:var(--v2-red);
	border-bottom-color:var(--v2-red);
}
.v2-crumb-sep{
	margin:0 6px;
	color:var(--v2-line-2);
}

/* 标签总览网格（/tags）：原来一行一个带图标签，图是同一张默认 0.png，改成不带图的多列卡片。
   auto-fill + minmax 让 1280 三列、768 两列、360 单列自动成立，不需要再写断点。 */
.v2-taggrid{
	display:grid;
	grid-template-columns:repeat(auto-fill,minmax(210px,1fr));
	gap:10px;
	margin-bottom:14px;
}
.v2-tagcard{
	display:flex;
	flex-direction:column;
	gap:6px;
	padding:13px 16px;
	background:var(--v2-card);
	border:1px solid var(--v2-line);
	border-radius:9px;
	box-shadow:var(--v2-shadow);
	color:var(--v2-ink);
	text-decoration:none;
	transition:border-color .16s ease,box-shadow .16s ease;
}
.v2-tagcard:hover{
	border-color:var(--v2-red);
	box-shadow:inset 2px 0 0 var(--v2-red),var(--v2-shadow);
}
.v2-tagcard-h{
	display:flex;
	align-items:baseline;
	justify-content:space-between;
	gap:8px;
}
.v2-tagcard-name{
	font-size:15px;
	font-weight:700;
	letter-spacing:.03em;
	color:var(--v2-ink);
}
.v2-tagcard-n{
	flex-shrink:0;
	font-size:12px;
	color:var(--v2-ink-4);
	white-space:nowrap;
}
.v2-tagcard-d{
	font-size:12.5px;
	line-height:1.65;
	color:var(--v2-ink-3);
}

/* 搜索关键词高亮。旧样式是 color:red（纯 #f00），在白卡上 3.99:1 且刺眼，
   换成朱红 + 极浅底；对白卡 5.4:1，12.5px 小字达标。 */
.search-keyword{
	padding:0 2px;
	border-radius:3px;
	background:var(--v2-red-soft);
	color:var(--v2-red-dark);
	font-weight:600;
}
/* 搜索命中"某一楼层"而非首帖时，在元信息里标一下 */
.v2-meta .v2-hit{
	padding:1px 6px;
	border-radius:4px;
	background:var(--v2-green-soft);
	color:var(--v2-green);
	font-size:11.5px;
}

/* 标签信息卡（/tag 侧栏）。原位置输出的是 Carbon 自带的 upload/tag/large/0.png，
   1,017 个标签的 Icon 字段全是 0，因此每个标签看到的是同一张默认灰图 —— 改成纯文字信息块。 */
.v2-sidecard.v2-taginfo .v2-tagname{
	margin-bottom:10px;
	font-size:20px;
	font-weight:700;
	line-height:1.35;
	letter-spacing:.04em;
	color:var(--v2-ink);
}
.v2-sidecard.v2-taginfo .v2-tagicon{
	margin-bottom:12px;
}
.v2-sidecard.v2-taginfo .v2-tagicon img{
	display:block;
	max-width:100%;
	height:auto;
	border-radius:8px;
}
.v2-sidecard.v2-taginfo .v2-tagstat{
	display:flex;
	gap:18px;
	margin-bottom:10px;
	font-size:12.5px;
	color:var(--v2-ink-4);
}
.v2-sidecard.v2-taginfo .v2-tagstat b{
	margin-right:4px;
	font-size:15px;
	font-weight:700;
	color:var(--v2-ink);
}
.v2-sidecard.v2-taginfo .v2-tagdesc{
	margin-bottom:12px;
	font-size:13px;
	line-height:1.75;
	color:var(--v2-ink-3);
}
/* 描述为空时不占位；注意这个 div 的 id 是 tag.function.js 的硬依赖，不能用 :empty 之外的方式隐藏 */
.v2-sidecard.v2-taginfo .v2-tagdesc:empty{
	display:none;
}
.v2-sidecard.v2-taginfo .v2-tagdates{
	display:flex;
	flex-direction:column;
	gap:3px;
	padding-top:10px;
	border-top:1px solid var(--v2-line);
	font-size:12px;
	color:var(--v2-ink-4);
}
.v2-sidecard.v2-taginfo .v2-tagact,
.v2-sidecard.v2-taginfo .v2-tagadmin{
	display:flex;
	flex-wrap:wrap;
	gap:12px;
	margin-top:10px;
	font-size:12.5px;
}
.v2-sidecard.v2-taginfo .v2-tagact a,
.v2-sidecard.v2-taginfo .v2-tagadmin a{
	color:var(--v2-red);
	text-decoration:none;
}
.v2-sidecard.v2-taginfo .v2-tagact a:hover,
.v2-sidecard.v2-taginfo .v2-tagadmin a:hover{
	color:var(--v2-red-dark);
	text-decoration:underline;
}
.v2-sidecard.v2-taginfo textarea{
	width:100%;
	box-sizing:border-box;
	padding:8px;
	border:1px solid var(--v2-line-2);
	border-radius:6px;
	background:var(--v2-card-2);
	color:var(--v2-ink);
	font-family:inherit;
	font-size:13px;
	line-height:1.6;
	resize:vertical;
}

/* 帖子卡片 */
.v2-card{
	background:var(--v2-card);
	border:1px solid var(--v2-line);
	border-radius:10px;
	padding:18px 20px 14px;
	margin-bottom:14px;
	box-shadow:var(--v2-shadow);
	transition:border-color .15s;
}
.v2-card:hover{
	border-color:var(--v2-line-2);
}
.v2-card-top{
	display:flex;
	align-items:center;
	gap:9px;
	font-size:12.5px;
	color:var(--v2-ink-4);
	margin-bottom:7px;
	flex-wrap:wrap;
}
.v2-av{
	width:24px;
	height:24px;
	border-radius:50%;
	display:grid;
	place-items:center;
	font-size:12px;
	color:#fdf8ee;
	flex-shrink:0;
	font-weight:600;
	line-height:1;
}
.v2-author{
	color:var(--v2-ink-2);
	font-weight:600;
}
/* 原型的「热议中 / 精华 / 新帖」徽标没有落地：
   IsGood 全站为 0（精华无从判断）、最近一条新主题在 2024-07（"新帖"恒假）、
   全站回复数最大值只有 7（"热议"名不副实）。没有真实字段就不放这块 CSS。 */
.v2-card h3{
	margin:0 0 6px;
	font-size:18.5px;
	line-height:1.45;
	letter-spacing:.01em;
	font-weight:700;
}
.v2-card h3 a{
	color:var(--v2-ink);
	text-decoration:none;
}
.v2-card h3 a:hover{
	color:var(--v2-red);
}
.v2-excerpt{
	margin:0;
	color:var(--v2-ink-2);
	font-size:14px;
	line-height:1.75;
	display:-webkit-box;
	-webkit-line-clamp:2;
	-webkit-box-orient:vertical;
	overflow:hidden;
}
.v2-foot{
	display:flex;
	align-items:center;
	gap:8px;
	margin-top:13px;
	flex-wrap:wrap;
}
.v2-tag{
	font-size:12px;
	background:var(--v2-green-soft);
	color:var(--v2-green);
	border-radius:3px;
	padding:2px 9px;
	border:0;
	font-weight:500;
	text-decoration:none;
	display:inline-block;
	line-height:1.6;
	font-family:inherit;
}
.v2-tag:hover{
	filter:brightness(.96);
	color:var(--v2-green);
}
.v2-tag.v2-cat{
	background:var(--v2-paper-2);
	color:var(--v2-ink-2);
}
.v2-tag.v2-cat:hover{
	color:var(--v2-ink);
}
.v2-meta{
	margin-left:auto;
	display:flex;
	align-items:center;
	gap:16px;
	font-size:12.5px;
	color:var(--v2-ink-4);
}
.v2-meta span{
	display:inline-flex;
	align-items:center;
	gap:5px;
}
.v2-meta a{
	color:var(--v2-ink-4);
	text-decoration:none;
	display:inline-flex;
	align-items:center;
	gap:5px;
}
.v2-meta a:hover{
	color:var(--v2-red);
}
/* "尚无回复"原来用朱红：全站 98.1% 的主题都是零回复，一页 45 张卡片里 44 张飘红，
   红色失去强调作用反而成了噪声。降为次要灰，与"1 条讨论"同为元信息层级。 */
.v2-meta .v2-zero{
	color:var(--v2-ink-4);
}

/* 空状态 */
.v2-empty{
	background:var(--v2-card);
	border:1px dashed var(--v2-line-2);
	border-radius:10px;
	padding:44px 24px;
	text-align:center;
	color:var(--v2-ink-2);
}
.v2-empty .v2-big{
	font-size:17px;
	color:var(--v2-ink);
	margin-bottom:6px;
}
.v2-empty .v2-btn-ghost{
	margin-top:14px;
	display:inline-block;
	border:1px solid var(--v2-red);
	background:transparent;
	color:var(--v2-red);
	border-radius:6px;
	padding:7px 18px;
	font-size:13.5px;
	text-decoration:none;
}

/* 分页 */
.v2-pager{
	display:flex;
	align-items:center;
	justify-content:center;
	gap:10px;
	margin:6px 0 10px;
	flex-wrap:wrap;
}
.v2-pager a,
.v2-pager span.v2-cur{
	display:inline-flex;
	align-items:center;
	justify-content:center;
	min-width:34px;
	height:34px;
	padding:0 12px;
	border-radius:7px;
	border:1px solid var(--v2-line-2);
	background:var(--v2-card);
	color:var(--v2-ink-2);
	font-size:13.5px;
	text-decoration:none;
}
.v2-pager a:hover{
	border-color:var(--v2-red);
	color:var(--v2-red);
}
.v2-pager span.v2-cur{
	background:var(--v2-red);
	border-color:var(--v2-red);
	color:#fdf6ec;
	font-weight:600;
}
.v2-pager .v2-pginfo{
	border:0;
	background:transparent;
	color:var(--v2-ink-4);
	font-size:12.5px;
}
.v2-pager .v2-disabled{
	opacity:.45;
	pointer-events:none;
}

/* ==========================================================================
   第 5 节：侧栏
   ========================================================================== */
.v2-side{
	display:flex;
	flex-direction:column;
	gap:16px;
}
.v2-sidecard{
	background:var(--v2-card);
	border:1px solid var(--v2-line);
	border-radius:10px;
	padding:16px 18px;
	box-shadow:var(--v2-shadow);
}
.v2-sidecard h4{
	margin:0 0 12px;
	font-size:14px;
	letter-spacing:.08em;
	display:flex;
	align-items:center;
	gap:8px;
	font-weight:700;
}
.v2-sidecard h4::before{
	content:"";
	width:3px;
	height:14px;
	background:var(--v2-red);
	border-radius:2px;
	flex-shrink:0;
}
.v2-sidecard h4 .v2-more{
	margin-left:auto;
	font-size:12px;
	color:var(--v2-ink-4);
	letter-spacing:0;
	font-weight:400;
	text-decoration:none;
}
.v2-sidecard h4 .v2-more:hover{
	color:var(--v2-red);
}
.v2-about-card{
	background:linear-gradient(160deg,var(--v2-card) 60%,var(--v2-card-2));
	border-top:3px solid var(--v2-red);
}
.v2-about-card p{
	margin:0 0 12px;
	font-size:13.5px;
	color:var(--v2-ink-2);
	line-height:1.75;
}
.v2-stats{
	display:flex;
	border-top:1px solid var(--v2-line);
	padding-top:12px;
}
.v2-stats div{
	flex:1;
	text-align:center;
}
.v2-stats div+div{
	border-left:1px solid var(--v2-line);
}
.v2-stats b{
	display:block;
	font-size:17px;
	font-weight:700;
	color:var(--v2-ink);
}
.v2-stats span{
	font-size:11.5px;
	color:var(--v2-ink-4);
}
.v2-cats{
	display:grid;
	grid-template-columns:1fr 1fr;
	gap:7px;
}
.v2-catitem{
	display:flex;
	align-items:center;
	justify-content:space-between;
	gap:6px;
	background:var(--v2-card-2);
	border:1px solid var(--v2-line);
	border-radius:6px;
	padding:8px 11px;
	font-size:13.5px;
	text-align:left;
	color:var(--v2-ink);
	text-decoration:none;
}
.v2-catitem:hover{
	border-color:var(--v2-red);
	color:var(--v2-red);
}
.v2-catitem .v2-n{
	font-size:11.5px;
	color:var(--v2-ink-4);
	flex-shrink:0;
}
.v2-rank{
	margin:0;
	padding:0;
	list-style:none;
	counter-reset:v2rank;
	font-size:13.5px;
}
.v2-rank li{
	display:flex;
	gap:11px;
	padding:8px 0;
	border-bottom:1px dashed var(--v2-line);
	align-items:baseline;
}
.v2-rank li:last-child{
	border-bottom:0;
	padding-bottom:2px;
}
.v2-rank-no{
	counter-increment:v2rank;
	font-size:15px;
	font-weight:700;
	color:var(--v2-ink-4);
	min-width:17px;
	text-align:center;
	font-style:italic;
	flex-shrink:0;
}
.v2-rank-no::before{
	content:counter(v2rank);
}
.v2-rank li:nth-child(-n+3) .v2-rank-no{
	color:var(--v2-red);
}
.v2-rank a{
	font-size:13.5px;
	line-height:1.55;
	flex:1;
	color:var(--v2-ink);
	text-decoration:none;
}
.v2-rank a:hover{
	color:var(--v2-red);
}
.v2-rank .v2-rc{
	font-size:11.5px;
	color:var(--v2-ink-4);
	white-space:nowrap;
	flex-shrink:0;
	/* 标题折行时，若跟随 baseline 对齐，计数会贴在**首行**末端，
	   视觉上被读成标题的一部分（实测 li 高 62px、标题 3 行、计数只在首行）。
	   改成顶部对齐，计数恒在最右上一行。 */
	align-self:flex-start;
	margin-top:2px;
}
.v2-mini{
	margin:0;
	padding:0;
	list-style:none;
}
.v2-mini li{
	padding:7px 0;
	border-bottom:1px dashed var(--v2-line);
	font-size:13.5px;
	line-height:1.55;
}
.v2-mini li:last-child{
	border-bottom:0;
	padding-bottom:0;
}
.v2-mini a{
	color:var(--v2-ink);
	text-decoration:none;
}
.v2-mini a:hover{
	color:var(--v2-red);
}
.v2-mini .v2-md{
	display:block;
	font-size:11.5px;
	color:var(--v2-ink-4);
	margin-top:2px;
}
.v2-notice{
	margin:0;
	padding:0;
	list-style:none;
	font-size:13.5px;
	color:var(--v2-ink-2);
}
.v2-notice li{
	padding:6px 0 6px 14px;
	position:relative;
	line-height:1.6;
}
.v2-notice li::before{
	content:"";
	position:absolute;
	left:0;
	top:13px;
	width:5px;
	height:5px;
	border-radius:50%;
	background:var(--v2-red);
}
.v2-notice li+li{
	border-top:1px dashed var(--v2-line);
}

/* ==========================================================================
   用户主页（/u）：资料卡 + 活动流
   活动流每条是「某人在某篇里发布/回复」，不是一篇主题，所以不复用 .v2-card
   （套上去会多出一行重复的作者名和一行空标签），另开 .v2-act。
   ========================================================================== */
.v2-profile{
	display:flex;
	align-items:flex-start;
	gap:18px;
	background:var(--v2-card);
	border-radius:10px;
	box-shadow:var(--v2-shadow),0 0 0 1px var(--v2-line);
	padding:20px 22px;
	margin:0 0 18px;
}
.v2-profile-av img{
	width:72px;
	height:72px;
	border-radius:50%;
	display:block;
	box-shadow:0 0 0 1px var(--v2-line-2);
}
.v2-profile-info{
	flex:1 1 auto;
	min-width:0;
}
.v2-profile-info h2{
	margin:0 0 7px;
	font-size:20px;
	line-height:1.35;
	color:var(--v2-ink);
}
.v2-profile-meta{
	display:flex;
	flex-wrap:wrap;
	gap:6px 18px;
	font-size:12.5px;
	color:var(--v2-ink-4);
	margin-bottom:8px;
}
.v2-profile-meta a{
	color:inherit;
	text-decoration:none;
}
.v2-profile-meta a:hover{
	color:var(--v2-red);
}
.v2-profile-meta b{
	color:var(--v2-ink-2);
	font-weight:600;
	font-variant-numeric:tabular-nums;
}
.v2-profile-line{
	font-size:13px;
	line-height:1.75;
	color:var(--v2-ink-2);
	word-break:break-word;
}
.v2-profile-line a{
	color:var(--v2-red);
	text-decoration:none;
}
.v2-profile-btn{
	flex:0 0 auto;
	display:flex;
	flex-direction:column;
	align-items:flex-end;
	gap:8px;
}
.v2-profile-btn a{
	display:inline-block;
	padding:5px 12px;
	border-radius:6px;
	border:1px solid var(--v2-line-2);
	color:var(--v2-ink-2);
	font-size:12.5px;
	text-decoration:none;
	white-space:nowrap;
}
.v2-profile-btn a:hover{
	border-color:var(--v2-red);
	color:var(--v2-red);
}

.v2-act{
	background:var(--v2-card);
	border-radius:10px;
	box-shadow:var(--v2-shadow),0 0 0 1px var(--v2-line);
	padding:14px 18px 15px;
	margin-bottom:10px;
}
.v2-act-meta{
	display:flex;
	flex-wrap:wrap;
	gap:8px;
	font-size:12px;
	color:var(--v2-ink-4);
	margin-bottom:6px;
}
.v2-act-type{
	color:var(--v2-red);
}
.v2-act h3{
	margin:0 0 7px;
	font-size:15.5px;
	line-height:1.55;
	font-weight:700;
}
.v2-act h3 a{
	color:var(--v2-ink);
	text-decoration:none;
}
.v2-act h3 a:hover{
	color:var(--v2-red);
}
.v2-act .v2-excerpt{
	margin:0;
}

/* 回收站的「已删除」标记：用 currentColor 描边，跟着朱红走，不引入新色 */
.v2-badge-del{
	display:inline-block;
	color:var(--v2-red);
	border:1px solid currentColor;
	border-radius:4px;
	padding:0 6px;
	font-size:11.5px;
	line-height:1.7;
}
.v2-disclaimer{
	background:var(--v2-paper-2);
	border:1px solid var(--v2-line);
	border-radius:8px;
	padding:13px 15px;
	font-size:12px;
	color:var(--v2-ink-3);
	line-height:1.75;
}
.v2-disclaimer b{
	color:var(--v2-ink-2);
}

/* ==========================================================================
   第 6 节：页脚
   ========================================================================== */
.v2-footer{
	max-width:1180px;
	margin:26px auto 0;
	padding:20px;
	border-top:1px solid var(--v2-line);
	display:flex;
	gap:14px;
	flex-wrap:wrap;
	align-items:center;
	font-size:12.5px;
	color:var(--v2-ink-4);
}
.v2-footer a{
	color:var(--v2-ink-4);
	text-decoration:none;
}
.v2-footer a:hover{
	color:var(--v2-red);
}
/* 页脚链接区。不用 <nav>（XHTML 1.0 未声明元素，见 layout.php 注释），
   组件类名带 v2- 前缀，避免与旧表的 nav 元素选择器纠缠。 */
.v2-footer-nav{
	display:flex;
	gap:16px;
	margin-left:auto;
	flex-wrap:wrap;
}
.v2-footer .v2-perf{
	width:100%;
	border-top:1px dashed var(--v2-line);
	padding-top:10px;
	margin-top:4px;
	font-size:11.5px;
	color:var(--v2-ink-4);
}

/* ==========================================================================
   第 7 节：主题桥接
   /tag /tags /search /topic 已换成 v2 卡片与 v2-layout，本节主要服务剩下的
   旧结构页（/u /favorites /recycle-bin /dashboard 等）：仅把白色拟物盒子
   换成同一套纸感卡片，避免与新版外壳割裂。
   ========================================================================== */
.main-box,
.sider-box{
	background:var(--v2-card);
	border-radius:10px;
}
.main-box{
	box-shadow:var(--v2-shadow),0 0 0 1px var(--v2-line);
}
.sider-box{
	box-shadow:var(--v2-shadow),0 0 0 1px var(--v2-line);
}
.title,
.sider-box-title{
	border-bottom:1px solid var(--v2-line);
	/* 旧版块头竖线是冷蓝 #C6D9F0（上一轮"线条化"留下的），在米黄纸感里发灰发脏，
	   统一换成朱红，与新侧栏 .v2-sidecard h4 的小节标记同色。 */
	border-left-color:var(--v2-red);
	color:var(--v2-ink);
}
/* style.css 给侧栏列表 ul 加了 20px 左右内边距，条目因此比同一张卡里的正文
   （信息栏、免责声明那几段）右移 10px，卡内出现两条不同的对齐线。
   收到与正文一致的 10px：实测 375 宽下 li 左缘由 44 变为 34，与 .sider-box-content
   文字左缘 24 + ul 内边距 10 对齐。li 自身 width 由旧表控制，不受此处影响。 */
.sider-box-content ul{
	padding-left:10px;
	padding-right:10px;
}
/* 旧页面里残留的冷蓝交互点缀，一并收到朱红，避免两套强调色同时出现。
   选择器与 style.css 逐条对齐（含伪类与 ID 段），靠"后加载"取胜，不靠 !important。 */
.rx-topic-tags #TagsElements a:hover,
.rx-tagcloud a:hover{
	border-color:var(--v2-red);
}
/* 正文小节标记（〔方药〕〔制法〕）原来是冷灰 #D3D9E0，在纸底上偏蓝；
   换成暖调结构线，与卡片边线同族，但不动粗细和字号，体例不变。
   同一组选择器在下文还有一条 color/margin-top，两处已合并，避免同层重复定义。 */

/* ==========================================================================
   第 7.5 节：详情页（/t/）
   正文与回复的结构没动（topic.function.js 依赖 #p<ID> / #edit<ID> /
   #TagsList / #TagsElements / #EditTags / #EditTagsElements / #AlternativeTag /
   #Tag<md5> 这些 ID 与 icon icon-* 雪碧图类名），只做两件事：
     1. 把冷灰色板对位到纸感令牌；
     2. 拆掉回复区的固定像素宽度 —— .comment-data / .comment-content 原写死 590px，
        与 60px 头像合计 650px，换到任何别的栏宽都会留白或溢出（上一轮量到的
        「#main client 960 / scroll 970」根因就在这里）。
   ========================================================================== */
.rx-topic-title{
	color:var(--v2-ink);
	font-weight:700;
	letter-spacing:.01em;
}
.rx-topic-meta{
	color:var(--v2-ink-4);
	border-bottom-color:var(--v2-line);
}
.rx-topic-meta a{
	color:var(--v2-ink-2);
}
.rx-topic-meta a:hover{
	color:var(--v2-red);
}
.rx-sep{
	color:var(--v2-line-2);
}
.rx-article{
	color:var(--v2-ink-2);
}
.rx-article h1,
.rx-article h2,
.rx-article h3{
	color:var(--v2-ink);
}
.rx-article h4,
.rx-article h5,
.rx-article h6{
	border-left-color:var(--v2-line-2);
	color:var(--v2-ink);
	/* 原 1.7em（27px）上方留白，加上前段 17.6px 的下边距，实测视觉间距 44px，
	   读起来像每节都断了一次页。压到 1.15em，段落节奏贴近方书体例。 */
	margin-top:1.15em;
}
/* 正文里的纯空段落 `<p style="..."><br/></p>`：实测 12,576 处、分布在 2,467 篇帖子里
   （占 97.5%），是外部编辑器留下的分隔行。它们没有任何可见内容，却在 1.85 行高下
   每处占掉 47px（29.6 行高 + 17.6 下边距）。
   用 :has(>br:only-child) 只命中"p 里唯一子元素就是 br"的情形，带文字或图片的 p 不受影响。 */
.rx-article p:has(>br:only-child){
	display:none;
}
.rx-article a{
	color:var(--v2-red-dark);
}
.rx-notice{
	border-left-color:var(--v2-line-2);
	background:var(--v2-card-2);
	color:var(--v2-ink-3);
}
.rx-topic-tags{
	border-top-color:var(--v2-line);
}
.rx-actions{
	border-top-color:var(--v2-line);
}
.rx-actions a{
	color:var(--v2-ink-3);
}
.rx-actions a:hover{
	color:var(--v2-red);
}
.rx-section-title{
	margin:26px 0 10px;
	padding:0 0 8px;
	border-bottom:1px solid var(--v2-line);
	font-size:15px;
	font-weight:700;
	color:var(--v2-ink);
}
.rx-section-title::before{
	content:"";
	display:inline-block;
	width:3px;
	height:13px;
	margin-right:8px;
	vertical-align:-1px;
	background:var(--v2-red);
	border-radius:2px;
}
.rx-related{
	padding:4px 18px;
	font-size:14px;
}
.rx-related li{
	padding:11px 0;
	border-bottom:1px dashed var(--v2-line);
	line-height:1.65;
}
.rx-related li:last-child{
	border-bottom:0;
}
.rx-related a{
	color:var(--v2-ink-2);
	text-decoration:none;
}
.rx-related a:hover{
	color:var(--v2-red);
}
.rx-tagcloud{
	margin-top:18px;
	padding:14px 16px;
	border:1px solid var(--v2-line);
	border-radius:9px;
	background:var(--v2-card);
}
.rx-tagcloud a{
	color:var(--v2-ink-3);
	text-decoration:none;
}

/* 回复区：从「60px 头像 float + 590px 定宽正文」改为自适应 */
.comment-item{
	display:flex;
	align-items:flex-start;
	gap:14px;
	padding:16px 18px;
	margin-bottom:12px;
	border:1px solid var(--v2-line);
	border-radius:10px;
	background:var(--v2-card);
	box-shadow:var(--v2-shadow);
}
.comment-avatar{
	float:none;
	width:52px;
	height:auto;
	flex:0 0 52px;
}
.comment-avatar img{
	display:block;
	max-width:52px;
	height:auto;
	margin:0;
	border-radius:50%;
}
.comment-data{
	float:none;
	width:auto;
	flex:1 1 auto;
	min-width:0;
}
.comment-content{
	width:auto;
	min-width:0;
	font-size:15.5px;
	line-height:1.8;
	color:var(--v2-ink-2);
}
/* 原规则是 max-width:590px —— 屏一窄就顶破容器，改成跟随栏宽 */
.comment-content img{
	max-width:100%;
	height:auto;
}
.comment-button{
	border-top-color:var(--v2-line);
}
/* 楼层号原来是一枚 #2196F3 的亮蓝方标签，在米黄纸底上格外跳。
   换成次要灰底 + 深墨字：它只是"第几楼"的定位，不该抢正文的注意力。 */
.commonet-count{
	background-color:var(--v2-paper-2);
	color:var(--v2-ink-3);
	font-weight:600;
}
.comment-button a:hover .icon{
	opacity:.7;
}

/* ==========================================================================
   第 8 节：响应式
   ========================================================================== */
@media (max-width:1000px){
	.v2-layout{
		grid-template-columns:1fr;
		gap:20px;
	}
	.v2-header-inner{
		gap:12px;
	}
	.v2-logo-sub{
		display:none;
	}
	.v2-search{
		max-width:none;
	}
	.v2-tabs-inner{
		gap:0;
	}
	.v2-tab{
		padding:11px 10px;
		font-size:13.5px;
	}
	.v2-tab.active::after{
		left:8px;
		right:8px;
	}
	.v2-tabs-note{
		display:none;
	}
	.v2-footer nav{
		margin-left:0;
	}
}
@media (max-width:640px){
	.v2-header{
		position:static;
	}
	.v2-header-inner{
		height:auto;
		padding:10px 14px;
		flex-wrap:wrap;
	}
	/* 窄屏统一收到 14px，顶栏 / Tab 栏 / 内容栏三处必须同值，否则左缘参差 */
	.v2-layout{
		padding:14px 14px 10px;
	}
	.v2-tabs{
		top:0;
	}
	.v2-tabs-inner{
		padding:0 14px;
	}
	/* 四个 tab 在 360px 下实测需要 370px（容器 340px），「收藏最多」被切掉 6px。
	   缩字号+缩左右 padding，实测降到 ~304px，四个 tab 全部可见、不再需要横向拖动。 */
	.v2-tab{
		padding:11px 8px;
		font-size:13px;
	}
	.v2-tab.active::after{
		left:6px;
		right:6px;
	}
	.v2-tab .v2-count{
		font-size:10.5px;
		padding:0 5px;
		margin-left:3px;
	}
	.v2-search{
		order:3;
		flex-basis:100%;
		max-width:none;
		margin:0;
	}
	.v2-logo-name{
		font-size:23px;
	}
	.v2-logo-seal{
		width:32px;
		height:32px;
		font-size:18px;
	}
	.v2-btn-post{
		padding:8px 14px;
		font-size:13.5px;
	}
	/* 登录态（尤其 role=5）顶栏多出「通知 / 设置 / 控制台」三个 30px 图标 + 审核文字入口 +
	   用户名 + 投稿按钮，375px 实测 .v2-actions 宽 386px，比视口宽 25px；
	   768px 下宽 399px 也越界 54px（.v2-actions 是 flex-shrink:0，不会自己收缩）。
	   窄屏优先保「找内容 + 投稿」：收起三个图标入口，文字入口与投稿按钮保留。
	   匿名的顶栏不含这些元素，因此不受影响。 */
	.v2-actions{
		gap:10px;
	}
	.v2-actions .v2-iconlink{
		display:none;
	}
	.v2-layout{
		gap:16px;
	}
	.v2-card{
		padding:15px 16px 12px;
	}
	.v2-card h3{
		font-size:17px;
	}
	.v2-meta{
		gap:11px;
	}
	.v2-feed-head h2{
		font-size:17px;
	}
	.v2-cats{
		grid-template-columns:1fr 1fr;
	}
	/* 资料卡在 375 下：头像与资料横排，按钮组另起一行（右对齐会挤掉简介） */
	.v2-profile{
		flex-wrap:wrap;
		padding:16px;
		gap:14px;
	}
	.v2-profile-av img{
		width:56px;
		height:56px;
	}
	.v2-profile-info h2{
		font-size:18px;
	}
	.v2-profile-btn{
		flex-direction:row;
		flex-wrap:wrap;
		align-items:flex-start;
		width:100%;
	}
	.v2-act{
		padding:13px 15px 14px;
	}
	.v2-act h3{
		font-size:15px;
	}
}
@media (prefers-reduced-motion:reduce){
	.v2-card,
	.v2-search{
		transition:none !important;
	}
}
