:root {
    --sidebar-width: 376px;
    /* R211 批2（C03）：宽度基准唯一变量 1400→1454（中栏外框唯一来源；坐标系表「中栏外框 max 1454」）。 */
    --content-max-width: 1454px;
    /* R211 批2（A-1）：栏距 30（四页统一，GF/FP/聚合原 28 覆写随本批退役）／右栏 360（原 335；
       原 ≤1366→300、≤1280→282 两档整体删除，见文件尾档位块）。 */
    --col-gap: 30px;
    --right-rail-width: 360px;
    /* R211 批2（A-1/2.4）：三栏整体壳宽＝左+栏距×2+中栏上限+右（2560 时天然 2250，两侧各约 155）；
       仅作大屏居中 max(0px,…) 零偏移下限的换算基准，不构成固定壳（≥2150 旧固定壳随本批废除）。 */
    --nh-shell-width: calc(var(--sidebar-width) + var(--col-gap) * 2 + var(--content-max-width) + var(--right-rail-width));
    --header-height: 80px;
}

/* 分组切换 */
.group-switcher {
    display: flex;
    /* 20260903 防换行守卫：后台配置较长分组名称时首页按钮仍强制单行，禁止折行 */
    flex-wrap: nowrap;
    gap: 8px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--border-light);
}

.group-btn {
    flex: 1;
    /* 20260903 最小宽度兜底：与详情页 left-group-switcher 对齐，避免按钮收缩过窄 */
    min-width: 66px;
    padding: 12px 10px;
    border-radius: var(--radius-md);
    border: 1px solid var(--border-light);
    background: var(--bg-base);
    color: var(--text-secondary);
    font-size: 14px;
    font-weight: 500;
    line-height: 1.2;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 1px;
    cursor: pointer;
    transition: all 0.2s ease;
}

.group-btn:hover {
    background: var(--bg-hover);
    color: var(--text-primary);
}

.group-btn.active {
    background: linear-gradient(135deg, var(--primary), var(--primary-light));
    color: #fff;
    border-color: transparent;
    box-shadow: var(--shadow-sm);
}

.group-btn.side-business-btn {
    /* 与 .group-btn 统一，未选中时不使用特殊背景 */
}

/* P1-1：副业按钮置灰禁用态——不隐藏、置灰文字、禁止光标、点击无响应（保留指针以显示禁用光标，实际点击由 JS 守卫拦截） */
.group-btn.disabled,
.group-btn.disabled:hover {
    opacity: 0.55;
    color: var(--text-muted, #9ca3af);
    background: var(--bg-base);
    border-color: var(--border-light);
    cursor: not-allowed;
    box-shadow: none;
}

/* 首页版块切换栏 */
.section-switch-bar {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 16px;
    padding-top: 14px;
    border-top: 1px dashed var(--border-light);
}

.section-tab {
    padding: 10px 18px;
    border-radius: var(--radius-md);
    border: 1px solid var(--border-light);
    background: var(--bg-base);
    color: var(--text-secondary);
    font-size: 14px;
    font-weight: 500;
    line-height: 1.2;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 1px;
    cursor: pointer;
    transition: all 0.2s ease;
}

.section-tab:hover {
    background: var(--bg-hover);
    color: var(--text-primary);
    border-color: rgba(99, 102, 241, 0.35);
}

.section-tab.active {
    background: linear-gradient(135deg, var(--primary), var(--primary-light));
    color: #fff;
    border-color: transparent;
    box-shadow: var(--shadow-sm);
}

/* 返回顶部 */
.back-to-top {
    position: fixed;
    right: 32px;
    bottom: 32px;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    border: 1px solid var(--border-light);
    background: var(--bg-card);
    backdrop-filter: var(--backdrop);
    color: var(--text-secondary);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    visibility: hidden;
    transform: translateY(10px);
    transition: opacity 0.25s ease, transform 0.25s ease, background-color 0.2s ease;
    z-index: 200;
    box-shadow: var(--shadow-md);
}

.back-to-top.show {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}

.back-to-top:hover {
    background: var(--bg-hover);
    color: var(--primary);
}

.back-to-top svg {
    width: 20px;
    height: 20px;
}

.app-layout {
    display: flex;
    min-height: 100vh;
}

/* 侧边栏 */
.sidebar {
    position: fixed;
    top: 0;
    left: 0;
    width: var(--sidebar-width);
    height: 100vh;
    display: flex;
    flex-direction: column;
    background: var(--bg-sidebar);
    backdrop-filter: var(--backdrop);
    border-right: 1px solid var(--border-light);
    z-index: 100;
    transition: background-color 0.3s ease, border-color 0.3s ease;
}

.sidebar-brand {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 24px;
    border-bottom: 1px solid var(--border-light);
}

.brand-logo {
    width: 40px;
    height: 40px;
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
}

.brand-name {
    font-size: 22px;
    font-weight: 700;
    background: linear-gradient(135deg, var(--primary), var(--primary-light));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
    letter-spacing: -0.5px;
}

.sidebar-nav {
    flex: 1;
    overflow-y: auto;
    padding: 20px 16px;
}

.nav-label {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-secondary);
    text-transform: uppercase;
    letter-spacing: 1px;
    padding: 0 12px;
    margin-bottom: 10px;
}

.category-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.category-tree-item {
    display: flex;
    flex-direction: column;
}

.category-tree-row {
    display: flex;
    align-items: center;
    border-radius: var(--radius-md);
    transition: background-color 0.15s ease;
}

.category-tree-row:hover {
    background: var(--bg-hover);
}

.category-tree-row:hover a {
    color: var(--text-primary);
}

.category-toggle {
    width: 22px;
    height: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    color: var(--text-secondary);
    cursor: pointer;
    border: none;
    background: transparent;
    padding: 0;
    font: inherit;
    border-radius: var(--radius-sm);
    transition: transform 0.2s ease, background-color 0.15s ease;
}

.category-toggle:hover {
    background: var(--bg-base);
}

.category-toggle:disabled {
    cursor: default;
}

.category-toggle:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 1px;
}

.category-toggle svg {
    width: 14px;
    height: 14px;
    transition: transform 0.2s ease;
}

.category-tree-item.collapsed .category-toggle svg {
    transform: rotate(-90deg);
}

