/* ============================================================
   /full-preview 独立完整预览页专用样式（随 /full-preview 正式路由交付）
   【公共样式依赖注释（全站强制规则）】本页复用以下全局样式类，定义在
   public/css/base.css（主题变量/Reset）与 public/css/pc.css
   （.sites-grid/.nh-grid/.site-card/.site-icon/.site-info/.site-title/
   .site-desc/.nh-preview-block/.nh-block-content/.nh-block-children/
   .nh-crumb-*、.page-footer/.footer-* 等）——删除或改名上述公共类前
   必须同步核对本页与 pc.html/mobile.html 依赖（2026-09-04 C-III）。
   本文件仅负责 .fp-* 页面骨架布局与断点微调，不复制公共卡片/面包屑样式。
   ============================================================ */
.fp-page {
    /* R205 批1（FP-R2／TD-07 销号）：与 GF .gf-page 同口径——封顶居中、无左右内衬；
       本段原值（max-width 1280／padding 0 20px 40px）因文件头依赖注释内「星号＋斜杠」序列提前闭合
       而被解析器整条吞弃（TD-07），R205 批1 修头注＋改值后首段复活；1280 不恢复。
       R211 批2（2.4）：封顶值 1920→壳宽（左+栏距×2+中栏上限+右＝2250；--nh-shell-width 单一来源）——
       2560 时三栏整体居中、两侧各约 155；文件尾 ≥2150 的 2121 覆写块同批废除，不再设固定壳。 */
    max-width: var(--nh-shell-width);
    margin: 0 auto;
    padding: 0 0 40px;
}
/* R205 批3（FP-R1 四层归队／Q7 裁定）：原页头顶条族退役（旧「页级顶栏＋返回首页链接＋分组徽标」三件套，
   类名与 CSS 双零残留；零残留结构守卫见 tests/r205Batch3PageShellUnify.test.js，判定一律先去注释＝TD-52 口径）；职责改由页级
   「返回首页（左）＋分组名（右，配置驱动·非交互）」行承接（#fp-home-link／#fp-group-name，模板见
   full-preview.html:37-43）。度量逐值沿用原族（旧分支 service／空 UA 与新版共用本行 ⇒ 视觉零回归；
   FP-R5 不纳入面零触碰）；分组名文案由 full-preview.js 运行时按站点配置填充（AGENTS.md 一.5 禁字面量）。
   位置报备项：GF 同族行位于中栏内（.gf-mid-topline，group-full.html:120），FP 侧置于页级——为新旧两分支
   共用同一行、避免重复 id 与旧分支可见回归；如需与 GF 完全同位须另批（涉 FP 旧分支）。 */
