/* ==========================================================================
   灵犀家谱网 · 自定义样式（基础占位）
   --------------------------------------------------------------------------
   Bootstrap 5 之上的补充样式；族谱树/图例/日期选择器修复在后续任务补充。
   ========================================================================== */

:root {
    --jp-primary: #0d6efd;
    --jp-sidebar-bg: #f8f9fa;
}

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
        "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
}

/* 卡片网格 */
.jp-card-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 1rem;
}

/* 成员头像 */
.jp-avatar {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    object-fit: cover;
    background: #e9ecef;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #6c757d;
    overflow: hidden;
}

/* 族谱树容器（T03 使用） */
.jp-tree-container {
    width: 100%;
    overflow: auto;
    background: #fff;
    border: 1px solid #dee2e6;
    border-radius: 0.5rem;
    position: relative;
}

/* 图例 */
.jp-tree-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    align-items: center;
    font-size: 0.875rem;
    color: #495057;
}

/* 日期选择器：防止点击回弹/关闭弹窗（配合 JS 兜底） */
input[type="date"].form-control {
    min-height: 38px;
}

/* 强制改密提示条 */
.jp-must-change-banner {
    background: #fff3cd;
    color: #664d03;
}

/* 通用工具类 */
.jp-text-truncate-2 {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ==========================================================================
   增量（20260904）：三谱分类 / 兄弟关系 / 已故标识样式
   ========================================================================== */

/* 谱类型徽标（家谱/族谱/宗谱） */
.jp-type-badge {
    display: inline-block;
    padding: 0.15rem 0.5rem;
    font-size: 0.75rem;
    border-radius: 0.375rem;
    background: rgba(0, 0, 0, 0.7);
    color: #fff;
}

/* 分类区块标题 */
.jp-type-heading {
    border-left: 4px solid var(--jp-primary);
    padding-left: 0.5rem;
}

/* 已故成员标识（列表/详情） */
.jp-deceased-badge {
    background: #6c757d;
}

/* 关系弹窗就地错误提示 */
#relationModalError {
    border-radius: 0.375rem;
}

/* 树图 warnings 提示条（配合 tree.js 内联样式） */
.tree-warnings {
    pointer-events: none;
}

/* ==========================================================================
   增量（20260907）：数据隔离与合并闭环
   ========================================================================== */

/* R5 左侧边栏三分区 */
.jp-sidebar {
    min-height: 100%;
}

/* docs/157：桌面端左栏滚动固定（sticky）——页面滚动时侧栏保持可见，方便随时切换；
   内容超出视口时侧栏内部滚动。移动端（<lg，offcanvas 抽屉）不受影响。 */
@media (min-width: 992px) {
    .jp-sidebar {
        position: sticky;
        top: 0;
        align-self: flex-start;   /* row 下取消 stretch 拉伸，sticky 才有滚动空间 */
        max-height: 100vh;
        overflow-y: auto;
        min-height: 0;
        scrollbar-width: thin;    /* 侧栏内滚动条细化，Firefox */
    }
    .jp-sidebar::-webkit-scrollbar {
        width: 6px;               /* 侧栏内滚动条细化，WebKit */
    }
    .jp-sidebar::-webkit-scrollbar-thumb {
        background: #c8ccd4;
        border-radius: 3px;
    }
}

.jp-sidebar-section {
    margin-bottom: 1.25rem;
}

.jp-sidebar-title {
    /* docs/146 §29（2026-10-25 用户需求）：分组标题（我的家族/家族管理/家族祭祀）
       字号放大到下属条目（.jp-sidebar .nav-link = 0.925rem）的 1.3 倍 ≈ 1.2rem */
    font-size: 1.2rem;
    font-weight: 600;
    color: #6c757d;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    padding: 0 1rem;
    margin-bottom: 0.25rem;
}

.jp-sidebar-section-active .jp-sidebar-title {
    color: var(--jp-primary);
}

.jp-sidebar .nav-link,
.jp-sidebar-offcanvas .nav-link {
    padding: 0.35rem 1rem;
    color: #212529;
    border-left: 3px solid transparent;
    font-size: 0.925rem;
}

.jp-sidebar-link:hover {
    background: rgba(13, 110, 253, 0.06);
}

.jp-sidebar-link.active {
    color: var(--jp-primary);
    font-weight: 600;
    border-left-color: var(--jp-primary);
    background: rgba(13, 110, 253, 0.08);
}

.jp-sidebar-disabled {
    cursor: not-allowed;
}