.category-tree-row a {
    flex: 1;
    min-width: 0;
    padding: 11px 14px 11px 0;
    color: var(--text-secondary);
    font-size: 15px;
    font-weight: 500;
    transition: color 0.15s ease;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.category-tree-row a::before {
    display: none;
}

.category-tree-row a.active {
    background: transparent;
    color: var(--primary);
}

.category-tree-children {
    list-style: none;
    margin: 0;
    padding: 0;
    overflow: hidden;
    max-height: 2000px;
    transition: max-height 0.25s ease, opacity 0.2s ease;
}

.category-tree-item.collapsed .category-tree-children {
    max-height: 0;
    opacity: 0;
}

.sub-category .category-tree-row a {
    font-size: 14px;
    color: var(--text-secondary);
}

.sidebar-footer {
    padding: 16px;
    border-top: 1px solid var(--border-light);
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.footer-btn {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 10px 14px;
    border-radius: var(--radius-md);
    background: transparent;
    color: var(--text-secondary);
    font-size: 14px;
    font-weight: 500;
    border: 1px solid transparent;
    transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
    text-decoration: none;
}

.footer-btn:hover {
    background: var(--bg-hover);
    color: var(--text-primary);
}

.footer-btn.active {
    background: linear-gradient(135deg, rgba(99, 102, 241, 0.15), rgba(129, 140, 248, 0.1));
    color: var(--primary);
    border-color: rgba(99, 102, 241, 0.2);
}

.footer-btn .icon {
    width: 18px;
    height: 18px;
}

/* 主内容区 */
.main-content {
    flex: 1;
    margin-left: var(--sidebar-width);
    padding: 32px;
    min-height: 100vh;
    max-width: calc(100% - var(--sidebar-width));
    min-width: 0;
}

/* R211 批2（A-1/C02/C03）：PC 三栏骨架（≥1024）——左栏距 30（--col-gap）；中栏外框＝视口−左−右−60，
   上限 1454（--content-max-width）流缩、下限 438 兜底；水平内衬 32→20（坐标系表：中栏内容区＝外框−40，
   竖向内衬 32 维持以零动纵向节奏）。大屏不设固定壳：三栏整体居中＝左/右各 max(0px,(100%−壳宽)/2)
   零偏移下限（视口<壳宽时恒 0；壳宽见 :root --nh-shell-width）。
   <1024（手机视口档/移动模板）现状不变：本块不命中，由本文件 ≤1024 / ≤768 档承接。 */
@media (min-width: 1024px) {
    .sidebar {
        left: max(0px, calc((100% - var(--nh-shell-width)) / 2));
    }

    .main-content {
        margin-left: calc(var(--sidebar-width) + var(--col-gap) + max(0px, (100% - var(--nh-shell-width)) / 2));
        padding: 32px 20px;
        max-width: var(--content-max-width);
        min-width: 438px;
    }

    .right-sidebar {
        margin-left: var(--col-gap);
        margin-right: max(0px, calc((100% - var(--nh-shell-width)) / 2));
    }
}

/* 右侧边栏 */
.right-sidebar {
    position: sticky;
    top: 35px;
    /* R211 批2（A-1）：右栏 335→360（值源 :root --right-rail-width，四页统一）。 */
    width: var(--right-rail-width);
    height: calc(100vh - 35px);
    flex-shrink: 0;
    background: var(--bg-sidebar);
    border-left: 1px solid var(--border-light);
    overflow-y: auto;
    scrollbar-width: thin;
}

.right-sidebar::-webkit-scrollbar {
    width: 5px;
}

.right-sidebar::-webkit-scrollbar-thumb {
    background: var(--border-light);
    border-radius: 3px;
}

.right-sidebar-inner {
    padding: 24px 16px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.right-widget {
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    padding: 16px;
    box-shadow: var(--shadow-sm);
}

.right-widget-title {
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
    margin: 0 0 12px 0;
    padding-bottom: 10px;
    border-bottom: 1px solid var(--border-light);
}

.right-widget-title .right-widget-tag {
    display: inline-block;
    margin-left: 6px;
    font-size: 11px;
    font-weight: 500;
    line-height: 1;
    color: var(--primary);
    background: rgba(99, 102, 241, 0.12);
    border: 1px solid rgba(99, 102, 241, 0.35);
    border-radius: 999px;
    padding: 3px 7px;
    vertical-align: middle;
}

.right-widget-body {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.right-widget-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 10px;
    border-radius: var(--radius-md);
    color: var(--text-secondary);
    font-size: 13px;
    text-decoration: none;
    transition: all 0.15s ease;
    cursor: pointer;
}

.right-widget-item:hover {
    background: var(--bg-hover);
    color: var(--primary);
}

.right-widget-empty {
    color: var(--text-secondary);
    font-size: 13px;
    margin: 0;
    opacity: 0.7;
}

/* 最新内容分组区块（BC-020）：右侧栏按分组分区块独立展示 */
.latest-group-block {
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.latest-group-block + .latest-group-block {
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px dashed var(--border-light);
}
.latest-group-title {
    font-size: 12px;
    font-weight: 600;
    color: var(--primary);
    margin: 2px 2px 2px 2px;
}
.latest-group-items {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.hot-article-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px;
    border-radius: var(--radius-md);
    transition: background 0.2s;
    color: var(--text-primary);
    text-decoration: none;
}

.hot-article-item:hover {
    background: var(--bg-hover);
    color: var(--primary);
}

.hot-article-rank {
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 4px;
    background: var(--bg-tertiary);
    font-size: 12px;
    font-weight: 700;
    color: var(--text-secondary);
}

.hot-article-item:nth-child(1) .hot-article-rank {
    background: #ff6b6b;
    color: #fff;
}

.hot-article-item:nth-child(2) .hot-article-rank {
    background: #ffa502;
    color: #fff;
}

.hot-article-item:nth-child(3) .hot-article-rank {
    background: #2ed573;
    color: #fff;
}

.hot-article-item img {
    flex: 0 0 auto;
    width: 48px;
    height: 36px;
    border-radius: 4px;
    object-fit: cover;
}

.hot-article-title {
    flex: 1 1 auto;
    font-size: 13px;
    line-height: 1.4;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}

.right-widget-icon {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
}

.right-widget-icon .site-icon-img {
    width: 18px;
    height: 18px;
    border-radius: 4px;
    object-fit: contain;
}

.right-widget-icon .site-icon-emoji {
    font-size: 15px;
    line-height: 1;
}

.right-widget-icon .site-icon-text {
    display: inline-block;
    width: 18px;
    height: 18px;
    line-height: 18px;
    text-align: center;
    border-radius: 4px;
    background: var(--primary);
    color: #fff;
    font-size: 10px;
    font-weight: 600;
}

.right-widget-label {
    flex: 1 1 auto;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 红色“新”角标（BC-019）：7 天内新增内容标记，PC/手机通用 */
.new-badge {
    display: inline-block;
    margin-right: 4px;
    padding: 0 5px;
    border-radius: 4px;
    background: #e5484d;
    color: #fff;
    font-size: 10px;
    line-height: 1.7;
    font-weight: 600;
    vertical-align: 1px;
}

/* 右侧边栏广告位 */
.ad-slot {
    width: 100%;
    border-radius: var(--radius-lg);
    overflow: hidden;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    box-shadow: var(--shadow-sm);
}

.ad-slot.hidden {
    display: none;
}

.ad-link {
    display: block;
    width: 100%;
    line-height: 0;
}

.ad-media {
    width: 100%;
    height: auto;
    max-height: 600px;
    object-fit: cover;
    display: block;
    border-radius: var(--radius-lg);
    transition: transform 0.2s ease;
}

.ad-link:hover .ad-media {
    transform: scale(1.02);
}

.ad-slot video.ad-media {
    background: #000;
}
/* WO-025（P-006-07）：「广告」角标——小号半透明浅底角标叠加素材左下角；pointer-events:none 使点击穿透，
   不拦截槽位轮播点击热区与视频原生控件；z-index 高于轮播指示点（dots z-index:2） */
.ad-link,
.home-ad-link {
    position: relative;
}
.ad-corner-badge {
    position: absolute;
    left: 8px;
    bottom: 8px;
    z-index: 3;
    pointer-events: none;
    padding: 1px 6px;
    border-radius: 4px;
    background: rgba(255, 255, 255, 0.72);
    color: rgba(40, 40, 40, 0.9);
    font-size: 11px;
    line-height: 16px;
    letter-spacing: 0.5px;
}

/* WO-025 批6（P-006-04/N3a-01）：PC 主页横幅广告槽家具（nav-home-* 容器；容器 id 单一权威源=constants.js
   AD_PAGE_SLOTS 注册表，本页模板/脚本零逻辑）。原 3a 死样式删除留痕：b6_pc_css_removed_bytes_20260908.log
   （.sidebar-ad-carousel 存活规则自旧区迁出保留，供右侧栏 renderSidebarSlot 复用） */
.home-ad-container {
    margin: 24px 0 0;
    border-radius: var(--radius-lg);
    overflow: hidden;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    box-shadow: var(--shadow-sm);
}
#nav-home-bottom.home-ad-container {
    margin-top: 32px;
}
/* R211 批2（C03）：中栏顶/底广告容器同口径——中栏外框−60（内容区两侧各 10）＋上限 1394 不破；
   高度 126／圆角／素材形态与聚合页三件新建属批3（C 条），本批零触碰；<1024 档不命中。 */
@media (min-width: 1024px) {
    .home-ad-container,
    #nav-home-bottom.home-ad-container {
        max-width: calc(var(--content-max-width) - 60px);
        margin-left: 10px;
        margin-right: 10px;
    }
}
.home-ad-container.hidden {
    display: none;
}
.home-ad-container.home-ad-layout-double {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}
/* R211 批3（C 条）：横幅槽高统一 126（顶底一致、四页一致）——槽 124＋容器上下各 1px 边框＝实测 126；
   修前槽 150／容器 152。素材形态（img 100% + cover／video contain）与三形态（单图/双图并排/轮播）不变。 */
.home-ad-slot {
    width: 100%;
    height: 124px;
    min-height: 120px;
    max-height: 190px;
    overflow: hidden;
    border-radius: var(--radius-lg);
    position: relative;
}
.home-ad-link {
    display: block;
    width: 100%;
    height: 100%;
    line-height: 0;
}
.home-ad-media {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    border-radius: var(--radius-lg);
    transition: transform 0.25s ease;
}
.home-ad-link:hover .home-ad-media {
    transform: scale(1.02);
}
.home-ad-link video.home-ad-media {
    background: #000;
    object-fit: contain;
}
.home-ad-carousel {
    width: 100%;
    height: 100%;
    overflow: hidden;
    position: relative;
    border-radius: var(--radius-lg);
}
.home-ad-carousel-track {
    display: flex;
    height: 100%;
    transition: transform 0.4s ease;
}
.home-ad-carousel-slide {
    flex: 0 0 100%;
    height: 100%;
}
.home-ad-carousel-slide img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.home-ad-carousel-dots {
    position: absolute;
    bottom: 8px;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    gap: 6px;
    z-index: 2;
}
.home-ad-carousel-dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    border: none;
    background: rgba(255, 255, 255, 0.6);
    cursor: pointer;
    padding: 0;
}
.home-ad-carousel-dot.active {
    background: #fff;
}
/* 右侧边栏广告轮播：高度随素材自适应（renderSidebarSlot 复用 home-ad-carousel 家具；自旧死样式区迁出保留） */
.sidebar-ad-carousel {
    height: auto;
}
.sidebar-ad-carousel .home-ad-carousel-track {
    height: auto;
}
.sidebar-ad-carousel .home-ad-carousel-slide {
    height: auto;
}
.sidebar-ad-carousel .home-ad-carousel-slide img {
    height: auto;
    max-height: 600px;
    object-fit: cover;
}

/* R109-1②（C1·2026-09-16）：旧「PC 跨组互推区」样式（WO-025 批6：块/标题/网格 + 三档断点列数）随
   该通道全量退役删除——底部互导卡样式统一走 .nh-bc-*（共享壳 BottomCards）单点，页面侧零副本。 */
@media (max-width: 1024px) {
    .home-ad-container,
    #nav-home-bottom.home-ad-container {
        margin-top: 20px;
    }
}
/* R211 批3（C 条）：原 ≤768 档 .home-ad-slot { height: 130px } 覆写随「高统一 126」退役——槽高 124
   （容器 124＋上下各 1px 边框＝126）全档一值，基段即终值；本档仅保留双图并排→单列形态规则（P69 三形态保留）。 */
@media (max-width: 768px) {
    .home-ad-container.home-ad-layout-double {
        grid-template-columns: 1fr;
        gap: 12px;
    }
}
.glass-card {
    background: var(--bg-card);
    backdrop-filter: var(--backdrop);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-md);
}

.pc-top-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 32px 8px;
    color: var(--text-secondary);
    font-size: 14px;
}

.top-bar-date {
    font-weight: 500;
}

.top-bar-actions {
    display: flex;
    align-items: center;
    gap: 16px;
}

.top-bar-btn {
    width: 32px;
    height: 32px;
    border-radius: var(--radius-md);
    border: 1px solid var(--border-light);
    background: var(--bg-card);
    color: var(--text-secondary);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.2s ease;
    position: relative;
}

.top-bar-btn:hover {
    background: var(--bg-hover);
    color: var(--primary);
}

.top-bar-btn svg {
    width: 18px;
    height: 18px;
}

.top-bar-btn .theme-icon-sun,
.top-bar-btn .theme-icon-moon {
    position: absolute;
    transition: opacity 0.2s ease, transform 0.2s ease;
}

body[data-theme="dark"] .top-bar-btn .theme-icon-sun,
body.theme-dark .top-bar-btn .theme-icon-sun {
    opacity: 0;
    transform: rotate(90deg) scale(0.5);
}