.fp-mid-topline {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 16px 0 10px;
    border-bottom: 1px solid var(--border-color, #e5e7f0);
}
.fp-home-link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--primary, #6c5ce7);
    text-decoration: none;
    font-size: 14px;
    min-height: 44px;
    padding: 0 4px;
}
.fp-home-link:hover { opacity: 0.85; }
.fp-group-name {
    display: inline-block;
    padding: 2px 12px;
    border-radius: 999px;
    background: var(--bg-hover, #f1f2f8);
    color: var(--text-secondary, #666);
    font-size: 12px;
    white-space: nowrap;
}
.fp-heading {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 10px;
    margin: 22px 0 6px;
}
.fp-heading h1 {
    margin: 0;
    font-size: 26px;
    line-height: 1.35;
    color: var(--text-primary, #333);
}
.fp-heading .fp-sub {
    color: var(--text-secondary, #888);
    font-size: 13px;
}
.fp-crumb-wrap { margin: 8px 0 18px; }
.fp-crumb {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    font-size: 14px;
    color: var(--text-secondary, #666);
    min-height: 32px;
}
.fp-crumb a, .fp-crumb .fp-crumb-cur {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    padding: 0 6px;
    color: var(--text-secondary, #666);
    text-decoration: none;
    border-radius: 8px;
}
.fp-crumb a:hover { color: var(--primary, #6c5ce7); background: var(--bg-hover, #f1f2f8); }
.fp-crumb .fp-crumb-cur {
    color: var(--primary, #6c5ce7);
    font-weight: 600;
    cursor: default;
}
.fp-crumb .fp-crumb-sep { color: #c0c4d8; pointer-events: none; }
.fp-status {
    padding: 8px 0 6px;
    color: var(--text-secondary, #888);
    font-size: 13px;
}
.fp-content { margin-top: 6px; }
.fp-block {
    margin-bottom: 26px;
    border-radius: var(--radius-md, 12px);
    background: var(--bg-card, #fff);
    border: 1px solid var(--border-color, #eef0f6);
    box-shadow: var(--shadow-sm, 0 1px 4px rgba(0,0,0,.04));
    padding: 18px 18px 6px;
}
.fp-block-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 14px;
    font-size: 18px;
    line-height: 1.4;
    color: var(--text-primary, #333);
}
.fp-block-title .fp-block-count {
    font-size: 12px;
    font-weight: 400;
    color: var(--text-secondary, #999);
}
.fp-block .nh-block-children { margin-top: 8px; }
.fp-empty, .fp-error, .fp-notfound {
    padding: 60px 20px;
    text-align: center;
    color: var(--text-secondary, #888);
    font-size: 14px;
    background: var(--bg-card, #fff);
    border: 1px solid var(--border-color, #eef0f6);
    border-radius: var(--radius-md, 12px);
    margin: 18px 0;
}
.fp-error a, .fp-notfound a { color: var(--primary, #6c5ce7); }
.fp-notfound h2 { margin: 0 0 8px; font-size: 20px; color: var(--text-primary, #333); }
/* 文章列表（article 组）：行式卡片 */
.fp-article-list { display: grid; grid-template-columns: 1fr; gap: 10px; }
.fp-article-item {
    display: flex;
    gap: 12px;
    align-items: flex-start;
    padding: 12px;
    border-radius: var(--radius-sm, 10px);
    background: var(--bg, #f6f7fb);
    text-decoration: none;
    color: inherit;
    min-height: 0;
}
.fp-article-item:hover { background: var(--bg-hover, #eef0f6); }
.fp-article-cover {
    width: 120px;
    height: 76px;
    object-fit: cover;
    border-radius: 8px;
    flex: none;
    background: #eee;
}
.fp-article-cover-ph { width: 120px; height: 76px; border-radius: 8px; flex: none; display: flex; align-items: center; justify-content: center; color: #bbb; background: #f1f2f8; font-size: 22px; }
.fp-article-info { min-width: 0; }
.fp-article-title { margin: 0 0 6px; font-size: 15px; line-height: 1.5; color: var(--text-primary, #333); }
.fp-article-item:hover .fp-article-title { color: var(--primary, #6c5ce7); }
.fp-article-summary {
    margin: 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--text-secondary, #777);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
/* 断点：移动端（≤768px，与全站断点一致）2 列卡片、44px 热区由公共类承接 */
/* ============================================================
   WO-025 批7 单元2（D-2/D-3）：fp/gf 完整页 Mobile/Tablet 单列 A.5 布局门
   触发：full-preview.js/group-full.js 对 Mobile/Tablet UA 挂 .fp-mobile-mode/.gf-mobile-mode
   （UA 门而非视口断点；与 SSR 守卫移动行数口径一致，禁止改回按视口宽多列）。
   行为：左右树/右栏纯 CSS 隐藏（DOM 保留不重建，D-2）、主栏全宽单列、A.5 移动卡样式。
   本文件被 full-preview.html 与 group-full.html 共同引用（gf 页复用 fp 卡片公共类）。
   ============================================================ */
.fp-page.fp-mobile-mode .fp-new-layout {
    grid-template-columns: minmax(0, 1fr);
}
.fp-page.fp-mobile-mode .fp-side-tree,
.fp-page.fp-mobile-mode .fp-right-col {
    display: none;
}
.fp-page.fp-mobile-mode .fp-main-col {
    min-width: 0;
}
.gf-page.gf-mobile-mode .gf-new-layout {
    grid-template-columns: minmax(0, 1fr);
}
.gf-page.gf-mobile-mode .gf-side-tree,
.gf-page.gf-mobile-mode .gf-right-col {
    display: none;
}
.gf-page.gf-mobile-mode .gf-main-col {
    min-width: 0;
}
/* R205 批3（A4-①·Q10 站长批复：目标值 12px）：移动档信息区 padding-top 10px→12px，向各分组主页基准
   对齐（基准＝mobile.css .site-card.site-card-cover .site-card-body 的 padding 12px；残差仅此 2px，右/下/左
   已同值——四格实测见 _R205_批3前置_Q10_A4-1定量报告_20260922.md §三）。FP/GF 两侧对称实施
   （GF 侧 2px 变化经批复放行）；一处声明两侧同效（GF 移动卡渲染复用 .fp-new-card-body 同族类）；
   域限定 .fp-mobile-mode／.gf-mobile-mode ⇒ PC 档与主页基准零触碰；本项不涉 min-height（F-8 约束）。 */
.fp-page.fp-mobile-mode .fp-new-card.fp-mobile-card .fp-new-card-body,
.gf-page.gf-mobile-mode .fp-new-card.fp-mobile-card .fp-new-card-body {
    /* R211 批4（手机 38）：上内衬 12→10 ⇒ 图→题 10（= CARD_SPEC.mobile.spacing.coverToTitle）；
       右/下/左维持 12（Q10 站长批复值，右/下/左口径不变）。 */
    padding: 10px 12px 12px;
}
/* 单列网格标记（fp/gf 两页共用；特异性高于 .fp-new-card-grid 断点规则，Mobile/Tablet 恒 1 列） */
.fp-new-card-grid.fp-new-mobile-grid {
    grid-template-columns: minmax(0, 1fr);
}

/* A.5 移动卡（fp/gf 单列：16:9 contain 封面、标题 2 行、「新」角标行首、无描述、双钮等高 nowrap） */
.fp-mobile-card {
    position: relative;
}
.fp-mobile-card .fp-mobile-card-media {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 9;
    background: var(--bg-hover, #f1f2f8);
    overflow: hidden;
}
.fp-mobile-card .fp-mobile-card-media-empty {
    background: var(--bg-hover, #f1f2f8);
}
.fp-mobile-card .fp-mobile-card-cover {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: contain;
}
.fp-mobile-card .proxy-badge {
    position: absolute;
    top: 8px;
    right: 8px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--warning);
    box-shadow: 0 0 0 2px var(--bg-card, #fff);
    z-index: 1;
}
.fp-mobile-card .fp-new-card-body {
    display: flex;
    flex-direction: column;
    flex: 1;
}
.fp-mobile-card .fp-new-card-title {
    margin: 0;
    /* R211 批4（手机 40）：标题 15→16（= CARD_SPEC.mobile.fonts.title） */
    font-size: 16px;
    line-height: 1.45;
    color: var(--text-primary, #333);
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}
/* R200-R3 批4（D-2 注销 R107-4「移动端简介一律隐藏」）：fp 移动 A.5 卡简介属新增 DOM 面（summary 开关
   默认关＝不落元素），字号/行高/截断沿用移动档既有简介取值（13px／1.5／2 行 clamp，与移动端文章卡及
   封面卡简介同值），属「新增元素显式取值」而非既有规则字号变更（V5「移动端字号零改动」不涉及本行）。
   信息行复用 .fp-new-card-meta 族（12px，本文件 504 行区既有规则，零副本）。 */
.fp-mobile-card .fp-new-card-summary {
    margin: 0 0 6px;
    /* R211 批4（手机 40）：简介 13→15（= CARD_SPEC.mobile.fonts.summary） */
    font-size: 15px;
    line-height: 1.5;
    color: var(--text-secondary, #999);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.fp-mobile-card .fp-mobile-card-actions {
    display: flex;
    align-items: stretch;
    width: 100%;
    margin-top: 10px;
    border-radius: var(--radius-md, 12px);
    overflow: hidden;
}
.fp-mobile-card .fp-mobile-detail,
.fp-mobile-card .site-card-claim-btn {
    flex: 1 1 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 36px;
    min-width: 0;
    padding: 7px 8px;
    /* R211 批4（手机 40）：按钮文字 13→14（= CARD_SPEC.mobile.fonts.button） */
    font-size: 14px;
    font-weight: 600;
    line-height: 1.2;
    text-align: center;
    white-space: nowrap;
    text-decoration: none;
    box-sizing: border-box;
}
.fp-mobile-card .fp-mobile-detail {
    gap: 4px;
    background: var(--bg-base, #f6f7fb);
    color: var(--text-primary, #333);
    border: 1px solid var(--border-color, #eef0f6);
}
.fp-mobile-card .site-card-claim-btn {
    background: linear-gradient(135deg, var(--primary, #6c5ce7) 0%, var(--primary-light, #8b7cf0) 100%);
    color: #fff;
}
.fp-mobile-card .fp-mobile-detail .site-card-btn-icon {
    font-size: 14px;
    line-height: 1;
    flex-shrink: 0;
}
.fp-mobile-card .fp-mobile-detail .site-card-btn-text,
.fp-mobile-card .site-card-claim-btn .site-card-btn-text {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
}
.fp-mobile-card .fp-mobile-card-actions > :only-child {
    border-radius: var(--radius-md, 12px);
}

/* ============================================================
   R210 批2（N3 移动档卡片统一）——fp/gf 移动卡向本组移动主页基准看齐
   基准（唯一源）＝mobile.css .mobile-feed-list 区段（R200-R3 A.5 移动 feed 卡）：
     封面壳 16:9 contain + background var(--bg-base)／标题 15px 行高 1.3 两行截断／
     简介 13px 行高 1.4 上距 6px／按钮 min-height 36px 内边距 7px 6px nowrap 省略号／
     反馈热区 32px + 视觉圆底 inset 6px + svg 13px（WO-025-POST 投诉图标统一基准）。
   本块只把上述度量对齐到基准（类名/DOM/结构零改动；各分组主页自身零改动）。
   特异性与既有 .fp-mobile-card 规则同级且文件序在后 ⇒ 覆盖生效；PC 档不命中本块（PC 对齐＝批3）。
   ============================================================ */
.fp-mobile-card .fp-mobile-card-media,
.fp-mobile-card .fp-mobile-card-media-empty { background: var(--bg-base); }
.fp-mobile-card .fp-new-card-title { line-height: 1.3; }
.fp-mobile-card .fp-new-card-summary { margin: 8px 0 0; line-height: 1.4; } /* R211 批4（手机 38）：题→简 6→8 */
.fp-mobile-card .fp-mobile-detail,
.fp-mobile-card .site-card-claim-btn { padding: 7px 6px; }
.fp-mobile-card .site-report-btn { width: 32px; height: 32px; }
.fp-mobile-card .site-report-btn::before { inset: 6px; }

/* ============================================================
   R210 批2（C 项授权换族·M10/M11）：article 组 GF/FP 移动档由行卡（.fp-new-list-item）换族为
   该组主页同款整宽卡（article-card-lib articleCardMarkup ＝ .article-card-home 族，图上文下、无双钮）。
   本块为该族在 fp/gf 页移动档的度量同源落地——逐值取自 mobile.css
   .category-list.group-article 区段（单一基准源，禁自造数值）；PC 档不产出该族（行卡维持，批3 处理）。
   ============================================================ */
.fp-page .fp-new-list .article-card-home,
.gf-page .fp-new-list .article-card-home {
    display: flex;
    flex-direction: column;
    gap: 0;
    width: 100%;
    padding: 0;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    overflow: hidden;
    color: var(--text-primary);
    text-decoration: none;
}
.fp-page .fp-new-list .article-card-cover,
.gf-page .fp-new-list .article-card-cover {
    width: 100%;
    border-radius: 0;
    overflow: hidden;
    background: var(--bg-base);
    display: flex;
    align-items: center;
    justify-content: center;
}
.fp-page .fp-new-list .article-card-cover img,
.gf-page .fp-new-list .article-card-cover img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.fp-page .fp-new-list .article-card-cover-placeholder,
.gf-page .fp-new-list .article-card-cover-placeholder {
    font-size: 13px;
    color: var(--text-secondary);
    padding: 24px 0;
}
.fp-page .fp-new-list .article-card-info,
.gf-page .fp-new-list .article-card-info {
    display: flex;
    flex-direction: column;
    min-width: 0;
    padding: 12px;
    gap: 8px;
}
.fp-page .fp-new-list .article-card-title,
.gf-page .fp-new-list .article-card-title {
    font-size: 16px;
    font-weight: 600;
    color: var(--text-primary);
    margin: 0;
    line-height: 1.4;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.fp-page .fp-new-list .article-card-summary,
.gf-page .fp-new-list .article-card-summary {
    font-size: 13px;
    color: var(--text-secondary);
    margin: 0;
    line-height: 1.6;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.fp-page .fp-new-list .article-card-meta,
.gf-page .fp-new-list .article-card-meta {
    margin-top: auto;
    font-size: 12px;
    color: var(--text-secondary);
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
}
.fp-page .fp-new-list .article-card-meta .meta-sep,
.gf-page .fp-new-list .article-card-meta .meta-sep { opacity: 0.5; }


/* ============================================================
   WO-025-POST-2 R103（2026-09-15）：修补单七 FP 侧切片——P34 缩略图 180/16:9、P35 行卡整卡可点、
   P38a FP 桌面网盘卡完整卡片修复（R103-5）、P38b/c 日期全隐（R103-6）。作用域限定 .fp-page，
   GF/主页/移动卡零漂移。
   ============================================================ */
/* R103-5（P38a·站长图5 定版 2026-09-15）：FP 页桌面网盘卡「完整卡片」修复——①封面塌陷修复：同根因
   （cover-hit absolute 以 wrap 定高为前提；cover-wrap line-height:0 致 wrap 塌陷为 0 高、图片越界压住
   正文），同位移植 group-full.css R45 修复口径（object-fit 保持 FP 现状 cover）；②内容对齐 GF「完整卡」
   （R44/R45 定版）：标题 2 行 / 简介 2 行（desc 空不落）/ 按钮组（了解详情＋领取资料）。 */
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-cover-wrap {
    width: 100%;
    aspect-ratio: 16 / 9;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-cover-hit {
    position: static;
    display: block;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-cover-hit {
    height: 100%;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-cover {
    display: block;
    width: 100%;
    height: 100%;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-title {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-summary {
    /* R211 批4（D 条 23~25）：无简介卡的最小间距由 :731 承载；简介存在时取 10（简→信） */
    margin: 0 0 10px;
    /* R200-R3 批3（新指令一·终版）：fp 桌面卡简介 12→14px */
    font-size: 14px;
    line-height: 1.5;
    color: var(--text-secondary, #999);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-mobile-card-actions {
    display: flex;
    align-items: stretch;
    width: 100%;
    /* R211 批4（D 条 23~25）：信→钮 8→12（= CARD_SPEC.pcNetdisk.spacing.metaToButton） */
    margin-top: 12px;
    border-radius: var(--radius-md, 12px);
    overflow: hidden;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-mobile-detail,
.fp-page .fp-new-card:not(.fp-mobile-card) .site-card-claim-btn {
    flex: 1 1 0; display: inline-flex; align-items: center; justify-content: center; gap: 4px;
    /* R211 批4（D 条 23~25）：按钮文字 13→16（= CARD_SPEC.pcNetdisk.fonts.button） */
    min-height: 36px; min-width: 0; padding: 7px 8px; font-size: 16px; font-weight: 600;
    line-height: 1.2; text-align: center; text-decoration: none; box-sizing: border-box;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-mobile-detail {
    background: var(--bg-base, #f6f7fb); color: var(--text-primary, #333);
    border: 1px solid var(--border-color, #eef0f6);
}
.fp-page .fp-new-card:not(.fp-mobile-card) .site-card-claim-btn {
    background: linear-gradient(135deg, var(--primary, #6c5ce7) 0%, var(--primary-light, #8b7cf0) 100%); color: #fff;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-mobile-detail .site-card-btn-icon,
.fp-page .fp-new-card:not(.fp-mobile-card) .site-card-claim-btn .site-card-btn-icon {
    font-size: 14px; line-height: 1; flex-shrink: 0;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-mobile-detail .site-card-btn-text,
.fp-page .fp-new-card:not(.fp-mobile-card) .site-card-claim-btn .site-card-btn-text {
    min-width: 0; overflow-wrap: anywhere;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-mobile-card-actions > :only-child { border-radius: var(--radius-md, 12px); }
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-body {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
}
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-body > .fp-new-card-summary { margin-bottom: auto; }
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-body:not(:has(.fp-new-card-summary)) > .fp-new-card-title { margin-bottom: auto; }
/* R103-2（P35·站长复验 A1.2 定版 2026-09-15）：FP/GF 行式文章卡整卡可点——补一张整卡命中层
   （position:absolute;inset:0;z-index:1），缩略图/标题/简介/空白任意落点均进详情页；标题链接抬到
   z-index:2 保证文字选区点击仍命中链接；反馈图标（.site-report-btn，z-index:2）既有 data-act-prevent
   冒泡隔离不变＝点图标只弹反馈不跳转。DOM 由 full-preview.js／group-full.js 行卡渲染分支增补。 */
.fp-new-list-card-hit {
    position: absolute;
    inset: 0;
    z-index: 1;
    display: block;
}
.fp-new-list-title-link {
    position: relative;
    z-index: 2;
}

/* ============================================================
   WO-025-POST-2 R104（2026-09-15）：修补单八 FP/GF 侧切片——P39 底部广告中间栏通栏（R104-1）、
   P40 文章卡 210px／字号 +1（R104-2）、P44 卡片按钮左缘缺角两域收敛（R104-6）。作用域全部限定
   .fp-page/.gf-page 壳；网盘卡缩略图规格、两列栅格、卡片背景框、整卡可点命中层零改动。
   ============================================================ */
/* R104-1（P39 定版）→ R205 批3（P-7 销号 · OBS-12）：底部广告容器归中栏后，原「手算第 1／3 列＋
   列间距」（260/320、240/300、0）三条 .fp-page.fp-new-mode margin 补偿族整族退役：容器现于
   section.fp-main-col 内（full-preview.html），天然＝中栏内容区宽度，无需任何 margin 手算；
   槽位体系（constants.js AD_POSITIONS／AD_PAGE_SLOTS 注册表）与 data-ad-position／aria 语义零变化。
   零残留结构守卫见 tests/r205Batch3PageShellUnify.test.js（含「零 fp-new-mode」＋「零 260/320 补偿」
   两条）。注：下方 .fp-page.fp-mobile-mode 零外边距行为既有兜底（非本补偿族），本批不触碰。 */
.fp-page.fp-mobile-mode #nav-home-bottom { margin-left: 0; margin-right: 0; }
/* R104-2（P40·站长图2 定版 2026-09-15·R103-1 参数修订）：PC 端文章 GF/FP 行式卡缩略图 180→210px
   （16:9 不变，高 118.125 由比例推导）；移动端不变（基线三行保留）。
   R204 批2（销 TD-18·2026-09-21）：本行式卡字号对齐 R200 新指令一终版「文章卡标准」＝标题 17px／
   简介 14px（数值取自既有落点清单 pc.css .article-card-title 17px／.article-card-summary 14px，禁自造）；
   改前为标题 15px（基础档）/16px（宽屏档）、简介 13px（基础档）/14px（宽屏档）⇒ 现两档标题统一 17px、
   简介统一 14px。宽屏档简介 14px 与目标同值，保留为显式声明（未来分档承载位，零行为差异）。
   生效门＝min-width:1281（与 .fp-new-layout 1280/1281 断点边界对齐）：实测单卡最小内容宽（封面＋
   间距12＋info 最小宽约31＋内边距36）在两列下需中栏不低于 588 ⇒ ≤1280 档硬套 210 会产生新增横向溢出
   （＝R103-1 既有窄档形态的扩大），故窄档维持 180 保「两列布局／布局完整性零回归」（矩阵见 DIAG 三）。
   R210 批3 冲突项裁定（2026-09-21·站长一②）：宽屏档（≥1281）缩略图由既有 210px 对齐 N4 基准 P9
   （pc.css .article-card-home 封面列 200px）——理由＝N4「GF/FP 向主页看齐」既定需求，10px 残差即本单
   要消除的不一致；仅宽屏档改 200px，窄档 180px 维持不变；主页自身（P9 200px）零改动。 */
@media (min-width: 1281px) {
    /* R211 批4（D 条 26~28）：封面宽度改由 .fp-new-list-cover-wrap 的「卡宽×32.7%」唯一承载
       （见本文件 :1049 区），本档原 200px 定宽（R210 批3 对齐 N4 基准 P9）同批退役为 100%——
       与窄档/宽档同为流缩值，两档封面宽度不再分叉（档位断点本身维持：标题/简介字号分档保留）。 */
    .fp-page:not(.fp-mobile-mode) .fp-new-list-cover,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-cover { width: 100%; }
    .fp-page:not(.fp-mobile-mode) .fp-new-list-title,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-title { font-size: 17px; }
    .fp-page:not(.fp-mobile-mode) .fp-new-list-summary,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-summary { font-size: 14px; }
}
/* R104-6（P44·站长图6 定版 2026-09-15·二次发生）：FP 卡片「了解详情」按钮左缘缺角——根因＝父容器
   .fp-mobile-card-actions（radius 12＋overflow hidden）裁切无自有圆角的子按钮（GF 侧 R52 三.1③桌面域
   ＋R55 三.2移动域已两域修复；FP 侧 R103-5 只落「完整卡片」其它项、未镜像该三角规则 ⇒ 移动域缺角
   复发）。修复＝镜像 GF 两域规则（左按钮自带左缘圆角＝父同值）：移动域（站长图6 报障）＋桌面域
   （R103-5 同批落地、站长未报，同根因一并收敛防三犯）。以 :not(:only-child) 限定，保护既有
   「单按钮卡全圆角」规则（… > :only-child）语义；GF 侧本单零改动。 */
.fp-page .fp-mobile-card .fp-mobile-card-actions .fp-mobile-detail:not(:only-child),
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-mobile-card-actions .fp-mobile-detail:not(:only-child) {
    border-radius: var(--radius-md, 12px) 0 0 var(--radius-md, 12px);
}

@media (max-width: 768px) {
    /* D2（R17）：移动端面包屑祖先链单行横向滚动（深层链路不纵向撑高；jsdom 无真实布局，双态断言以 CSS 静态规则锁定） */
    .fp-crumb { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: thin; }
    .fp-crumb .fp-crumb-sep { flex: 0 0 auto; }
.fp-page { padding: 0 15px 32px; } /* R211 批4（手机 36）：12→15 ⇒ 卡区宽＝屏宽−30（= CARD_SPEC.mobile.sideInset） */
    .fp-heading h1 { font-size: 20px; }
    .fp-block { padding: 14px 12px 4px; }
    .fp-block-title { font-size: 16px; }
    .fp-article-cover, .fp-article-cover-ph { width: 88px; height: 66px; }
}

/* ============================================================
   P3-01 新版 full-preview 三栏布局（仅 PC 目标三组，由 full-preview.js 新分支切换显示）
   公共类复用：.nh-home-pager/.nh-page-btn/.nh-page-ellipsis 与 .right-widget*（pc.css）
   ============================================================ */
.fp-new-layout {
    /* R211 批2（A-1/C03；supersession 依据工单 v2 0.0.a）：栏宽/栏距回全站主源、本页零覆写——
       左＝pc.css :root --sidebar-width（376；1120~1269 与 1024~1119 档 320 由 pc.css :root 档位块同源下发）、
       右＝:root --right-rail-width（360；1120~1269 档 280）、列间距＝:root --col-gap（30）。
       R205 批3 旧值（左 336／右 335／列间距 28，源自 group-full.css:49-56）随本批退役；
       中栏外框＝视口−左−右−60、上限 --content-max-width（1454）；大屏整体居中由 .fp-page 壳宽上限承担。 */
    display: grid;
    grid-template-columns: var(--sidebar-width, 376px) minmax(0, var(--content-max-width)) var(--right-rail-width, 360px);
    column-gap: var(--col-gap, 30px);
    align-items: start;
    margin-top: 18px;
}
.fp-side-tree, .fp-right-col {
    background: var(--bg-card, #fff);
    border: 1px solid var(--border-color, #eef0f6);
    border-radius: var(--radius-md, 12px);
    padding: 14px;
}
.fp-side-tree { position: sticky; top: 12px; }
.fp-right-col { position: sticky; top: 12px; display: flex; flex-direction: column; gap: 16px; }
/* R205 批2（FP-R3 右栏单点）：模块宿主与右栏槽度量＝与 GF group-full.css 同构（仅作用域类名差异）——
   模块宿主 flex column／gap 16px（与 .fp-right-col 同值）；顶/底槽居中且 ≤315（R36 二.2 尺寸口径）。 */
.fp-right-col .fp-right-modules { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.fp-right-col .ad-slot { max-width: 315px; margin-left: auto; margin-right: auto; }
.fp-main-col { min-width: 0; }
/* R211 批2（A-1/坐标系表）：≥1024 中栏水平内衬 20（中栏内容区＝外框−40；原 0）——
   壳头（搜索卡）/顶底广告/卡片区同承此内衬；移动布局门（.fp-mobile-mode）与 <1024 档零触碰（现状）。 */
@media (min-width: 1024px) {
    .fp-page:not(.fp-mobile-mode) .fp-main-col { padding-left: 20px; padding-right: 20px; }
}
/* ============================================================
   R205 批3（FP-R1 四层归队 · 壳头层／左树层）：FP 三栏壳的「左栏壳头」（品牌＋四组切换）与
   「主栏壳头」（日期/主题/工具链＋搜索区）度量，与 group-full.css GF-1 同族规则逐值同构
   （仅作用域类名前缀差异 .gf-* → .fp-*），蓝本＝GF 已验收态（group-full.css:186-235）。
   Q8：本单 PageShell＝FP 专用壳渲染器；GF／tags 静态壳零改动，全站单点另案。
   注：不含 GF-1R5/6/7（R50/R51/R52）三切片的 gf 域数值微调（搜索条 38px／按钮 66.3×30.6／
   日期段 10,6,6 等）——该三切片明示「限 .gf-* 作用域、fp/主页零漂移」；是否外溢 FP 属新增
   授权面，已登记待裁定（见批3 报告 §残差清单第 3 项），本批不外溢。
   ============================================================ */
.fp-side-head { margin: 0 0 12px; padding: 0; }
/* 站名段：LOGO 40px／站名 22px／gap 14px／padding-bottom 24px 由 pc.css 公共类承载（同源主页），
   本处仅补顶部 22px（左栏顶部留白契约，与 GF 同值）；横向 padding 保持 0（由左栏卡片留白承接）。 */
.fp-side-head .sidebar-brand {
    padding: 22px 0 24px;
    gap: 14px;
}
/* 四枚分组按钮盒 70×53 等宽（与 GF 同值）；4×70+3×8=304 ≤ 306＝336−2(边框)−28(内衬) 单行成立。 */
.fp-side-head .group-switcher {
    padding: 20px 0;
}
.fp-side-head .group-switcher .group-btn {
    flex: 0 0 70px;
    width: 70px;
    max-width: 70px;
    height: 53px;
    min-width: 0;
    padding: 7px 4px;
}
/* 目录树宿主水平/垂直滚动（同 GF R47 五.⑩）：层级过多或名称过长可拖动浏览，页面本体零横向滚动。 */
.fp-tree-host { min-width: 0; overflow-x: auto; overflow-y: auto; }
.fp-shell-head { margin: 0 0 16px; }
/* 主栏壳头与 GF 同值：容器锚 padding-top 30px／左内距 25px／右内距 20px；搜索区两端各 20px
   （搜索条→快速导航→四分组入口按钮同属 .search-section 单一内边距承载，禁逐元素补丁）。
   R211 批3（B 条/C13 单点收敛）：原页级 .fp-shell-head .search-section { padding: 8px 20px 14px } 副本
   退役——pc.css 基段内衬已改 20（同值），四页数值单一来源；FP 输入行样式缺失（P30/P01）同批由
   pc.css 类选择器承接修复（选择器 #search-input → .search-input-wrap input[type="text"]）。
   注：本区块末行 .fp-shell-head .pc-top-bar 基段「逐字保留」——区段边界切割时误吞后按 H1d 反向锁回补。 */
.fp-shell-head .pc-top-bar { padding: 30px 20px 8px 25px; align-items: flex-start; }
.fp-shell-head .quick-nav { padding: 0; }
.fp-main-body { min-width: 0; }
/* 中栏通栏广告（容器已归中栏，见 full-preview.html）：中顶槽 ≤180px、中底槽 ≤200px
   （与 GF .gf-main-col 同值口径；宽度由承载容器决定，零 margin 手算）。 */
.fp-main-col #nav-home-top .home-ad-slot { max-height: 180px; }
.fp-main-col #nav-home-bottom .home-ad-slot { max-height: 200px; }
.fp-tree-list { list-style: none; margin: 0; padding: 0; }
.fp-tree-list ul { list-style: none; margin: 0; padding-left: 16px; }
.fp-tree-node { display: flex; align-items: center; gap: 2px; }
.fp-tree-toggle {
    display: inline-flex; align-items: center; justify-content: center;
    width: 24px; height: 44px; flex: none; border: none; background: none; cursor: pointer;
    color: var(--text-secondary, #666); font-size: 12px; padding: 0;
}
.fp-tree-link {
    display: flex; align-items: center; gap: 6px; min-height: 44px; flex: 1;
    color: var(--text-primary, #333); text-decoration: none; font-size: 14px;
    border-radius: 8px; padding: 0 6px;
}
.fp-tree-link:hover { color: var(--primary, #6c5ce7); background: var(--bg-hover, #f1f2f8); }
.fp-tree-link.fp-tree-active { color: var(--primary, #6c5ce7); font-weight: 600; }
.fp-main-crumb {
    display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
    font-size: 14px; color: var(--text-secondary, #666); margin: 0 0 12px;
}
.fp-main-crumb a, .fp-main-crumb .fp-crumb-cur {
    display: inline-flex; align-items: center; min-height: 44px; padding: 0 6px;
    color: var(--text-secondary, #666); text-decoration: none; border-radius: 8px;
}
.fp-main-crumb a:hover { color: var(--primary, #6c5ce7); background: var(--bg-hover, #f1f2f8); }
.fp-main-crumb .fp-crumb-cur { color: var(--primary, #6c5ce7); font-weight: 600; cursor: default; }
.fp-main-crumb .fp-crumb-sep { color: #c0c4d8; pointer-events: none; }
.fp-new-card-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; } /* R211 批4 ⑥：卡距 14→18（= CARD_SPEC.pcGrid.netdiskGap；GF/聚合同源见 group-full.css） */
.fp-new-card {
    display: flex; flex-direction: column; background: var(--bg-card, #fff);
    border: 1px solid var(--border-color, #eef0f6); border-radius: var(--radius-md, 12px);
    overflow: hidden; box-shadow: var(--shadow-sm, 0 1px 4px rgba(0,0,0,.04));
}
/* 批7：整卡可点契约（NHShell.CardHit 文档级委托命中卡身死区）。以 :has(a[href]) 收口，
   避免缺 uuid/slug 且无有效 claim 的静态卡出现假手指；FP/GF/聚合（.tags-agg-card 同体）共用。 */
.fp-new-card:has(a[href]) { cursor: pointer; }
.fp-new-card-cover { width: 100%; aspect-ratio: 16/9; object-fit: cover; background: #eef0f6; }
.fp-new-card-body { padding: 10px 12px 12px; }
/* R200-R3 批3（新指令一·终版）：fp 桌面卡标题 14→16px；tags 聚合卡共用本类故同步 16px（显式登记）。
   移动档 .fp-mobile-card .fp-new-card-title 15px 为两条类选择器、特异性更高，零改动（V5）。 */
.fp-new-card-title { margin: 0 0 10px; font-size: 16px; line-height: 1.5; color: var(--text-primary, #333); } /* R211 批4：题→简 6→10（= CARD_SPEC.pcNetdisk.spacing.titleToSummary） */
/* R200-R3 批6（授权废止 R103-6①「网盘卡日期全隐」）：fp/gf 桌面网盘卡日期可见性改由「分组卡片×
   publishedAt」开关经 .fp-new-card-meta 信息行单点输出（constants.js cardMetaItemsOf，项序
   作者→发布日期→浏览→分类）；旧 .fp-new-card-time 元素与其全隐规则一并销号（DOM 零产出）。 */
/* R200-R3 批3（新指令二·卡片信息行复活 + 排版规范①）：fp/gf 桌面完整卡信息行——作者→发布日期→浏览→分类
   （项序/标签/空值判定取自 constants.js 单点，本文件只负责视觉）；位于简介之下、按钮组之上。
   gf 页经 .fp-new-card 同源类共用本规则（group-full.css 零副本）；tags 聚合卡同族类共用。
   整行无可见项时渲染层不产出容器（零空行，不依赖 :empty 兜底）。 */
.fp-new-card-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    /* R211 批4（D 条 23~25／手机 38）：基类原 margin:0 0 6px——该 6px 与按钮组上距叠加后
       使「信→钮」实测值偏离 CARD_SPEC（PC 18／手机 16，目标 12／10）。本批归零，
       信→钮 唯一来源＝按钮组 margin-top（PC 12／手机 10，见下方批4 各条）；信息行上距另由
       各档 margin-top 承载（PC 10／手机 8），两条互不叠加。 */
    margin: 0;
    font-size: 13px;
    line-height: 1.5;
    color: var(--text-secondary, #999);
}
.fp-new-card-meta-item { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fp-new-card-meta-sep { opacity: 0.5; }
/* R202 批2（复验问题1「信息行贴死」同族修复·移动 A.5 网盘卡面）：简介关闭（默认档）时标题下边距为 0
   （.fp-mobile-card .fp-new-card-title 为 margin: 0），信息行上边距亦为 0 ⇒ 标题与信息行贴死。
   本条仅在「本卡无简介元素」时补最小上距（:has 判定；R211 批4 手机 38 终值 8px）；简介开启时由简介自身下距承载（同批 6→8，零双倍间距）。
   作用面＝fp/gf 两页移动 A.5 网盘卡（本文件为两页公共依赖）；桌面完整卡与行式卡见各自专条。
   位置：紧随基类信息行规则（保持基类为本类首个规则块，不扰动既有「首次命中」型静态守卫）。 */
.fp-mobile-card .fp-new-card-body:not(:has(.fp-new-card-summary)) > .fp-new-card-meta { margin-top: 8px; } /* R211 批4（手机 38）：题→信 6→8 */
/* R202 批2（复验问题1 同族修复·桌面完整卡）：简介（缺简介时代标题）margin-bottom: auto 在「卡片内容
   填满本行最高卡」时余量为 0 ⇒ 信息行与简介/标题贴死。改前实测量（R202 批2 先行验证，真实浏览器逐卡
   测量）：fp 页网盘1 分类3 共 8 卡，其中 5 卡 gap=0px、余量充足卡为 24px —— 证据文件
   `_r202_investigate/R202_b2_meta_gap_before_20260920.md`。本条补最小上距（只加 margin；R211 批4 D 条 23~25 终值 10px）：
   余量充足时 auto 少吸收同值、信息行与按钮组位置零变化；余量为 0 时保证 ≥10px，不重叠不破版。
   位置：紧随基类信息行规则（保持基类为本类首个规则块，不扰动既有「首次命中」型静态守卫）。 */
.fp-page .fp-new-card:not(.fp-mobile-card) .fp-new-card-body > .fp-new-card-meta { margin-top: 10px; } /* R211 批4（D 条 23~25）：简→信 6→10 */
/* R100-2（P27 修正版 2026-09-15·聚合页延伸）：标签聚合页（.tags-agg-card）文章型卡内容口径与
   四页文章卡一致——标题最多 2 行、简介最多 2 行（超出截断省略）；作用面限定
   [data-tags-type="article"]（网盘型/站点型聚合卡零漂移；tags 页与 fp/gf 页共用本文件）。
   聚合页「PC 两列栅格／移动端 1 列＋简介不落 DOM」两项属结构口径：混合型栅格 4/3/2 为
   R87 三.2 定版共享契约（与网盘型卡同栅格），须站长裁决后另单落地——本轮只登记不改，
   见交付说明 R100-2-TAGS 待裁项（当前标签库无文章标签数据，零实例命中）。 */
.tags-agg-card[data-tags-type="article"] .fp-new-card-title,
.tags-agg-card[data-tags-type="article"] .fp-new-card-summary {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.tags-agg-card[data-tags-type="article"] .fp-new-card-title { -webkit-line-clamp: 2; }
.tags-agg-card[data-tags-type="article"] .fp-new-card-summary { -webkit-line-clamp: 2; }

/* ============================================================
   R210 批3（N4 PC 档卡片统一）——fp/gf 桌面完整卡向本组 PC 主页卡基准看齐
   基准（唯一源）＝pc.css .resource-card 族（P1）：卡壳圆角 var(--radius-lg)／悬停阴影 var(--shadow-lg)／
   信息区 padding 10px 16px 12px（R211 批4：上内衬 14→10 ⇒ 图→题 10 = CARD_SPEC.pcNetdisk.spacing.coverToTitle）／标题 16px 行高 1.45／简介 14px 行高 1.55／信息行 13px 行高 1.5。
   作用域＝PC 档（无移动门 .fp-mobile-mode/.gf-mobile-mode）的完整卡；移动 A.5 卡与行卡不命中。
   类名/DOM 零改动；pc.css 本体零改动（本块为 fp/gf 页专属落地，不反改基准文件）。
   ============================================================ */
.fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card),
.gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) {
    border-radius: var(--radius-lg, 12px);
}
.fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover,
.gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover {
    box-shadow: var(--shadow-lg, 0 6px 18px rgba(0, 0, 0, .08));
}
/* ============================================================
   R211 批1（工单 43「卡片 hover 样式＝1号网盘主页卡基线（0.3 快照）」）：三处卡族补齐基线四项——
   ① 桌面完整卡 .fp-new-card（GF 页/FP 页/tags 页 .tags-agg-card 双类同体）
   ② 桌面文章行卡 .fp-new-list-item（GF/FP article 视图；行卡无按钮故无按钮项）
   补齐＝位移 translateY(-3px)／边框 var(--primary-light)／封面图 scale(1.03)／按钮
   filter brightness(1.05)+阴影 0 6px 16px rgba(0,0,0,.16)；过渡同基线（卡 .2s／图 .3s／钮 .2s）。
   唯一源＝pc.css .resource-card 族（:1460 卡过渡 / :1466-1470 卡悬停 / :1488 图过渡 /
   :1491-1493 图缩放 / :1594 钮过渡 / :1597-1600 钮悬停）逐项同值；不反改基准文件。
   悬停阴影（box-shadow: var(--shadow-lg…)）承 R210 批3 既有规则，本块不重写。
   依赖：--shadow-lg、--primary-light（base.css 主题变量）；.fp-new-card*／.fp-new-list*（本文件
   675-1000 区公共卡类，GF 页同源类共用、tags 页双类共用）——删除或改名上述公共类前须同步本块。
   门控：① 页级移动门 :not(.fp-mobile-mode)/:not(.gf-mobile-mode)＝PC 面（移动 A.5 卡 .fp-mobile-card
   不在本块，零双倍）；② 媒体门 (hover: hover)＝触摸端零悬停（工单 43「手机端无 hover」）。
   登记：既有 .fp-new-card:hover 阴影在 tags 移动档（无移动门）的泄漏属 M-1／批4 范围，本块
   不新增泄漏面、不改既有规则；.fp-new-list-cover-wrap 补 overflow 裁剪以保 8px 缩略图圆角。
   ============================================================ */
@media (hover: hover) {
    .fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card),
    .gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card),
    .fp-page:not(.fp-mobile-mode) .fp-new-list-item,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-item {
        transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover,
    .gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover {
        transform: translateY(-3px);
        border-color: var(--primary-light, #818cf8);
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-list-item:has(a[href]):hover,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-item:has(a[href]):hover {
        transform: translateY(-3px);
        border-color: var(--primary-light, #818cf8);
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-list-item:has(a[href]):hover,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-item:has(a[href]):hover {
        box-shadow: var(--shadow-lg, 0 6px 18px rgba(0, 0, 0, .08));
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-cover-wrap,
    .gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-cover-wrap,
    .fp-page:not(.fp-mobile-mode) .fp-new-list-item .fp-new-list-cover-wrap,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-item .fp-new-list-cover-wrap {
        overflow: hidden;
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-list-item .fp-new-list-cover-wrap,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-item .fp-new-list-cover-wrap {
        border-radius: 8px;
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-cover,
    .gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-cover,
    .fp-page:not(.fp-mobile-mode) .fp-new-list-item .fp-new-list-cover,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-item .fp-new-list-cover {
        transition: transform 0.3s ease;
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover .fp-new-card-cover,
    .gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover .fp-new-card-cover {
        transform: scale(1.03);
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-list-item:has(a[href]):hover .fp-new-list-cover,
    .gf-page:not(.gf-mobile-mode) .fp-new-list-item:has(a[href]):hover .fp-new-list-cover {
        transform: scale(1.03);
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-mobile-detail,
    .fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card) .site-card-claim-btn,
    .gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-mobile-detail,
    .gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) .site-card-claim-btn {
        transition: transform 0.2s ease, box-shadow 0.2s ease, filter 0.2s ease;
    }
    .fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover .fp-mobile-detail,
    .fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover .site-card-claim-btn,
    .gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover .fp-mobile-detail,
    .gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card):has(a[href]):hover .site-card-claim-btn {
        filter: brightness(1.05);
        box-shadow: 0 6px 16px rgba(0, 0, 0, 0.16);
    }
}
/* R211 批4（D 条 23~25 网盘卡 / 3.1c 聚合页同规格）：PC 档完整卡信息区上内衬 14→10
   （= CARD_SPEC.pcNetdisk.spacing.coverToTitle，图→题 10）。三面同选择器命中——聚合页根为
   tags 页壳（.gf-page）⇒ 本块同时承载 29 聚合卡数值，零第二套口径。下内衬 12 保留（卡片底衬），
   信→钮 12 由 .fp-mobile-card-actions 上距承载（改前上内衬 14，实测图→题 14）。 */
.fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-body,
.gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-body {
    padding: 10px 16px 12px;
}
.fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-title,
.gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-title {
    line-height: 1.45;
}
.fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-summary,
.gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-summary {
    font-size: 14px;
    line-height: 1.55;
}
/* R205 批3（A4-②·B-6）：简介区两行等效高度对齐 pc.css .resource-card-desc 44px（＝ceil(14×1.55×2)）；
   独立声明块（不改上方同选择器锁块的逐字内容——r210Batch3PcCardUnify G6 以正则锁该块文本，插入声明即
   名册外翻转；等效落点＝同选择器第二条规则，计算值口径一致）；复算式断言见
   tests/r205Batch3PageShellUnify.test.js（Math.ceil(font-size × line-height × 2) === 44）。 */
.fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-summary,
.gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-summary {
    min-height: 44px;
}
.fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-meta,
.gf-page:not(.gf-mobile-mode) .fp-new-card:not(.fp-mobile-card) .fp-new-card-meta {
    font-size: 13px;
    line-height: 1.5;
}
/* P10/P11（度量对齐）：article 行卡信息行族由 .fp-new-card-meta 12px 对齐 PC 主页卡口径
   .article-card-meta 13px（行高 1.5）。缩略图：≥1281px 档已按站长 2026-09-21 裁定由既有 210px
   对齐 N4 基准 P9 的 200px（冲突项销项，落点＝本文件 min-width:1281 媒体块）；≤1280px 档维持
   180px（R103-1 两列布局完整性理由保留）。 */
.fp-page:not(.fp-mobile-mode) .fp-new-list-item .fp-new-card-meta,
.gf-page:not(.gf-mobile-mode) .fp-new-list-item .fp-new-card-meta {
    font-size: 13px;
    line-height: 1.5;
}
/* R210b（P12 撤销·站长 2026-09-21 复验澄清）：R210 批3 曾将 article 型 PC 标签聚合卡换族为
   「左图右文（≥901px 行向 ＋ 200px 封面列 ＋ 信息列自适应）」——站长复验澄清该形态与实际意图
   不符：本页卡片应维持完整卡（上图下文），与网盘资源-1号／-2号标签聚合页同款同度量。
   故上列 override 整体移除（零残留：本文件已不存在 .tags-agg-card 的行向／200px 布局规则），
   四型聚合卡（article/netdisk1/netdisk2/site）一律走 .fp-new-card 完整卡基线 ⇒ 同页零混排。
   回退后 article 型自动继承 R210 批3 完整卡度量（P1–P8 族：圆角／悬停／信息区 padding／标题行高／
   简介字号／信息行 13px），其作用域 `.fp-page:not(.fp-mobile-mode) .fp-new-card:not(.fp-mobile-card)`
   与 `.gf-page:not(.gf-mobile-mode) ...` 已覆盖 tags 页壳（tags.html 根＝.gf-page ＋ .gf-main-body）
   ⇒ 度量零重做。改判、红证据与验收见 `_R210b_实施批次计划与变更台账_20260921.md` §一/§三。 */
.fp-new-list { display: grid; grid-template-columns: 1fr; gap: 18px; } /* R211 批4（手机 39）：卡片纵向间距 10→18 */
/* R98-5（P26 / 站长定版 2026-09-15 图1/2/3）：文章卡族 PC 视口一行两列——.fp-new-list 仅 article
   视图产出（fp/gf 两页 state.group==='article'；网盘资源卡栅格 .fp-new-card-grid 禁碰），
   卡内元素（封面/标题/日期）保留不裁剪、宽度自适应折行；Mobile/Tablet 布局门（.fp-page.fp-mobile-mode /
   .gf-page.gf-mobile-mode）与窄视口（<=900px，同 .fp-new-card-grid 断点口径）保持单列零变化。 */
@media (min-width: 901px) {
.fp-page:not(.fp-mobile-mode) .fp-new-list,
.gf-page:not(.gf-mobile-mode) .fp-new-list {
    /* R211 批4（D 条 26~28）：卡距 10→22（= CARD_SPEC.pcArticle.gap） */
    grid-template-columns: repeat(2, 1fr);
    gap: 22px;
}
}
.fp-new-list-item {
    display: flex; gap: 12px; align-items: flex-start; padding: 12px;
    border-radius: var(--radius-sm, 10px); background: var(--bg, #f6f7fb);
    border: 1px solid transparent;
}
/* R101-1（2026-09-15 站长复验·R100-1 同族缺陷补）：FP 页文章行式卡背景框恢复——两端（PC＋移动）
   与 GF 页修复后状态（group-full.css R100-1 块）全量对齐：底色 --bg-card / 边框 --border-light /
   圆角 --radius-lg / 内边距 18px / 阴影 --shadow-sm；卡内元素与 PC 两列栅格（R98-5 块）零变化、
   网盘资源卡（.fp-new-card-grid）禁碰。作用域限定 .fp-page 壳（共用类防线矩阵：.fp-new-list-item
   产出页＝full-preview（本块命中）与 group-full（未命中，GF 由 group-full.css R100-1 块独占）＋
   tags 页不产出该类——三页逐一实测留证）。本块置于 :hover 规则之前：同特异性后置 :hover 继续胜出
   ⇒ FP 悬停高亮保留（除背景框外零变化），与 GF 页（R100 已验收态）差异如实登记。 */
.fp-page .fp-new-list-item {
    padding: 18px;
    background: var(--bg-card, #fff);
    border: 1px solid var(--border-light, #eef0f6);
    border-radius: var(--radius-lg, 12px);
    box-shadow: var(--shadow-sm, 0 1px 4px rgba(0,0,0,.04));
}
.fp-new-list-item:has(a[href]):hover { background: var(--bg-hover, #eef0f6); }
/* R103-1（P34·站长图1 定版 2026-09-15）：GF/FP 文章卡缩略图两端统一 180px×16:9（高 101.25px 由比例
   推导；object-fit:cover 裁剪不变；两列布局/背景框/悬停高亮零变化）。同类名两页共用（GF 页加载本文件），
   单条规则命中即两端统一。
   R211 批4（D 条 26~28，R103-1/R104-2/R210 批3 P9 三代定值收口）：缩略图宽度由「固定 180/200px」
   改为「卡宽×32.7% 流缩」（= CARD_SPEC.pcArticle.coverWidthRatio）——宽度落点移至外包壳
   .fp-new-list-cover-wrap（见本文件 :1049 区 calc 承载），本行宽度归 100% 随壳；object-fit
   cover→contain（不裁切、按原始比例留白）；16:9 比例框不变。 */
.fp-new-list-cover { width: 100%; aspect-ratio: 16 / 9; height: auto; object-fit: contain; border-radius: 8px; flex: none; background: #eee; }
.fp-new-list-info { min-width: 0; }
/* R100-2（P27 修正版 2026-09-15·四页口径）＋ R202 批2 订正（2026-09-20）：行式卡（gf/fp 两页 article
   视图共用 .fp-new-list-item）标题 2 行截断、简介行 .fp-new-list-summary 同为 2 行截断（PC/移动两端同口径）；
   简介下边距由 0 订正为 6px —— 复验问题1「信息行贴死简介」根因＝相邻 margin 折叠 max(0,0)=0，
   改前实测 gap=0px（证据 `_r202_investigate/R202_b2_meta_gap_before_20260920.md`）。
   两条旧注解随本批订正：①「文章卡不显示作者/时间/浏览量」已过期 —— R200-R3 批3/批4 起作者/发布日期/
   浏览/分类改由 .fp-new-card-meta 信息行按「分组卡片×设备档」开关输出（单点 constants.js cardMetaItemsOf）；
   ②「移动端简介不落 DOM」已由 R200-R3 批3 注销（两档同口径渲染，见 full-preview.js fpNewCardEl 与
   group-full.js gfCardEl 分支）。旧时间行类 .fp-new-list-time 自 R202 批2（裁定3）起销号：DOM 零产出、
   样式零残留。 */
/* R204 批2（销 TD-18·2026-09-21）：行式卡基础档字号对齐 R200 新指令一终版「文章卡标准」17px／14px
   （基础档与移动档同源——本类无独立移动档字号规则 ⇒ 两档一致）；仅改 font-size 一项，margin 节奏、
   行高 1.5 与 2 行截断三件套零改动。 */
.fp-new-list-title {
    /* R211 批4（D 条 26~28）：题→简 6→10（= CARD_SPEC.pcArticle.spacing.titleToSummary） */
    margin: 0 0 10px; font-size: 17px; line-height: 1.5; color: var(--text-primary, #333);
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.fp-new-list-summary {
    /* R211 批4（D 条 26~28）：简→信 6→10（= CARD_SPEC.pcArticle.spacing.summaryToMeta） */
    margin: 10px 0 10px; font-size: 14px; line-height: 1.5; color: var(--text-secondary, #999);
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
/* R211 批2（A-1/R211-C01）：原 FP 侧 ≤1366（右 300）/≤1280（右 282）两档整体删除，档位与 pc.css 同源：
   ≥1270 左 376/右 360（上半基段）／1120~1269 左 320/右 280／1024~1119 左 320/右栏隐藏
   （C02 口径：中栏＝视口−左−30 栏距−30 右留白槽，右留白由 padding-right 承载）。<1024 现状不变（见下档）。 */
@media (min-width: 1120px) and (max-width: 1269px) {
    /* 左栏值由 pc.css :root 档位块下发（本文件禁手算补偿字面：r205Batch3 G4b 守卫），故不给 var 兜底值 */
    .fp-new-layout { grid-template-columns: var(--sidebar-width) minmax(0, 1fr) 280px; }
}
@media (min-width: 1024px) and (max-width: 1119px) {
    .fp-new-layout { grid-template-columns: var(--sidebar-width) minmax(0, 1fr); padding-right: var(--col-gap, 30px); }
    .fp-right-col { display: none; }
}
/* <1024（手机视口档）现状不变（A-1）：右栏隐藏＋FP 左栏 336/栏距 28（本页档内自持，不随 ≥1024 新档联动）。 */
@media (max-width: 1023px) {
    .fp-new-layout { --sidebar-width: 336px; grid-template-columns: 336px minmax(0, 1fr); column-gap: 28px; }
    .fp-right-col { display: none; }
}
/* ============================================================
   WO-025-POST-2（report-chain-r2）：fp/gf 卡反馈入口/封面标题详情锚点/领取图标
   消费页：full-preview.html 与 group-full.html 共用本文件（group-full.css 头注公共依赖），
   .site-report-btn 视觉基准（20px 圆底 rgba(15,23,42,0.10)+blur、24px 热区、svg 13px）由 pc.css
   公共类承载；本区块仅做 fp/gf 卡片布局内的定位/显隐修正，禁止另造视觉基准副本。
   新增类：fp-mobile-card-media-hit / fp-mobile-card-title-link / fp-new-card-cover-wrap /
   fp-new-card-cover-hit / fp-new-card-title-link / fp-new-list-cover-hit / fp-new-list-title-link。 */
.fp-mobile-card .site-card-claim-btn .site-card-btn-icon {
    font-size: 14px;
    line-height: 1;
    flex-shrink: 0;
}
/* R95（P15 / 站长裁决 D2①）：fp/gf/tags 卡族（.fp-new-card，消费页 full-preview / group-full / tags）
   反馈入口回归「卡片图片左下角 + 默认隐藏、悬停卡片显示」口径（定位仍由 pc.css:1396 公共基类
   left:6px; bottom:4px 承载）；触摸端无悬停能力，经 @media (hover: none) 保持恒显（沿用
   .resource-card / .article-card-home 既有范式），既有触摸端可得性零回归。
   注（R96-2）：本块为 PC 面口径；移动端卡族自 R96 起按移动布局门无条件常显，见下方 R96 块。 */
.fp-new-card:hover .site-report-btn,
.fp-new-card:focus-within .site-report-btn {
    opacity: 1;
    visibility: visible;
}
@media (hover: none) {
    .fp-new-card .site-report-btn {
        opacity: 1;
        visibility: visible;
    }
}
.fp-mobile-card .site-report-btn {
    z-index: 3;
}
/* R96（R96-2 / P15-b / 站长定版）：移动端卡族反馈入口恢复「常显不隐藏」——页面加载后零交互即见，
   不依赖悬停能力、不依赖点击/聚焦（修复 R95 D2① 遗留：移动卡族可见性此前仅由 @media (hover:none)
   兜底，凡报告 hover:hover 的移动/平板混合设备（如 iPad+触控板、未报 hover:none 的浏览器与仿真）
   均落到「默认隐藏、点击/聚焦才显」）。站点自身以 UA 布局门标记移动端（full-preview.js/group-full.js
   对 Mobile/Tablet UA 挂 .fp-mobile-mode/.gf-mobile-mode 页类 + 渲染 .fp-mobile-card 卡类），
   本块按该单点口径无条件常显；PC 侧「默认隐藏＋hover/focus-within 显示」不受影响（无移动门标记时不命中）。 */
.fp-mobile-card .site-report-btn,
.fp-mobile-mode .fp-new-card .site-report-btn,
.gf-mobile-mode .fp-new-card .site-report-btn,
.fp-mobile-mode .nh-bc-media .site-report-btn,
.gf-mobile-mode .nh-bc-media .site-report-btn {
    opacity: 1;
    visibility: visible;
}
/* R102-3（P33 / 站长定版 2026-09-15·N-9 同族第二处缺口）：GF/FP 页文章行式卡（.fp-new-list-item，两页
   article 视图共用：full-preview.js fpNewCardEl / group-full.js gfCardEl）反馈入口补齐「默认隐藏＋PC
   悬停/焦点显示 / 触摸端与移动门常显」显隐口径——此前该类无任何显示规则 ⇒ 图标在 DOM 且 act-json 正确
   但恒 opacity:0/visibility:hidden（R95 D2① 同族缺口，停点实测四象限恒隐藏）；判据与既有卡片族
   （.fp-new-card / .article-card-home / .fp-mobile-card）逐字同源，禁另造视觉基准（视觉基准仍由 pc.css
   .site-report-btn 公共类承载）。 */
.fp-new-list-item:hover .site-report-btn,
.fp-new-list-item:focus-within .site-report-btn {
    opacity: 1;
    visibility: visible;
}
@media (hover: none) {
    .fp-new-list-item .site-report-btn {
        opacity: 1;
        visibility: visible;
    }
}
.fp-mobile-mode .fp-new-list-item .site-report-btn,
.gf-mobile-mode .fp-new-list-item .site-report-btn {
    opacity: 1;
    visibility: visible;
}
.fp-mobile-card-media-hit,
.fp-new-card-cover-hit {
    position: absolute;
    inset: 0;
    z-index: 1;
    display: block;
}
.fp-mobile-card-title-link,
.fp-new-card-title-link,
.fp-new-list-title-link {
    color: inherit;
    text-decoration: none;
}
.fp-new-card-title-link:hover,
.fp-mobile-card-title-link:hover {
    color: var(--primary, #6c5ce7);
}
.fp-new-card-cover-wrap {
    position: relative;
    line-height: 0;
}
.fp-new-card-cover-wrap .site-report-btn {
    z-index: 2;
}
.fp-new-list-item {
    position: relative;
}
.fp-new-list-item .site-report-btn {
    z-index: 2;
}
/* R102-3（P33 / 站长定版 2026-09-15）：行式卡封面外包定位壳（对齐 .fp-new-card-cover-wrap 范式：
   position:relative／line-height:0／flex:none），fpReportButtonHtml／gfReportButtonHtml 输出随渲染点
   移入壳内 ⇒ 图标锚定缩略图左下角（pc.css 公共基类 left:6px;bottom:4px；修前锚定整卡，停点实测偏差
   左 12px／下 18px）。 */
.fp-new-list-cover-wrap {
    position: relative;
    line-height: 0;
    flex: none;
    /* R211 批4（D 条 26~28）：宽度＝卡宽×32.7%——行卡内衬 18（四边同值）⇒ 内容宽＝卡宽−36，
       故写作 calc(32.7% + 11.772px)（= 0.327×36）时对任意卡宽恒等于 0.327×卡宽
       （686 时 224.32px×126.18px，与工单「686 时≈224×126」一致；宽度随卡宽流缩）；
       align-self:flex-start 令壳高由 16:9 比例决定，不被行内 stretch 拉满。 */
    width: calc(32.7% + 11.772px);
    align-self: flex-start;
}
.fp-new-list-cover-wrap .site-report-btn {
    z-index: 2;
}
/* R211 批2（A-3）：原「<=900=2 列／901-1200=3 列／>1200=4 列」三档与 constants.js GF_GRID_BREAKPOINTS
   同批退役（parity 断言与 decision_tables.md 同步）——≥1024 列数/卡宽改由 NH.CardFactory 纯函数按
   卡片区内容区实测宽运行时写入（渲染时＋resize 时重算，剩余空间居中）；
   <1024（手机视口档）维持现状阶梯：901~1023→3 列（原 ≤1200 档语义）／≤900→2 列／≤768→1 列（下二档）。 */
@media (max-width: 1023px) {
    .fp-new-card-grid { grid-template-columns: repeat(3, 1fr); }
}
/* WO-016 P2b：<=900 主栏单列骨架塌缩 + 卡片 2 列（镜像 group-full.css 既有 1fr 塌缩写法；
   消除 fp 同区间卡片挤压与窄宽溢出；侧栏 sticky 复位；同特异性下文件序后者胜）。 */
@media (max-width: 900px) {
    .fp-new-card-grid { grid-template-columns: repeat(2, 1fr); }
    .fp-new-layout { grid-template-columns: 1fr; }
    .fp-side-tree, .fp-right-col { position: static; }
}

/* R107-4（P51·站长 v3 口径 2026-09-15）：移动端全站卡片一行一列＋仅标题（视口口 ≤768，与
   group-full.css 移动顶区块同断点；PC 档 ≥769 零命中 ⇒ PC 布局/简介/列数全部照旧）。覆盖 fp/gf/tags
   三消费页共用的 .fp-new-card-grid（含标签聚合 .tags-agg-grid）；Mobile/Tablet UA 门
   （.fp-mobile-mode/.gf-mobile-mode，批7/R96 既有单列口径）不变，本块为其视口侧兜底（同一目标双触发）。
   卡片缩略图/图标尺寸不调不删（R107-4 红线）。 */
@media (max-width: 768px) {
    .fp-new-card-grid { grid-template-columns: minmax(0, 1fr); }
    /* R108-2（P54·站长 v4 口径 2026-09-16）：常用网站 FP 页新卡片样式＋单列化＋溢出消除。
       service FP 走旧分支（.sites-grid/.site-card 族，不挂 .fp-mobile-mode），故以视口媒体查询实现：
       ①列数——pc.css ≤768 档 .sites-grid 两列（repeat(2,1fr)，REG-13/REG-01 溢出来源）在本档收敛
         为单列：同特异性 + 本文件序在 pc.css 之后 ⇒ 稳定胜出；PC 档 ≥769 零命中（PC FP 4/3/2 列与
         phaseC 锁定断言维持不动，pc.css 零改动）。
       ②卡片内容——LOGO 居左（.site-card 基态已是 flex 行）＋右上标题（≤2 行 clamp；覆盖 pc.css 基态
         nowrap 单行）＋右下简介（≤2 行 clamp，URL 回退由渲染层 desc||url 承担，折行截断防撑破）。
       作用域限本页 .fp-page .sites-grid（GF/tags 旧分支不命中）；≥769 视口零命中。 */
    .fp-page .sites-grid { grid-template-columns: minmax(0, 1fr); }
    .fp-page .sites-grid .site-card .site-title {
        white-space: normal;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    .fp-page .sites-grid .site-card .site-desc {
        -webkit-line-clamp: 2;
        overflow-wrap: anywhere;
        word-break: break-word;
    }
    /* R200-R3 批4（D-2 授权废止 R107-4「≤768 简介一律隐藏」）：原四选择器组简介隐藏块退役——简介
       可见性改由 summary 开关在渲染层控制（fp/gf/tags 三页同口径，排版规范⑤「按实际渲染档位取配置」
       禁止按浏览器宽度另判）；本块仅保留列数与常用网站卡排布（R108-2 结构项零改动）。 */
    /* R205 批4（FP-R4 移动端跟随）：壳头移动档与 GF 逐条同构——对照 group-full.css:545-550（GF-1R10 C 块），
       逐行仅替换作用域前缀 gf-shell-head -> fp-shell-head，声明值与字面顺序均不改。
       座落本块（而非文件内首个 ≤768 块）＝同特异性文件序判定：基段 .fp-shell-head .pc-top-bar（见本文件基段同选择器规则，
       padding 30px 20px 8px 25px + align-items flex-start）与本档同特异性，靠后生效 ⇒ 本档须在其后；
       该机制与 GF 同源（GF 基段 :227 在前、GF-1R10 C 块 :545 在后）。
       修前 CDP 实测量（414x900 移动 UA，:3002 孪生同口径）：FP 顶条 pad 30/20/8/25 + align flex-start、日期行
       display block（GF 18/25/8/25 + stretch、日期行 flex + align baseline）⇒ 主题钮锚点与「日期右段右对齐」
       两端均失效；6 条同构后两端一致（改后读数见批4 交付报告 §7 前后对照表）。
       有意不搬 group-full.css:551「.gf-group-name { margin-right: 15px; }」——FP 该行位于页级 .fp-mid-topline
       （受 .fp-page 移动档内衬 12px 承载），分组名右缘 402 = 视口 - 12；GF 该行在中栏内且全幅，右缘 399 = 视口 - 15。
       照搬 15px 后 FP 右缘变 387 = 视口 - 27，与 GF 的视觉差反由 3px 扩到 12px ⇒ 有意不搬（位置差随批3 G12 报备项另案，本批不碰骨架层）。
       F-8 约束：本块新增项一律零 min-height 声明；首个 ≤768 块起始行不上移（批4 改前预扫 R205_b4_pre_scan_F8.log）。 */
    .fp-shell-head .pc-top-bar { position: relative; display: flex; flex-direction: column; align-items: stretch; padding: 18px 25px 8px 25px; }
    .fp-shell-head .pc-top-bar .top-bar-actions { order: 1; display: flex; justify-content: center; align-items: flex-start; }
    .fp-shell-head .pc-top-bar .top-bar-actions .top-bar-btn { position: absolute; left: 12px; bottom: 6.5px; width: 22px; height: 22px; z-index: 1; }
    .fp-shell-head .pc-top-bar .top-bar-links { gap: 12px; }
    .fp-shell-head .pc-top-bar .top-bar-date { order: 2; display: flex; flex-wrap: nowrap; align-items: baseline; width: 100%; margin-top: 25px; padding-left: 19px; }
    .fp-shell-head .pc-top-bar .top-bar-date .top-bar-date-seg--weekday { margin-left: auto; }
}

/* R211 批2（A-1/2.4；supersession 依据工单 v2 0.0.a）：原 ≥2150 FP 覆写块（壳 2121、中栏定宽 1394、
   卡距 18）整体废除——大屏不再设固定壳与定宽中栏，改由 .fp-page 壳宽上限（2250）+ 中栏上限 1454 +
   A-3 运行时列数/卡宽计算承接；卡距 18 归批4（D 条）对齐。
   注：本页第 7 行公共依赖注释内「.nh-crumb-」之后的星号＋斜杠两字符序列曾提前闭合注释块，致首段
   .fp-page 运行态被解析器整条吞弃（TD-07／P-2）。R205 批1 已修头注并令首段复活；本注释亦不出现该
   序列字面（修正1；防复现静态守卫见 tests/pagination_config.test.js ＋ tests/r205Batch1WidthUnify.test.js）。 */

/* ============================================================
   R211 批4（D 条 3.1c／手机端 36~41／M-1／M-2）：fp/gf/tags 三页移动档卡片度量与移动布局门——
   本块为三页移动卡族的唯一数值落点，逐项取自 constants.js CARD_SPEC.mobile
   （columns 1／sideInset 15／radius 14／gap 18／coverRatio 16:9／coverFit contain／
   fonts 16-15-13-14／spacing coverToTitle 10、titleToSummary 8、summaryToMeta 8、metaToButton 10），
   本文件零自造数值。
   作用域＝页级移动门（.fp-page.fp-mobile-mode／.gf-page.gf-mobile-mode），PC 档零命中；
   tags 页根亦为 .gf-page（tags.html），M-1 后由 tags-page.js 在同一 UA 口径下挂 .gf-mobile-mode，
   故 gf 与 tags 两页共用同一套门内规则（P31/P71 解除与 M-1 一次落地）。
   依赖：.fp-mobile-card／.fp-new-card*／.fp-new-list*／.tags-agg-card（本文件 218~1120 区公共卡类）
   ——删除或改名上述公共类前须同步本块。
   ============================================================ */
/* 36（a）：卡宽＝屏宽−30（左右各 15）——门内主栏卡片区两侧内衬 15px。
   .gf-main-body 为 gf 页与 tags 页卡片区宿主（两页共用 .gf-page 壳）；FP 页移动内衬由本文件
   @media (max-width:768px) 档 .fp-page padding 12→15 承接（一处声明，PC 档零命中）。 */
.gf-page.gf-mobile-mode .gf-main-body { padding-left: 15px; padding-right: 15px; }
/* M-1：聚合页移动单列出口——tags-agg-grid 由 tags-page.js 在移动 UA 下挂 .fp-new-mobile-grid
   （与 .fp-new-card-grid.fp-new-mobile-grid 同规：特写单列 + 运行时写网格出口跳过）；
   本条为视口侧兜底（同目标双触发）。 */
.gf-page.gf-mobile-mode .gf-main-body .tags-agg-grid { grid-template-columns: minmax(0, 1fr); }
/* 37（b）：移动卡圆角统一 14（= CARD_SPEC.mobile.radius；主页 16→14 由 mobile.css 同批承接；
   .gf-page.gf-mobile-mode .gf-main-body .fp-new-card 覆盖 tags 聚合卡（其无 .fp-mobile-card 类）
   与 GF 移动网盘卡两族，特异性高于 .fp-new-card 基类（本文件 :690）。与 PC 16 的差异为有意设计。 */
.fp-page .fp-mobile-card,
.gf-page .fp-mobile-card,
.gf-page.gf-mobile-mode .gf-main-body .fp-new-card { border-radius: 14px; }
/* 40（e）+ 38（c）：字号 16/15/13/14；题→简 8、简→信 8、信→钮 10（图→题 10 见 :209 与
   .fp-new-card-body 基段 10/12/12）。 */
.fp-page.fp-mobile-mode .fp-new-card.fp-mobile-card .fp-new-card-title,
.gf-page.gf-mobile-mode .fp-new-card.fp-mobile-card .fp-new-card-title,
.gf-page.gf-mobile-mode .gf-main-body .tags-agg-card .fp-new-card-title { font-size: 16px; }
.fp-page.fp-mobile-mode .fp-new-card.fp-mobile-card .fp-new-card-summary,
.gf-page.gf-mobile-mode .fp-new-card.fp-mobile-card .fp-new-card-summary,
.gf-page.gf-mobile-mode .gf-main-body .tags-agg-card .fp-new-card-summary { font-size: 15px; margin: 8px 0 0; }
.fp-page.fp-mobile-mode .fp-new-card.fp-mobile-card .fp-new-card-meta,
.gf-page.gf-mobile-mode .fp-new-card.fp-mobile-card .fp-new-card-meta,
.gf-page.gf-mobile-mode .gf-main-body .tags-agg-card .fp-new-card-meta { font-size: 13px; margin-top: 8px; }
.fp-page.fp-mobile-mode .fp-new-card.fp-mobile-card .fp-mobile-card-actions,
.gf-page.gf-mobile-mode .fp-new-card.fp-mobile-card .fp-mobile-card-actions,
.gf-page.gf-mobile-mode .gf-main-body .tags-agg-card .fp-mobile-card-actions { margin-top: 10px; }
.fp-page.fp-mobile-mode .fp-new-card.fp-mobile-card .fp-mobile-detail,
.fp-page.fp-mobile-mode .fp-new-card.fp-mobile-card .site-card-claim-btn,
.gf-page.gf-mobile-mode .fp-new-card.fp-mobile-card .fp-mobile-detail,
.gf-page.gf-mobile-mode .fp-new-card.fp-mobile-card .site-card-claim-btn,
.gf-page.gf-mobile-mode .gf-main-body .tags-agg-card .fp-mobile-detail,
.gf-page.gf-mobile-mode .gf-main-body .tags-agg-card .site-card-claim-btn { font-size: 14px; }
/* 41（f）：移动端所有卡族一律 contain 不裁剪（cover 仅 PC 网格卡）——含 tags 聚合卡（其未走
   gf-mobile-mode 时按 PC 面色 cover，见 group-full.css 批4 门控条）与三页文章卡（.article-card-home 族）。 */
.gf-page.gf-mobile-mode .gf-main-body .tags-agg-card .fp-new-card-cover { object-fit: contain; }
.fp-page.fp-mobile-mode .fp-new-list .article-card-cover img,
.gf-page.gf-mobile-mode .fp-new-list .article-card-cover img { object-fit: contain; }
/* M-2（中医卡手机端竖版）：GF/FP 移动档文章卡沿用 R210 批2 C 项换族结果（.article-card-home
   图上文下竖版），本批只补移动度量——半径 14、封面 16:9 比例框（宽度 100%）、字号 16/15/13、
   间距 图→题 10（info 上内衬）/题→简 8/简→信 8（info gap 8）。与 PC 横条卡（.fp-new-list-item，
   图左文右）两套规格并列，验收分列。 */
.fp-page.fp-mobile-mode .fp-new-list .article-card-home,
.gf-page.gf-mobile-mode .fp-new-list .article-card-home {
    border-radius: 14px;
}
.fp-page.fp-mobile-mode .fp-new-list .article-card-cover,
.gf-page.gf-mobile-mode .fp-new-list .article-card-cover {
    aspect-ratio: 16 / 9;
}
.fp-page.fp-mobile-mode .fp-new-list .article-card-info,
.gf-page.gf-mobile-mode .fp-new-list .article-card-info {
    padding: 10px 12px 12px;
}
.fp-page.fp-mobile-mode .fp-new-list .article-card-title,
.gf-page.gf-mobile-mode .fp-new-list .article-card-title { font-size: 16px; }
.fp-page.fp-mobile-mode .fp-new-list .article-card-summary,
.gf-page.gf-mobile-mode .fp-new-list .article-card-summary { font-size: 15px; }
.fp-page.fp-mobile-mode .fp-new-list .article-card-meta,
.gf-page.gf-mobile-mode .fp-new-list .article-card-meta { font-size: 13px; }