/* R4 谱主徽章 */
.jp-owner-badge {
    font-weight: 500;
    vertical-align: middle;
}

/* R3 冲突字段级 diff 高亮（table-warning 之外的轻量描边） */
.jp-conflict-pair {
    background: #fff;
}

.jp-diff-table {
    font-size: 0.875rem;
}

.jp-diff-table th,
.jp-diff-table td {
    padding: 0.3rem 0.5rem;
}

/* R6 只读存档标识 */
.jp-archived-banner {
    border-left: 4px solid #6c757d;
}

/* ==========================================================================
   增量（20260908）：合并申请体验与方向规则调整
   ========================================================================== */

/* R4 双树并排布局（申请页） */
.merge-dual-tree {
    display: flex;
    gap: 1rem;
}

.merge-dual-tree-side {
    flex: 1 1 0;
    min-width: 0;
}

.merge-tree-box {
    position: relative;
    width: 100%;
    height: 420px;
    overflow: hidden;
    background: #fafbfc;
    border: 1px solid #dee2e6;
    border-radius: 0.5rem;
    cursor: grab;
    user-select: none;
}

.merge-tree-box.dragging {
    cursor: grabbing;
}

.merge-tree-box svg {
    display: block;
    width: 100%;
    height: 100%;
}

/* R4 树节点选中高亮（select 模式，CSS 覆盖 SVG 呈现属性） */
.tree-node-selected rect {
    stroke: #f59f00;
    stroke-width: 3;
    filter: drop-shadow(0 0 3px rgba(245, 159, 0, 0.6));
}

/* R5 分类页签间距微调 */
.merge-cat-tabs .nav-link {
    padding: 0.4rem 0.8rem;
}

/* ==========================================================================
   日历日程 Modal（2026-10-01 缺陷修复）
   --------------------------------------------------------------------------
   Bootstrap 的 .modal-dialog-scrollable 只对「.modal-body 是 .modal-content
   的直接 flex 子元素」生效。本表单需要在 .modal-content 内包一层 <form>
   （保留 submit 语义与 CSRF），这层 form 会成为 flex 子元素，导致：
     · <form> 默认 display:block、无高度约束 → 高 1035px 溢出 content 712px
     · .modal-body 拿不到 flex:1 → overflow-y:auto 形同虚设（不产生滚动条）
     · .modal-footer（保存/取消）被顶到视口外，不可见不可点
   解法：让 form 成为「透明的」flex 列容器，把高度约束继续下传给 body。
   ========================================================================== */
.modal-dialog-scrollable .jp-modal-form {
    display: flex;
    flex-direction: column;
    overflow: hidden;          /* 兜底：禁止 form 自身撑高 */
    max-height: 100%;
    /* 占满 modal-content 内容区高度，与 Bootstrap 对 modal-content 的
       display:flex; flex-direction:column 保持一致 */
    flex: 1 1 auto;
    min-height: 0;
}

/* form 内部的 body 恢复滚动容器身份（Bootstrap 选择器因中间层失效，此处补回） */
.modal-dialog-scrollable .jp-modal-form > .modal-body {
    overflow-y: auto;
    flex: 1 1 auto;
    min-height: 0;
}

/* footer / header 在 form 内需保持不收缩（与 Bootstrap 原生行为一致） */
.modal-dialog-scrollable .jp-modal-form > .modal-footer,
.modal-dialog-scrollable .jp-modal-form > .modal-header {
    flex: 0 0 auto;
}

/* ==========================================================================
   docs/131 · 配偶并入谱的「标记」
   --------------------------------------------------------------------------
   语义：以「配偶身份并入」的谱，其成员在主谱（成员列表 / 家族树）**整行不渲染**，
   改由**引入该谱的配偶**携带一个标记；点击打开该谱的成员列表。
   色值 #b3296f 与家族树上的 chip（views/partials/tree_style.php 内 .tree-inlaw-chip）
   保持一致 —— 两处改色需同步，勿只改一处。
   ========================================================================== */
.jp-inlaw-mark {
    color: #b3296f;
    font-weight: 600;
}

.jp-inlaw-mark:hover {
    color: #8a1f55;
    text-decoration: underline;
}