body[data-theme="dark"] .top-bar-btn .theme-icon-moon,
body.theme-dark .top-bar-btn .theme-icon-moon {
    opacity: 1;
    transform: rotate(0) scale(1);
}

.top-bar-btn .theme-icon-moon {
    opacity: 0;
    transform: rotate(-90deg) scale(0.5);
}

.top-bar-links {
    display: flex;
    align-items: center;
    gap: 8px;
}

.top-bar-links a {
    color: var(--text-secondary);
    text-decoration: none;
    transition: color 0.15s ease;
}

.top-bar-links a:hover {
    color: var(--primary);
}

.link-separator {
    opacity: 0.4;
}

.hidden {
    display: none !important;
}


/* 搜索区 - 长期固定显示（R211 批3 B 条/C13：四页同源搜索条——数值单一来源在 pc.css，页级零副本） */
.search-section {
    position: sticky;
    top: 0;
    z-index: 50;
    padding: 8px 20px 14px;
    background: var(--bg-sidebar);
    border-bottom: 1px solid var(--border-light);
    box-shadow: none;
    border-radius: var(--radius-lg);
}

/* R211 批2（C03）：搜索卡区块＝中栏外框−60（坐标系表：左右各内缩 30）＝中栏内容区两侧各 10；
   上限 calc(--content-max-width − 60px)＝1394 不破。
   R211 批3（B 条/C13）：区块内衬 32→20（坐标系表「内衬 20×2，现行 32 改 20，可见变化已确认」）——
   搜索条容器 .search-input-wrap 宽＝中栏外框−100（上限 1354／下限 338 由中栏 [438,1454] 自然约束，
   随窗口动态跟随）；GF/FP 页级同名覆写（padding 8px 20px 14px 副本）随本批退役，四页共用本规则；
   <1024 档不命中宽度规则（A-1 现状不变），内衬口径四页一致。 */
@media (min-width: 1024px) {
    .search-section {
        max-width: calc(var(--content-max-width) - 60px);
        margin-left: 10px;
        margin-right: 10px;
    }
}

.quick-nav {
    display: none;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 12px;
    padding: 0 4px;
}

.quick-nav-item {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: 999px;
    color: var(--text-secondary);
    font-size: 13px;
    font-weight: 500;
    white-space: nowrap;
    transition: all 0.15s ease;
    text-decoration: none;
}

.quick-nav-item:hover {
    background: var(--bg-hover);
    color: var(--primary);
    border-color: rgba(99, 102, 241, 0.3);
    transform: translateY(-1px);
}

/* L4：失效分类锚点（分类已删除）置灰提示，点击由 JS 弹出警告不跳转 */
.quick-nav-item-invalid {
    opacity: 0.55;
    border-style: dashed;
    cursor: not-allowed;
    filter: grayscale(0.6);
}
.quick-nav-item-invalid:hover {
    background: var(--bg-card);
    color: var(--text-secondary);
    border-color: var(--border-light);
    transform: none;
}

.quick-nav-icon {
    font-size: 16px;
    line-height: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
}

.quick-nav-favicon {
    width: 18px;
    height: 18px;
    object-fit: contain;
    border-radius: 2px;
}

.search-box {
    display: block;
    position: relative;
    width: 100%;
    max-width: none;
    margin: 0;
}

/* R211 批7（P59）：本处原遗留「搜索页签」死样式组已整体退役（全库零消费，批0 基准 pc.css:970-995 →
   本轮实测 :1027-1052）——搜索条样式单点＝下方 .search-input-wrap 及 R211 批3 数值面。
   退役后本文件不再保留该组选择器（零残留）。 */
/* R211 批3（B 条/C13 数值面）：搜索条容器高 53／圆角 14／右内衬 5——纵向内衬 (53−2 边框−41 子件)/2＝5
   由固定高度承载；宽度＝中栏外框−100（见上方 .search-section 注释）。GF 页原 38px 容器／36px 子件覆写随本批退役。 */
.search-input-wrap {
    display: flex;
    align-items: center;
    gap: 0;
    height: 53px;
    background: var(--bg-base);
    border: 1px solid var(--border-light);
    border-radius: 14px;
    padding: 5px 5px 5px 0;
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
    overflow: hidden;
}

.search-input-wrap:focus-within {
    border-color: var(--primary-light);
    box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12);
}

.engine-select {
    position: relative;
    flex-shrink: 0;
    border-right: 1px solid var(--border-light);
}

.engine-select select {
    appearance: none;
    -webkit-appearance: none;
    border: none;
    background: transparent;
    color: var(--text-primary);
    font-size: 14px;
    font-weight: 500;
    padding: 10px 32px 10px 16px;
    cursor: pointer;
    outline: none;
    min-width: 80px;
}

.engine-select-arrow {
    position: absolute;
    right: 10px;
    top: 50%;
    transform: translateY(-50%);
    width: 14px;
    height: 14px;
    color: var(--text-secondary);
    pointer-events: none;
}

.engine-select-arrow svg {
    width: 100%;
    height: 100%;
}

/* R211 批3（B 条/P30≡P01）：选择器由 id（#search-input）改类选择器 input[type="text"]——FP 页输入框
   为 #fp-search-input，旧 id 选择器不命中（修前实测 159×23＝样式纯缺失）；四页输入行同源消费本规则。
   输入框高 41（固定高度承载，纵向内衬归零；与容器 53／按钮 41 同基线）。 */
.search-input-wrap input[type="text"] {
    flex: 1;
    border: none;
    background: transparent;
    color: var(--text-primary);
    font-size: 16px;
    height: 41px;
    padding: 0 14px;
    min-width: 0;
}

.search-input-wrap input[type="text"]::placeholder {
    color: var(--text-secondary);
    opacity: 0.7;
}

/* R211 批3（B 条/C13 数值面）：按钮 78×41／圆角 14（固定盒承载，纵向内衬归零）；四页同源——
   GF 页 R51「盒 ×85%＝66.3×30.6／圆角 10.2」与 R52「标签分段 span＋6px 段距」两处形修随本批退役。 */
.search-btn {
    width: 78px;
    height: 41px;
    padding: 0;
    border-radius: 14px;
    background: linear-gradient(135deg, var(--primary), var(--primary-light));
    color: #fff;
    font-size: 15px;
    font-weight: 600;
    box-shadow: var(--shadow-sm);
    transition: transform 0.15s ease, box-shadow 0.15s ease;
    flex-shrink: 0;
}

.search-btn:hover {
    transform: translateY(-1px);
    box-shadow: var(--shadow-md);
}

/* 搜索建议 */
.suggestion-list {
    position: absolute;
    top: calc(100% + 8px);
    left: 0;
    right: 0;
    list-style: none;
    margin: 0;
    padding: 6px;
    background: rgba(255, 255, 255, 0.96);
    backdrop-filter: blur(25px) saturate(190%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-lg);
    z-index: 60;
    display: none;
    max-height: 360px;
    overflow-y: auto;
}

/* 暗色主题：搜索下拉面板高不透明度（与亮色主题同口径，防止白底刺眼） */
[data-theme="dark"] .suggestion-list {
    background: rgba(30, 41, 59, 0.96);
}

.suggestion-list.show {
    display: block;
}

.suggestion-list li {
    padding: 9px 14px;
    border-radius: var(--radius-sm);
    color: var(--text-secondary);
    font-size: 14px;
    cursor: pointer;
    transition: background-color 0.15s ease, color 0.15s ease;
    display: flex;
    align-items: center;
    gap: 8px;
}

.suggestion-list li:hover,
.suggestion-list li.active {
    background: var(--bg-hover);
    color: var(--text-primary);
}

.suggestion-list .suggestion-header {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-secondary);
    opacity: 0.8;
    padding: 6px 14px;
    cursor: default;
    pointer-events: none;
}

.suggestion-list .suggestion-header:hover,
.suggestion-list .suggestion-header.active {
    background: transparent;
}

/* R100-3（P28＋P29·方案A 站长 2026-09-15 确认）：下拉结果条目内部改「上下堆叠」——
   标题行在上（1 行截断省略）＋简介行在下（1 行截断省略），替代原左右分栏
   （justify-content: space-between）——消除 P28 标题被简介覆盖与 P29 宽窗标题/简介距离过远；
   面板宽度/弹出逻辑/条目点击行为（P14）/键盘 ↑↓ 契约零变化；DOM 结构不动（纯 CSS 网格重排）。 */
.suggestion-list .suggestion-internal {
    display: grid;
    grid-template-columns: 14px minmax(0, 1fr);
    column-gap: 8px;
    row-gap: 2px;
    align-items: center;
}

.suggestion-list .suggestion-internal::before {
    content: '';
    width: 14px;
    height: 14px;
    flex-shrink: 0;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%236366f1' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'%3E%3C/path%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'%3E%3C/path%3E%3C/svg%3E");
    background-size: contain;
    opacity: 0.8;
    grid-column: 1;
    grid-row: 1 / span 2;
    align-self: center;
}

.suggestion-list .suggestion-internal .suggestion-title {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    grid-column: 2;
    grid-row: 1;
}

.suggestion-list .suggestion-internal .suggestion-meta {
    font-size: 12px;
    color: var(--text-secondary);
    opacity: 0.8;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    grid-column: 2;
    grid-row: 2;
}

.suggestion-list .suggestion-baidu::before {
    content: '';
    width: 14px;
    height: 14px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
    background-size: contain;
    opacity: 0.7;
}

.suggestion-list .suggestion-empty {
    color: var(--text-secondary);
    opacity: 0.7;
    cursor: default;
    font-size: 13px;
    justify-content: center;
}

.suggestion-list .suggestion-empty:hover,
.suggestion-list .suggestion-empty.active {
    background: transparent;
}

/* R97-2（P21 / 站长定版 2026-09-14）：搜索下拉「查看全部搜索结果」双入口——
   底部（.suggestion-more）由左下角移至右下角；顶部（.suggestion-more-top）右上角同款。
   样式沿用下拉既有 li 基类 token（配色/字号/圆角零新增），仅右对齐与顶部分隔线。 */
.suggestion-list .suggestion-more {
    justify-content: flex-end;
}

.suggestion-list .suggestion-more-top {
    border-bottom: 1px solid var(--border-light);
    border-radius: 0;
    margin-bottom: 4px;
}

/* 分类与卡片 */
.cards-container {
    display: flex;
    flex-direction: column;
    max-width: var(--content-max-width);
    margin-top: 32px;
}

.category-section {
    /* GF-2R2（R68/R70）：锚点落点动态偏移——site-shell.js AnchorScroll 单点实测吸附栈高度后写入
       --nh-anchor-offset（换行自适应）；静态 140px 与实测栈高（212px 起）失配致落点遮挡 72px 起
       （探查报告《_INQUIRY_WO-025-POST-2_GF2R2探查_锚点落点遮挡_20260911.md》） */
    scroll-margin-top: var(--nh-anchor-offset, 212px);
}

.category-section + .category-section {
    margin-top: 32px;
}

.category-section.collapsed + .category-section,
.category-section + .category-section.collapsed {
    margin-top: 17px;
}

.category-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 18px;
    cursor: pointer;
    user-select: none;
}

.category-title {
    font-size: 20px;
    font-weight: 700;
    color: var(--text-primary);
    margin: 0;
}

.category-count {
    font-size: 13px;
    font-weight: 500;
    color: var(--text-secondary);
    background: var(--bg-card);
    padding: 3px 10px;
    border-radius: 20px;
    border: 1px solid var(--border-light);
}

.category-section.collapsed .sites-grid {
    display: none;
}

.category-section.collapsed .category-toggle svg {
    transform: rotate(-90deg);
}

/* R211 批2（A-3）：列数硬编码（原 repeat(4,1fr) 基态；≤1280 的 3 列档随 A-1 同批删除）——
   列数/卡宽改由 NH.CardFactory 纯函数按卡片区内容区实测宽运行时写入（≥1024；渲染时＋resize 时重算，
   剩余空间居中）。<1024（手机视口档）维持现状阶梯：≤1024→2 列、≤768→2 列（见文件尾媒体块）。 */
.sites-grid {
    display: grid;
    gap: 18px;
}

.site-card {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    padding: 18px;
    background: var(--bg-card);
    backdrop-filter: var(--backdrop);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    position: relative;
    transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}

/* 批7：站点卡仅对有效链接/二维码动作卡保留手指与悬停；无效 URL 静态卡不得有假反馈。 */
.site-card[href],
.site-card.site-card-qr {
    cursor: pointer;
}

.site-card[href]:hover,
.site-card.site-card-qr:hover {
    transform: translateY(-3px);
    box-shadow: var(--shadow-lg);
    border-color: var(--primary-light);
}

.site-card.site-card-qr:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 1px;
}

.site-icon {
    width: 44px;
    height: 44px;
    border-radius: var(--radius-md);
    flex-shrink: 0;
    background: var(--bg-base);
    border: 1px solid var(--border-light);
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    font-weight: 700;
    color: var(--primary);
    background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(129, 140, 248, 0.05));
}

.site-icon img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.site-info {
    flex: 1;
    min-width: 0;
}

.site-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--text-primary);
    margin: 0 0 5px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.site-desc {
    font-size: 13px;
    color: var(--text-secondary);
    margin: 0;
    line-height: 1.5;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.site-proxy-badge {
    font-size: 10px;
    padding: 2px 6px;
    border-radius: 4px;
    background: rgba(99, 102, 241, 0.1);
    color: var(--primary);
    margin-top: 6px;
    display: inline-block;
}

.site-share-code {
    position: absolute;
    top: 10px;
    right: 10px;
    width: 22px;
    height: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--primary);
    background: rgba(99, 102, 241, 0.1);
    border-radius: 50%;
    cursor: pointer;
    transition: transform 0.2s, background 0.2s;
    z-index: 2;
}

.site-share-code:hover {
    background: rgba(99, 102, 241, 0.2);
    transform: scale(1.1);
}

.site-share-code svg {
     width: 12px;
     height: 12px;
 }

.site-report-btn {
    position: absolute;
    left: 6px;
    bottom: 4px;
    width: 24px;
    height: 24px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--text-secondary);
    border-radius: 50%;
    cursor: pointer;
    transition: transform 0.2s, background 0.2s, color 0.2s;
    z-index: 2;
    opacity: 0;
    visibility: hidden;
    background: transparent;
}
/* WO-025-POST（P2）PC 统一基准：视觉圆底 20px rgba(15,23,42,0.10)+blur 由 ::before 承载
   （热区 24px 透明、svg 13px 居中），:active 红 0.35；悬停显现行为保留 */
.site-report-btn::before {
    content: '';
    position: absolute;
    inset: 2px;
    border-radius: 50%;
    background: rgba(15, 23, 42, 0.10);
    backdrop-filter: blur(2px);
}

.site-card:hover .site-report-btn {
    opacity: 1;
    visibility: visible;
}

.site-report-btn:hover {
    color: var(--danger, #ef4444);
}
.site-report-btn:hover::before {
    background: rgba(15, 23, 42, 0.18);
}
.site-report-btn:active {
    color: #fff;
}
.site-report-btn:active::before {
    background: rgba(239, 68, 68, 0.35);
}

.site-report-btn svg {
    width: 13px;
    height: 13px;
}

/* 网盘资源1新卡片样式 */
.resource-card {
    display: flex;
    flex-direction: column;
    background: var(--bg-card);
    backdrop-filter: var(--backdrop);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    overflow: hidden;
    position: relative;
    transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
    text-decoration: none;
    padding-bottom: 0;
}

/* 批7：resource-card 的动作由 card-body click/claim 标记决定；无标记卡不得出现假反馈。 */
.resource-card[data-card-actionable="1"] {
    cursor: pointer;
}

.resource-card[data-card-actionable="1"]:hover {
    transform: translateY(-3px);
    box-shadow: var(--shadow-lg);
    border-color: var(--primary-light);
}

.resource-card-cover {
    position: relative;
    width: 100%;
    padding-top: 56.25%;
    background: linear-gradient(135deg, rgba(99, 102, 241, 0.12), rgba(129, 140, 248, 0.06));
    overflow: hidden;
}

.resource-card-cover img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform 0.3s ease;
}

.resource-card[data-card-actionable="1"]:hover .resource-card-cover img {
    transform: scale(1.03);
}

.resource-card-cover.no-image {
    display: flex;
    align-items: center;
    justify-content: center;
    padding-top: 0;
    min-height: 0;
}

.resource-card-cover.no-image::before {
    content: '';
    display: block;
    padding-top: 56.25%;
    width: 0;
}

.resource-card-cover.no-image span {
    position: absolute;
    font-size: 48px;
    font-weight: 700;
    color: var(--primary);
    opacity: 0.35;
}

/* R211 批4（D 条 23~25 网盘卡）：信息区度量——图→题 10 由 padding-top 承载；
   信→钮 12 由本区下内衬（12）承载，按钮区上外边距同步归零（见下方 .resource-card-actions），
   两段 12 不得叠加（改前实测 12+12=24，本批收口）。数值单一来源＝constants.js
   CARD_SPEC.pcNetdisk.spacing.coverToTitle / metaToButton，本文件零第二套口径。 */
.resource-card-info {
    flex: 1;
    padding: 10px 16px 12px;
    min-width: 0;
    position: relative;
}

.resource-card-title {
    /* R200-R3 批3（新指令一·终版）：网盘类卡片标题 15→16px（分类子页/首页分组卡同源类） */
    font-size: 16px;
    font-weight: 600;
    color: var(--text-primary);
    /* R211 批4（D 条 23~25）：题→简 6→10（= CARD_SPEC.pcNetdisk.spacing.titleToSummary） */
    margin: 0 0 10px;
    line-height: 1.45;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.resource-card-desc {
    /* R200-R3 批3（新指令一·终版）：网盘类卡片简介 13→14px */
    font-size: 14px;
    color: var(--text-secondary);
    margin: 0;
    line-height: 1.55;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    /* R204 批3（销 TD-19）：两行预留值 40px→44px —— 本令简介字号 13→14px 后两行实高＝14 × 1.55 × 2
       ≈ 43.4px，向上取整 44px 与两行实际高度对齐（改前 40px 系 13px 时代旧值，不构成裁剪/重叠，
       仅单卡最小高度口径）；≤768px 档由本文件下方 @media 块内的既有覆写改回自适应高度，移动端零改动。
       注：本注释正文刻意不写「属性名＋冒号」与「选择器＋花括号」两种字面，避免规则块/声明提取器误判。 */
    min-height: 44px;
}

/* R200-R3 批3（新指令二·卡片信息行复活 + 排版规范①）：网盘卡信息行——作者→发布日期→浏览→分类
   （项序/标签/空值判定均取自 constants.js 单点，本文件只负责视觉）；位于简介之下、按钮区之上。
   开关按「分组×PC 端」独立配置：整行无可见项时后端渲染层不产出本容器（零空行），故无 :empty 兜底。 */
.resource-card-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    /* R211 批4（D 条 23~25）：简→信 8→10（= CARD_SPEC.pcNetdisk.spacing.summaryToMeta） */
    margin: 10px 0 0;
    font-size: 13px;
    line-height: 1.5;
    color: var(--text-secondary);
}

.resource-card-meta-item {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.resource-card-meta-sep {
    opacity: 0.5;
    margin: 0 2px;
}

.resource-card-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    /* R211 批4（D 条 23~25）：信→钮 12（= CARD_SPEC.pcNetdisk.spacing.metaToButton） */
    margin: 12px 16px 16px;
    padding: 11px 16px;
    border-radius: var(--radius-md);
    background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);
    color: #fff;
    /* R211 批4（D 条 23~25）：按钮字号 15→16（= CARD_SPEC.pcNetdisk.fonts.button） */
    font-size: 16px;
    font-weight: 600;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
    transition: transform 0.2s ease, box-shadow 0.2s ease, filter 0.2s ease;
}