/* ==========================================================================
   docs/132 · 侧栏三祠「分控制钮」（父项下的同型谱列表）
   --------------------------------------------------------------------------
   语义：用户名下有 ≥1 个同型谱时，「家祠 / 族祠 / 宗祠」父项下方常驻列出**每一个谱**
   （文案=谱名，链接=/family/{id}/shrine），用于在多个家谱（如 128 成员谱 + 25136 owner 谱）
   之间切换。**纯服务端渲染，不依赖任何 JS**（折叠会要求 JS，且默认看不到还有别的祠）。
   消费点唯一：views/layouts/sidebar.php（桌面 aside 与移动抽屉共用同一段渲染）。

   特异度说明（**勿随意改写选择器**）：
     基类 `.jp-sidebar .nav-link`(0,2,0) 与 `.jp-sidebar-link.active`(0,2,0) 定义在文件上方，
     本块若用同特异度选择器可覆盖（靠书写顺序），但 `:not(.active)` / `.active` 显式分治
     可保证**不依赖文件内顺序**、也不误伤其它区块的同名类。改动前先读这段。
   ========================================================================== */
.jp-sidebar-sublist {
    margin: 0.15rem 0 0.35rem 1rem;
    padding-left: 0.5rem;
    border-left: 1px solid #dee2e6;
}

.jp-sidebar-sublist .nav-link {
    padding: 0.25rem 0.5rem;
    font-size: 0.85rem;
    line-height: 1.35;
    /* 子列表已有左侧竖线，条目自身不再重复 3px 竖条 */
    border-left: 3px solid transparent;
}

/* 未选中：比父项弱的灰（显式 :not(.active) 分治，避免覆盖选中态色值） */
.jp-sidebar-sublist .jp-sidebar-link:not(.active) {
    color: #495057;
}

/* 选中：与父项同色同权重，指示"当前正在这个谱的祠里" */
.jp-sidebar-sublist .jp-sidebar-link.active {
    color: var(--jp-primary);
    font-weight: 600;
    border-left-color: var(--jp-primary);
    background: rgba(13, 110, 253, 0.08);
}

/* ============================================================
   家族日历 · 必应万年历式月历网格 + 紧凑黄历条（docs/137，2026-10-14）
   仅展示样式：所有历法值仍由 CalendarService/HuangliCalculator 装配
   ============================================================ */