.resource-card[data-card-actionable="1"]:hover .resource-card-btn {
    filter: brightness(1.05);
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.16);
}

.resource-card-btn-icon {
    font-size: 16px;
    line-height: 1;
    flex-shrink: 0;
}

.resource-card-btn-text {
    line-height: 1;
}

.resource-card-actions {
    display: flex;
    align-items: stretch;
    /* R211 批4（D 条 23~25）：信→钮 12 由 .resource-card-info 下内衬承载
       （= CARD_SPEC.pcNetdisk.spacing.metaToButton）；本区上外边距归零，
       防「信息区下内衬 12 + 本区上外边距 12」两段叠加为 24（改前实测 24）。 */
    margin: 0 16px 16px;
    border-radius: var(--radius-md);
    overflow: hidden;
}

.resource-card-actions .resource-card-btn {
    flex: 1;
    margin: 0;
    border-radius: 0;
}

/* 通栏双按钮（了解详情 + 领取资料）：整体 4 外角圆角、中间相邻边角直角、零间隙无缝并排 */
.resource-card-actions .resource-card-btn:first-child {
    border-radius: var(--radius-md) 0 0 var(--radius-md);
}

.resource-card-actions .resource-card-btn:last-child {
    border-radius: 0 var(--radius-md) var(--radius-md) 0;
}

.resource-card-actions .resource-card-btn:first-child:last-child {
    border-radius: var(--radius-md);
}

.resource-card-actions .resource-card-detail-btn {
    background: var(--bg-card);
    color: var(--text-primary);
    border: 1px solid var(--border-color);
    box-shadow: none;
}

.resource-card-actions .resource-card-btn.disabled {
    opacity: 0.55;
    cursor: not-allowed;
    pointer-events: none;
}

.resource-card .site-share-code {
    top: 10px;
    right: 10px;
    width: 26px;
    height: 26px;
    background: rgba(255, 255, 255, 0.92);
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}

.resource-card .site-share-code svg {
    width: 14px;
    height: 14px;
}

.resource-card .site-report-btn {
    left: 6px;
    bottom: 4px;
    width: 24px;
    height: 24px;
    background: transparent;
    box-shadow: none;
    transition: transform 0.2s, background 0.2s, color 0.2s, opacity 0.2s ease, visibility 0.2s ease;
}
.resource-card .site-report-btn::before {
    content: '';
    position: absolute;
    inset: 2px;
    border-radius: 50%;
    background: rgba(15, 23, 42, 0.10);
    backdrop-filter: blur(2px);
}
.resource-card .site-report-btn:active::before {
    background: rgba(239, 68, 68, 0.35);
}

.resource-card:hover .site-report-btn {
    opacity: 1;
    visibility: visible;
}

@media (hover: none) {
    .resource-card .site-report-btn {
        opacity: 1;
        visibility: visible;
    }
}

.resource-card .site-report-btn svg {
    width: 13px;
    height: 13px;
}

.report-card {
    width: 420px;
    max-width: 90vw;
}

.report-subtitle {
    font-size: 13px;
    color: var(--text-secondary);
    margin: -6px 0 14px;
}

.report-options {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-bottom: 14px;
}

.report-option {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    border-radius: var(--radius-md);
    border: 1px solid var(--border-light);
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s;
}

.report-option:hover {
    background: var(--bg-hover);
    border-color: var(--primary-light);
}

.report-option input {
    margin: 0;
}

.report-option-text {
    font-size: 14px;
    color: var(--text-primary);
}

.report-desc-group {
    margin-bottom: 6px;
}

.report-desc-group label {
    display: block;
    font-size: 13px;
    margin-bottom: 6px;
    color: var(--text-secondary);
}

.report-desc-group textarea {
    width: 100%;
    padding: 10px 12px;
    border-radius: var(--radius-md);
    border: 1px solid var(--border-light);
    background: var(--bg-base);
    color: var(--text-primary);
    font-size: 14px;
    resize: vertical;
}

.report-desc-group textarea:focus {
    outline: none;
    border-color: var(--primary);
}

 .article-category-header {
    cursor: pointer;
    user-select: none;
}

.article-category-toggle {
    display: inline-flex;
    width: 18px;
    height: 18px;
    align-items: center;
    justify-content: center;
    color: var(--text-secondary);
    transition: transform 0.2s ease;
}

.article-category-toggle svg {
    width: 14px;
    height: 14px;
}

.article-category-section.collapsed .article-category-toggle {
    transform: rotate(-90deg);
}

.article-category-section.collapsed .article-cards-list {
    display: none;
}

.article-category-section.collapsed .article-category-section {
    display: none;
}

/* FIX-4：文章分类父子层级间距统一为 28px（含嵌套子分类） */
.article-category-section + .article-category-section,
.article-category-section .article-category-section {
    margin-top: 28px;
}

.article-cards-list {
    display: flex;
    flex-direction: column;
    /* R211 批4（D 条 26~28）：中医横条卡卡距 16→22（= CARD_SPEC.pcArticle.gap） */
    gap: 22px;
}

/* R98-5（P26 / 站长定版 2026-09-15 图1/2/3）：文章卡族 PC 视口一行两列——
   .article-cards-list 仅文章分组（pc.html?group=article 分类块/选中层/feed 根级三视图统一同族容器）产出，
   非文章卡族（.sites-grid 网盘/站点卡栅格）零触碰；卡内元素不裁剪（.article-card-home 自身网格自适宽折行）；
   窄视口（<=900px，与 fp/gf 断点同口径）保持单列原状（移动端不加载 pc.css 为第二重隔离）。 */
@media (min-width: 901px) {
    .article-cards-list {
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        /* R211 批4（D 条 26~28）：卡距 16→22；列数/卡宽运行时由 NH.CardFactory 按内容区写入（批2） */
        gap: 22px;
    }
}

/* R211 批4（D 条 26~28 中医横条卡／C09 主页 .article-card-home 按本条执行）：
   ① 封面列宽＝卡宽×32.7%——卡内衬 18（上下左右同值）⇒ 内容宽＝卡宽−36，故
      列宽写成 calc(32.7% + 11.772px)（= 0.327×36）时对任意卡宽恒等于 0.327×卡宽
      （686 时 224.32px，与工单「686 时≈224×126」一致；宽度随卡宽流缩）；
   ② 图－文水平间距 18→12（= CARD_SPEC.pcArticle.spacing.coverToTitle）； */
.article-card-home {
    display: grid;
    grid-template-columns: calc(32.7% + 11.772px) minmax(0, 1fr);
    gap: 12px;
    padding: 18px;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}

/* R211 批4（挂账①③，工单 43 四项补齐 + 触摸端零悬停）：
   ③ 补「封面图 scale(1.03)」一项（基线唯一源＝pc.css .resource-card:hover .resource-card-cover img）；
   ① 补 @media (hover: hover) 媒体门——手机 FP 文章卡在触摸端（360/375/414 模拟）不再产生
      translateY(-3px) 上浮与封面缩放（工单五.5「手机 FP 文章卡触摸端不再上浮」）。
   门型与批1 full-preview.css hover 块同构：四项悬停面（位移／阴影／边框／封面缩放）整体入门，
   触摸端零悬停、PC 指针设备行为逐项同值（门外不留悬停声明，无重复面）。 */
@media (hover: hover) {
    .article-card-home[href]:hover {
        transform: translateY(-3px);
        box-shadow: var(--shadow-lg);
        border-color: var(--primary-light);
        text-decoration: none;
    }
    .article-card-home[href]:hover .article-card-cover img {
        transform: scale(1.03);
    }
}

.article-card-cover {
    /* R211 批4（D 条 26~28）：封面列由固定 200px 改「随列宽流缩」——宽度归 100%（列宽由
       .article-card-home 的 calc(32.7% + 11.772px) 轨道承载）；
       16:9 比例框（框高＝宽×9/16；686 时 224.32×126.18）；align-self:start 令框高由比例决定
       （不被网格行 stretch 拉满），底部留白即「留白不裁切」观感。 */
    width: 100%;
    aspect-ratio: 16 / 9;
    align-self: start;
    border-radius: var(--radius-md);
    overflow: hidden;
    background: var(--bg-base);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.article-card-cover img {
    width: 100%;
    height: 100%;
    /* R211 批4（D 条 26~28／手机 41）：cover -> contain（不裁切、按原始比例留白） */
    object-fit: contain;
    display: block;
    /* R211 批4（挂账③）：与 .resource-card-cover img 同源的过渡（.3s） */
    transition: transform 0.3s ease;
}

.article-card-cover-placeholder {
    font-size: 13px;
    color: var(--text-secondary);
}

.article-card-info {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.article-card-title {
    font-size: 17px;
    font-weight: 600;
    color: var(--text-primary);
    margin: 0 0 10px;
    line-height: 1.4;
    /* R100-2（P27 修正版 2026-09-15）：标题最多 2 行（超出截断省略） */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.article-card-summary {
    font-size: 14px;
    color: var(--text-secondary);
    /* R211 批4（D 条 26~28）：简→信 14→10（= CARD_SPEC.pcArticle.spacing.summaryToMeta） */
    margin: 0 0 10px;
    line-height: 1.6;
    display: -webkit-box;
    /* R100-2（P27 修正版 2026-09-15）：简介最多 2 行（原 5 行口径修订） */
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.article-card-meta {
    margin-top: auto;
    font-size: 13px;
    color: var(--text-secondary);
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

/* R200-R3 批3（新指令二·历史信息行复活）：文章卡信息行项——单行截断（防长作者/长分类破版），
   与 R200-R3 新增的 .resource-card-meta-item 同口径；本类为复活态，样式随 DOM 复活一并启用。 */
.article-card-meta .article-card-meta-item {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.article-card-meta .meta-sep {
    opacity: 0.5;
    margin: 0 2px;
}

@media (max-width: 900px) {
    .article-card-home {
        grid-template-columns: 1fr;
    }

    .article-card-cover {
        width: 100%;
    }
}

.empty-tip {
    color: var(--text-secondary);
    font-size: 14px;
    padding: 20px;
    text-align: center;
    background: var(--bg-card);
    border-radius: var(--radius-lg);
    border: 1px dashed var(--border-light);
}


/* 底部跳转卡片（文章分组） */
.pc-bottom-cards-section {
    margin-top: 28px;
}

.pc-bottom-cards-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 16px;
}

.pc-bottom-cards-grid .bottom-card {
    display: block;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-md);
    overflow: hidden;
    transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}

.pc-bottom-cards-grid .bottom-card[href]:hover {
    transform: translateY(-3px);
    box-shadow: var(--shadow-lg);
    border-color: var(--primary-light);
    text-decoration: none;
}

.pc-bottom-cards-grid .bottom-card img {
    width: 100%;
    height: auto;
    display: block;
}

/* R109-3②（P59）：底部推荐卡图片加载失败回退——error 事件委托标记父级（csp-delegation.js
   data-error-parent-class="no-image"）＋隐藏破图（data-hide-on-error），此处补占位带
   （16:9，与 .nh-bc-media.no-image 同族视觉，页面主题色卡底） */
.pc-bottom-cards-grid .bottom-card.no-image::before {
    content: '';
    display: block;
    aspect-ratio: 16 / 9;
    background: #eef0f6;
}

.pc-bottom-cards-grid .bottom-card-title {
    padding: 10px 14px;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
}

/* 文章图片跳转提取码弹窗 */
#imageCodeModal .modal-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.45);
    z-index: 300;
}

#imageCodeModal .modal-card {
    width: 90%;
    max-width: 360px;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-xl);
    padding: 24px;
    z-index: 301;
}

#imageCodeModal.hidden {
    display: none;
}

#imageCodeModal .modal-actions {
    display: flex;
    justify-content: flex-end;
}

/* 页脚 */
.page-footer {
    margin-top: 48px;
    padding: 24px 0;
    text-align: center;
    color: var(--text-secondary);
    font-size: 13px;
}

.footer-content {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.footer-slogan {
    margin: 0;
}

.footer-slogan a {
    color: var(--text-secondary);
    text-decoration: none;
    transition: color 0.15s ease;
}

.footer-slogan a:hover {
    color: var(--primary);
}

.footer-slogan .footer-divider {
    margin: 0 10px;
}

.footer-links {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: 8px;
    font-size: 13px;
    color: var(--text-secondary);
}

.footer-links a {
    color: var(--text-secondary);
    text-decoration: none;
    transition: color 0.2s;
}

.footer-links a:hover {
    color: var(--primary);
    text-decoration: underline;
}

.footer-links .sep {
    color: var(--text-tertiary);
}

.footer-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 6px 10px;
    line-height: 1.5;
}

.footer-meta a {
    color: var(--text-secondary);
    text-decoration: none;
    transition: color 0.15s ease;
}

.footer-meta a:hover {
    color: var(--primary);
}

.footer-divider {
    opacity: 0.4;
    user-select: none;
}

/* 轻提示：统一由 /css/base.css 的 toast-stack / toast-frontend 承载 */

/* 口令弹窗 */
#shareCodeModal .modal-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.45);
    z-index: 300;
}

#shareCodeModal .modal-card {
    width: 90%;
    max-width: 360px;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-xl);
    padding: 24px;
    z-index: 301;
}

#shareCodeModal.hidden {
    display: none;
}

.share-code-card .modal-title {
    margin: 0 0 8px;
    font-size: 18px;
    color: var(--text-primary);
}

.share-code-hint {
    color: var(--text-secondary);
    font-size: 13px;
    margin-bottom: 16px;
    line-height: 1.5;
}

.share-code-box {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: var(--bg-base);
    border: 1px dashed var(--border-light);
    border-radius: var(--radius-md);
    margin-bottom: 20px;
}

.share-code-box span {
    flex: 1;
    font-size: 18px;
    font-weight: 600;
    letter-spacing: 1px;
    color: var(--text-primary);
    word-break: break-all;
}

.share-code-box .btn-sm {
    padding: 6px 14px;
    font-size: 13px;
    white-space: nowrap;
}

#shareCodeModal .modal-actions {
     display: flex;
     justify-content: flex-end;
 }

#qrCodeModal .modal-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.1);
    z-index: 300;
}

#qrCodeModal .modal-card {
    width: 90%;
    max-width: 360px;
    background: #fff;
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-xl);
    padding: 24px;
    z-index: 301;
}

[data-theme="dark"] #qrCodeModal .modal-card {
    background: #1e293b;
}

#qrCodeModal.hidden {
    display: none;
}

.qr-code-card .modal-title {
    margin: 0 0 8px;
    font-size: 18px;
    color: var(--text-primary);
}

.qr-code-title {
    margin: 0 0 12px;
    font-size: 15px;
    font-weight: 600;
    color: var(--text-primary);
    text-align: center;
    word-break: break-all;
}

.qr-code-desc {
    margin: 0 0 12px;
    font-size: 13px;
    color: var(--text-secondary);
    text-align: left;
    line-height: 1.5;
    word-break: break-all;
}

.qr-code-hint {
    color: var(--text-secondary);
    font-size: 13px;
    margin-bottom: 16px;
    line-height: 1.5;
}

.qr-code-box {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    background: var(--qr-box-bg);
    border: 1px solid var(--qr-box-border);
    border-radius: var(--radius-md);
    margin-bottom: 16px;
}

.qr-code-box img {
    width: 200px;
    height: 200px;
    object-fit: contain;
    image-rendering: pixelated;
}

.qr-code-url {
    color: var(--text-secondary);
    font-size: 12px;
    word-break: break-all;
    text-align: center;
    margin-bottom: 20px;
    padding: 0 8px;
}

#qrCodeModal .modal-actions {
    display: flex;
    justify-content: flex-end;
    gap: 12px;
}

#homePopupModal .modal-backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.45);
    z-index: 310;
}

#homePopupModal .modal-card {
    width: 90%;
    max-width: 520px;
    max-height: 90vh;
    overflow-y: auto;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-xl);
    z-index: 311;
    padding: 24px;
}

#homePopupModal.hidden {
    display: none;
}

.home-popup-close {
    position: absolute;
    top: 12px;
    right: 12px;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--bg-base);
    color: var(--text-secondary);
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    transition: background-color 0.15s ease, color 0.15s ease;
}

.home-popup-close:hover {
    background: var(--bg-hover);
    color: var(--text-primary);
}

.home-popup-card .modal-title {
    margin: 0 0 12px;
    padding-right: 40px;
    font-size: 18px;
    color: var(--text-primary);
}

.home-popup-content {
    color: var(--text-secondary);
    font-size: 14px;
    line-height: 1.6;
    margin-bottom: 16px;
}

.home-popup-content p {
    margin: 0 0 8px;
}

.home-popup-media {
    margin-bottom: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.home-popup-media img,
.home-popup-media video {
    max-width: 100%;
    max-height: 60vh;
    border-radius: var(--radius-md);
    object-fit: contain;
}

#homePopupModal .modal-actions {
    display: flex;
    justify-content: flex-end;
}

#homePopupModal .home-popup-actions {
    justify-content: center;
}

#homePopupModal .home-popup-action-btn {
    width: 100%;
    padding: 12px 20px;
    font-size: 15px;
}

 .btn {
     display: inline-flex;
     align-items: center;
     justify-content: center;
     padding: 10px 18px;
     border: none;
     border-radius: var(--radius-md);
     font-size: 14px;
     font-weight: 500;
     cursor: pointer;
     transition: background 0.2s, transform 0.2s;
 }
 
 .btn-primary {
     background: var(--primary);
     color: #fff;
 }
 
 .btn-primary:hover {
     background: var(--primary-light);
 }
 
 .btn-ghost {
     background: transparent;
     color: var(--text-secondary);
 }
 
 .btn-ghost:hover {
     background: var(--bg-base);
     color: var(--text-primary);
 }
 
#qrCodeModal .btn-ghost:hover {
    background: var(--qr-close-hover-bg);
    color: var(--qr-close-hover-color);
}
 
 /* 滚动条美化 */
::-webkit-scrollbar {
    width: 8px;
    height: 8px;
}

::-webkit-scrollbar-track {
    background: transparent;
}

::-webkit-scrollbar-thumb {
    background: var(--border-light);
    border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
    background: var(--text-secondary);
}

/* 响应式：窄屏折叠侧边栏 */
/* R211 批2（A-1/R211-C01）：原 ≤1366→右栏 300、≤1280→右栏 282（含 ≤1280 的 .sites-grid 3 列）
   两档整体删除（1119 现状显示 282 非有意保留，C01 站长裁定）；新档按 A-1 表落位：
   ≥1270 左 376/右 360（基段，值源 :root 与本文件 ≥1024 骨架块）／1120~1269 左 320/右 280／
   1024~1119 左 320/右栏隐藏（C02 口径：中栏＝视口−左−30 栏距−30 右留白槽）。<1024 现状不变（下档起）。 */
@media (min-width: 1120px) and (max-width: 1269px) {
    :root {
        --sidebar-width: 320px;
    }

    .right-sidebar {
        width: 280px;
    }

    .right-sidebar-inner {
        padding: 16px 10px;
        gap: 16px;
    }
}

@media (min-width: 1024px) and (max-width: 1119px) {
    :root {
        --sidebar-width: 320px;
    }

    .right-sidebar {
        display: none;
    }

    .main-content {
        /* C02：右栏留白槽 30——中栏外框＝视口−320−30−30 */
        margin-right: calc(var(--col-gap) + max(0px, (100% - var(--nh-shell-width)) / 2));
    }
}