/* 变量同时挂在月历网格与黄历条上（#dayHuangli 在 .jp-calgrid 外，2026-10-14 修复作用域） */
.jp-calgrid,
.jp-hl { --jp-cal-red: #d93025; --jp-cal-green: #188038; }
.jp-grid-head,
.jp-grid-body { display: grid; grid-template-columns: repeat(7, 1fr); }
.jp-grid-head { border-bottom: 1px solid #e9ecef; margin-bottom: 4px; }
/* 2026-11-04 用户裁定（四轮）：月历字体再小一号（27→24→21 / 18→16→14 / 16→14→13），保持加粗 */
.jp-grid-hd { text-align: center; padding: 6px 0; font-size: 13px; color: #5f6368; font-weight: 700; }
.jp-grid-hd.jp-weekend { color: var(--jp-cal-red); }
.jp-cell {
  min-height: 76px; padding: 6px 6px 4px; border-top: 1px solid #f1f3f4;
  border-left: 1px solid #f1f3f4; cursor: pointer; border-radius: 6px;
  transition: background-color .12s ease;
}
.jp-grid-body .jp-cell:nth-child(7n + 1) { border-left: 0; }
.jp-cell:hover { background: #f8f9fa; }
.jp-cell.jp-out .jp-daynum,
.jp-cell.jp-out .jp-lunar { color: #b7bcc2; }
.jp-cell.jp-weekend .jp-daynum { color: var(--jp-cal-red); }
.jp-cell-top { line-height: 1; }
.jp-daynum { display: inline-block; font-size: 21px; font-weight: 700; color: #202124;
  min-width: 30px; padding: 3px 0; text-align: center; border-radius: 6px; }
.jp-cell.jp-today .jp-daynum { background: var(--jp-cal-red); color: #fff; }
.jp-cell.jp-selected { background: #e8f0fe; box-shadow: inset 0 0 0 1px #c6dafc; }
.jp-lunar { font-size: 14px; font-weight: 700; color: #5f6368; margin-top: 3px; line-height: 1.3;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jp-lunar.jp-term { color: var(--jp-cal-green); font-weight: 600; }
.jp-lunar.jp-lunar-month { color: #202124; font-weight: 600; }
.jp-cell .jp-mark { font-size: 10px; padding: 1px 5px; margin: 2px 2px 0 0;
  max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; display: inline-block; vertical-align: bottom; }

/* 紧凑黄历条（#dayHuangli 内，JS huangliBar 渲染） */
.jp-hl { display: flex; gap: 18px; align-items: flex-start; flex-wrap: wrap; }
.jp-hl-daybox { flex: 0 0 auto; }
.jp-hl-day { font-size: 40px; font-weight: 700; line-height: 1; color: var(--jp-cal-red); }
.jp-hl-mid { flex: 0 0 auto; min-width: 210px; }
.jp-hl-solar { font-size: 16px; font-weight: 700; color: #202124; }
.jp-hl-lunar { font-size: 13px; color: #5f6368; margin-top: 2px; }
.jp-hl-suici { font-size: 12px; color: #80868b; margin-top: 2px; }
.jp-hl-right { flex: 1 1 260px; min-width: 240px; }
.jp-hl-row { display: flex; align-items: flex-start; gap: 6px; margin-bottom: 4px; }
.jp-hl-tag { flex: 0 0 auto; display: inline-block; width: 22px; height: 22px; line-height: 22px;
  text-align: center; border-radius: 4px; color: #fff; font-size: 13px; font-weight: 600; }
.jp-hl-tag.jp-hl-yi { background: var(--jp-cal-green); }
.jp-hl-tag.jp-hl-ji { background: var(--jp-cal-red); }
.jp-hl-items { display: inline; line-height: 22px; }
.jp-chip-ok, .jp-chip-no { display: inline-block; font-size: 12px; line-height: 20px;
  padding: 0 6px; margin: 0 6px 2px 0; border-radius: 4px; }
.jp-chip-ok { color: var(--jp-cal-green); background: rgba(24, 128, 56, 0.08); }
.jp-chip-no { color: var(--jp-cal-red); background: rgba(217, 48, 37, 0.08); }
.jp-hl-meta { display: flex; gap: 16px; flex-wrap: wrap; font-size: 12px; color: #5f6368; margin-top: 4px; }

@media (max-width: 575.98px) {
  .jp-cell { min-height: 64px; padding: 3px; }
  .jp-daynum { font-size: 17px; min-width: 26px; }
  .jp-lunar { font-size: 13px; }
  .jp-hl-day { font-size: 30px; }
}

/* 黄历卡常驻日期（2026-11-04 用户三轮裁定：28px 黑体 + 绿色字，标签移至其下；
   注意 .jp-calgreen 变量作用域在 .jp-calgrid 内，此处不在其树 ⇒ 硬编码同色值） */
.jp-hl-date { font-size: 28px; font-weight: 700; color: #188038; line-height: 1.2; }

/* ==========================================================================
   合作栏目 · 自营动态广告（纯 CSS 动效；首页 Banner 位实景示意 + 卡片迷你预览）
   ========================================================================== */
.ad-promo {
    position: relative;
    overflow: hidden;
    border-radius: 12px;
    min-height: 150px;
    color: #fff;
    box-shadow: 0 4px 16px rgba(30, 40, 60, .18);
}
.ad-promo__bg {
    position: absolute;
    inset: 0;
    background: linear-gradient(120deg, #1b2a4a 0%, #27408b 35%, #8a6d2f 70%, #c9a24b 100%);
    background-size: 220% 220%;
    animation: adPromoFlow 14s ease-in-out infinite;
}
.ad-promo--jade .ad-promo__bg { background-image: linear-gradient(120deg, #14352c 0%, #1f5c4a 40%, #3f8f6f 75%, #7fc9a6 100%); }
.ad-promo--violet .ad-promo__bg { background-image: linear-gradient(120deg, #2a1b4a 0%, #44318b 40%, #6f5bc9 75%, #b3a2e8 100%); }
.ad-promo--slate .ad-promo__bg { background-image: linear-gradient(120deg, #232830 0%, #3a4454 40%, #5c6b84 75%, #9fb0c9 100%); }
@keyframes adPromoFlow {
    0% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}
.ad-promo__body {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 24px;
    padding: 26px 30px;
}
.ad-promo__brand {
    font-size: 26px;
    font-weight: 700;
    letter-spacing: 2px;
    white-space: nowrap;
    text-shadow: 0 2px 8px rgba(0, 0, 0, .35);
}
.ad-promo__slogans {
    position: relative;
    flex: 1;
    min-height: 34px;
}
.ad-promo__slogan {
    position: absolute;
    left: 0;
    top: 0;
    font-size: 19px;
    letter-spacing: 1px;
    opacity: 0;
    animation: adSloganCycle 18s ease-in-out infinite;
    text-shadow: 0 2px 6px rgba(0, 0, 0, .35);
}
@keyframes adSloganCycle {
    0%, 4% { opacity: 0; transform: translateY(10px); }
    8%, 28% { opacity: 1; transform: translateY(0); }
    33%, 100% { opacity: 0; transform: translateY(-10px); }
}
.ad-promo__cta {
    flex-shrink: 0;
    padding: 9px 22px;
    border: 1px solid rgba(255, 255, 255, .75);
    border-radius: 999px;
    color: #fff;
    text-decoration: none;
    white-space: nowrap;
    transition: background .2s, color .2s;
}
.ad-promo__cta:hover { background: rgba(255, 255, 255, .92); color: #27408b; }
.ad-promo__badge {
    position: absolute;
    z-index: 1;
    top: 0;
    right: 0;
    padding: 4px 12px;
    font-size: 12px;
    background: rgba(0, 0, 0, .45);
    border-radius: 0 12px 0 10px;
}
.ad-promo__badge-link { color: #ffd97a; text-decoration: none; margin-left: 6px; }
.ad-promo__badge-link:hover { text-decoration: underline; color: #ffe7a8; }
/* 付费素材交付位（docs/155 竞价中标广告上线渲染） */
.ad-delivery {
    position: relative;
    border-radius: 12px;
    overflow: hidden;
    background: #f4f0e6;
}
.ad-delivery__img {
    display: block;
    width: 100%;
    max-height: 220px;
    object-fit: cover;
}
.ad-delivery .ad-promo__badge {
    border-radius: 0 12px 0 10px;
}
@media (max-width: 768px) {
    .ad-delivery__img { max-height: 140px; }
}
@media (max-width: 768px) {
    .ad-promo__body { flex-direction: column; align-items: flex-start; gap: 10px; padding: 18px; }
    .ad-promo__brand { font-size: 20px; }
    .ad-promo__slogans { width: 100%; min-height: 30px; }
    .ad-promo__slogan { font-size: 15px; }
}
/* 卡片迷你预览条（合作页广告位卡片） */
.ad-mini {
    position: relative;
    height: 46px;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
}
.ad-mini__shine {
    position: absolute;
    inset: 0;
    background: linear-gradient(120deg, #1b2a4a 0%, #27408b 35%, #8a6d2f 70%, #c9a24b 100%);
    background-size: 220% 220%;
    animation: adPromoFlow 14s ease-in-out infinite;
}
.ad-mini--jade .ad-mini__shine { background-image: linear-gradient(120deg, #14352c 0%, #1f5c4a 40%, #3f8f6f 75%, #7fc9a6 100%); }
.ad-mini--violet .ad-mini__shine { background-image: linear-gradient(120deg, #2a1b4a 0%, #44318b 40%, #6f5bc9 75%, #b3a2e8 100%); }
.ad-mini--slate .ad-mini__shine { background-image: linear-gradient(120deg, #232830 0%, #3a4454 40%, #5c6b84 75%, #9fb0c9 100%); }
.ad-mini__label {
    position: relative;
    z-index: 1;
    font-size: 12px;
    letter-spacing: 3px;
    color: rgba(255, 255, 255, .9);
    text-shadow: 0 1px 4px rgba(0, 0, 0, .4);
}

/* =========================================================
   广告位「实际位置示意」弹层线框（cooperation 页 slotmap）
   纯 CSS 页面骨架示意：hot 块金色高亮 + 脉冲，标识广告位真实所在区域
   ========================================================= */
.slotmap {
    display: flex;
    flex-direction: column;
    gap: 8px;
    border: 1px solid #dee2e6;
    border-radius: 10px;
    padding: 14px;
    background: #f8f9fa;
}
.slotmap__block {
    position: relative;
    border-radius: 6px;
    padding: 10px 12px;
    font-size: 12px;
    color: #6c757d;
    background: #fff;
    border: 1px dashed #ced4da;
    text-align: center;
}
.slotmap__block--nav {
    background: #212529;
    color: #adb5bd;
    border: none;
    padding: 7px 12px;
}
.slotmap__block--head {
    background: linear-gradient(135deg, #e9ecef, #f8f9fa);
    padding: 18px 12px;
    color: #495057;
}
.slotmap__block--section {
    padding: 16px 12px;
}
.slotmap__block--footer {
    background: #343a40;
    color: #adb5bd;
    border: none;
    padding: 7px 12px;
}
.slotmap__block--hot {
    background: linear-gradient(135deg, #fff8e1, #ffecb3);
    border: 2px solid #f0a500;
    color: #7a5200;
    font-weight: 700;
    padding: 20px 12px;
    animation: slotHotPulse 1.6s ease-in-out infinite;
}
.slotmap__block--hot::after {
    content: "广告位";
    position: absolute;
    top: -10px;
    left: 10px;
    background: #f0a500;
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    padding: 1px 8px;
    border-radius: 10px;
}
@keyframes slotHotPulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(240, 165, 0, 0.45); }
    50% { box-shadow: 0 0 0 8px rgba(240, 165, 0, 0); }
}
.slotmap-legend-dot {
    display: inline-block;
    width: 12px;
    height: 12px;
    border-radius: 3px;
    background: linear-gradient(135deg, #fff8e1, #ffecb3);
    border: 2px solid #f0a500;
    vertical-align: -2px;
    margin-right: 4px;
}

/* =========================================================
   出版订单进度时间线（docs/154；用户侧/admin 侧共用 partial）
   ========================================================= */
.publish-timeline {
    --tl-line: #dee2e6;
    --tl-done: #198754;
    --tl-current: #0d6efd;
    display: flex;
    flex-direction: column;
    gap: 0;
}
.publish-timeline__node {
    position: relative;
    display: flex;
    align-items: center;
    padding: 6px 0 6px 26px;
}
.publish-timeline__node:not(:last-child)::before {
    content: "";
    position: absolute;
    left: 8px;
    top: 22px;
    bottom: -8px;
    width: 2px;
    background: var(--tl-line);
}
.publish-timeline__node--done:not(:last-child)::before {
    background: var(--tl-done);
}
.publish-timeline__dot {
    position: absolute;
    left: 2px;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: #fff;
    border: 2px solid var(--tl-line);
    box-sizing: border-box;
}
.publish-timeline__node--done .publish-timeline__dot {
    background: var(--tl-done);
    border-color: var(--tl-done);
    box-shadow: inset 0 0 0 3px #fff;
}
.publish-timeline__node--current .publish-timeline__dot {
    border-color: var(--tl-current);
    animation: tlCurrentPulse 1.6s ease-in-out infinite;
}
.publish-timeline__label {
    font-weight: 500;
}
.publish-timeline__node--done .publish-timeline__label {
    color: var(--tl-done);
}
.publish-timeline__node--current .publish-timeline__label {
    color: var(--tl-current);
    font-weight: 700;
}
@keyframes tlCurrentPulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(13, 110, 253, 0.35); }
    50% { box-shadow: 0 0 0 6px rgba(13, 110, 253, 0); }
}

/* 2026-11-06 用户需求：导航「AI 良缘」中 AI 两字斜体 + 黄色 + 放大突出 */
.jp-nav-ai {
    font-style: italic;
    color: #ffd43b;
    font-size: 1.15em;
    font-weight: 700;
    letter-spacing: 0.5px;
    margin-right: 1px;
}

/* AI 良缘自营宣传动画（站内通用展示位实景，2026-11-06） */
.ad-promo--marriage .ad-promo__bg {
    background-image: linear-gradient(120deg, #4a1230 0%, #8c1d54 40%, #c73f7f 75%, #ff9ec0 100%);
}
.ad-promo--marriage .ad-promo__cta:hover { color: #8c1d54; }
.ad-promo__hearts {
    position: absolute;
    inset: 0;
    z-index: 1;
    overflow: hidden;
    pointer-events: none;
}
.ad-promo__heart {
    position: absolute;
    bottom: -40px;
    font-size: 34px; /* 2026-11-06 用户需求：装饰放大一倍（原 17px），心/玫瑰交替 */
    color: rgba(255, 214, 232, .85);
    text-shadow: 0 1px 4px rgba(0, 0, 0, .25);
    opacity: 0;
    animation: adHeartFloat 9s linear infinite;
}
@keyframes adHeartFloat {
    0% { transform: translateY(0) scale(.8) rotate(-8deg); opacity: 0; }
    12% { opacity: .8; }
    85% { opacity: .35; }
    100% { transform: translateY(-190px) scale(1.15) rotate(10deg); opacity: 0; }
}
.ad-promo__brand-ai {
    font-style: italic;
    color: #ffd43b;
    letter-spacing: 0;
    margin-right: 2px;
}