@media (max-width: 1024px) {
    .right-sidebar {
        display: none;
    }

    .main-content {
        padding: 20px;
    }

    .sites-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 768px) {
    .sidebar {
        transform: translateX(-100%);
        transition: transform 0.3s ease;
    }

    .sidebar.open {
        transform: translateX(0);
    }

    .main-content {
        margin-left: 0;
        max-width: 100%;
        padding: 16px;
    }

    .search-section {
        position: relative;
        top: auto;
    }

    .resource-card-info {
        padding: 12px 14px 10px;
    }

    .sites-grid {
        grid-template-columns: repeat(2, 1fr);
    }

    .resource-card-desc {
        min-height: auto;
    }

    .resource-card-btn {
        margin: 0 14px 14px;
        padding: 10px 14px;
    }

    .resource-card {
        padding-bottom: 0;
    }

    .resource-card-actions {
        margin: 0 14px 14px;
    }

    .resource-card-actions .resource-card-btn {
        margin: 0;
    }
}

/* ===== 主页面包屑 + 单层预览区块（PC 端主页专用，阶段D 2026-09-04 重构）=====
   公共依赖提示：
   1) .preview-crumb 内 .nh-crumb-scroll/.nh-crumb-link/.nh-crumb-active/.nh-crumb-sep/
      .nh-crumb-more 等拼串字节已收敛至 crumb-renderer.js 公共组件（工单002 批3 T-8/T-18，
      pc.js renderPreviewCrumb / renderAclassCrumb 与 mobile.js renderMobileCrumb 仅委托调用，
      输出无空格字符；字节契约单一归属 crumb-renderer.js，夹具见 crumbRendererBatch3.test.js）；
      同族类名亦由 mobile.js 消费（mobile.css 对应区段数值独立维护）；
   2) .category-section.nh-preview-block/.nh-block-header/.nh-block-content/.nh-block-toggle/
      .nh-block-empty-tip/.nh-block-more 由 pc.js buildPreviewBlockSection 生成
      （阶段D 甲版式：根级 = 顶级分类块列表；选中层 = 仅该层单一块，无 .nh-block-children 嵌套）；
   3) 竖线分隔符左右外边距各 13px（margin 实现，禁止空格字符间距）；
   4) 单条层级名称最大宽度 250px，超长省略；仅「实际溢出」补 title 提示
      （constants.js applyCrumbOverflowTitles 共享判定，F-6）；
   5) .nh-more-btn.disabled 为空分类置灰禁用态（span 无 href，aria-disabled）；
   6) .nh-card-hidden/.nh-remain-tip 为行数截断样式（applyPreviewGridLimits 消费，勿删）。
   修改本规则前须同步比对 crumb-renderer.js/constants.js 渲染与 crumbRendererBatch3.test.js 字节夹具。 */
.category-section.nh-preview-block.collapsed .nh-block-content { display: none; }
.category-section.nh-preview-block.collapsed .nh-block-header .nh-block-toggle svg { transform: rotate(-90deg); }

.nh-block-content { min-width: 0; }

/* 「更多内容…」按钮通用样式：区块头右侧（margin-left:auto）与面包屑行最右共用 */
.nh-more-btn {
    flex: none;
    padding: 5px 12px;
    border-radius: var(--radius-md);
    border: 1px solid var(--border-light);
    background: var(--bg-card);
    color: var(--primary);
    font-size: 13px;
    font-weight: 500;
    text-decoration: none;
    transition: border-color 0.15s ease, background-color 0.15s ease;
}
.nh-more-btn:hover { border-color: var(--primary-light); background: rgba(99, 102, 241, 0.06); }
.nh-block-more { margin-left: auto; }
.nh-more-btn.disabled,
.nh-more-btn.disabled:hover {
    color: var(--text-muted, #94a3b8);
    background: var(--bg-card);
    border-color: var(--border-light);
    cursor: not-allowed;
    pointer-events: none;
    opacity: 0.6;
    text-decoration: none;
}

/* 空分类强制展开后的空态提示（卡片展示区水平居中，S-5） */
.nh-block-empty-tip {
    margin: 0;
    padding: 22px 16px;
    text-align: center;
    color: var(--text-secondary);
    font-size: 14px;
    background: var(--bg-card);
    border: 1px dashed var(--border-light);
    border-radius: var(--radius-lg);
}

.nh-card-hidden { display: none; }
.nh-remain-tip { margin: 12px 0 0; font-size: 13px; color: var(--text-secondary); text-align: right; }
.nh-remain-tip a.nh-more-inline { color: var(--primary); font-weight: 500; text-decoration: underline; text-underline-offset: 3px; }

/* F-1：crumb 与「更多内容…」按钮同行且按钮 fixed-right（外层 flex + 滚动区 flex:1/min-width:0） */
.preview-crumb {
    margin-top: 24px;
    max-width: var(--content-max-width);
    display: flex;
    align-items: center;
    min-width: 0;
}
.preview-crumb .nh-crumb-scroll {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    align-items: center;
    gap: 0;
    overflow-x: auto;
    scrollbar-width: thin;
    -webkit-overflow-scrolling: touch;
    padding: 4px 0;
    cursor: default;
}
/* PC 拖拽滚动过程态（需求 5：拖拽时禁止文本选中/抓取光标） */
.preview-crumb .nh-crumb-scroll.nh-crumb-dragging,
.preview-crumb .nh-crumb-scroll.nh-crumb-dragging * {
    cursor: grabbing;
    user-select: none;
}
/* 单条层级名称：上限 250px 超长省略；装饰条以 ::after 呈现且宽度 = 文字宽度（inline-block 收缩到内容宽） */
.preview-crumb .nh-crumb-link {
    display: inline-block;
    flex: none;
    max-width: 250px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    padding: 6px 0;
    color: var(--text-secondary);
    text-decoration: none;
    font-size: 14px;
    line-height: 1.4;
    position: relative;
    transition: color 0.15s ease;
}
.preview-crumb .nh-crumb-link::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 2px;
    border-radius: 2px;
    background: var(--primary);
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform 0.2s ease, filter 0.15s ease;
}
.preview-crumb .nh-crumb-link:hover { color: var(--primary); }
.preview-crumb .nh-crumb-link:hover::after { transform: scaleX(1); }
/* 当前选中层：加粗 + 主题色 + 文字宽度等宽常驻装饰条（无下划线横跨整行） */
.preview-crumb .nh-crumb-link.nh-crumb-active {
    color: var(--primary);
    font-weight: 700;
    cursor: default;
}
.preview-crumb .nh-crumb-link.nh-crumb-active::after { transform: scaleX(1); }
/* 选中层悬停：常驻装饰条颜色加深（需求 4） */
.preview-crumb .nh-crumb-link.nh-crumb-active:hover::after { filter: brightness(0.8); }
/* 竖线分隔符：左右外边距各 13px、不可点击（需求 2/5） */
.preview-crumb .nh-crumb-sep {
    flex: none;
    margin: 0 13px;
    color: var(--text-secondary);
    font-size: 13px;
    line-height: 1;
    opacity: 0.5;
    user-select: none;
    pointer-events: none;
}
.preview-crumb .nh-more-btn {
    margin-left: 12px;
}
.category-tree-row a.preview-start-bold { color: var(--primary); font-weight: 700; }

/* ===== 工单002 批2 A 类三组（PC 新布局）样式 =====
   公共依赖提示：
   1) .preview-crumb.preview-crumb-a 由 pc.js renderAclassCrumb 添加（service 旧面包屑行不加此类，
      250px 旧上限/无三角/无计数规则保持不变；180px 单名上限仅作用于 A 类容器，P-8 规格）；
   2) .nh-crumb-toggle/.nh-crumb-arrow 由 renderAclassCrumb 生成（CSS border 三角、零字符；
      收起态 .collapsed 右向），aria-expanded/aria-label 由 applyAclassCollapseUi 同步；
   3) .nh-crumb-count 计数位由 renderAclassCrumb 生成（Q8：位于链路/快捷链末尾之后，margin-left
      44px = 40-50px 规格中值；计数随链路同处 .nh-crumb-scroll 滚动区内）；
   4) .nh-crumb-grey 快捷链/祖先链灰节点（Q1/Q2：直属0/后代有→置灰禁点，span 无 href）；
   5) .cards-container.preview-collapsed 由 applyAclassCollapseUi 切换（工单 2.3：收起的是卡片区，
      面包屑行保留，下方内容正常回流上移）。
   删除或修改前须比对 pc.js renderAclassCrumb/renderAclassRootAll/renderAclassSingleLevel/
   applyAclassCollapseUi 渲染。 */
.cards-container.preview-collapsed { display: none; }
.preview-crumb.preview-crumb-a .nh-crumb-toggle {
    flex: none;
    margin-right: 16px;
    padding: 8px;
    border: none;
    background: transparent;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.preview-crumb.preview-crumb-a .nh-crumb-toggle:hover .nh-crumb-arrow { opacity: 0.75; }
/* 三角按钮：CSS border 绘制、零字符（工单 2.2.1；展开=向下、收起=向右） */
.preview-crumb.preview-crumb-a .nh-crumb-arrow {
    width: 0;
    height: 0;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    border-top: 6px solid var(--primary);
}
.preview-crumb.preview-crumb-a .nh-crumb-arrow.collapsed {
    border-top: 4px solid transparent;
    border-bottom: 4px solid transparent;
    border-right: 0;
    border-left: 7px solid var(--primary);
}
/* 计数位：Q8 —— 位于（快捷）链路末项之后、间距 40-50px（取 44px 中值）；随链路横向滚动 */
.preview-crumb.preview-crumb-a .nh-crumb-count {
    flex: none;
    margin-left: 44px;
    color: var(--text-secondary);
    font-size: 14px;
    white-space: nowrap;
}
/* A 类单名上限 180px（P-8 规格修正，覆盖基础 250px；仅作用于 A 类 crumb） */
.preview-crumb.preview-crumb-a .nh-crumb-link { max-width: 180px; }
/* 灰节点（Q1/Q2）：置灰、禁点（span 无 href；pointer-events 兜底） */
.preview-crumb.preview-crumb-a .nh-crumb-link.nh-crumb-grey {
    color: var(--text-muted, #94a3b8);
    cursor: default;
    pointer-events: none;
}



/* P2-04：主页区块分页控件（仅目标三组 V3 管线渲染；service 不进入本管线） */
.nh-home-pager {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: 6px;
    margin: 20px 0 0;
    padding: 12px;
    background: var(--bg-card);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-lg);
}
.nh-home-pager .nh-page-btn {
    min-width: 36px;
    height: 36px;
    padding: 0 10px;
    border-radius: var(--radius-md);
    border: 1px solid var(--border-light);
    background: var(--bg-card);
    color: var(--text-primary, #0f172a);
    font-size: 13px;
    line-height: 1;
    cursor: pointer;
    transition: border-color 0.15s ease, background-color 0.15s ease;
}
.nh-home-pager .nh-page-btn:hover:not(:disabled):not(.active) { border-color: var(--primary-light); background: rgba(99, 102, 241, 0.06); }
.nh-home-pager .nh-page-btn.active {
    background: var(--primary);
    border-color: var(--primary);
    color: #fff;
    cursor: default;
}
.nh-home-pager .nh-page-btn:disabled {
    color: var(--text-muted, #94a3b8);
    opacity: 0.6;
    cursor: not-allowed;
}
.nh-home-pager .nh-page-ellipsis {
    color: var(--text-secondary);
    padding: 0 2px;
    user-select: none;
}


/* ===== WO-025-POST-2（P1-1）反馈图标实色对比度收口（决策口径 2026-09-09）=====
   亮色主题图标实色 #334155；暗色主题 #e2e8f0；:active 白（既有规则保留）；
   svg 提升至 ::before 视觉圆底之上（position:relative + z-index），防半透明层罩色。 */
.site-report-btn {
    color: #334155;
}
.site-report-btn svg {
    position: relative;
    z-index: 1;
}
.article-card-home {
    position: relative;
}
.article-card-home:hover .site-report-btn,
.article-card-home:focus-within .site-report-btn {
    opacity: 1;
    visibility: visible;
}
@media (hover: none) {
    .article-card-home .site-report-btn {
        opacity: 1;
        visibility: visible;
    }
}
body[data-theme="dark"] .site-report-btn,
body.theme-dark .site-report-btn {
    color: #e2e8f0;
}
/* ===== WO-025-POST-2（R26 fp批 S7）：A5 底部跨组曝光卡（NHShell.BottomCards 共享组件消费面）=====
   消费页：full-preview/group-full（fp/gf 批）、后续详情三页与 pc service 收口批复用本区块；
   DOM/类名由 public/js/site-shell.js BottomCards 单一实现构造，禁止页面再造副本样式类；
   视觉基准沿用本文件既有主题变量，不新增独立违和样式（新增类 nh-bc-* 2026-09-10 盘点无重名）。 */
.nh-bc-section {
    margin-top: 34px;
}
.nh-bc-section + .nh-bc-section {
    margin-top: 26px;
}
.nh-bc-title {
    margin: 0 0 14px;
    font-size: 17px;
    font-weight: 700;
    color: var(--text-primary, #333);
}
.nh-bc-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 14px;
}
.nh-bc-card {
    display: flex;
    flex-direction: column;
    min-width: 0;
    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, 0.04));
    transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}
/* 批7：互推卡整卡点击经 NHShell.CardHit 委托；仅含可导航锚点的卡显示手指。 */
.nh-bc-card:has(a[href]) { cursor: pointer; }
.nh-bc-media {
    position: relative;
    line-height: 0;
    background: #eef0f6;
}
.nh-bc-cover {
    width: 100%;
    aspect-ratio: 16 / 9;
    object-fit: cover;
    display: block;
    transition: transform 0.3s ease;
    background: #eef0f6;
}
.nh-bc-media.no-image {
    background: #eef0f6;
}
/* R95（P15 / 站长裁决 D2①）：A5 跨组曝光卡反馈入口回归「卡片图片左下角 + 默认隐藏、悬停卡片显示」口径
   （定位仍由 pc.css:1396 公共基类 left:6px; bottom:4px 承载，即图片左下角）。
   触摸端无悬停能力，经 @media (hover: none) 保持恒显（沿用 .resource-card 既有范式），
   既有触摸端可得性零回归；无封面卡的兜底位 .nh-bc-actions（非图片角）维持恒显。 */
.nh-bc-card:hover .nh-bc-media .site-report-btn,
.nh-bc-card:focus-within .nh-bc-media .site-report-btn {
    opacity: 1;
    visibility: visible;
}
@media (hover: none) {
    .nh-bc-media .site-report-btn {
        opacity: 1;
        visibility: visible;
    }
}
/* R211 批6（工单 3.2a · ④ 互推模块）：.nh-bc-card 补 43 四项 hover，基线＝pc.css .resource-card
   逐项同值（1530 过渡 / 1536-1540 位移·阴影·边框 / 1558 封面过渡 / 1561-1563 封面 scale(1.03)）。
   门型与 .article-card-home（批4 挂账①，pc.css:1936）同构：四项悬停面整体入门，PC 指针设备逐项同值，
   触摸端零悬停（门外不留悬停声明，无重复面）。 */
@media (hover: hover) {
    .nh-bc-card:has(a[href]):hover {
        transform: translateY(-3px);
        box-shadow: var(--shadow-lg);
        border-color: var(--primary-light);
    }
    .nh-bc-card:has(a[href]):hover .nh-bc-cover {
        transform: scale(1.03);
    }
}

.nh-bc-actions {
    display: flex;
    justify-content: flex-end;
    padding: 6px 8px 0;
}
.nh-bc-actions .site-report-btn {
    /* 保持 flex 行内布局的同时建立定位包含块，避免 ::before(inset:2px) 锚到视口形成全屏椭圆 */
    position: relative;
    opacity: 1;
    visibility: visible;
}
.nh-bc-hit {
    position: absolute;
    inset: 0;
    z-index: 1;
    display: block;
}
.nh-bc-body {
    padding: 10px 12px 12px;
}
.nh-bc-name {
    margin: 0;
    font-size: 14px;
    line-height: 1.5;
    color: var(--text-primary, #333);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    word-break: break-word;
}
.nh-bc-name-link {
    color: inherit;
    text-decoration: none;
}
.nh-bc-name-link:hover {
    color: var(--primary, #6c5ce7);
}
/* R103-6①（P38b/c·站长定版 2026-09-15）：底部跨组卡片日期全隐（site-shell.js .nh-bc-time 唯一出口；
   DOM 保留、零 JS；本条覆盖所有加载 pc.css 的页面＝GF/FP/主页/标签页底部模块与右栏同口径）。 */
.nh-bc-time {
    margin: 6px 0 0;
    font-size: 12px;
    color: var(--text-secondary, #999);
    display: none;
}
/* [S7 修订] 底部卡断点＝1200→3 列/900→2 列/560→1 列（full-preview.css .fp-new-card-grid 旧口径）。
   R211 批2（A-3）起卡片流列数改按内容区实测宽运行时计算（≥1024；<1024 维持 ≤1023/≤900/≤768 CSS 阶梯），
   本节视口阶梯未在 A-3 替换清单内 ⇒ 行为零改动（保留）；两侧在 ≥1024 档不再逐值同频（原「同频防视觉断层」
   契约的重新对齐属批6 互推卡范围，已登记挂账，本批不改行为仅同步注释）。560 单列保留（竖屏手机对齐）。 */
@media (max-width: 1200px) {
    .nh-bc-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}
@media (max-width: 900px) {
    .nh-bc-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}
@media (max-width: 560px) {
    .nh-bc-grid {
        grid-template-columns: 1fr;
    }
}

/* R211 批2（A-1/2.4）：原 ≥2150 覆写块（固定壳 2169 居中＋中栏定宽 1458＋卡容器封顶 1394＋
   2150–2176 边界带内衬 18）随本批整体废除——大屏不再设固定壳，三栏整体居中改由本文件 ≥1024 骨架块
   max(0px,(100%−壳宽)/2) 零偏移下限承担（壳宽＝左+栏距×2+中栏上限+右；2560 时天然 2250、两侧各约 155）；
   中栏上限统一 1454（--content-max-width）。原块内 ≤768 顶区重排落点见下方同名媒体块（R57 三契约，未动）。 */
@media (max-width: 768px) {
    .main-content { padding-top: 0; }
    .pc-top-bar { position: relative; display: flex; flex-direction: column; align-items: stretch; padding: 18px 25px 8px 25px; }
    .pc-top-bar .top-bar-actions { order: 1; display: flex; justify-content: center; align-items: flex-start; }
    .pc-top-bar .top-bar-actions .top-bar-btn { position: absolute; left: 12px; bottom: 6.5px; width: 22px; height: 22px; z-index: 1; } /* GF-1R10 B/C 修正（R58 二.1＋R58-S1 一）：垂直锚 bar 底部 6.5px＝与日期行文字垂直居中（跨宽度恒定）；left 12 相对 bar 左缘；z-index 1 保证命中可用 */
    .pc-top-bar .top-bar-links { gap: 12px; }
    .pc-top-bar .top-bar-date { order: 2; width: 100%; margin-top: 25px; padding-left: 19px; }
    .pc-top-bar .top-bar-date .top-bar-date-seg--weekday { margin-left: auto; }
}

/* P-01-R3（二.3）：service（常用网站）页桌面档标题 2 行截断（简介 .site-desc 基类已 2 行，本单不改）。
   作用域＝#cards-container（仅 pc.html 宿主）＋ [data-group="service"]（仅旧路径 service 网格带该属性）⇒ 零外溢：
   FP/GF/tags 页无 #cards-container；网盘/中医/文章页 data-group 非 service。
   媒体门 ≥1024 与写网格门（constants.js cardGridWriteGateOpen）同源；<1024 维持基类单行 nowrap（手机档零变化）。
   依从性前置（N5）：本规则以 display:-webkit-box 承载 2 行截断——若标题内出现块级子元素（如 .new-badge）会被
   块化独占一行、正文只剩 1 行；service 分组按 WO-018 由 groupAllowsNewBadge 规则性排除
   （site-shell.js:1722 / mobile.js:683），当前安全；若将来放开 service 角标，须先改本规则再放行。 */
@media (min-width: 1024px) {
    #cards-container .sites-grid[data-group="service"] .site-title {
        white-space: normal;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
        overflow: hidden;
    }
}
