/*
 * 旧版主题样式的入口：按旧版 header.php / scripts/build-front-assets.mjs 的顺序把七份 CSS 合成一个文件。
 * 七份源文件在 src/assets/，是旧版 assets/ 的原样复制，一个字都不改；要改样式先问站长，改也是改那边的源文件再复制过来。
 * 构建时由 Vite 把 @import 合并、把 url() 里的文件换成带内容哈希的地址（不压缩，见 vite.config.ts 的 cssMinify）。
 */
* {
    box-sizing: border-box;
}

/* ==========================================================================
   设计令牌（Design Tokens）：全站样式的唯一取值来源
   - 基础令牌：字体 / 字号 / 字重 / 行高 / 圆角 / 图标 / 间距，只定义"有哪些值"
   - 组件令牌：标题 / 按钮 / 标签页 / 卡片 / 输入框 / 徽章，只引用基础令牌
   - 组件样式只写 var(--pd-…)，不要再写死 px / 字重 / 圆角
   - 颜色：浅色值在 :root，深色值在紧随其后的 body.theme-pd-dark，组件只引用 --pd-color-*
   - 不纳入令牌的：半透明叠加色、文字阴影、渐变、版块标签与药丸标签的分类色板
   ========================================================================== */
:root {
  --pd-workshop-led-cycle: 2.4s;
  --pd-workshop-blink-cycle: 4.8s;
  --pd-workshop-signal-cycle: 2.8s;
  --pd-workshop-led-green: #9fe85d;
  --pd-workshop-signal-blue: #52dafa;
  --pd-workshop-screen-dark: #041e2c;
  --pd-workshop-screen-light: #06324a;
  --pd-workshop-led-radius: 2.2px;
  --pd-workshop-led-halo-radius: 5px;
  --pd-workshop-line-width: 3px;
  --pd-workshop-signal-dashes: 6 22;
  --pd-workshop-cursor-cycle: 1.2s;
  --pd-workshop-soft-cycle: 3.6s;
  --pd-workshop-steam-travel: -12px;
  --pd-workshop-sound-travel: -5px;
  --pd-workshop-sparkle-color: #fff4ba;
  --pd-workshop-steam-color: #fffaf0;
    --pd-banner-weather-rain-width: 2px;
    --pd-banner-weather-rain-height: 24px;
    --pd-banner-weather-snow-size: 4px;
    --pd-banner-weather-margin: 36px;
    --pd-banner-umbrella-stroke: 3px;
    --pd-banner-umbrella-cycle: 2.6s;
    --pd-banner-umbrella-drip-travel: 96px;
    /* 首页对齐单位：帖子卡高 58px（头像 40 + 上下内边距 8 + 边框 2）、卡片间距 12px。右栏卡片高度取整数倍：n 倍 = n × 58 + (n - 1) × 12，由 assets/main.js 的 initHomeSidebarUnits 补齐 */
    --pd-home-card-h: 58px;
    --pd-home-card-gap: 12px;
    /* ---------- 基础：字体 ---------- */
    /* --pd-content-font / --pd-title-font 的取值在下方「标题 / 正文字体栈」，这里只做回退 */
    --pd-font-body: var(--pd-content-font, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif);
    --pd-font-title: var(--pd-title-font, var(--pd-font-body));
    --pd-font-mono: "Source Code Pro", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
    --pd-font-system: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Segoe UI", Arial, sans-serif;

    /* ---------- 基础：字号 ---------- */
    --pd-fs-3xs: 10px;  /* 帖子行元信息（用户名 · 浏览 · 评论 · 最新回复 · 时间 + 右侧版块标签） */
    --pd-fs-2xs: 11px;  /* 帖子行元信息（分类 · 作者 · 时间 · 最新回复） */
    --pd-fs-xs: 12px;   /* 辅助信息：时间、标签、徽章、面包屑、计数、页脚 */
    --pd-fs-nick: 13px; /* 主楼作者和回复者昵称 */
    --pd-fs-sm: 14px;   /* 正文、回复、列表标题、菜单、按钮、输入框 */
    --pd-fs-md: 16px;   /* 区块标题 */
    --pd-fs-lg: 20px;   /* 帖子 / 页面标题 */
    --pd-fs-xl: 24px;   /* 关于页、统计大数字 */
    --pd-fs-display: 32px; /* 注册成功页的 ID 号码 */
    /* 正文字号只有三档（[size=small|large]，core/format.php）：正常就是正文字号，不包标签 */
    --pd-content-fs-small: var(--pd-fs-xs);
    --pd-content-fs-large: var(--pd-fs-lg);

    /* ---------- 基础：字重（只有三档） ---------- */
    --pd-fw-light: 300;
    --pd-fw-regular: 400;
    --pd-fw-medium: 500;
    --pd-fw-semibold: 600;

    /* ---------- 基础：行高 ---------- */
    --pd-lh-tight: 1.25;
    --pd-lh-snug: 1.4;
    --pd-lh-normal: 1.5;
    --pd-lh-relaxed: 1.75;

    /* ---------- 基础：圆角（层级递增：徽章 < 控件 < 卡片 < 弹窗） ---------- */
    --pd-radius-xs: 4px;
    --pd-radius-sm: 6px;
    --pd-radius-md: 8px;
    --pd-radius-lg: 12px;
    --pd-radius-xl: 16px;
    --pd-radius-2xl: 20px;
    --pd-radius-pill: 999px;  /* 只给本身就是胶囊的元素：版块标签、表情条、工具栏、进度条 */
    --pd-radius-round: 50%;   /* 只给正圆：头像、圆形图标按钮、状态圆点、转圈 */

    /* ---------- 基础：图标 ---------- */
    --pd-icon-xs: 12px;
    --pd-icon-sm: 14px;
    --pd-icon-md: 16px;   /* 行内图标默认 */
    --pd-icon-lg: 20px;   /* 独立图标按钮 */
    --pd-icon-xl: 24px;
    --pd-env-icon-size: var(--pd-icon-sm);
    --pd-env-apple-scale: 1.3;
    --pd-env-apple-offset: calc(-1 * var(--pd-tab-indicator));
    --pd-ip-flag-width: var(--pd-ip-flag-height);
    --pd-ip-flag-height: 16px;
    --pd-ip-flag-radius: var(--pd-radius-round);
    --pd-moji-inline: 36px;     /* 帖子里的表情图高度（assets/moji） */
    --pd-moji-cell: 40px;       /* 表情选择器每格大小 */

    /* ---------- 基础：间距（4px 网格） ---------- */
    --pd-space-1: 8px;
    --pd-space-2: 12px;
    --pd-space-3: 16px;
    --pd-space-4: 24px;
    --pd-space-5: 32px;

    /* ---------- 基础：布局 ---------- */
    --pd-sidebar-width: 300px;    /* 首页、个人主页的右侧栏；主栏占其余宽度 */
    --pd-rail-btn-size: 40px;     /* 右侧圆形工具栏的按钮 */
    --pd-side-art: 96px;          /* 首页品牌卡插画 */
    --pd-help-guide-art-size: calc(var(--pd-side-art) * 2 + var(--pd-space-4));
    --pd-sidebar-art-height: calc(var(--pd-sidebar-width) * 2 / 3);
    --pd-sidebar-art-long-height: calc(var(--pd-sidebar-art-height) + var(--pd-space-5) * 2);
    --pd-sidebar-art-copy-width: 56%;
    --pd-sidebar-art-lotto-head: calc(var(--pd-space-5) * 3 + var(--pd-space-3));
    --pd-sidebar-art-blue: #0052D9;
    --pd-sidebar-art-telegram: #087E9D;
    --pd-sidebar-art-lottery: #FFF7E4;
    --pd-sidebar-art-lottery-ink: #71451C;
    --pd-sidebar-art-lottery-accent: #BE680A;
    /* 咸鱼彩票（assets/lottery.css）：和首页右栏彩票卡、横幅同一套暖色。奶油底、棕字、橙色按钮（白字 4.8:1），号码球红色，特等奖金色 */
    --pd-lotto-cream: #FFF7E4;
    --pd-lotto-cream-strong: #FCEBC8;
    --pd-lotto-cream-line: #F0DDB4;
    --pd-lotto-ink: #71451C;
    --pd-lotto-ink-muted: #8A5A2B;
    --pd-lotto-accent: #B4580A;
    --pd-lotto-accent-hover: #A24F09;
    --pd-lotto-accent-soft: #FDF0DC;
    --pd-lotto-on-accent: #FFFFFF;
    --pd-lotto-red: #C8372D;
    --pd-lotto-on-red: #FFFFFF;
    --pd-lotto-red-soft: #FDECEA;
    --pd-lotto-gold: #E9B000;
    --pd-lotto-gold-soft: #FFF4CC;
    --pd-lotto-on-gold: #6B3A00;
    --pd-lotto-backdrop: rgb(28 18 6 / 80%);
    --pd-sidebar-art-fg: #FFFFFF;
    --pd-sidebar-art-muted: #FFFFFFDB;
    --pd-sidebar-art-line: #FFFFFF6B;
    --pd-sidebar-art-digit: #FFFFFFBC;
    --pd-sidebar-art-digit-line: #DCA64744;
    --pd-board-art-size: 96px;
    --pd-board-art-size-sm: 80px;
    --pd-board-heading-w: calc(var(--pd-space-5) * 3);   /* 全部版块卡片：图标 + 版块名 + 今日新增的固定宽度（96px），让后面的「版主」竖着对齐 */
    --pd-side-avatar: 40px;       /* 首页右栏新成员头像（和帖子行头像一样大） */
    --pd-side-icon-art: 48px;     /* 首页右栏小插图（问问 Fish） */
    --pd-tab-indicator: 2px;      /* 下划线式标签的选中线、焦点框粗细 */
    --pd-online-dot: 12px;        /* 头像右下角在线绿点（含描边） */
    --pd-online-ring: 2px;        /* 绿点外圈描边，和背景隔开 */
    --pd-ucard-width: 280px;      /* 昵称悬浮名片的宽度（手机上再收窄到屏幕内） */
    --pd-ucard-avatar: 56px;      /* 名片里的头像 */
    --pd-thread-avatar-size: 56px;
    --pd-thread-avatar-size-sm: 44px;
    --pd-z-popover: 1100;         /* 悬浮名片：盖过帖子内容和下拉菜单，低于各种弹窗遮罩（1120 起） */
    --pd-page-gutter: var(--pd-space-4);
    --pd-page-spacing: var(--pd-space-4);
    --pd-page-max-width: 1200px;
    --pd-page-edge-gap: 22px;
    --pd-auth-max-width: 480px;
    --pd-auth-card-width: 440px;    /* 登录 / 注册 / 找回密码的单栏卡片 */
    --pd-auth-field-h: 44px;        /* 卡片里的输入框、人机验证框和按钮同高 */
    --pd-auth-emblem: 64px;         /* 卡片上沿的鱼头圆标 */
    --pd-auth-icon-btn: 48px;       /* 卡片底部第三方登录的圆形图标按钮 */
    --pd-auth-overlap: 96px;        /* 卡片往上压进横幅的高度（手机取 2/3） */
    --pd-account-menu-width: 240px;
    --pd-account-avatar-size: 32px;
    --pd-account-unread-size: 18px;
    --pd-youtube-min-height: 200px;
    --pd-youtube-aspect-ratio: 16 / 9;
    --pd-account-summary-avatar: 40px;
    --pd-navbar-tool-size: 40px;
    --pd-navbar-search-border-width: 1px;
    --pd-navbar-item-width: 75px;   /* 菜单栏每格：首页 + 15 个版块 = 16 格 × 75px 正好铺满 1200px 白框 */
    --pd-navbar-height: 47px;       /* 菜单项高（上下内边距 13px + 行高 21px），菜单栏最右的头像格子按它做正方形 */
    --pd-pm-avatar-size: 44px;
    --pd-pm-min-height: 480px;
    --pd-pm-height: 1080px;
    --pd-pm-page-offset: 360px;        /* 私信聊天区 = 屏幕高度减去横幅（约 240）、上下边距和底部空隙，窗口高时一直拉到 --pd-pm-height */
    --pd-pm-compose-max: 128px;        /* 私信输入框随内容长高的上限，约 5 行 */
    --pd-pay-card-w: 240px;            /* 私信里的转账 / 红包卡片 */
    --pd-pay-dialog-w: 400px;          /* 转账金额、支付密码面板 */
    --pd-pay-envelope-w: 320px;        /* 拆红包 */
    --pd-pay-envelope-h: 420px;
    --pd-payment-dialog-w: 360px;      /* 微信支付扫码弹窗（assets/payment.js） */
    --pd-payment-qr: 200px;            /* 弹窗里的付款二维码 */
    --pd-pay-open-size: 80px;          /* 红包上的「開」 */
    --pd-pm-dot-size: 12px;            /* 私信：好友在线的绿点 */
    --pd-pm-sticker-size: 72px;        /* 私信：只发一两个表情时的大小 */
    --pd-pm-emoji-w: 336px;            /* 私信：表情面板 */
    --pd-pm-emoji-h: 232px;
    --pd-pm-emoji-cell: 44px;
    --pd-pm-msg-avatar: 40px;          /* 私信聊天里的头像（圆角方形，像微信） */
    --pd-pm-tail: 6px;                 /* 气泡的小尖角 */
    --pd-pm-bubble-mine: #95ec69;      /* 自己的气泡（微信绿），深色模式见 body.theme-pd-dark */
    --pd-pm-on-bubble-mine: #111827;
    --pd-pm-bubble-peer: #ffffff;
    --pd-pm-on-bubble-peer: #111827;
    --pd-pm-stream-bg: #f5f5f5;        /* 聊天区底色 */
    --pd-pm-scroll-thumb: rgb(0 0 0 / 22%);
    --pd-loading-size: var(--pd-icon-xl);
    --pd-loading-edge: var(--pd-space-4);
    --pd-pjax-spinner-size: var(--pd-btn-h-lg);   /* 全站 PJAX 换页时屏幕中间的四方块（assets/pjax.js） */

    /* ---------- 组件：标题 ---------- */
    --pd-heading-font: var(--pd-font-title);
    --pd-h1-size: var(--pd-fs-lg);        /* 帖子标题、页面标题 */
    --pd-h1-weight: var(--pd-fw-semibold);
    --pd-h1-lh: var(--pd-lh-tight);
    --pd-h2-size: var(--pd-fs-md);        /* 区块标题：侧栏卡片、「回复 N」 */
    --pd-h2-weight: var(--pd-fw-semibold);
    --pd-h2-lh: var(--pd-lh-snug);
    --pd-h3-size: var(--pd-fs-sm);        /* 小标题 */
    --pd-h3-weight: var(--pd-fw-semibold);
    --pd-h3-lh: var(--pd-lh-snug);
    --pd-list-title-size: var(--pd-fs-sm);     /* 帖子列表标题：14px，元信息 12px */
    --pd-list-title-size-mobile: 13px;        /* 首页手机列表标题，略小于桌面 */
    --pd-list-title-weight: var(--pd-fw-regular);

    /* ---------- 组件：按钮 ---------- */
    --pd-btn-h-sm: 32px;
    --pd-btn-h: 36px;
    --pd-btn-h-lg: 40px;
    --pd-btn-px-sm: 12px;
    --pd-btn-px: 16px;
    --pd-btn-px-lg: 20px;
    --pd-btn-gap: 8px;
    --pd-btn-fs-sm: var(--pd-fs-xs);
    --pd-btn-fs: var(--pd-fs-sm);
    --pd-btn-weight: var(--pd-fw-semibold);
    --pd-btn-radius: var(--pd-radius-sm);
    --pd-btn-icon: var(--pd-icon-md);

    /* W06 下沿水光：主色在深浅主题里保持一致，照明按控件尺寸调整。 */
    --pd-w06-blue: #0052D9;
    --pd-w06-green: #117f3a;
    --pd-w06-red: #C73540;
    --pd-w06-neutral: #657080;
    --pd-w06-neutral-dark: #4e596a;
    --pd-w06-on-fill: #fff;
    --pd-w06-ink: #17202e;
    --pd-w06-glow-blue: #76ceff;
    --pd-w06-depth: calc(var(--pd-space-1) / 8);
    --pd-w06-glow-alpha: 50%;
    --pd-w06-glow-width: 64%;
    --pd-w06-glow-height: 95%;
    --pd-w06-glow-y: 128%;
    --pd-w06-top-alpha: 32%;
    --pd-w06-bottom-alpha: 15%;
    --pd-w06-side-alpha: 4%;
    --pd-w06-strip-height: 10%;
    --pd-w06-glow-alpha-sm: 40%;
    --pd-w06-glow-width-sm: 60%;
    --pd-w06-glow-height-sm: 85%;
    --pd-w06-glow-y-sm: 132%;
    --pd-w06-top-alpha-sm: 26%;
    --pd-w06-bottom-alpha-sm: 12%;
    --pd-w06-side-alpha-sm: 3%;
    --pd-w06-strip-height-sm: 8%;
    --pd-w06-glow-alpha-xs: 32%;
    --pd-w06-glow-width-xs: 56%;
    --pd-w06-glow-height-xs: 78%;
    --pd-w06-glow-y-xs: 134%;
    --pd-w06-top-alpha-xs: 20%;
    --pd-w06-bottom-alpha-xs: 9%;
    --pd-w06-side-alpha-xs: 2%;
    --pd-w06-strip-height-xs: 7%;
    --pd-w06-status-h: calc(var(--pd-space-4) + var(--pd-space-1) / 2);

    /* ---------- 组件：标签页 Tabs ---------- */
    --pd-tab-h: 32px;
    --pd-tab-h-touch: 40px;   /* 手机端 */
    --pd-tab-px: 12px;
    --pd-tab-gap: 8px;
    --pd-tab-fs: var(--pd-fs-sm);
    --pd-tab-weight: var(--pd-fw-semibold);
    --pd-tab-radius: var(--pd-radius-sm);
    --pd-tab-group-radius: var(--pd-radius-md);   /* 分段切换的外框 */
    --pd-feed-color-reply: #0052D9;
    --pd-feed-color-latest: #17A34A;
    --pd-feed-color-hot: #ED8500;
    --pd-feed-color-good: #7856C8;
    --pd-home-view-size: var(--pd-space-4);   /* 首页列表 / 版块切换：24px，图标上下各留 4px，和标签文字的高度差不多 */

    /* ---------- 组件：卡片 / 弹窗 ---------- */
    --pd-card-radius: var(--pd-radius-md);   /* 小卡：帖子行、列表条、小面板（高度约 40～100px） */
    --pd-card-radius-page: var(--pd-radius-lg);   /* 个人页（先从官方 AI 档案页开始）的所有卡片：资料卡、统计条、各内容卡，同一个圆角（12px） */
    --pd-card-radius-thread: var(--pd-radius-lg);   /* 帖子详情页：主楼卡片和回复区卡片同一个圆角（12px） */
    --pd-card-radius-row: 6px;   /* 首页 / 列表里的单条帖子卡 */
    --pd-card-radius-side: var(--pd-card-radius-row);   /* 首页右栏卡片：和帖子卡同一档（6px），想分开调就改这一行 */
    --pd-card-radius-lg: var(--pd-radius-xl);   /* 大卡：右栏卡片、版块页 Hero、版块卡、帖子页和个人页的整块卡片（高度 ≥ 120px）。嵌套时内层 = 外层 - 内边距，最小 4px */
    --pd-card-padding: var(--pd-space-3);
    --pd-card-padding-sm: var(--pd-space-2);   /* 手机端 */
    --pd-modal-radius: var(--pd-radius-xl);
    --pd-content-img-max: 480px;   /* 主楼正文图片的最大显示边长 */
    --pd-reply-img-max: 240px;     /* 回复里图片的最大显示边长（主楼的一半） */

    /* ---------- 组件：输入框 ---------- */
    --pd-input-h: 36px;
    --pd-input-px: 12px;
    --pd-input-fs: var(--pd-fs-sm);
    --pd-input-radius: var(--pd-radius-sm);

    /* ---------- 组件：徽章 / 标签 ---------- */
    --pd-badge-h: 20px;
    --pd-badge-px: 8px;
    --pd-badge-fs: var(--pd-fs-xs);
    --pd-badge-weight: var(--pd-fw-semibold);
    --pd-badge-radius: var(--pd-radius-xs);
    --pd-thread-title-icon-size: var(--pd-icon-md);   /* 标题前的「荐 / 顶 / 精」方块：列表 16px，帖子页大标题 20px */
    --pd-thread-badge-good-bg: #17a34a;
    --pd-op-badge-bg: #c43d2d;
    --pd-thread-stamp-width: 168px;
    --pd-thread-stamp-width-sm: 100px;
    --pd-thread-stamp-right: 8%;
    --pd-thread-stamp-opacity: .92;
    --pd-stamp-picker-width: 600px;
    --pd-stamp-picker-image-width: 100px;
    --pd-stamp-picker-columns: 3;
    --pd-feedback-avatar-size: 32px;
    --pd-feedback-amount-width: 96px;

    /* ---------- 后台：两套主题共用的设计令牌 ---------- */
    --pd-admin-sidebar-width: 232px;
    --pd-admin-sidebar-collapsed-width: 64px;
    --pd-admin-topbar-height: 56px;
    --pd-admin-nav-height: 48px;
    --pd-admin-content-width: 1440px;
    --pd-admin-tabler-content-width: 1600px;
    --pd-admin-tabler-logo-width: 48px;
    --pd-admin-thread-title-width: 360px;
    --pd-admin-thread-title-min-width: 180px;
    --pd-admin-border-width: 1px;
    --pd-admin-stat-size: 32px;
    --pd-admin-stat-size-compact: 28px;
    --pd-admin-chart-height: 280px;
    --pd-admin-setting-nav-width: 184px;
    --pd-admin-setting-content-width: 880px;
    --pd-admin-logo-size: 32px;
    --pd-admin-login-width: 432px;
    --pd-admin-login-logo-width: 88px;
    --pd-admin-login-logo-height: 48px;
    --pd-admin-login-control-height: 44px;
    --pd-admin-login-padding: 40px;
    --pd-admin-login-shadow: 0 16px 48px rgb(24 36 51 / 6%);
    --pd-admin-gauge-size: 136px;
    --pd-admin-load-gauge-size: 180px;
    --pd-admin-history-label-width: 80px;
    --pd-admin-accent-dark: #9bbefe;
    --pd-admin-preview-height: 152px;
    --pd-admin-preview-sidebar: 36px;
    --pd-admin-preview-header: 20px;
    --pd-admin-td-canvas: #eeeeee;
    --pd-admin-td-canvas-dark: #181818;
    --pd-admin-td-surface: #ffffff;
    --pd-admin-td-surface-dark: #242424;
    --pd-admin-td-border: #e7e7e7;
    --pd-admin-td-border-dark: #383838;
    --pd-admin-td-text: #1d2129;
    --pd-admin-td-text-dark: #eeeeee;
    --pd-admin-td-muted: #777777;
    --pd-admin-td-muted-dark: #ababab;
    --pd-admin-td-selected: #f2f3ff;
    --pd-admin-td-selected-dark: #24324c;
    --pd-admin-tabler-canvas: #f8fafc;
    --pd-admin-tabler-canvas-dark: #151f2c;
    --pd-admin-tabler-surface: #ffffff;
    --pd-admin-tabler-surface-dark: #1f2b3d;
    --pd-admin-tabler-border: #e6e7e9;
    --pd-admin-tabler-border-dark: #344358;
    --pd-admin-tabler-text: #182433;
    --pd-admin-tabler-text-dark: #e9edf2;
    --pd-admin-tabler-muted: #667382;
    --pd-admin-tabler-muted-dark: #a0aec0;
    --pd-admin-tabler-selected: #edf4ff;
    --pd-admin-tabler-selected-dark: #233d5d;
    --pd-admin-tabler-shadow: 0 1px 2px rgb(24 36 51 / 5%);
    --pd-admin-tabler-shadow-dark: 0 1px 2px rgb(0 0 0 / 15%);

    /* ---------- 基础：灰阶 ---------- */
    --pd-gray-50: #f9fafb;
    --pd-gray-100: #f3f4f6;
    --pd-gray-200: #e5e7eb;
    --pd-gray-300: #d1d5db;
    --pd-gray-400: #9ca3af;
    --pd-gray-500: #6b7280;
    --pd-gray-600: #4b5563;
    --pd-gray-800: #1f2937;
    --pd-gray-900: #111827;

    /* ---------- 语义颜色（浅色主题；深色主题在 body.theme-pd-dark 中覆盖） ---------- */
    /* 品牌：浅色和深色共用同一个蓝色，深色不提亮。 */
    --pd-color-primary-rgb: 0, 82, 217;
    --pd-color-primary: #0052D9;
    --pd-color-primary-hover: #004AC3;
    --pd-color-primary-active: #0042AE;
    --pd-color-primary-soft: #eaf1ff;
    --pd-feed-update-bg: #d8f0ff;
    --pd-color-wechat: #07c160;        /* 微信支付图标（深浅同色） */
    --pd-color-qr-bg: #ffffff;         /* 二维码底色：深色模式也要白底才扫得出 */
    --pd-color-usdt: #26a17b;          /* USDT（Tether）图标（深浅同色） */
    --pd-color-primary-muted: #9bbefe;
    --pd-color-link: var(--pd-color-primary);
    --pd-color-link-hover: var(--pd-color-primary-hover);
    --pd-color-on-primary: #ffffff;
    /* 首页品牌卡与交互共用品牌蓝。 */
    --pd-color-promo: var(--pd-color-primary);
    --pd-color-promo-hover: var(--pd-color-primary-hover);
    --pd-color-promo-fg: #ffffff;
    --pd-color-promo-fg-muted: #eaf1ff;
    --pd-color-telegram: #229ed9;                     /* Telegram 品牌蓝：侧边栏 Telegram 卡片 */
    --pd-color-promo-track: rgb(255 255 255 / 22%);   /* 会员卡：进度条空格、分隔线 */
    --pd-color-promo-chip: rgb(255 255 255 / 14%);    /* 会员卡：小标签、签到格、心情格的底 */
    --pd-color-promo-progress: #34c759;               /* 会员卡：进度格、已签到格（绿） */
    --pd-color-promo-on-progress: #0b3d17;
    --pd-color-promo-go: #16a34a;                     /* 会员卡：「升级」按钮 */
    --pd-color-promo-go-hover: #15803d;
    --pd-color-checkin-signed: #17a34a;               /* 已签到的日子：首页签到卡圆点、签到日历格子、本月进度条（绿） */
    --pd-color-checkin-on-signed: #ffffff;            /* 绿底上的对号、日期（白） */
    /* 「初来乍到」黑板报：深绿黑板、粉笔白字、粉笔黄强调、木框 */
    --pd-chalkboard-bg: #22392f;
    --pd-chalkboard-frame: #a67c52;
    --pd-chalkboard-chalk: #f2efe4;
    --pd-chalkboard-chalk-soft: rgb(242 239 228 / 38%);
    --pd-chalkboard-accent: #f6d776;
    --pd-uid-pretty-fg: #3d2c00;                      /* 靓号金底上的深色字 */
    --pd-color-checkin-flame: #f4511e;                /* 签到卡：连续签到的火苗 */
    --pd-color-checkin-flame-soft: #fff1eb;
    /* 四种特殊帖的颜色（首页标签、列表徽章）：深浅主题同一组，不借状态色（错误红 / 成功绿在深色下会提亮发浅） */
    --pd-color-type-poll: var(--pd-color-primary);
    --pd-color-type-bounty: #e9b000;
    --pd-color-type-lottery: #17a34a;
    --pd-color-type-redpacket: #d93025;
    /* 私信转账卡片的底色（白字约 5:1），红包卡片用上面的 type-redpacket；深浅主题同一组 */
    --pd-color-pay-transfer: #b45309;
    --pd-color-pay-icon-bg: rgb(255 255 255 / 20%);
    --pd-color-pay-gold: #f5c56b;                     /* 拆红包的「開」 */
    --pd-color-pay-on-gold: #6b3a00;
    /* 文字 */
    --pd-color-text: var(--pd-gray-900);
    --pd-color-text-secondary: var(--pd-gray-500);
    --pd-color-text-tertiary: var(--pd-gray-400);
    /* 表面与边框 */
    --pd-color-surface: #ffffff;
    --pd-color-surface-subtle: var(--pd-gray-50);
    --pd-color-surface-soft: var(--pd-gray-100);
    --pd-color-divider: var(--pd-gray-200);
    --pd-color-border: var(--pd-gray-200);
    --pd-color-border-strong: var(--pd-gray-300);
    /* 状态 */
    --pd-color-success: #16a34a;
    --pd-color-success-soft: #ecfdf3;
    --pd-color-warning: #f5a623;
    --pd-color-warning-soft: #fff7e6;   /* 暂停回复胶囊、楼层提示（站务 / 清道夫）用 */
    --pd-color-error: #d93025;
    --pd-color-error-hover: #b42318;
    --pd-color-error-soft: #fff1f0;
    /* 名字按身份上色（pd_user_name_class）：官方账号和管理员品牌蓝，官方 AI 账号紫，版主橙 */
    --pd-color-role-official: var(--pd-color-primary);
    --pd-color-role-system: #e0a500;
    --pd-color-role-admin: var(--pd-color-primary);
    --pd-color-role-super-admin: #facc15;
    --pd-color-name: var(--pd-color-text-secondary);   /* 普通用户的昵称：浅灰；身份 / 用户组的彩色昵称见下面的 --pd-color-name-* */
    --pd-color-name-super-admin: #dc2626;
    --pd-color-role-ai: #7c3aed;
    --pd-color-gender-male: #2563eb;
    --pd-color-gender-female: #ec4899;
    --pd-color-role-merchant: #d97706;   /* 认证商家：金色对勾，和其他类别的蓝色区分 */
    --pd-color-role-moderator: #c2410c;
    /* 名字后面的皇冠（assets/roles.css）：管理员金色、版主银色；超级管理员在前台和管理员一样 */
    --pd-color-crown-admin: #e0a500;
    --pd-color-crown-moderator: #8b97a8;
    --pd-color-online: #4ade80;   /* 头像在线绿点：比状态绿浅一档，小圆点上不发闷 */
    /* 正文彩色文字（[color=…]，core/format.php），固定 6 色：在白底、浅灰底（引用、表头）上对比度都 ≥4.5:1 */
    --pd-text-red: #c81e1e;
    --pd-text-orange: #b94a00;
    --pd-text-green: #137333;
    --pd-text-yellow: #967000;
    --pd-text-blue: #1a56db;
    --pd-text-purple: #7e3af2;
    --pd-text-gray: #4b5563;
    /* 成长等级 10 阶的颜色（徽章 pd-level-badge--b1 … b10、规则页按阶分组；阶名见 core/data/fish-growth-tiers.php）：
       浅滩灰、溪流青、江河绿、珊瑚蓝、近海靛、洄游紫、远洋玫红、深海橙、巨兽红、传说金。在白底和 12% 同色底上对比度都 ≥4.5:1 */
    --pd-level-c1: #4b5563;
    --pd-level-c2: #0e7490;
    --pd-level-c3: #137333;
    --pd-level-c4: #1a56db;
    --pd-level-c5: #4338ca;
    --pd-level-c6: #7e3af2;
    --pd-level-c7: #be185d;
    --pd-level-c8: #b94a00;
    --pd-level-c9: #c81e1e;
    --pd-level-c10: #946200;
    /* 论坛语义 */
    --pd-color-highlight: #ff674f;
    --pd-color-pinned: #d1495b;
    --pd-color-bounty: #e9b000;   /* 悬赏图标：金黄 */
    --pd-color-featured: #c58a12;
    --pd-color-featured-hover: #a87310;
    /* 全部版块卡片：按展示顺序分配十种图标色，不依赖名称或 ID。 */
    --pd-board-color-0: #1d6fb8;
    --pd-board-color-1: #2f8f4e;
    --pd-board-color-2: #b7791f;
    --pd-board-color-3: #d1495b;
    --pd-board-color-4: #6b4bd6;
    --pd-board-color-5: #1a8a9d;
    --pd-board-color-6: #c2410c;
    --pd-board-color-7: #5a6270;
    --pd-board-color-8: #4f46e5;
    --pd-board-color-9: #be185d;

    /* 深色区域（页头 / 导航 / 页脚叠在深色背景或图片上），不随主题切换 */
    --pd-color-on-dark: #f3f4f6;
    --pd-color-on-dark-secondary: #9ca3af;
    --pd-color-on-dark-tertiary: #6b7280;
    --pd-color-on-dark-surface: #1f2937;
    --pd-color-on-dark-border: #374151;

    /* Toast 和悬浮提示：中性黑，不用 gray-900（#111827 偏蓝） */
    --pd-color-toast-bg: #1a1a1a;
    --pd-color-toast-border: #333333;
    --pd-color-tooltip-bg: var(--pd-color-toast-bg);

    /* 页面 */
    --pd-color-page-bg: #262626;
    --pd-color-scrollbar-thumb: #4a4a4a;
    --pd-color-scrollbar-thumb-hover: #5c5c5c;

    /* ---------- 阴影（只有两级） ---------- */
    --pd-shadow-1: 0 1px 3px rgba(0, 0, 0, .08);
    --pd-shadow-2: 0 4px 12px rgba(0, 0, 0, .1);
    --pd-focus-ring: 0 0 0 2px rgba(var(--pd-color-primary-rgb), .12);
}

/* 深色主题：中性炭灰表面，层次由明度区分，品牌色用于交互。 */
body.theme-pd-dark {
    /* 品牌：深色模式用 logo 的主色（渐变中段 #0098FD，logo 按面积平均 #0093FC），比浅色的 #0052D9 亮，链接 / 图标 / 选中线在深色底上约 5.3:1。
       实色按钮在深色模式用深色字（.btn、发新帖、签到按钮，约 5.3:1）；整块白字的品牌卡用 logo 渐变起点 #0059FA（白字 5.5:1）。
       :root 里写成 var(--pd-color-primary) 的别名在 :root 上就已经算定，这里必须跟着重新声明，否则还是浅色的蓝 */
    --pd-color-primary-rgb: 0, 152, 253;
    --pd-color-primary: #0098FD;
    --pd-color-primary-hover: #0089E4;
    --pd-color-primary-active: #007ACB;
    --pd-color-link: var(--pd-color-primary);
    --pd-color-link-hover: var(--pd-color-primary-hover);
    --pd-color-promo: #0059FA;
    --pd-color-promo-hover: #0050E1;
    --pd-color-role-official: var(--pd-color-primary);
    --pd-color-role-admin: var(--pd-color-primary);
    --pd-color-type-poll: var(--pd-color-primary);
    --pd-color-primary-soft: #2a2a2a;
    --pd-feed-update-bg: #173249;
    --pd-color-primary-muted: #3d5f9e;
    /* 文字 */
    --pd-color-text: #e8e8e8;
    --pd-color-text-secondary: #b0b0b0;
    --pd-color-text-tertiary: #969696;
    /* 表面与边框 */
    --pd-color-surface: #202020;
    --pd-pm-bubble-mine: #3eb575;      /* 私信：深色下的绿气泡配深色字（约 7:1） */
    --pd-pm-on-bubble-mine: #0b1510;
    --pd-pm-bubble-peer: #2c2c2c;
    --pd-pm-on-bubble-peer: #e8e8e8;
    --pd-pm-stream-bg: #1a1a1a;
    --pd-pm-scroll-thumb: rgb(255 255 255 / 22%);
    --pd-color-surface-subtle: #242424;
    --pd-color-surface-soft: #2b2b2b;
    --pd-color-divider: #333333;
    --pd-color-border: #3a3a3a;
    --pd-color-border-strong: #4a4a4a;
    --pd-color-on-dark-surface: var(--pd-color-surface-soft);
    --pd-color-on-dark-border: var(--pd-color-border-strong);
    --pd-color-toast-border: var(--pd-color-border-strong);
    --pd-code-bg: #1a1a1a;
    /* 状态 */
    --pd-color-success: #4ade80;
    --pd-color-success-soft: #12301f;
    --pd-color-warning: #f5b84d;
    --pd-color-warning-soft: #3a2e14;
    --pd-color-error: #ff8a78;
    --pd-color-error-hover: #ffb0a3;
    --pd-color-error-soft: #3a1f1f;
    --pd-color-checkin-flame-soft: #3a2219;
    --pd-color-role-super-admin: #facc15;
    --pd-color-name: var(--pd-color-text-secondary);
    --pd-color-name-super-admin: #f87171;
    --pd-color-role-system: #e0a500;
    --pd-color-role-ai: #7c3aed;
    --pd-color-gender-male: #60a5fa;
    --pd-color-gender-female: #f472b6;
    --pd-color-role-merchant: #fbbf24;
    --pd-color-role-moderator: #fb923c;
    --pd-color-crown-admin: #facc15;
    --pd-color-crown-moderator: #cbd5e1;
    --pd-color-online: #4ade80;
    /* 正文彩色文字：深色底（含引用、表头的浅一层底）上对比度都 ≥4.5:1 */
    --pd-text-red: #ff8a80;
    --pd-text-orange: #fdab5d;
    --pd-text-green: #5fd38d;
    --pd-text-yellow: var(--pd-color-bounty);
    --pd-text-blue: #7ab0ff;
    --pd-text-purple: #c5a3ff;
    --pd-text-gray: var(--pd-color-text-secondary);
    --pd-level-c1: #9ca3af;
    --pd-level-c2: #67d4e8;
    --pd-level-c3: #5fd38d;
    --pd-level-c4: #7ab0ff;
    --pd-level-c5: #a5b4fc;
    --pd-level-c6: #c5a3ff;
    --pd-level-c7: #f9a8d4;
    --pd-level-c8: #fdab5d;
    --pd-level-c9: #ff8a80;
    --pd-level-c10: #f5c542;
    /* 论坛语义 */
    --pd-color-highlight: #ff8a78;
    --pd-color-pinned: #ff8a78;
    --pd-color-bounty: #f7c948;
    --pd-color-featured: #f5a623;
    --pd-color-featured-hover: #ffc04d;
    --pd-board-color-0: #7fc0f5;
    --pd-board-color-1: #7fd6a0;
    --pd-board-color-2: #f0c778;
    --pd-board-color-3: #f39aa6;
    --pd-board-color-4: #b7a4f5;
    --pd-board-color-5: #7fd4de;
    --pd-board-color-6: #f0a878;
    --pd-board-color-7: #b7bdc8;
    --pd-board-color-8: #a5b4fc;
    --pd-board-color-9: #f9a8d4;

    --pd-shadow-1: 0 1px 3px rgba(0, 0, 0, .28);
    --pd-shadow-2: 0 4px 12px rgba(0, 0, 0, .36);
    --pd-focus-ring: 0 0 0 2px rgba(var(--pd-color-primary-rgb), .24);

    /* 咸鱼彩票：深色下的暖色（橙色按钮用深色字） */
    --pd-lotto-cream: #2A2419;
    --pd-lotto-cream-strong: #352C1D;
    --pd-lotto-cream-line: #4A3D28;
    --pd-lotto-ink: #F3DDB5;
    --pd-lotto-ink-muted: #C9AC80;
    --pd-lotto-accent: #E68A2E;
    --pd-lotto-accent-hover: #CF7C29;
    --pd-lotto-accent-soft: #3A2C18;
    --pd-lotto-on-accent: #1A1208;
    --pd-lotto-red: #E2554A;
    --pd-lotto-red-soft: #3D2220;
    --pd-lotto-gold: #F2C230;
    --pd-lotto-gold-soft: #3B3214;
    --pd-lotto-on-gold: #2A1E00;
    --pd-lotto-backdrop: rgb(0 0 0 / 78%);
}

/* 组件默认圆角：:where() 零优先级，组件自己的规则随时可以覆盖。
   （替代原来带 !important 的 "Final shape lock"，那段会把所有按钮强制成胶囊、
   把卡片和输入框强制成 6px，导致组件自己写的圆角全部失效） */
:where(.btn, button, input[type="button"], input[type="submit"], input[type="reset"]) {
    border-radius: var(--pd-btn-radius);
}

:where(.card, .post-title-card, .post-content-card,
       .signin-modal-box, .ad-box, .attachment-inline-card, .editor-toolbar, .captcha-box) {
    border-radius: var(--pd-card-radius);
}

:where(input, select, textarea) {
    border-radius: var(--pd-input-radius);
}

body {
    margin: 0;
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
}

a {
    color: var(--pd-color-primary);
    text-decoration: none;
}

a:hover {
    color: var(--pd-color-primary-hover);
}

.wrap {
    width: 1024px;
    max-width: 94%;
    margin: 0 auto;
}

.nav {
    min-height: 62px;
    overflow: hidden;
    padding: 14px 0;
}

.brand {
    float: left;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-size: 26px;
    line-height: 34px;
    font-weight: 800;
    color: var(--pd-color-text);
}

.signin-modal-overlay {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 18px;
}

.signin-modal-box {
    width: 520px;
    max-width: 94vw;
    max-height: 82vh;
    overflow: auto;
    padding: var(--pd-space-4);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-modal-radius);
    background: var(--pd-color-surface);
    box-shadow: var(--pd-shadow-2);
}

.signin-modal-box h2 {
    margin: 0 0 8px;
    color: var(--pd-color-text);
}

.signin-rank-mini {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    margin: 14px 0;
}

.signin-rank-mini h3 {
    margin: 0 0 8px;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
}

.signin-rank-mini ol {
    margin: 0;
    padding-left: 18px;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: 1.8;
}

.card {
    display: block;
    width: 100%;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-2);
    padding: 20px;
    margin-top: 16px;
}

.hero {
    overflow: hidden;
}

.hero h1,
.post-title-card h1 {
    margin: 0 0 8px;
    color: var(--pd-color-text);
}

/* 帖子页：标题、正文、回复使用三个同级独立框 */
.post-title-card .post-meta {
    margin-bottom: 10px;
}

.post-title-card h1 {
    margin: 0;
    line-height: 1.5;
    font-size: var(--pd-fs-lg);
}

.post-content-card {
    min-height: 260px;
}

.post-content-box {
    padding: 0;
}

.content-page-nav {
    margin-top: 18px;
    padding-top: 14px;
    border-top: 1px solid var(--pd-color-divider);
}

.content-page-nav a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    margin-right: 6px;
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-btn-radius);
}

.hero p,
.muted {
    color: var(--pd-color-text-secondary);
}

.hero .btn {
    float: right;
    margin-top: 10px;
}

.btn {
    display: inline-block;
    border: 1px solid var(--pd-color-primary);
    border-radius: var(--pd-btn-radius);
    background: var(--pd-color-primary) !important;
    color: var(--pd-color-on-primary) !important;
    padding: 10px 16px;
    cursor: pointer;
    font-weight: var(--pd-btn-weight);
}

.btn:where(:not(.btn-light, .btn-danger)):hover:not(:disabled):not([aria-disabled="true"]) {
    background: var(--pd-color-primary-hover) !important;
    border-color: var(--pd-color-primary-hover);
}

.btn-light {
    background: var(--pd-color-surface-soft) !important;
    border-color: var(--pd-color-border);
    color: var(--pd-color-text) !important;
    margin-left: var(--pd-space-1);
}

.btn-light:hover:not(:disabled):not([aria-disabled="true"]),
.btn-light:active:not(:disabled):not([aria-disabled="true"]) {
    background: var(--pd-color-border) !important;
    border-color: var(--pd-color-border-strong);
    color: var(--pd-color-text) !important;
}

.btn:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}

/* 深色主题品牌蓝较亮，实色主按钮使用深色文字保持对比。 */
body.theme-pd-dark .btn:where(:not(.btn-light, .btn-danger)):not(:disabled):not([aria-disabled="true"]) {
    color: var(--pd-color-surface) !important;
}

.btn:is(:disabled, [aria-disabled="true"]) {
    color: var(--pd-color-text-secondary) !important;
    background: var(--pd-color-surface-soft) !important;
    border-color: var(--pd-color-border);
    cursor: not-allowed;
    opacity: 1;
}

.btn-small {
    height: var(--pd-btn-h-sm);
    min-height: var(--pd-btn-h-sm);
    padding: 0 var(--pd-btn-px-sm);
    font-size: var(--pd-btn-fs-sm);
}

.grid {
    display: grid;
    gap: 24px;
    align-items: start;
    overflow: visible;
}

.grid > section {
    float: none;
    width: auto;
    max-width: 100%;
    min-width: 0;
}

.grid > aside {
    float: none;
    width: auto;
    min-width: 0;
}

.stats {
    float: right;
    width: 25%;
    text-align: right;
    color: var(--pd-color-text-secondary);
}

.stats strong {
    display: block;
    margin-left: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
}

.ad-box {
    margin: 14px 0;
    text-align: center;
    overflow: hidden;
}

.ad-box img {
    max-width: 100%;
    height: auto;
    vertical-align: top;
}

.ad-top {
    margin-top: 16px;
}

.ad-sidebar {
    margin: 0 0 12px;
}

.ad-footer {
    margin: 24px 0 0;
}

.ad-preview {
    margin: 10px 0 16px;
    padding: 10px;
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface);
}

.ad-preview img {
    max-width: 100%;
    height: auto;
}

.inline-check {
    width: auto;
    margin-right: 6px;
}

.metric svg {
    width: 16px;
    height: 16px;
    stroke: var(--pd-color-border-strong);
    fill: none;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.thread-list {
    padding: 0;
}

.filter-tabs {
    margin-top: 14px;
    border-bottom: 1px solid var(--pd-color-divider);
}

.filter-tabs a {
    display: inline-block;
    padding: 10px 16px;
    margin-right: 4px;
    color: var(--pd-color-text-secondary);
    border: 1px solid transparent;
    border-bottom: 0;
    border-radius: var(--pd-radius-md) var(--pd-radius-md) 0 0;
}

.filter-tabs a.active {
    color: var(--pd-color-primary);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-divider);
    font-weight: var(--pd-tab-weight);
}

.thread-row {
    overflow: hidden;
    padding: 16px 20px;
    border-bottom: 1px solid var(--pd-color-divider);
}

.thread-row:last-child {
    border-bottom: 0;
}

.thread-main {
    float: left;
    width: 75%;
}

.thread-title {
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}

.thread-main p {
    margin: 6px 0 0;
    color: var(--pd-color-text-secondary);
}

.thread-count {
    float: right;
    width: 20%;
    text-align: right;
    color: var(--pd-color-text-secondary);
    line-height: 1.7;
}

.tag {
    display: inline-block;
    margin-right: 5px;
    padding: 2px 6px;
    border-radius: var(--pd-badge-radius);
    font-size: var(--pd-fs-xs);
}

.tag.red {
    background: var(--pd-color-surface-subtle);
    color: var(--pd-color-error);
}

.forum-table {
    width: 100%;
    border-collapse: collapse;
    margin-top: 10px;
    table-layout: fixed;
}

.forum-table th,
.forum-table td {
    padding: 8px 6px;
    border-bottom: 1px solid var(--pd-color-divider);
    text-align: left;
    vertical-align: middle;
    word-break: break-all;
}

.forum-table th {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
}

.forum-table input[type="text"],
.forum-table input[type="number"] {
    margin: 0;
    padding: 7px 8px;
    font-size: var(--pd-fs-sm);
}

/* 个人设置 - 头像来源选择 */
.profile-avatar-choose {
    display: flex;
    align-items: center;
    gap: 18px;
    margin: 6px 0 10px;
    flex-wrap: wrap;
}
.profile-avatar-choose .profile-avatar-preview {
    margin: 0;
    flex: 0 0 auto;
}
.profile-avatar-sources {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.profile-avatar-radio {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    font-weight: var(--pd-fw-medium);
    cursor: pointer;
}
.profile-avatar-radio input {
    width: auto;
    margin: 0;
}
.profile-avatar-panel {
    margin: 0 0 8px;
    padding: 12px 14px;
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-primary-soft);
    border-radius: var(--pd-radius-md);
}
.profile-avatar-panel > *:last-child { margin-bottom: 0; }
body.theme-pd-dark .profile-avatar-panel { background: var(--pd-color-surface-soft); border-color: var(--pd-color-border); }
/* 个人设置「默认头像」：6 张预设头像的缩略图，点选即在左侧预览，保存后生效 */
.pd-preset-avatars {
    display: grid;
    grid-template-columns: repeat(6, 64px);
    gap: var(--pd-space-2);
    margin: 0 0 var(--pd-space-1);
}
.pd-preset-avatar {
    display: block;
    position: relative;
    margin: 0;
    cursor: pointer;
}
/* 单选框只留给键盘和读屏，视觉上用头像外圈表示选中 */
.pd-preset-avatar input {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: 0;
    opacity: 0;
    pointer-events: none;
}
.pd-preset-avatar img {
    display: block;
    width: 64px;
    height: 64px;
    border: 2px solid transparent;
    border-radius: var(--pd-radius-round);
    object-fit: cover;
}
.pd-preset-avatar input:checked + img { border-color: var(--pd-color-primary); }
.pd-preset-avatar input:focus-visible + img { outline: 2px solid var(--pd-color-primary); outline-offset: 2px; }
@media (max-width: 640px) {
    .pd-preset-avatars { grid-template-columns: repeat(3, 64px); }
}

.btn-danger {
    color: var(--pd-color-surface) !important;
    background: var(--pd-color-error) !important;
    border-color: var(--pd-color-error);
}

.btn-danger:hover:not(:disabled):not([aria-disabled="true"]),
.btn-danger:active:not(:disabled):not([aria-disabled="true"]) {
    background: var(--pd-color-error-hover) !important;
    border-color: var(--pd-color-error-hover);
}

.post-meta {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    margin-bottom: 10px;
}

.admin-tools {
    float: right;
    display: inline-flex;
    flex-wrap: wrap;
    gap: 6px;
    align-items: center;
    justify-content: flex-end;
    max-width: 100%;
}

.admin-tools a {
    margin-left: 0;
}

.action-badge {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: var(--pd-btn-h-sm);
    min-width: var(--pd-btn-h-sm);
    min-height: var(--pd-btn-h-sm);
    padding: 0;
    color: var(--badge-color, var(--pd-color-primary)) !important;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    line-height: 1;
    white-space: nowrap;
    background: var(--badge-bg, var(--pd-color-surface-soft));
    border: 1px solid var(--badge-border, var(--pd-color-primary-muted));
    border-radius: var(--pd-badge-radius);
    cursor: pointer;
}

.action-badge i {
    font-size: var(--pd-icon-xs);
    line-height: 1;
}

.action-badge > span {
    position: absolute;
    left: 50%;
    bottom: calc(100% + 8px);
    z-index: 20;
    width: max-content;
    max-width: 180px;
    padding: 6px 8px;
    color: var(--pd-color-on-primary);
    font-size: var(--pd-fs-xs);
    line-height: 1;
    white-space: nowrap;
    pointer-events: none;
    background: var(--pd-color-tooltip-bg);
    border-radius: var(--pd-badge-radius);
    opacity: 0;
    transform: translate(-50%, 4px);
    transition: opacity .14s ease, transform .14s ease;
}

.action-badge:hover > span,
.action-badge:focus-visible > span {
    opacity: 1;
    transform: translate(-50%, 0);
}

.action-badge:hover {
    color: var(--badge-hover-color, var(--pd-color-on-primary)) !important;
    background: var(--badge-hover-bg, var(--badge-color, var(--pd-color-primary)));
    border-color: var(--badge-hover-border, var(--badge-color, var(--pd-color-primary)));
}

.action-badge.is-loading {
    opacity: .55;
    pointer-events: none;
}

.action-badge-edit {
    --badge-color: var(--pd-color-primary);
    --badge-bg: #eef1f7;
    --badge-border: #cbddff;
}

.action-badge-move {
    --badge-color: #0f766e;
    --badge-bg: #ecfdf5;
    --badge-border: #b7ead9;
}

.action-badge-pin {
    --badge-color: var(--pd-color-primary);
    --badge-bg: #eef1f7;
    --badge-border: #cbddff;
}

.action-badge-feature {
    --badge-color: #ca8a04;
    --badge-bg: #fffbeb;
    --badge-border: #fde68a;
}
/* 加精按钮已选中（已加精）：实心星 + 填充底色 */
.action-badge-feature.is-active {
    --badge-color: #b45309;
    --badge-bg: #fef3c7;
    --badge-border: #fcd34d;
}

.action-badge-danger {
    --badge-color: #d93025;
    --badge-bg: #fff1f0;
    --badge-border: #ffd0cc;
}

.action-badge-muted,
.action-badge-static {
    --badge-color: #64748b;
    --badge-bg: #f6f8fb;
    --badge-border: #e2e8f0;
}

.action-badge-static {
    cursor: default;
    --badge-hover-color: #64748b;
    --badge-hover-bg: #f6f8fb;
    --badge-hover-border: #e2e8f0;
}

button.action-badge {
    font-family: inherit;
}

.action-badge-static {
    width: auto;
    min-width: 0;
    padding: 0 8px;
    gap: 5px;
}

.action-badge-static > span {
    position: static;
    width: auto;
    max-width: none;
    padding: 0;
    color: inherit;
    background: transparent;
    opacity: 1;
    transform: none;
}

/* 静态徽章（如 IP）无 tooltip：悬浮/聚焦时不要继承 tooltip 的平移，避免文字错位 */
.action-badge-static:hover > span,
.action-badge-static:focus-visible > span {
    transform: none;
}

/* IP 徽章：默认仅国旗，悬浮展开 IP + 地理位置 */
.action-badge-static.pd-ip-badge {
    display: inline-flex;
    align-items: center;
    gap: 0;
    padding: 0 6px;
    overflow: hidden;
    transition: gap .18s ease, padding .18s ease;
}
.pd-ip-badge .pd-ip-icon {
    display: none;
}
.pd-ip-flag-wrap {
    display: inline-flex;
    align-items: center;
    line-height: 0;
}
.pd-country-flag {
    display: block;
    aspect-ratio: 1;
    object-fit: cover;
    flex: 0 0 auto;
}
.pd-country-flag[hidden],
.pd-ip-flag-wrap[hidden] {
    display: none;
}
.pd-ip-flag {
    width: var(--pd-ip-flag-width);
    height: var(--pd-ip-flag-height);
    border-radius: var(--pd-ip-flag-radius);
    box-shadow: 0 0 0 1px rgba(0, 0, 0, .1);
    flex: 0 0 auto;
}
.pd-ip-detail {
    max-width: 0;
    opacity: 0;
    overflow: hidden;
    white-space: nowrap;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    line-height: 1;
    transition: max-width .22s ease, opacity .18s ease, margin .18s ease;
}
.pd-ip-badge.has-flag .pd-ip-detail {
    max-width: 0;
    opacity: 0;
    margin-left: 0;
}
.pd-ip-badge:hover,
.pd-ip-badge:focus-within {
    gap: 6px;
    padding: 0 10px;
}
.pd-ip-badge:hover .pd-ip-detail,
.pd-ip-badge:focus-within .pd-ip-detail {
    max-width: 280px;
    opacity: 1;
    margin-left: 2px;
}
.pd-ip-badge:not(.has-flag) .pd-ip-icon {
    display: inline;
}
.pd-ip-badge:not(.has-flag) .pd-ip-detail {
    max-width: none;
    opacity: 1;
}

.content {
    line-height: 1.9;
    font-size: var(--pd-fs-sm);
    word-break: break-word;
}

.content-link {
    color: var(--pd-color-primary);
    border-bottom: 1px dashed rgba(31, 120, 180, .45);
    font-weight: var(--pd-fw-semibold);
}

.content-link:hover {
    color: var(--pd-color-primary-hover);
    border-bottom-style: solid;
}

.remote-img {
    display: block;
    max-width: 100%;
    height: auto;
    margin: 12px 0;
    border-radius: var(--pd-radius-md);
}

.content img,
.attachment-img,
.remote-img {
    transition: max-width .18s ease, transform .18s ease, box-shadow .18s ease;
}

/* 正文图显示尺寸封顶：长宽都不超过 --pd-content-img-max，等比缩小；点击放大看原图（litezoom）。
   以前悬停会把图放大到 900px、还把 max-width 改小，没悬停时反而更大，所以悬停放大已去掉。 */
.content img,
.attachment-img,
.remote-img {
    width: auto;
    height: auto;
    max-width: min(100%, var(--pd-content-img-max));
    max-height: var(--pd-content-img-max);
    cursor: zoom-in;
}

/* 回复里的图片封顶减半，主楼不变；点击照样放大看原图 */
.reply .content img,
.reply .remote-img {
    max-width: min(100%, var(--pd-reply-img-max));
    max-height: var(--pd-reply-img-max);
}

.attachment-list {
    margin-top: 18px;
    padding-top: 14px;
    border-top: 1px solid var(--pd-color-divider);
    overflow: hidden;
}

.reply-attachments {
    margin-top: 10px;
    padding-top: 10px;
}

.attachment-list h3 {
    margin: 0 0 12px;
    color: var(--pd-color-text);
}

.attachment-img {
    display: inline-block;
    width: 480px;
    max-width: 100%;
    height: auto;
    margin: 0 12px 12px 0;
    border-radius: var(--pd-radius-md);
    border: 1px solid var(--pd-color-divider);
    vertical-align: top;
}

.reply-attachments .attachment-img {
    display: inline-block;
    width: 220px;
    max-width: 100%;
}

.attachment-file {
    display: block;
    padding: 10px 12px;
    margin-bottom: 8px;
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface);
}

.attachment-inline-card {
    display: block;
    max-width: 560px;
    margin: 12px 0;
    padding: 12px 14px;
    border: 1px solid var(--pd-color-primary-muted);
    border-radius: var(--pd-card-radius);
    background: var(--pd-color-surface-subtle);
    color: var(--pd-color-text-secondary);
}

.attachment-inline-link {
    display: block;
    color: inherit;
}

.attachment-inline-card strong,
.attachment-inline-card span {
    display: block;
}

.attachment-inline-card strong {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
}

.attachment-inline-card span {
    margin-top: 4px;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}

.attachment-delete-form {
    display: inline-block;
    margin: 6px 0 10px;
}

.attachment-inline-card .attachment-delete-form {
    display: block;
    margin: 8px 0 0;
}

.reply {
    padding: 14px 0;
    border-bottom: 1px solid var(--pd-color-divider);
}

.reply:last-child {
    border-bottom: 0;
}

.narrow {
    max-width: 560px;
    margin-left: auto;
    margin-right: auto;
}

label {
    display: block;
    margin: 12px 0 6px;
    color: var(--pd-color-text-secondary);
    font-weight: var(--pd-fw-semibold);
}

input,
select,
textarea {
    width: 100%;
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-input-radius);
    padding: 11px 12px;
    outline: none;
    font-size: var(--pd-input-fs);
    background: var(--pd-color-surface);
}

textarea {
    resize: vertical;
}

.post-form-card {
    max-width: none;
    width: 100%;
    margin: 0;
}

/* 发帖独立页：占满白框内容区，不再套小卡片 */
body.theme-pd.page-post .pd-page-frame main.wrap,
body.theme-pd-dark.page-post .pd-page-frame main.wrap {
    width: 100%;
    max-width: none;
    padding-top: 14px;
    padding-left: 20px;
    padding-right: 20px;
}
body.page-post .pd-post-page {
    width: 100%;
    max-width: none;
    margin: 0;
    padding: 0 0 8px;
    background: transparent;
    border: 0;
    box-shadow: none;
}
body.page-post .pd-post-form {
    width: 100%;
}
body.page-post .pd-post-meta {
    display: grid;
    grid-template-columns: minmax(0, 3fr) repeat(2, minmax(calc(var(--pd-input-h) * 4), 1fr));
    grid-template-areas: "title forum type";
    gap: var(--pd-space-3);
    align-items: end;
    margin-bottom: var(--pd-space-3);
}
body.page-post .pd-post-field {
    min-width: 0;
}
body.page-post .pd-post-field-title {
    grid-area: title;
}
body.page-post .pd-post-field-forum {
    grid-area: forum;
}
body.page-post .pd-post-field-type {
    grid-area: type;
}
body.page-post .pd-post-field-category {
    grid-column: 1 / -1;
}
body.page-post .pd-post-fee {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-2);
    margin: 0 0 var(--pd-space-3);
    padding: var(--pd-space-2) var(--pd-space-3);
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-warning-soft);
    border-radius: var(--pd-radius-md);
}
body.page-post .pd-post-fee[hidden] {
    display: none;
}
body.page-post .pd-post-fee i {
    color: var(--pd-color-warning);
}
body.page-post .pd-post-field label,
body.page-post .pd-post-editor > label {
    display: block;
    margin: 0 0 8px;
    font-weight: var(--pd-fw-semibold);
}
body.page-post .pd-post-field select,
body.page-post .pd-post-field input {
    width: 100%;
    margin: 0;
}
body.page-post .pd-post-field-title input {
    height: var(--pd-input-h);
    padding: 0 var(--pd-input-px);
}
body.page-post .pd-post-editor {
    width: 100%;
}
body.page-post .pd-post-editor .markdown-editor {
    margin-bottom: 0;
}
body.page-post .pd-post-editor .editor-pane textarea {
    min-height: min(58vh, 640px);
}
body.page-post .pd-post-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    margin-top: 18px;
}
body.page-post .pd-post-actions .btn {
    min-width: 140px;
}
body.page-post .md-preview-box {
    width: min(1160px, calc(100vw - 84px));
}
@media (max-width: 900px) {
    body.page-post .pd-post-meta {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        grid-template-areas: "title title" "forum type";
    }
    body.page-post .md-preview-box {
        width: min(920px, calc(100vw - 40px));
    }
}

.post-content-textarea {
    min-height: 320px;
    line-height: 1.8;
}

/* Markdown 双栏编辑器 */
.markdown-editor {
    margin: 8px 0 16px;
}
/* 上传提示已移到编辑器下方，作为普通说明行（此前夹在工具栏与输入区之间，
   把本应连成一个框的两段从中劈开，且继承了 .upload-tip 的浮层边框） */
.markdown-editor .editor-upload-tip {
    display: block;
    position: static;
    width: auto;
    margin: var(--pd-space-1) 2px 0;
    padding: 0;
    background: none;
    border: 0;
    box-shadow: none;
    color: var(--pd-color-text-tertiary);
    font-weight: var(--pd-fw-light);
    line-height: 1.6;
    font-size: var(--pd-fs-2xs);
}
.markdown-editor .editor-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    align-items: center;
    padding: 8px 10px;
    background: var(--pd-color-surface-soft);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-md) var(--pd-radius-md) 0 0 !important;
}
.markdown-editor .editor-toolbar-label {
    display: inline-flex;
    gap: 5px;
    align-items: center;
    height: 32px;
    margin-right: 4px;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text-secondary);
    white-space: nowrap;
}
.markdown-editor .editor-toolbar button,
.markdown-editor .editor-toolbar .editor-file {
    display: inline-flex;
    flex: 0 0 32px;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: var(--pd-btn-h-sm);
    margin: 0;
    padding: 0;
    font-size: var(--pd-btn-fs-sm);
    line-height: 1;
    color: var(--pd-color-text-secondary);
    cursor: pointer;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--pd-btn-radius) !important;
}
.markdown-editor .editor-heading-menu {
    position: relative;
    flex: 0 0 32px;
    width: 32px;
    height: 32px;
}
.markdown-editor .editor-heading-menu > [data-heading-toggle] {
    width: 100%;
    height: 100%;
}
.markdown-editor .editor-heading-dropdown {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    z-index: 30;
    display: grid;
    gap: 4px;
    min-width: 82px;
    padding: 6px;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-sm);
    box-shadow: var(--pd-shadow-2);
}
.markdown-editor .editor-heading-dropdown[hidden] {
    display: none !important;
}
.markdown-editor .editor-toolbar .editor-heading-dropdown button {
    flex: none;
    justify-content: flex-start;
    width: 100%;
    height: var(--pd-btn-h-sm);
    min-height: var(--pd-btn-h-sm);
    padding: 0 10px;
    font-size: var(--pd-btn-fs-sm);
    font-weight: var(--pd-btn-weight);
    color: var(--pd-color-text);
    text-align: left;
    border: 1px solid transparent;
    border-radius: var(--pd-btn-radius);
}
.markdown-editor .editor-toolbar button:hover,
.markdown-editor .editor-toolbar .editor-file:hover,
.markdown-editor .editor-toolbar .editor-heading-dropdown button:hover {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border);
}
.markdown-editor .editor-toolbar .editor-file input {
    display: none;
}
.markdown-editor .editor-toolbar .editor-md-import {
    flex: 0 0 auto;
    gap: 5px;
    width: auto;
    padding: 0 8px;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-primary);
    white-space: nowrap;
}
.markdown-editor .editor-toolbar-spacer {
    flex: 1 1 auto;
    min-width: 12px;
}
.markdown-editor [data-editor-words-toolbar].is-limit {
    color: var(--pd-color-error);
    font-weight: var(--pd-fw-semibold);
}
.markdown-editor .editor-toolbar-meta {
    display: inline-flex;
    gap: 8px;
    align-items: center;
    min-height: 32px;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
    white-space: nowrap;
}
.markdown-editor .editor-toolbar-separator {
    width: 1px;
    height: 15px;
    background: var(--pd-color-border);
}
.markdown-editor .editor-preview-btn {
    display: inline-flex !important;
    flex: 0 0 auto !important;
    gap: 5px;
    width: auto !important;
    min-width: 0;
    height: var(--pd-btn-h-sm);
    padding: 0 10px !important;
    font-size: var(--pd-btn-fs-sm);
    font-weight: var(--pd-btn-weight);
    color: var(--pd-color-text-secondary) !important;
    background: var(--pd-color-surface) !important;
    border: 1px solid var(--pd-color-border) !important;
    border-radius: var(--pd-btn-radius) !important;
}
.markdown-editor .editor-preview-btn:hover {
    color: var(--pd-color-text) !important;
    background: var(--pd-color-surface) !important;
    border-color: var(--pd-color-border-strong) !important;
}
.markdown-editor .editor-pane {
    display: block;
    min-height: 0;
    overflow: hidden;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-top: 0;
    border-radius: 0 0 var(--pd-radius-md) var(--pd-radius-md) !important;
}
.markdown-editor .editor-pane textarea {
    display: block;
    width: 100%;
    min-height: 360px;
    margin: 0;
    padding: 16px 18px;
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-sm);
    line-height: 1.7;
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 0;
    border-radius: 0 !important;
    resize: vertical;
    box-shadow: none;
}
.markdown-editor .editor-pane textarea:focus {
    outline: none;
    box-shadow: none;
}
.markdown-editor.is-compact .editor-pane textarea {
    min-height: 180px;
}
@media (max-width: 860px) {
    .markdown-editor .editor-pane textarea {
        min-height: 240px;
    }
    .markdown-editor .editor-toolbar-spacer {
        display: none;
    }
    .markdown-editor .editor-toolbar-meta {
        width: 100%;
        margin-top: 4px;
    }
}

/* Markdown 预览弹窗 */
.md-preview-overlay.is-open {
    display: flex;
}
.md-preview-box {
    width: min(920px, calc(100vw - 40px));
    max-height: min(86vh, 900px);
    display: flex;
    flex-direction: column;
    padding: 20px 22px 18px;
}
.md-preview-head {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0 36px 14px 0;
}
.md-preview-head h2 {
    margin: 0;
    font-size: var(--pd-fs-md);
    line-height: 1.3;
}
.md-preview-badge {
    display: inline-flex;
    gap: 5px;
    align-items: center;
    padding: 3px 8px;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-primary);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-badge-radius);
}
.md-preview-body {
    flex: 1 1 auto;
    min-height: 240px;
    max-height: calc(86vh - 160px);
    overflow: auto;
    padding: 16px 18px;
    margin-bottom: 14px;
    line-height: 1.8;
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-sm);
}
.md-preview-body .empty {
    color: var(--pd-color-text-tertiary);
}
body.theme-pd-dark .md-preview-body,
body.theme-pd-dark .md-preview-badge {
    color: var(--pd-color-text);
    background: rgba(0, 0, 0, .18);
    border-color: var(--pd-color-border);
}
body.theme-pd-dark .md-preview-badge {
    color: var(--pd-color-primary);
}

/* Markdown 正文 / 预览排版 */
.pd-md-body,
.post-content-box,
.reply .content,
.md-preview-body {
    word-wrap: break-word;
}
.pd-md-body > *:first-child,
.post-content-box > *:first-child,
.reply .content > *:first-child,
.md-preview-body > *:first-child {
    margin-top: 0;
}
.pd-md-body h1,
.pd-md-body h2,
.pd-md-body h3,
.pd-md-body h4,
.pd-md-body h5,
.post-content-box h1,
.post-content-box h2,
.post-content-box h3,
.post-content-box h4,
.post-content-box h5,
.reply .content h1,
.reply .content h2,
.reply .content h3,
.reply .content h4,
.reply .content h5,
.md-preview-body h1,
.md-preview-body h2,
.md-preview-body h3,
.md-preview-body h4,
.md-preview-body h5 {
    margin: 1.25em 0 .55em;
    font-weight: var(--pd-fw-semibold);
    line-height: 1.35;
    color: var(--pd-color-text);
}
.pd-md-body h1, .post-content-box h1, .md-preview-body h1 { font-size: var(--pd-fs-lg); }
/* 帖内标题：H2 16px（比帖子标题 20px 小一档）、H3 14px 加粗正文色；H4 同为 14px 加粗但用次要灰色（见下方 h4 规则）。
   H2 / H3 是要解锁的「大标题」（core/format.php），没解锁的作者写的 # / ## / ### 显示成 H4 */
.pd-md-body h2, .post-content-box h2, .md-preview-body h2 { font-size: var(--pd-fs-md); }
.pd-md-body h3, .post-content-box h3, .md-preview-body h3 { font-size: var(--pd-fs-sm); }
.pd-md-body p,
.post-content-box p,
.reply .content p,
.md-preview-body p {
    margin: 0 0 1em;
}
.pd-md-body ul,
.pd-md-body ol,
.post-content-box ul,
.post-content-box ol,
.reply .content ul,
.reply .content ol,
.md-preview-body ul,
.md-preview-body ol {
    margin: 0 0 1em;
    padding-left: 1.4em;
}
.pd-md-body blockquote,
.post-content-box blockquote,
.reply .content blockquote,
.md-preview-body blockquote {
    margin: 0 0 1em;
    padding: 8px 14px;
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
    border-left: 3px solid var(--pd-color-primary);
}
.pd-md-body pre,
.post-content-box pre,
.reply .content pre,
.md-preview-body pre {
    margin: 0 0 1em;
    padding: 14px;
    overflow: auto;
    color: var(--pd-color-on-dark);
    background: var(--pd-color-text);
    border-radius: var(--pd-radius-sm);
}
.pd-md-body code,
.post-content-box code,
.reply .content code,
.md-preview-body code {
    padding: .12em .35em;
    font-family: var(--pd-font-mono);
    font-size: .92em;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-xs);
}
.pd-md-body pre code,
.post-content-box pre code,
.reply .content pre code,
.md-preview-body pre code {
    padding: 0;
    color: inherit;
    background: transparent;
}
.pd-md-body table,
.post-content-box table,
.md-preview-body table {
    width: 100%;
    margin: 0 0 1em;
    border-collapse: collapse;
}
.pd-md-body th,
.pd-md-body td,
.post-content-box th,
.post-content-box td,
.md-preview-body th,
.md-preview-body td {
    padding: 8px 10px;
    border: 1px solid var(--pd-color-divider);
}
.pd-md-body th,
.post-content-box th,
.md-preview-body th {
    background: var(--pd-color-surface-subtle);
}
.pd-md-body hr,
.post-content-box hr,
.md-preview-body hr {
    margin: 1.4em 0;
    border: 0;
    border-top: 1px solid var(--pd-color-divider);
}
/* 内容格式规范（core/format.php）：彩色文字固定 6 色、字号三档；回复里的标题显示成正文同字号的粗体段落 */
.pd-c-red { color: var(--pd-text-red); }
.pd-c-orange { color: var(--pd-text-orange); }
.pd-c-green { color: var(--pd-text-green); }
.pd-c-blue { color: var(--pd-text-blue); }
.pd-c-purple { color: var(--pd-text-purple); }
.pd-c-gray { color: var(--pd-text-gray); }
.pd-fs-small { font-size: var(--pd-content-fs-small); }
.pd-fs-large { font-size: var(--pd-content-fs-large); line-height: var(--pd-lh-snug); }
.pd-md-body .pd-md-heading,
.md-preview-body .pd-md-heading {
    font-size: inherit;
}
.pd-md-body .pd-md-heading strong,
.md-preview-body .pd-md-heading strong {
    font-weight: var(--pd-fw-semibold);
}
.pd-md-body h4, .post-content-box h4, .md-preview-body h4 { font-size: var(--pd-fs-sm); color: var(--pd-color-text-secondary); }

/* 编辑器：彩色文字色板、字号菜单（复用标题下拉的外观）；没解锁的按钮灰掉，点了只提示「Lv.N 解锁」 */
.markdown-editor .editor-toolbar .editor-format-dropdown button {
    gap: var(--pd-space-1);
}
.markdown-editor .editor-swatch {
    display: inline-block;
    flex: none;
    width: var(--pd-icon-xs);
    height: var(--pd-icon-xs);
    background: currentColor;
    border-radius: var(--pd-radius-round);
}
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-red,
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-red:hover { color: var(--pd-text-red); }
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-orange,
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-orange:hover { color: var(--pd-text-orange); }
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-green,
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-green:hover { color: var(--pd-text-green); }
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-blue,
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-blue:hover { color: var(--pd-text-blue); }
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-purple,
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-purple:hover { color: var(--pd-text-purple); }
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-gray,
.markdown-editor .editor-toolbar .editor-format-dropdown button.pd-c-gray:hover { color: var(--pd-text-gray); }
.markdown-editor .editor-toolbar button.is-locked[aria-disabled="true"],
.markdown-editor .editor-toolbar button.is-locked[aria-disabled="true"]:hover {
    color: var(--pd-color-text-tertiary);
    cursor: not-allowed;
    background: transparent;
    border-color: transparent;
}
/* 标题下拉里没解锁的 H2 / H3 后面带一把小锁 */
.markdown-editor .editor-toolbar .editor-heading-dropdown button.is-locked .fa-lock {
    margin-left: auto;
    font-size: var(--pd-icon-xs);
}

body.theme-pd-dark .markdown-editor .editor-toolbar,
body.theme-pd-dark .markdown-editor .editor-pane,
body.theme-pd-dark .markdown-editor .editor-heading-dropdown {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border);
}
body.theme-pd-dark .markdown-editor .editor-toolbar {
    background: var(--pd-color-surface-soft);
}
body.theme-pd-dark .markdown-editor .editor-pane textarea {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border);
}
body.theme-pd-dark .markdown-editor .editor-toolbar button,
body.theme-pd-dark .markdown-editor .editor-toolbar-label,
body.theme-pd-dark .markdown-editor .editor-toolbar-meta {
    color: var(--pd-color-text-secondary);
}
body.theme-pd-dark .markdown-editor .editor-preview-btn {
    color: var(--pd-color-primary) !important;
    background: var(--pd-color-surface) !important;
    border-color: var(--pd-color-border) !important;
}
body.theme-pd-dark .pd-md-body h1,
body.theme-pd-dark .pd-md-body h2,
body.theme-pd-dark .pd-md-body h3,
body.theme-pd-dark .post-content-box h1,
body.theme-pd-dark .post-content-box h2,
body.theme-pd-dark .post-content-box h3,
body.theme-pd-dark .md-preview-body h1,
body.theme-pd-dark .md-preview-body h2,
body.theme-pd-dark .md-preview-body h3 {
    color: var(--pd-color-text);
}
body.theme-pd-dark .pd-md-body blockquote,
body.theme-pd-dark .post-content-box blockquote,
body.theme-pd-dark .md-preview-body blockquote {
    color: var(--pd-color-text-secondary);
    background: rgba(255, 255, 255, .05);
}
body.theme-pd-dark .pd-md-body code,
body.theme-pd-dark .post-content-box code,
body.theme-pd-dark .md-preview-body code {
    background: rgba(255, 255, 255, .08);
}

.captcha-box {
    margin: 12px 0;
}

/* 人机验证复选框（assets/cap.js）。状态由 data-state 驱动：idle / solving / done / error。
   紧凑的一枚：宽度跟着文字走，高度与大号按钮一致，白底细边框，和输入框同一套外观。
   左边是复选框：待验证是空方框，验证中转圈，通过是绿色圆底对勾，失败是红叉；
   右边一条小鱼是品牌标记，平时浅灰，验证中游动，通过变绿，失败变红并翻肚皮。 */
:root {
    --pd-cap-h: var(--pd-btn-h);   /* 验证框和同排的按钮一样高：按钮用全站标准的 .btn（--pd-btn-h），不再给它写专用尺寸 */
}

.captcha-row {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
}

.captcha-row .btn {
    flex: 0 0 auto;
    height: var(--pd-cap-h);
    padding-top: 0;
    padding-bottom: 0;
    white-space: nowrap;
}

.cap-box {
    display: inline-block;
    max-width: 100%;
    vertical-align: middle;
}

/* 和按钮排在一行：验证框按 176px 起算，一行放不下时只缩验证框、文字省略，按钮不能被挤成竖排 */
.captcha-row .cap-box {
    flex: 0 1 calc(var(--pd-space-5) * 6 + var(--pd-space-3));
    min-width: 0;
}

.captcha-row .cap-check {
    width: 100%;
    min-width: 0;
}

.cap-check {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    box-sizing: border-box;
    min-width: calc(var(--pd-space-5) * 6 + var(--pd-space-3));   /* 208px：容得下圆环、「我不是机器人」和彩色小鱼，点了以后宽度不跳 */
    max-width: 100%;
    height: var(--pd-cap-h);
    margin: 0;
    padding: 0 var(--pd-space-2);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-input-radius);
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    line-height: 1;
    text-align: left;
    cursor: pointer;
    transition: border-color .15s, box-shadow .15s;
}

.cap-check:hover:not(:disabled) {
    border-color: var(--pd-color-border-strong);
}

.cap-check:focus-visible {
    outline: none;
    border-color: var(--pd-color-primary);
    box-shadow: var(--pd-focus-ring);
}

.cap-check:disabled {
    cursor: default;
}

.cap-label {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cap-mark {
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    border: 2px solid var(--pd-color-border-strong);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-surface);
    color: var(--pd-color-on-primary);
    font-size: var(--pd-icon-xs);
    transition: border-color .15s, background-color .15s;
}

.cap-check:hover:not(:disabled) .cap-mark {
    border-color: var(--pd-color-primary);
}

.cap-mark > i {
    display: none;
}

.cap-fish {
    flex: 0 0 auto;
    height: var(--pd-icon-xl);
    aspect-ratio: 1065 / 490;   /* assets/logo.svg 的 viewBox */
    margin-left: var(--pd-space-1);
    background-color: var(--pd-color-text-tertiary);   /* 待验证：灰 */
    -webkit-mask: var(--cap-fish-url) no-repeat center / contain;
    mask: var(--cap-fish-url) no-repeat center / contain;
    transition: background-color .2s;
}

.cap-box[data-state="solving"] .cap-mark {
    border-color: var(--pd-color-border);
    border-top-color: var(--pd-color-primary);
    border-radius: var(--pd-radius-round);
    animation: pdCapSpin .7s linear infinite;
}

.cap-box[data-state="solving"] .cap-label {
    color: var(--pd-color-text-secondary);
}

.cap-box[data-state="solving"] .cap-fish {
    background-color: var(--pd-color-primary);   /* 验证中：蓝，轻轻游动 */
    animation: pdCapSwim 1.2s ease-in-out infinite;
}

.cap-box[data-state="done"] .cap-mark {
    border-color: var(--pd-color-success);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-success);
    color: var(--pd-color-surface);   /* 浅色主题是白勾；深色主题的绿偏亮，用深色勾才看得清 */
}

.cap-box[data-state="done"] .cap-mark .fa-check {
    display: inline-block;
}

.cap-box[data-state="done"] .cap-fish {
    background-color: var(--pd-color-success);   /* 通过：绿 */
}

.cap-box[data-state="error"] .cap-check {
    border-color: var(--pd-color-error);
}

.cap-box[data-state="error"] .cap-mark {
    border-color: var(--pd-color-error);
    color: var(--pd-color-error);
}

.cap-box[data-state="error"] .cap-mark .fa-xmark {
    display: inline-block;
}

.cap-box[data-state="error"] .cap-label {
    color: var(--pd-color-error);
}

.cap-box[data-state="error"] .cap-fish {
    background-color: var(--pd-color-error);   /* 失败：红，翻肚皮 */
    transform: scaleY(-1);
}

@keyframes pdCapSpin {
    to { transform: rotate(360deg); }
}

@keyframes pdCapSwim {
    0%, 100% { transform: translateX(0); }
    50% { transform: translateX(-3px); }
}

@media (prefers-reduced-motion: reduce) {
    .cap-box[data-state] .cap-fish {
        animation: none;
    }

    .cap-box[data-state="solving"] .cap-mark {
        animation-duration: 1.5s;   /* 转圈是唯一的「正在算」提示，放慢不取消 */
    }
}

/* 回帖：验证框和「回帖」按钮同一水平线、同高（--pd-cap-h），验证框按 176px 起算，放不下时只缩验证框。 */
.reply-submit-row {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    margin: var(--pd-space-3) 0 0;
}

.reply-submit-row .captcha-box {
    margin: 0;
}

.reply-submit-row .btn {
    flex: 0 0 auto;
    margin: 0;   /* 盖掉 `form .btn` 的上外边距，否则按钮比验证框低一截 */
}

.reply-submit-row .cap-box {
    display: flex;   /* inline-block 会带一截行高的下沿，把验证框撑得比按钮高、两者对不齐 */
    flex: 0 1 calc(var(--pd-space-5) * 6 + var(--pd-space-3));
    min-width: 0;
}

.reply-submit-row .cap-check {
    width: 100%;
    min-width: 0;
}

/* 发帖页：验证框和「发布帖子」同高、同一水平线。
   容器按底边对齐，所以去掉验证框那一列自带的下外边距，否则它会比按钮高出一截。 */
body.page-post .pd-post-actions {
    align-items: center;
    justify-content: flex-start;
}

body.page-post .pd-post-actions .upload-captcha-row,
body.page-post .pd-post-actions .captcha-box {
    margin-top: 0;
    margin-bottom: 0;
}

body.page-post .pd-post-actions .upload-captcha-row {
    flex: 0 1 360px;
}

body.page-post .pd-post-actions .btn {
    margin: 0;
}

.hp-field {
    position: absolute;
    left: -9999px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.upload-captcha-row {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 20px;
    margin: 12px 0 18px;
}

.captcha-col {
    flex: 1;
}

.upload-tip {
    display: none;
    position: absolute;
    right: 0;
    top: 92px;
    z-index: 5;
    width: 260px;
    padding: 10px 12px;
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface);
    box-shadow: var(--pd-shadow-2);
    text-align: left;
}

.upload-status {
    margin: 8px 0 0;
    font-size: var(--pd-fs-xs);
}

.editor-upload-tip {
    display: block;
    position: static;
    width: auto;
    margin: 8px 0;
    box-shadow: none;
}

.editor-dialog-overlay {
    position: fixed;
    inset: 0;
    z-index: 1140;
    display: none;
    align-items: center;
    justify-content: center;
    padding: 18px;
    background: rgba(31, 36, 45, .38);
    backdrop-filter: blur(8px);
}

.editor-dialog-overlay.is-open {
    display: flex;
}

.editor-dialog-box {
    position: relative;
    width: 430px;
    max-width: 94vw;
    padding: 22px;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-modal-radius);
    box-shadow: var(--pd-shadow-2);
}

.editor-dialog-box h2 {
    margin: 0 42px 16px 0;
    color: var(--pd-color-text);
}

.editor-dialog-box label {
    display: block;
    margin: 10px 0 8px;
}

.editor-dialog-box input {
    width: 100%;
}

.editor-dialog-close {
    position: absolute;
    top: 12px;
    right: 12px;
    width: 32px;
    height: 32px;
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-lg);
    line-height: 32px;
    cursor: pointer;
    background: var(--pd-color-surface-soft);
    border: 0;
    border-radius: var(--pd-radius-round);
}

.editor-dialog-actions {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 18px;
}

/* 自定义确认弹窗（替换浏览器原生 confirm） */
.pd-confirm-overlay {
    position: fixed;
    inset: 0;
    z-index: 1200;
    display: none;
    align-items: center;
    justify-content: center;
    padding: 18px;
    background: rgba(20, 24, 36, .46);
    backdrop-filter: blur(6px);
}
.pd-confirm-overlay.is-open {
    display: flex;
}
.pd-confirm-box {
    width: 400px;
    max-width: 94vw;
    padding: 22px 22px 18px;
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-modal-radius);
    box-shadow: var(--pd-shadow-2);
    animation: pdConfirmIn .16s ease;
}
@keyframes pdConfirmIn {
    from { opacity: 0; transform: translateY(8px) scale(.98); }
    to { opacity: 1; transform: translateY(0) scale(1); }
}
.pd-confirm-head {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 10px;
}
.pd-confirm-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    flex: 0 0 auto;
    color: var(--pd-color-error);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-error-soft);
    border-radius: var(--pd-radius-sm);
    font-size: var(--pd-icon-md);
}
.pd-confirm-title {
    margin: 2px 0 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.35;
}
.pd-confirm-message {
    margin: 0 0 0 48px;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: 1.6;
}
.pd-confirm-actions {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 20px;
}
.pd-confirm-actions .btn {
    min-height: var(--pd-btn-h);
    padding: 0 var(--pd-btn-px);
    font-size: var(--pd-btn-fs);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd-dark .pd-confirm-box {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border);
    box-shadow: var(--pd-shadow-1);
}
body.theme-pd-dark .pd-confirm-title {
    color: var(--pd-color-text);
}
body.theme-pd-dark .pd-confirm-message {
    color: var(--pd-color-text-secondary);
}
body.theme-pd-dark .pd-confirm-icon {
    color: var(--pd-color-error);
    background: rgba(217, 48, 37, .18);
    border-color: rgba(217, 48, 37, .35);
}

/* 通用确认采用紧凑外观；移动帖子、打赏等独立弹窗保留自己的布局。 */
#pd-confirm-overlay {
    padding: var(--pd-space-3);
    backdrop-filter: none;
}
#pd-confirm-overlay .pd-confirm-compact {
    width: calc(var(--pd-btn-h-lg) * 9);
    max-width: 100%;
    max-height: calc(100dvh - var(--pd-space-3) * 2);
    padding: var(--pd-space-3);
    overflow-y: auto;
    border-color: var(--pd-color-border);
    box-shadow: var(--pd-shadow-2);
}
#pd-confirm-overlay .pd-confirm-compact .pd-confirm-head {
    align-items: center;
    gap: var(--pd-space-1);
    margin-bottom: var(--pd-space-2);
}
#pd-confirm-overlay .pd-confirm-compact .pd-confirm-icon {
    width: var(--pd-icon-lg);
    height: var(--pd-icon-lg);
    color: var(--pd-color-primary);
    background: transparent;
    border: 0;
    border-radius: 0;
    font-size: var(--pd-icon-lg);
}
#pd-confirm-overlay .pd-confirm-danger .pd-confirm-icon {
    color: var(--pd-color-error);
}
#pd-confirm-overlay .pd-confirm-compact .pd-confirm-title {
    margin: 0;
    font-size: var(--pd-fs-md);
    line-height: var(--pd-lh-snug);
}
#pd-confirm-overlay .pd-confirm-compact .pd-confirm-message {
    margin: 0;
    line-height: var(--pd-lh-normal);
    overflow-wrap: anywhere;
}
#pd-confirm-overlay .pd-confirm-compact .pd-confirm-actions {
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-3);
}
#pd-confirm-overlay .pd-confirm-compact .pd-confirm-actions .btn {
    margin: 0;
}
@media (prefers-reduced-motion: reduce) {
    #pd-confirm-overlay .pd-confirm-compact {
        animation: none;
    }
}

.pd-upload-progress {
    position: fixed;
    right: 18px;
    bottom: 18px;
    z-index: 1150;
    width: 280px;
    max-width: calc(100vw - 36px);
    padding: 12px;
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-2);
    opacity: 0;
    pointer-events: none;
    transform: translateY(12px);
    transition: opacity .18s ease, transform .18s ease;
}

.pd-upload-progress.is-visible {
    opacity: 1;
    transform: translateY(0);
}

.pd-upload-progress-title {
    display: flex;
    align-items: center;
    gap: 8px;
    font-weight: var(--pd-fw-semibold);
}

.pd-upload-progress-name {
    margin-top: 8px;
    overflow: hidden;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pd-upload-progress-track {
    height: 6px;
    margin-top: 10px;
    overflow: hidden;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
}

.pd-upload-progress-track span {
    display: block;
    width: 0;
    height: 100%;
    background: var(--pd-color-primary);
    transition: width .14s ease;
}

.pd-upload-progress-text {
    margin-top: 7px;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    text-align: right;
}

.pd-upload-progress.is-done .pd-upload-progress-track span {
    background: var(--pd-color-success);
}

.pd-upload-progress.is-error .pd-upload-progress-track span {
    background: var(--pd-color-error);
}

/* minmax(0, 1fr)：不让某一列的长内容把两栏撑得不一样宽 */
.rank-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
}

/* 手机上两栏各只剩一百多像素，五列的鱼丸榜挤不下，改成一栏一个榜 */
@media (max-width: 640px) {
    .rank-grid {
        grid-template-columns: minmax(0, 1fr);
    }

    /* 固定列宽在窄屏上五列均分，每列只剩三十多像素，break-all 会把「12345」拆成两行。
       改成按内容分配列宽，数字不再断开；只有过长的用户名才在溢出时换行。 */
    .rank-grid .forum-table {
        table-layout: auto;
    }

    .rank-grid .forum-table td {
        word-break: normal;
        overflow-wrap: break-word;
    }
}

/* 表格分隔线和表头跟随主题变量：原来写死的浅灰在深色模式下是一条条刺眼的白线 */
body.theme-pd .forum-table th,
body.theme-pd .forum-table td {
    border-bottom-color: var(--pd-color-divider);
}

body.theme-pd .forum-table th {
    color: var(--pd-color-text-secondary);
}

.profile-avatar-preview {
    margin: 12px 0;
}

.profile-avatar-preview img {
    width: 96px;
    height: 96px;
    border-radius: var(--pd-radius-round);
    object-fit: cover;
    border: 1px solid var(--pd-color-divider);
    background: var(--pd-color-surface-subtle);
}

form .btn {
    margin-top: 14px;
}

.alert {
    padding: 10px 12px;
    margin: 12px 0;
}

.success {
    color: var(--pd-color-success);
}

.danger {
    color: var(--pd-color-error-hover);
}

.search {
    overflow: hidden;
}

.search input {
    float: left;
    width: 80%;
}

.search .btn {
    float: right;
    width: 18%;
    margin-top: 0;
}

.footer {
    padding: 22px 0;
    color: var(--pd-color-text-secondary);
    border-top: 1px solid var(--pd-color-divider);
}

.footer-links {
    text-align: left;
}

/* Dynamic font application */
body {
    font-family: var(--pd-font-body);
}

.brand,
h1,
h2,
h3,
.hero h1,
.post-title-card h1,
.thread-title,
.signin-modal-box h2,
.signin-rank-mini h3 {
    font-family: var(--pd-font-title);
}

.post-content-box,
.thread-main,
.card,
input,
select,
textarea,
button {
    font-family: var(--pd-font-body);
}

/* 全站单条 Toast：右下角，适配手机安全区。 */
.pd-toast-stack {
    position: fixed;
    right: calc(var(--pd-space-4) + env(safe-area-inset-right, 0px));
    bottom: calc(var(--pd-space-4) + env(safe-area-inset-bottom, 0px));
    z-index: calc(var(--pd-z-popover) * 3);
    display: flex;
    align-items: flex-end;
    width: max-content;
    max-width: min(var(--pd-auth-max-width), calc(100vw - var(--pd-space-4) * 2 - env(safe-area-inset-right, 0px) - env(safe-area-inset-left, 0px)));
    pointer-events: none;
}

.pd-toast {
    display: inline-flex;
    gap: var(--pd-space-1);
    align-items: center;
    justify-content: flex-start;
    width: auto;
    max-width: 100%;
    min-height: var(--pd-btn-h-lg);
    padding: var(--pd-space-2) var(--pd-space-3);
    overflow: hidden;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-on-primary);
    pointer-events: auto;
    background: var(--pd-color-toast-bg);
    border: calc(var(--pd-tab-indicator) / 2) solid var(--pd-color-toast-border);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-2);
    animation: toast-in 0.2s ease-out;
}

.pd-toast > i {
    display: inline-grid;
    flex: 0 0 var(--pd-icon-lg);
    place-items: center;
    width: var(--pd-icon-lg);
    height: var(--pd-icon-lg);
    font-size: var(--pd-icon-md);
}

/* pre-line：消息用 textContent 写入，上传失败明细等是 "\n" 拼起来的，要按行显示 */
.pd-toast > .pd-toast-message {
    flex: 1 1 auto;
    min-width: 0;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-on-primary);
    white-space: pre-line;
    overflow-wrap: anywhere;
}

.pd-toast-success > i {
    color: var(--pd-color-success);
}

.pd-toast-error > i {
    color: var(--pd-color-highlight);
}

.pd-toast.is-leaving {
    animation: toast-out 0.18s ease-in forwards;
}

@keyframes toast-in {
    from {
        opacity: 0;
        transform: translateY(var(--pd-space-1));
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes toast-out {
    to {
        opacity: 0;
        transform: translateY(var(--pd-space-1));
    }
}

/* Sticky footer and interaction polish */
html {
    min-height: 100%;
}

body {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

main.wrap {
    width: 100%;
}

.footer {
    margin-top: auto;
    flex-shrink: 0;
}

.pd-zoomable-image {
    cursor: zoom-in;
}

.content img,
.attachment-img {
    transition: transform 180ms ease, opacity 180ms ease;
}

@media (prefers-reduced-motion: reduce) {
    body,
    .content img,
    .attachment-img {
        transition: none;
    }
}

/* Site width and search modal */
:root {
    --pd-site-width: 1024px;
}

.wrap,
main.wrap,
.footer .wrap {
    width: var(--pd-site-width);
    max-width: calc(100vw - 32px);
    margin-right: auto;
    margin-left: auto;
}

main.wrap {
    flex: 1 0 auto;
}

.grid {
    grid-template-columns: minmax(0, 700px) 300px;
}

.latest-list,
.grid > section .card {
    width: 100%;
}

.grid > aside {
    justify-self: stretch;
}

@media (max-width: 860px) {
    .grid {
        display: block;
    }

    .grid > aside {
        margin-top: 18px;
    }
}

/* 标题 / 正文字体栈 */
:root {
    --pd-title-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif;
    --pd-content-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif;
}

/* 链接：平时品牌蓝，悬停加深（此前平时和悬停被合成一条，悬停没有变化） */
a,
body.theme-pd a,
a:visited {
    color: var(--pd-color-primary);
}

a:hover,
body.theme-pd a:hover {
    color: var(--pd-color-primary-hover);
}

h1,
h2,
h3,
.brand,
.hero h1,
.post-title-card h1,
.signin-modal-box h2,
.signin-rank-mini h3 {
    color: var(--pd-color-primary);
    font-family: var(--pd-heading-font);
    font-weight: var(--pd-h1-weight);
}

h1,
.hero h1,
.post-title-card h1 {
    font-size: var(--pd-h1-size);
    line-height: var(--pd-h1-lh);
}

h2 {
    font-size: var(--pd-h2-size);
    line-height: var(--pd-h2-lh);
}

h3,
.signin-rank-mini h3 {
    font-size: var(--pd-h3-size);
    line-height: var(--pd-h3-lh);
}

.muted,
.hero p,
.meta,
.thread-meta {
    color: var(--pd-color-text-secondary);
}

/* 通用卡片内边距（此前选择器列表中间丢了规则体，把签到弹窗等也一并强制成 24px） */
.card,
.content-card {
    padding: var(--pd-card-padding);
}

.latest-list .card,
.thread-list .card {
    box-shadow: var(--pd-shadow-1);
}

.grid > aside .card,
.sidebar {
    font-size: var(--pd-fs-sm);
    line-height: 21px;
    border-color: var(--pd-color-border-strong);
}

/* 按钮尺寸阶梯（全站统一）：
   默认 .btn 40px/14px · .btn-small 32px/13px · 徽章 .action-badge 30px/12px
   此前这里是 58px/20px，导致全站按钮（含签到面板「确认」）过大且互不协调。 */
.btn,
button.btn,
input[type="submit"],
.hero .btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-btn-gap);
    height: var(--pd-btn-h);
    min-height: var(--pd-btn-h);
    padding: 0 var(--pd-btn-px);
    font-size: var(--pd-btn-fs);
    line-height: 1;
}

/* 按下态（此前和悬停态被合成一条，悬停时显示的是按下的深色） */
.btn:where(:not(.btn-light, .btn-danger)):active:not(:disabled):not([aria-disabled="true"]),
input[type="submit"]:active:not(:disabled):not([aria-disabled="true"]) {
    background: var(--pd-color-primary-active) !important;
}

/* 浅色按钮 / 帖子分页：平时浅底，悬停稍深（此前平时和悬停被合成一条，悬停没有反馈） */
.content-page-nav a {
    color: var(--pd-color-primary) !important;
    background: var(--pd-color-surface-soft);
}

.content-page-nav a:hover {
    color: var(--pd-color-primary) !important;
    background: var(--pd-color-divider);
}

.content-page-nav a.active {
    color: var(--pd-color-on-primary) !important;
    background: var(--pd-color-primary);
    border-color: var(--pd-color-primary);
}

/* 聚焦态才出现品牌色描边环。此前 textarea 后多了一个逗号，
   导致规则对所有 input/select/textarea 永久生效，搜索框收起时
   这圈光晕被 overflow:hidden 裁成一条竖线。 */
input:focus,
select:focus,
textarea:focus {
    border-color: var(--pd-color-primary);
    box-shadow: 0 0 0 2px rgba(var(--pd-color-primary-rgb), .12);
    outline: 0;
}

input:disabled,
select:disabled,
textarea:disabled {
    color: var(--pd-color-border-strong);
    background: var(--pd-color-surface-soft);
    border-color: var(--pd-color-border);
}

.signin-modal-overlay {
    background: rgba(34, 34, 34, .42);
    backdrop-filter: none;
}

.tag,
.badge {
    color: var(--pd-color-text);
    background: var(--pd-color-primary-soft);
    border: 1px solid var(--pd-color-primary-muted);
    border-radius: var(--pd-badge-radius);
}

.tag.good {
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
    border-color: var(--pd-color-primary);
}

.alert {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: 0;
}

.alert.success,
.success {
    color: var(--pd-color-success);
}

.danger,
.alert.danger {
    color: var(--pd-color-error-hover);
}

table,
.table {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border);
}

th,
td {
    border-color: var(--pd-color-border);
}

code,
pre {
    color: var(--pd-color-text);
    background: var(--pd-color-surface-soft);
    border: 1px solid var(--pd-color-border);
    border-radius: 0;
}

/* 基础变量 — 颜色 / 按钮 / 卡片 / 字体 / 间距 */

body.theme-pd {
    /* 首页布局 */
    --pd-home-gap: 20px;   /* 两栏间距 = 页面两侧到内容的边距（main.wrap 的左右内边距 20px），三处一样宽；左栏 1fr 自动变宽 */
    --pd-home-cols: minmax(0, 1fr) var(--pd-sidebar-width);
}

/* forum index */
body.theme-pd {
    color: var(--pd-color-text);
}

body.theme-pd main.wrap {
    box-sizing: border-box;
    max-width: none;
    width: 100%;
    padding: 0 0 52px;
}

body.theme-pd .pd-home-shell {
    width: min(1152px, calc(100vw - 48px));
    margin: 0 auto;
}

body.theme-pd .pd-feed-tabs::-webkit-scrollbar {
    display: none;
}

/* 首页视图切换：开关样式。轨道是灰色胶囊，蓝色圆形滑块里显示当前视图的图标；
   两个按钮是左右两半透明点击区（左 = 列表，右 = 版块），滑块位置由 .pd-home-shell 的 data-home-view 决定。 */
body.theme-pd .pd-home-view-controls {
    --pd-switch-w: calc(var(--pd-space-5) + var(--pd-space-3));
    --pd-switch-h: calc(var(--pd-space-3) + var(--pd-space-1) / 2);
    --pd-switch-knob: var(--pd-space-5);
    position: relative;
    display: inline-flex;
    flex: none;
    align-self: center;
    width: var(--pd-switch-w);
    height: var(--pd-switch-h);
    background: var(--pd-color-border-strong);
    border-radius: 999px;
}
body.theme-pd .pd-home-view-controls::before {
    content: "\f03a";
    position: absolute;
    top: calc((var(--pd-switch-h) - var(--pd-switch-knob)) / 2);
    left: 0;
    display: grid;
    place-items: center;
    width: var(--pd-switch-knob);
    height: var(--pd-switch-knob);
    color: var(--pd-color-on-primary);
    font: var(--fa-font-solid);
    font-size: var(--pd-icon-md);
    background: var(--pd-color-primary);
    border-radius: 50%;
    box-shadow: var(--pd-shadow-1);
    pointer-events: none;
    transition: left .15s cubic-bezier(.4, 0, .2, 1);
}
body.theme-pd .pd-home-shell[data-home-view="board"] .pd-home-view-controls::before {
    content: "\f009";
    left: calc(var(--pd-switch-w) - var(--pd-switch-knob));
}
body.theme-pd .pd-home-view-button {
    flex: 1;
    height: 100%;
    padding: 0;
    font-size: 0;
    background: transparent;
    border: 0;
    border-radius: 999px;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
body.theme-pd .pd-home-view-button i { display: none; }
body.theme-pd .pd-home-view-button:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-home-view-controls::before { transition: none; }
}

/* 视图显隐：版块视图只换左栏内容，右栏一直在 */
body.theme-pd .pd-board,
body.theme-pd .pd-board-title { display: none; }
body.theme-pd .pd-home-shell[data-home-view="board"] .pd-feed-tabs,
body.theme-pd .pd-home-shell[data-home-view="board"] .pd-feed { display: none; }
body.theme-pd .pd-home-shell[data-home-view="board"] .pd-board { display: block; }
body.theme-pd .pd-home-shell[data-home-view="board"] .pd-board-title {
    display: block;
    flex: 1;
    min-width: 0;
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-h2-size);
    font-weight: var(--pd-h2-weight);
    line-height: var(--pd-tab-h-touch);
}

/* 全部版块标题：图标与文字同大小，不再用卡片标题那个 24px 大图标 */
body.theme-pd .pd-board-title-icon {
    margin-right: var(--pd-space-2);
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-md);
}
body.theme-pd .pd-home-shell[data-home-view="board"] .pd-board-title:has(+ .pd-ticker) { flex: none; }
/* 标题行中间的站点动态：一行一条，逐条向上滚动，悬停暂停；只在版块视图出现 */
body.theme-pd .pd-ticker { display: none; }
body.theme-pd .pd-home-shell[data-home-view="board"] .pd-ticker {
    display: flex;
    flex: 1;
    align-items: center;
    min-width: 0;
    gap: var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-ticker-icon {
    flex: none;
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-sm);
    transform-origin: 30% 70%;
    animation: pd-ticker-ring 3s ease-in-out infinite;
}
@keyframes pd-ticker-ring {
    0%, 60%, 100% { transform: rotate(0); }
    66% { transform: rotate(-14deg) scale(1.1); }
    72% { transform: rotate(10deg) scale(1.1); }
    78% { transform: rotate(-8deg); }
    84% { transform: rotate(5deg); }
    90% { transform: rotate(0); }
}
body.theme-pd .pd-ticker-view {
    --pd-ticker-h: var(--pd-space-5);
    flex: 1;
    min-width: 0;
    height: var(--pd-ticker-h);
    overflow: hidden;
}
body.theme-pd .pd-ticker-list {
    margin: 0;
    padding: 0;
    list-style: none;
    animation: pd-ticker-roll calc((var(--pd-ticker-count) - 1) * 4s) steps(calc(var(--pd-ticker-count) - 1)) infinite;
}
body.theme-pd .pd-ticker-view:hover .pd-ticker-list { animation-play-state: paused; }
body.theme-pd .pd-ticker-list li {
    height: var(--pd-ticker-h);
    overflow: hidden;
    line-height: var(--pd-ticker-h);
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd .pd-ticker-list a { color: inherit; }
body.theme-pd .pd-ticker-list a:hover { color: var(--pd-color-primary); }
@keyframes pd-ticker-roll {
    to { transform: translateY(calc((var(--pd-ticker-count) - 1) * -1 * var(--pd-ticker-h))); }
}
@media (max-width: 760px) {
    body.theme-pd .pd-home-shell[data-home-view="board"] .pd-ticker { display: none; }
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-ticker-list,
    body.theme-pd .pd-ticker-icon { animation: none; }
}

/* 全部版块：一行一个版块（单列），版块不多时和右栏高度更接近；版块入口和最近讨论各自保留独立链接。 */
body.theme-pd .pd-board-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--pd-space-2);
    padding-top: var(--pd-space-3);
}
body.theme-pd .pd-board-card {
    --pd-board-icon-color: var(--pd-board-color-0);
    display: flex;
    flex-direction: column;
    min-width: 0;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius-row);
    box-shadow: var(--pd-shadow-2);
}
body.theme-pd .pd-board-tone-0 { --pd-board-icon-color: var(--pd-board-color-0); }
body.theme-pd .pd-board-tone-1 { --pd-board-icon-color: var(--pd-board-color-1); }
body.theme-pd .pd-board-tone-2 { --pd-board-icon-color: var(--pd-board-color-2); }
body.theme-pd .pd-board-tone-3 { --pd-board-icon-color: var(--pd-board-color-3); }
body.theme-pd .pd-board-tone-4 { --pd-board-icon-color: var(--pd-board-color-4); }
body.theme-pd .pd-board-tone-5 { --pd-board-icon-color: var(--pd-board-color-5); }
body.theme-pd .pd-board-tone-6 { --pd-board-icon-color: var(--pd-board-color-6); }
body.theme-pd .pd-board-tone-7 { --pd-board-icon-color: var(--pd-board-color-7); }
body.theme-pd .pd-board-tone-8 { --pd-board-icon-color: var(--pd-board-color-8); }
body.theme-pd .pd-board-tone-9 { --pd-board-icon-color: var(--pd-board-color-9); }
body.theme-pd .pd-board-entry {
    position: relative;
    display: grid;
    flex: 1;
    grid-template-columns: minmax(0, 1fr) var(--pd-board-art-size);
    align-items: start;
    gap: var(--pd-space-2);
    min-width: 0;
    padding: var(--pd-card-padding);
    color: var(--pd-color-text);
    border-radius: var(--pd-card-radius-row);
}
/* 版块名是这块区域的主链接：::after 铺满整个 .pd-board-entry（简介、配图处点击都进版块）；
   版主名字、今日新增角标叠在它上面（z-index 2），可以单独点 / 悬停 */
body.theme-pd .pd-board-link {
    color: inherit;
    text-decoration: none;
}
body.theme-pd .pd-board-link::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    border-radius: var(--pd-card-radius-row);
}
body.theme-pd .pd-board-link:focus-visible { outline: none; }
body.theme-pd .pd-board-card:hover {
    border-color: color-mix(in srgb, var(--pd-board-icon-color) 40%, var(--pd-color-border));
}
body.theme-pd .pd-board-entry:hover .pd-board-label {
    color: var(--pd-board-icon-color);
}
body.theme-pd .pd-board-entry:has(.pd-board-link:focus-visible),
body.theme-pd .pd-board-mod-name:focus-visible,
body.theme-pd .pd-board-last-title:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-board-icon-color);
    outline-offset: calc(-1 * var(--pd-tab-indicator));
}
body.theme-pd .pd-board-entry--plain { grid-template-columns: minmax(0, 1fr); }
body.theme-pd .pd-board-art {
    display: block;
    width: var(--pd-board-art-size);
    height: var(--pd-board-art-size);
    object-fit: contain;
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-board-main {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    min-width: 0;
}
body.theme-pd .pd-board-name {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-1);
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-h2-size);
    font-weight: var(--pd-h2-weight);
    line-height: var(--pd-h2-lh);
}
body.theme-pd .pd-board-heading {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    flex: 0 0 var(--pd-board-heading-w);
}
body.theme-pd .pd-board-title-icon {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: var(--pd-icon-sm);
    height: var(--pd-icon-sm);
    color: var(--pd-board-icon-color);
    font-size: var(--pd-icon-sm);
    line-height: 1;
}
body.theme-pd .pd-board-label {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* 版块卡片的今日新增：绿色「+N」文字，不用圆形徽标。数字跟着首页每 20 秒的更新检查实时上涨（assets/main.js 的 updateBoardToday），
   涨的时候轻轻跳一下；0 的时候隐藏 */
body.theme-pd .pd-board-activity {
    position: relative;
    z-index: 2;
    top: calc(-1 * var(--pd-space-1) / 4);
    display: inline-flex;
    flex: none;
    align-self: flex-start;
    align-items: baseline;
    color: var(--pd-text-green);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
body.theme-pd .pd-board-activity[hidden] { display: none; }
body.theme-pd .pd-board-activity.is-bumped { transform-origin: center; animation: pdBoardTodayBump .6s ease; }
@keyframes pdBoardTodayBump {
    0% { transform: perspective(var(--pd-side-art)) rotateX(-75deg); opacity: .35; }
    45% { transform: perspective(var(--pd-side-art)) rotateX(15deg); opacity: 1; }
    70% { transform: perspective(var(--pd-side-art)) rotateX(-6deg); }
    100% { transform: perspective(var(--pd-side-art)) rotateX(0deg); }
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-board-activity.is-bumped { animation: none; }
}
body.theme-pd .pd-board-desc {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-relaxed);
    overflow-wrap: anywhere;
}
body.theme-pd .pd-board-counts {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    min-width: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-board-counts { flex: none; font-weight: var(--pd-fw-regular); white-space: nowrap; }
body.theme-pd .pd-board-counts b {
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-semibold);
}
/* 版主：标题行中间，紧跟在版块名右边，主题 / 回复数仍靠最右 */
body.theme-pd .pd-board-mods,
body.theme-pd .pd-board-mod-names {
    display: flex;
    flex: 1 1 auto;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-board-mods { margin-left: var(--pd-space-1); }
body.theme-pd .pd-board-mod-empty { color: var(--pd-color-text-tertiary); white-space: nowrap; }
body.theme-pd .pd-board-mod-label { flex: none; color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-board-mod-names { container: pd-board-moderators / inline-size; }
body.theme-pd .pd-board-mod-name {
    position: relative;
    z-index: 2;
    flex: 0 1 auto;
    min-width: 0;
    overflow: hidden;
    color: var(--pd-color-text-secondary);
    text-decoration: none;
    text-overflow: ellipsis;
    white-space: nowrap;
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-board-mod-name:hover { color: var(--pd-color-primary); }
@container pd-board-moderators (max-width: 160px) {
    body.theme-pd .pd-board-mod-name:nth-child(n+3) { display: none; }
}
@container pd-board-moderators (max-width: 96px) {
    body.theme-pd .pd-board-mod-name:nth-child(n+2) { display: none; }
}
body.theme-pd .pd-board-latest {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    min-width: 0;
    margin: 0 var(--pd-card-padding) var(--pd-card-padding);
    padding-top: var(--pd-space-2);
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-board-last-title {
    display: flex;
    flex: 1;
    align-items: center;
    gap: var(--pd-space-1);
    min-width: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    text-decoration: none;
}
body.theme-pd .pd-board-last-label,
body.theme-pd .pd-board-latest time {
    flex: none;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-board-last-name {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd .pd-board-last-title:hover { color: var(--pd-color-primary); }

@media (max-width: 480px) {
    body.theme-pd .pd-board-card { --pd-board-art-size: var(--pd-board-art-size-sm); }
    body.theme-pd .pd-board-name { flex-wrap: wrap; gap: calc(var(--pd-space-1) / 2); }
    body.theme-pd .pd-board-mods { order: 3; flex-basis: 100%; margin-left: 0; }
    body.theme-pd .pd-board-heading { gap: calc(var(--pd-space-1) / 4); }
    body.theme-pd .pd-board-counts {
        gap: calc(var(--pd-space-1) / 2);
        font-size: var(--pd-fs-2xs);
    }
    body.theme-pd .pd-board-activity { font-size: var(--pd-fs-2xs); }
}

body.theme-pd .pd-home-layout {
    display: grid;
    grid-template-columns: var(--pd-home-cols);
    gap: var(--pd-home-gap);
    align-items: start;
}
/* 右栏永远保持自然高度：点「加载更多」左栏变长时，右栏不被拉伸 */
body.theme-pd .pd-home-layout > .pd-home-sidebar {
    align-self: start;
}

/* 个人主页等处的侧栏卡片（首页右栏已改用 .pd-promo / .pd-side-box） */
body.theme-pd .pd-side-card {
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-1);
}

/* 首页左栏：参照 phpBB，帖子流直接铺在外框白底上，不套卡片 */
body.theme-pd .pd-home-main { min-width: 0; }
body.theme-pd .pd-feed {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

/* 标签行：排序标签（下划线式）+ 版块视图标题 + 列表 / 版块切换器 */
body.theme-pd .pd-feed-head {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    position: relative;
    border-bottom: 1px solid transparent;
}

body.theme-pd .pd-feed-tabs {
    display: flex;
    flex: 1;
    align-items: center;
    min-width: 0;
    gap: 0;
    margin: 0;
    overflow-x: auto;
    scrollbar-width: none;
}

body.theme-pd .pd-feed-tabs a {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    min-width: auto;
    height: var(--pd-tab-h-touch);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-tab-fs);
    font-weight: var(--pd-fw-regular);
    text-decoration: none;
    background: transparent;
    border: 0;
    border-radius: 0;
}

body.theme-pd .pd-feed-tabs a:hover { color: var(--pd-color-text); }

/* 选中线由 .pd-feed-glider 滑动指示，见 main.js 的 initFeedGlider */
body.theme-pd .pd-feed-tabs a.active {
    color: var(--pd-color-text);
    font-weight: var(--pd-tab-weight);
}
/* 滑块：只有底部一条两端渐隐的色线 + 模糊光晕，没有底色，沿用当前标签的类型颜色，切换时带回弹滑动 */
body.theme-pd .pd-feed-glider {
    --pd-glider-color: var(--pd-color-primary);
    position: absolute;
    bottom: 0;
    left: 0;
    width: 0;
    height: var(--pd-tab-indicator);
    pointer-events: none;
    opacity: 0;
    background: linear-gradient(90deg, transparent 0%, var(--pd-glider-color) 25%, var(--pd-glider-color) 75%, transparent 100%);
    transition: transform .5s cubic-bezier(.37, 1.95, .66, .56), width .5s cubic-bezier(.37, 1.95, .66, .56), opacity .2s ease;
    will-change: transform, width;
}
body.theme-pd .pd-feed-glider.is-ready { opacity: 1; }
body.theme-pd .pd-feed-glider::before {
    content: "";
    position: absolute;
    left: 15%;
    right: 15%;
    bottom: 0;
    height: 300%;
    background: var(--pd-glider-color);
    opacity: .5;
    filter: blur(10px);
    transform: translateY(50%) scaleY(.3);
}
body.theme-pd .pd-home-shell[data-home-view="board"] .pd-feed-glider { display: none; }
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-feed-glider { transition: none; }
}

body.theme-pd .pd-thread-list {
    display: grid;
}

/* 新话题提示条：居中的蓝色胶囊，带向上箭头，浮起一点阴影，点击回到最新 */
body.theme-pd .pd-new-topics {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-1);
    width: fit-content;
    max-width: 100%;
    margin: var(--pd-space-3) auto var(--pd-space-1);
    padding: 0 var(--pd-space-3);
    height: var(--pd-btn-h);
    color: var(--pd-color-on-primary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
    line-height: var(--pd-lh-tight);
    background: var(--pd-color-primary);
    border: 0;
    border-radius: var(--pd-radius-pill);
    box-shadow: var(--pd-shadow-2);
    cursor: pointer;
    transition: background-color .15s ease;
    animation: pdNewTopics .28s ease;
}
body.theme-pd .pd-new-topics i { font-size: var(--pd-icon-sm); }
body.theme-pd .pd-new-topics[hidden] { display: none !important; }
body.theme-pd .pd-new-topics b { font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-new-topics:hover { background: var(--pd-color-primary-hover); }
body.theme-pd .pd-new-topics.is-loading { opacity: .7; pointer-events: none; }
body.theme-pd .pd-new-topics:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-space-1) / 4);
}
body.theme-pd .pd-thread-row.pd-thread-row--updated {
    animation: pdFeedUpdated 5s ease-out;
}
@keyframes pdFeedUpdated {
    0%, 65% { background-color: var(--pd-feed-update-bg); }
    100% { background-color: transparent; }
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-new-topics { animation: none; }
    body.theme-pd .pd-thread-row.pd-thread-row--updated {
        animation: none;
        background-color: var(--pd-feed-update-bg);
    }
}
@keyframes pdNewTopics {
    from { opacity: 0; transform: translateY(-6px); }
    to { opacity: 1; transform: translateY(0); }
}
@keyframes pdSpin { to { transform: rotate(360deg); } }
body.theme-pd .pd-feed-end {
    padding: 6px 0 2px;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-feed-end[hidden] { display: none; }

/* 深色适配 */
body.theme-pd-dark .pd-feed-end { color: var(--pd-color-text-tertiary); }

body.theme-pd .pd-thread-row {
    display: grid;
    gap: 12px;
    align-items: center;
    padding: 8px 12px;
    border-bottom: 1px solid var(--pd-color-divider);
}

body.theme-pd .pd-thread-row:hover .pd-avatar {
    transform: scale(1.1);
}

body.theme-pd .pd-thread-row:last-child {
    border-bottom: 0;
}

body.theme-pd .pd-avatar {
    display: block;
    width: 40px;
    height: 40px;
    overflow: hidden;
    background: var(--pd-color-surface-soft);
    border-radius: 0;
    transition: transform .15s ease;
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 0c9.601 0 12 2.399 12 12 0 9.601-2.399 12-12 12-9.601 0-12-2.399-12-12C0 2.399 2.399 0 12 0z'/%3E%3C/svg%3E");
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 0c9.601 0 12 2.399 12 12 0 9.601-2.399 12-12 12-9.601 0-12-2.399-12-12C0 2.399 2.399 0 12 0z'/%3E%3C/svg%3E");
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}

body.theme-pd .pd-avatar img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

body.theme-pd .pd-thread-main {
    min-width: 0;
}

body.theme-pd .pd-thread-main h2 {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    margin: 0;
    color: var(--pd-color-text);
    font-family: var(--pd-font-body);
    font-size: var(--pd-list-title-size);
    line-height: var(--pd-lh-normal);
}

body.theme-pd .pd-thread-main h2 a {
    min-width: 0;
    color: var(--pd-color-text);
    text-decoration: none;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

body.theme-pd .pd-thread-main p {
    display: flex;
    align-items: center;
    gap: 14px;
    min-width: 0;
    margin: 0;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-snug);
}

/* 「New」标记：FontAwesome rectangle-new 图标 + 轻微呼吸动画 */
body.theme-pd .pd-new {
    margin-left: 5px;
    color: var(--pd-color-highlight);
    font-size: var(--pd-icon-md);
    line-height: 1;
    vertical-align: middle;
    animation: pdNewPulse 1.8s ease-in-out infinite;
}
@keyframes pdNewPulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: .72; transform: scale(1.08); }
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-new { animation: none; }
}
body.theme-pd-dark .pd-new {
    color: var(--pd-color-error);
}

body.theme-pd .pd-author-link,
body.theme-pd .pd-reply-author {
    color: inherit;
    font-weight: var(--pd-fw-regular);
    text-decoration: none;
}

body.theme-pd .pd-author-link:hover,
body.theme-pd .pd-reply-author:hover {
    color: var(--pd-color-primary);
}

/* 置顶/精华：正方形实心图标徽章 */
body.theme-pd .pd-badge-sq {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    margin-right: 5px;
    padding: 0;
    font-size: var(--pd-icon-xs);
    line-height: 1;
    color: var(--pd-color-on-primary) !important;
    border-radius: var(--pd-badge-radius);
    vertical-align: middle;
    flex: 0 0 auto;
}
body.theme-pd .pd-badge-sq i {
    color: var(--pd-color-on-primary);
}

body.theme-pd .pd-thread-main h2 a.pd-title-good,
body.theme-pd .thread-title.pd-title-good,
body.theme-pd .post-title-card h1.pd-title-good {
    color: var(--pd-color-featured) !important;
}

body.theme-pd .pd-thread-main h2 a.pd-title-good:hover,
body.theme-pd .thread-title.pd-title-good:hover {
    color: var(--pd-color-featured) !important;
}

body.theme-pd .pd-thread-main h2 a.pd-title-top,
body.theme-pd .thread-title.pd-title-top,
body.theme-pd .post-title-card h1.pd-title-top {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd .pd-thread-main h2 a.pd-title-top-board,
body.theme-pd .thread-title.pd-title-top-board,
body.theme-pd .post-title-card h1.pd-title-top-board {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd .pd-thread-main h2 a.pd-title-top:hover,
body.theme-pd .thread-title.pd-title-top:hover,
body.theme-pd .post-title-card h1.pd-title-top:hover {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd .pd-thread-main h2 a.pd-title-top-board:hover,
body.theme-pd .thread-title.pd-title-top-board:hover,
body.theme-pd .post-title-card h1.pd-title-top-board:hover {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd .pd-thread-main h2 a.pd-title-top.pd-title-good,
body.theme-pd .thread-title.pd-title-top.pd-title-good,
body.theme-pd .post-title-card h1.pd-title-top.pd-title-good {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd .pd-image-icon {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-md);
}
body.theme-pd .pd-attach-icon {
    margin-left: 4px;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-md);
    transform: rotate(15deg);
    transition: color .16s ease, transform .16s ease;
}
body.theme-pd .pd-thread-row:hover .pd-attach-icon {
    color: var(--pd-color-text-tertiary);
    transform: rotate(0deg);
}

body.theme-pd .pd-home-sidebar {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    min-width: 0;
    align-content: start;
    gap: var(--pd-home-card-gap);
}

body.theme-pd .pd-side-card {
    padding: 16px 20px;
}

body.theme-pd .pd-side-card h2 {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0 0 8px;
    padding-bottom: 8px;
    color: var(--pd-color-text);
    border-bottom: 1px solid var(--pd-color-divider);
}

body.theme-pd .pd-side-card h2 span {
    width: 4px;
    height: 16px;
    background: var(--pd-color-primary);
    border-radius: var(--pd-badge-radius);
}

body.theme-pd .footer {
    margin-top: 26px;
    padding: 0 0 42px;
    background: transparent;
    border: 0;
    box-shadow: none;
}

body.theme-pd .footer .wrap {
    width: min(1200px, calc(100vw - 48px));
    max-width: none;
}

body.theme-pd .footer-logo {
    display: inline-flex;
    width: 172px;
    text-decoration: none;
}

body.theme-pd .footer-logo img {
    display: block;
    width: 100%;
    height: auto;
}

body.theme-pd .footer-social {
    display: grid;
    justify-items: end;
    gap: 14px;
}

@media (max-width: 1180px) {
    body.theme-pd .pd-home-shell {
        width: min(1000px, calc(100vw - 32px));
    }

    body.theme-pd .footer-social {
        grid-column: 1 / -1;
        grid-template-columns: minmax(0, 1fr) auto;
        justify-items: start;
        align-items: center;
    }

    body.theme-pd .pd-home-layout {
        grid-template-columns: minmax(0, 1fr);
    }

    /* 单栏时右栏排在帖子流后面：左栏没有卡片边缘，用一条分隔线隔开 */
    body.theme-pd .pd-home-sidebar {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        padding-top: var(--pd-space-4);
        border-top: 1px solid var(--pd-color-divider);
    }

    body.theme-pd .pd-promo {
        grid-column: 1 / -1;
    }
}

/* 小屏适配（此 @media 开头曾在历史重构中丢失，导致以下规则泄漏到所有屏幕宽度） */
@media (max-width: 760px) {

    body.theme-pd .pd-home-shell {
        width: calc(100vw - 20px);
    }

    body.theme-pd .footer-logo {
        width: 150px;
    }

    body.theme-pd .footer-social {
        grid-template-columns: 1fr;
        justify-items: start;
    }

    body.theme-pd .pd-feed-tabs a {
        padding: 0 var(--pd-space-2);
    }

    body.theme-pd .pd-thread-row {
        grid-template-columns: 40px minmax(0, 1fr);
        gap: 12px;
    }

    body.theme-pd .pd-thread-main h2 {
        font-size: var(--pd-list-title-size);
        margin: 0;
        line-height: var(--pd-lh-snug);
    }

    body.theme-pd .pd-thread-main p {
        gap: 8px;
        flex-wrap: wrap;
        font-size: var(--pd-fs-xs);
        line-height: 1.5;
    }

    body.theme-pd .pd-home-sidebar {
        grid-template-columns: minmax(0, 1fr);
        gap: var(--pd-space-2);
    }

    body.theme-pd .pd-side-box {
        padding: var(--pd-card-padding-sm);
    }

    body.theme-pd .pd-promo {
        --pd-side-art: 72px;
    }

    body.theme-pd .footer .wrap {
        width: calc(100vw - 20px);
    }
}

/* 首页右栏横幅广告位：3:1，高度是宽度的 1/3。外观和右栏卡片（.pd-side-box）同一套：卡片底色、边框、圆角、二级阴影，
   上传的图片按 3:1 裁切后装在圆角里；没有广告时是「广告位招租」，同样的卡片外观。投放页的素材预览（.pd-adv-preview）也用这一套 */
body.theme-pd .pd-side-banner,
body.theme-pd .pd-adv-preview {
    width: 100%;
    aspect-ratio: 3 / 1;
    overflow: hidden;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius-side);
    box-shadow: var(--pd-shadow-2);
}
body.theme-pd .pd-side-banner a,
body.theme-pd .pd-side-banner img {
    display: block;
    width: 100%;
    height: 100%;
}
body.theme-pd .pd-side-banner img { object-fit: cover; }
body.theme-pd .pd-side-banner--empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-snug);
    text-decoration: none;
    transition: border-color .15s ease;
}
body.theme-pd .pd-side-banner--empty strong {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-side-banner--empty:hover {
    border-color: var(--pd-color-link);
    text-decoration: none;
}
body.theme-pd .pd-side-banner--empty:hover strong {
    color: var(--pd-color-link);
}

/* 广告投放页（/advertise，pages/advertise.php） */
body.theme-pd .pd-adv-form {
    margin: var(--pd-space-3) 0;
}
body.theme-pd .pd-adv-steps {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin: var(--pd-space-3) 0 0;
    padding: 0;
    list-style: none;
    counter-reset: pd-adv-step;
}
body.theme-pd .pd-adv-steps li {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-2) calc(var(--pd-space-1) / 2) calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-snug);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-adv-steps li::before {
    counter-increment: pd-adv-step;
    content: counter(pd-adv-step);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    color: var(--pd-color-on-primary);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-primary);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-adv-note {
    margin: var(--pd-space-2) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}

/* 选择广告位：左边首页示意图（主栏 + 右栏，三个广告位按顺序标号），右边广告位卡片 */
body.theme-pd .pd-adv-pick {
    display: grid;
    grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
    gap: var(--pd-space-4);
    align-items: start;
}
body.theme-pd .pd-adv-map {
    display: grid;
    grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
    gap: var(--pd-space-1);
    padding: var(--pd-space-2);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-adv-map-main,
body.theme-pd .pd-adv-map-side {
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-adv-map-main span,
body.theme-pd .pd-adv-map-card {
    display: block;
    height: var(--pd-space-3);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-adv-map-card { height: var(--pd-space-5); }
body.theme-pd .pd-adv-map-slot {
    display: flex;
    align-items: center;
    justify-content: center;
    aspect-ratio: 3 / 1;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-3xs);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-surface);
    border: 1px dashed var(--pd-color-border-strong);
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-adv-map-slot.is-active {
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
    border: 1px solid var(--pd-color-primary);
}
/* 深色主题的品牌蓝较亮，实色蓝底上用深色字（和 .btn 一样），白字对比不够 */
body.theme-pd-dark .pd-adv-steps li::before,
body.theme-pd-dark .pd-adv-map-slot.is-active {
    color: var(--pd-color-surface);
}
body.theme-pd .pd-adv-slots {
    display: grid;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-adv-choice {
    position: relative;
    display: block;
    margin: 0;
    padding: var(--pd-space-2) var(--pd-space-3);
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-regular);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    cursor: pointer;
    transition: border-color .15s ease, background-color .15s ease;
}
body.theme-pd .pd-adv-choice input {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: 0;
    opacity: 0;
    pointer-events: none;
}
body.theme-pd .pd-adv-choice:hover { border-color: var(--pd-color-border-strong); }
body.theme-pd .pd-adv-choice:has(input:checked) {
    background: var(--pd-color-primary-soft);
    border-color: var(--pd-color-primary);
    box-shadow: inset 0 0 0 1px var(--pd-color-primary);
}
body.theme-pd .pd-adv-choice:has(input:focus-visible) {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-adv-choice:has(input:disabled) {
    cursor: not-allowed;
    opacity: .6;
}
body.theme-pd .pd-adv-slot {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-2);
}
body.theme-pd .pd-adv-slot-top {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-adv-slot-top b { font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-adv-slot-meta {
    grid-column: 1;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-adv-slot-price {
    grid-column: 2;
    grid-row: 1 / span 2;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    white-space: nowrap;
}
body.theme-pd .pd-adv-slot-price b {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-adv-tag {
    padding: 0 var(--pd-space-1);
    color: var(--pd-text-green);
    font-size: var(--pd-fs-2xs);
    line-height: var(--pd-lh-normal);
    background: var(--pd-color-success-soft);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-adv-tag--busy {
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
}

/* 投放时长：月数、这个时长的总价、有折扣的标「季付 · 省 5%」 */
body.theme-pd .pd-adv-durations {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: var(--pd-space-1);
}
body.theme-pd .pd-adv-duration {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: var(--pd-space-2) var(--pd-space-1);
    text-align: center;
}
body.theme-pd .pd-adv-duration-name {
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-adv-duration-total {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-adv-off {
    padding: 0 var(--pd-space-1);
    color: var(--pd-text-green);
    font-size: var(--pd-fs-2xs);
    line-height: var(--pd-lh-normal);
    white-space: nowrap;
    background: var(--pd-color-success-soft);
    border-radius: var(--pd-radius-pill);
}

/* 上传素材：预览和首页右栏横幅一模一样（宽度就是右栏宽度），旁边（手机上在下面）是选图按钮和提示 */
body.theme-pd .pd-adv-upload {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-3);
}
body.theme-pd .pd-adv-preview {
    position: relative;
    display: flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    width: var(--pd-sidebar-width);
    max-width: 100%;
}
body.theme-pd .pd-adv-preview-empty {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-adv-preview img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
body.theme-pd .pd-adv-preview img[hidden] { display: none; }
body.theme-pd .pd-adv-upload-side {
    display: flex;
    flex: 1 1 0;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--pd-space-1);
    min-width: 0;
}
body.theme-pd .pd-adv-file {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-adv-file-input {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: 0;
    opacity: 0;
    pointer-events: none;
}
body.theme-pd .pd-adv-file:has(.pd-adv-file-input:focus-visible) {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-adv-file-msg {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-adv-file-msg.is-error { color: var(--pd-color-error); }
body.theme-pd .pd-adv-fields {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--pd-space-2) var(--pd-space-3);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-adv-field {
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
}
body.theme-pd .pd-adv-field--wide { grid-column: 1 / -1; }

/* 合计 + 支付 */
body.theme-pd .pd-adv-summary {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--pd-space-1);
    margin: 0 0 var(--pd-space-3);
}
body.theme-pd .pd-adv-summary div {
    padding: var(--pd-space-2);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-adv-summary dt {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-adv-summary dd {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-adv-summary-total dd {
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-lg);
}
body.theme-pd .pd-adv-pay {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-2) var(--pd-space-3);
}
body.theme-pd .pd-adv-pay-btn {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
    text-decoration: none;
}
body.theme-pd .pd-adv-pay .pd-adv-note {
    flex: 1 1 0;
    min-width: 0;
    margin: 0;
}
body.theme-pd .pd-adv-form + .pd-info-block { margin-top: 0; }
body.theme-pd .pd-adv-fields + .pd-adv-note { margin-bottom: var(--pd-space-3); }

/* 提交成功的回执 */
body.theme-pd .pd-adv-done {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-3);
    padding: var(--pd-space-2) var(--pd-space-3);
    color: var(--pd-text-green);
    background: var(--pd-color-success-soft);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-adv-done[hidden] { display: none; }
body.theme-pd .pd-adv-done i { font-size: var(--pd-icon-lg); }
body.theme-pd .pd-adv-done p {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}

@media (max-width: 640px) {
    body.theme-pd .pd-adv-pick,
    body.theme-pd .pd-adv-fields { grid-template-columns: minmax(0, 1fr); }
    body.theme-pd .pd-adv-durations,
    body.theme-pd .pd-adv-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    body.theme-pd .pd-adv-duration:last-child:nth-child(odd) { grid-column: 1 / -1; }
    body.theme-pd .pd-adv-pay .pd-adv-note { flex-basis: 100%; }
}

/* 关于页、帮助页的「联系我们」：用途 + 邮箱（pd_contact_list_html） */
body.theme-pd .pd-contact-list {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--pd-space-1);
    margin: var(--pd-space-2) 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-contact-list li {
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
    margin: 0;
    padding: var(--pd-space-2) var(--pd-space-3);
    line-height: var(--pd-lh-normal);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-contact-list span {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-contact-list a {
    color: var(--pd-color-link);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    text-decoration: none;
    overflow-wrap: anywhere;
}
body.theme-pd .pd-contact-list a:hover { text-decoration: underline; }
@media (max-width: 640px) {
    body.theme-pd .pd-contact-list { grid-template-columns: minmax(0, 1fr); }
}

/* inner pages */
body.theme-pd.page-forum main.wrap,
body.theme-pd.page-thread main.wrap,
body.theme-pd.page-search main.wrap,
body.theme-pd.page-post main.wrap,
body.theme-pd.page-edit-thread main.wrap,
body.theme-pd.page-user main.wrap,
body.theme-pd.page-profile main.wrap,
body.theme-pd.page-messages main.wrap,
body.theme-pd.page-page main.wrap,
body.theme-pd.page-about main.wrap,
body.theme-pd.page-login main.wrap,
body.theme-pd.page-register main.wrap {
    box-sizing: border-box;
    width: 100%;
    max-width: 100%;
    padding: 24px 20px 56px;
}

body.theme-pd .post-title-card,
body.theme-pd .post-content-card,
body.theme-pd.page-thread main.wrap > .card:not(.post-title-card):not(.post-content-card):not(.replies),
body.theme-pd.page-user main.wrap > .card,
body.theme-pd.page-profile main.wrap > .card,
body.theme-pd.page-messages main.wrap > .card,
body.theme-pd.page-page main.wrap > .card,
body.theme-pd.page-login main.wrap > .card,
body.theme-pd.page-register main.wrap > .card,
body.theme-pd .thread-list,
body.theme-pd.page-search .thread-list {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
}

body.theme-pd .post-title-card h1 {
    margin: 0;
    color: var(--pd-color-text);
    font-family: var(--pd-font-body);
}

body.theme-pd.page-thread main.wrap > .card .btn {
    height: var(--pd-btn-h);
    padding: 0 var(--pd-btn-px);
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    border-radius: var(--pd-btn-radius);
    box-shadow: none;
}

body.theme-pd .filter-tabs {
    display: flex;
    gap: 10px;
    margin: 0 0 12px;
    overflow-x: auto;
    scrollbar-width: none;
}

body.theme-pd .filter-tabs::-webkit-scrollbar {
    display: none;
}

body.theme-pd .filter-tabs a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 74px;
    height: var(--pd-tab-h);
    padding: 0 var(--pd-tab-px);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-tab-fs);
    font-weight: var(--pd-tab-weight);
    text-decoration: none;
    white-space: nowrap;
    background: var(--pd-color-surface-soft);
    border: 0;
    border-radius: var(--pd-tab-radius);
}

body.theme-pd .filter-tabs a.active {
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
}

body.theme-pd .thread-list {
    margin: 0;
    padding: 12px 26px;
}

body.theme-pd .thread-row {
    display: grid;
    grid-template-columns: 40px minmax(0, 1fr) 132px;
    gap: 12px;
    align-items: center;
    padding: 8px 0;
    border-bottom: 1px solid var(--pd-color-divider);
}

body.theme-pd .thread-row:last-child {
    border-bottom: 0;
}

body.theme-pd .thread-main {
    min-width: 0;
}

body.theme-pd .thread-title {
    display: block;
    overflow: hidden;
    color: var(--pd-color-text) !important;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.35;
    text-overflow: ellipsis;
    white-space: nowrap;
    text-decoration: none;
}

body.theme-pd .thread-main p {
    margin: 4px 0 0;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-sm);
    line-height: 1.4;
}

body.theme-pd .thread-count {
    display: flex;
    justify-content: flex-end;
    gap: 16px;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}

body.theme-pd .thread-count span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
}

body.theme-pd .thread-count i {
    color: var(--pd-color-text-tertiary);
}

body.theme-pd .tag {
    display: inline-flex;
    align-items: center;
    height: 23px;
    margin-right: 7px;
    padding: 0 7px;
    color: var(--pd-color-highlight) !important;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    line-height: 1;
    vertical-align: 2px;
    background: var(--pd-color-surface-soft) !important;
    border: 1px solid rgba(255, 103, 79, .22);
    border-radius: var(--pd-badge-radius);
    text-decoration: none;
}

body.theme-pd .tag.good {
    color: var(--pd-color-primary) !important;
    background: var(--pd-color-surface-soft) !important;
    border-color: rgba(27, 93, 216, .18);
}

body.theme-pd .pd-thread-title-card {
    padding: 22px 26px 24px;
}

/* 帖子主卡片：标题 + 正文 + 底部广告合并一体；只要边框不要阴影，和下面的回复卡片一致 */
body.theme-pd .pd-thread-main-card.post-content-card,
body.theme-pd .pd-thread-main-card.post-content-card.card {
    margin-top: 0;
    box-shadow: none;
}
body.theme-pd .pd-thread-main-card .post-content-box {
    margin-top: 20px;
    padding-top: 20px;
    border-top: 1px solid var(--pd-color-border);
}
body.theme-pd .pd-thread-main-card .ad-box.ad-thread {
    margin-top: 20px;
    padding-top: 16px;
    border-top: 1px solid var(--pd-color-border);
    text-align: center;
}
body.theme-pd .pd-thread-main-card .ad-box.ad-thread img {
    display: block;
    max-width: 100%;
    height: auto;
    margin: 0 auto;
}
body.theme-pd .pd-thread-main-card .ad-box.ad-thread a {
    display: block;
}

/* 管理入口与主题标题同排，折叠菜单复用回复菜单的交互和外观。 */
body.theme-pd .pd-thread-title-body {
    min-width: 0;
}
body.theme-pd .pd-thread-heading {
    display: flex;
    align-items: flex-start;
    gap: var(--pd-space-2);
    min-width: 0;
}
body.theme-pd .pd-thread-heading > h1 {
    flex: 1 1 auto;
    min-width: 0;
    overflow-wrap: anywhere;
}
body.theme-pd .pd-thread-more {
    flex: 0 0 auto;
}
body.theme-pd .pd-thread-more .pd-reply-menu-item.is-active {
    color: var(--pd-color-primary) !important;
    background: var(--pd-color-primary-soft);
}
body.theme-pd .pd-thread-more > summary:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}

body.theme-pd .pd-thread-title-row {
    display: grid;
    grid-template-columns: max-content minmax(0, 1fr);
    gap: var(--pd-space-3);
    align-items: center;
}
body.theme-pd .pd-thread-title-row > .pd-avatar-wrap > .pd-author-avatar {
    display: block;
    width: var(--pd-thread-avatar-size);
    height: var(--pd-thread-avatar-size);
}

body.theme-pd .pd-author-avatar,
body.theme-pd .pd-reply-avatar {
    width: 58px;
    height: 58px;
    object-fit: cover;
    background: var(--pd-color-surface-soft);
    border-radius: 0;
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 0c9.601 0 12 2.399 12 12 0 9.601-2.399 12-12 12-9.601 0-12-2.399-12-12C0 2.399 2.399 0 12 0z'/%3E%3C/svg%3E");
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 0c9.601 0 12 2.399 12 12 0 9.601-2.399 12-12 12-9.601 0-12-2.399-12-12C0 2.399 2.399 0 12 0z'/%3E%3C/svg%3E");
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}

body.theme-pd .post-meta {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-sm);
    line-height: 1.5;
}

/* 主楼标题区：标题下面一行作者信息（昵称 · 等级 · 用户组 · 发布时间 · 浏览 / 回复） */
body.theme-pd .pd-thread-title-meta {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    flex-wrap: wrap;
    margin: var(--pd-space-1) 0 0;
}
.pd-thread-category-meta { display: contents; }
body.theme-pd .pd-thread-title-meta .pd-author-link {
    font-size: var(--pd-fs-nick);
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-thread-title-meta .pd-meta-time,
body.theme-pd .pd-thread-title-meta .pd-meta-dot {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-thread-title-meta .pd-meta-time {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    white-space: nowrap;
}
body.theme-pd .pd-thread-title-meta .pd-meta-time i {
    font-size: var(--pd-icon-xs);
}

/* 主楼底部：支持 / 反对仅在本人投票后上色，分享与收藏等操作同排靠右。 */
body.theme-pd .pd-thread-main-card.post-content-card.card {
    min-height: 0;
    padding-bottom: 0;
}
body.theme-pd .pd-thread-copy {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: var(--pd-space-4);
    height: var(--pd-space-4);
    padding: 0;
    border: 0;
    border-radius: var(--pd-radius-xs);
    background: transparent;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-sm);
    cursor: pointer;
}
body.theme-pd .pd-thread-footer-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-thread-report {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    flex-shrink: 0;
    padding: calc(var(--pd-space-1) / 2) 0;
    border: 0;
    background: transparent;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-normal);
    cursor: pointer;
}
body.theme-pd .pd-thread-copy:hover,
body.theme-pd .pd-thread-report:hover {
    color: var(--pd-color-primary);
}
body.theme-pd .pd-thread-copy:focus-visible,
body.theme-pd .pd-thread-report:focus-visible {
    outline: none;
    box-shadow: var(--pd-focus-ring);
}
body.theme-pd .pd-thread-actions {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    width: 100%;
    gap: var(--pd-space-2) var(--pd-space-3);
    margin: var(--pd-space-2) 0 0;
    padding: var(--pd-space-2) 0;
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-thread-action-group {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--pd-space-3);
    min-width: 0;
}
body.theme-pd .pd-thread-action-group--other {
    margin-left: auto;
}
body.theme-pd .pd-thread-actions form {
    display: flex;
    min-width: 0;
    margin: 0;
}
body.theme-pd .pd-tact,
body.theme-pd .pd-thread-share {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    min-height: var(--pd-space-4);
    padding: 0;
    color: var(--pd-color-text-tertiary);
    font-family: inherit;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-normal);
    white-space: nowrap;
    text-decoration: none;
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    cursor: pointer;
    transition: opacity .15s ease;
}
body.theme-pd .pd-thread-share {
    flex-shrink: 0;
}
body.theme-pd .pd-tact:hover:not(:disabled),
body.theme-pd .pd-thread-share:hover:not(:disabled) {
    opacity: .75;
    text-decoration: none;
}
body.theme-pd .pd-tact i,
body.theme-pd .pd-thread-share i {
    flex: none;
    font-size: var(--pd-icon-sm);
}
body.theme-pd .pd-tact-count {
    color: inherit;
    font-size: var(--pd-fs-xs);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-tact-count:empty {
    display: none;
}
body.theme-pd .pd-tact--up.is-active {
    color: var(--pd-color-primary);
}
body.theme-pd .pd-tact--down.is-active {
    color: var(--pd-color-error);
}
body.theme-pd .pd-tact--fav.is-active,
body.theme-pd .pd-thread-share[aria-expanded="true"] {
    color: var(--pd-color-primary);
}
body.theme-pd .pd-tact.is-active {
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-tact--fav.is-active [data-tact-label] {
    text-decoration: underline;
    text-underline-offset: calc(var(--pd-space-1) / 2);
    text-decoration-thickness: var(--pd-tab-indicator);
}
body.theme-pd .pd-tact:focus-visible,
body.theme-pd .pd-thread-share:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-tact:disabled,
body.theme-pd .pd-thread-share:disabled {
    opacity: .55;
    cursor: default;
}
body.theme-pd .pd-tact.is-popping {
    animation: pd-tact-pop 420ms ease;
}
body.theme-pd .pd-thread-share-menu {
    position: fixed;
    width: calc(var(--pd-space-5) * 7);
    max-width: calc(100vw - var(--pd-space-2) * 2);
    max-height: calc(100dvh - var(--pd-space-2) * 2);
    padding: calc(var(--pd-space-1) / 2);
    overflow-y: auto;
    overscroll-behavior: contain;
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-2);
    z-index: var(--pd-z-popover);
}
body.theme-pd .pd-thread-share-item {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    width: 100%;
    min-height: var(--pd-btn-h);
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    background: transparent;
    border: 0;
    border-radius: var(--pd-btn-radius);
    font-family: inherit;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-normal);
    text-align: left;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
}
body.theme-pd .pd-thread-share-item:hover,
body.theme-pd .pd-thread-share-item:focus-visible {
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
    text-decoration: none;
}
body.theme-pd .pd-thread-share-item:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-tab-indicator) * -1);
}
body.theme-pd .pd-thread-share-item i {
    flex: none;
    width: var(--pd-icon-md);
    font-size: var(--pd-icon-md);
    text-align: center;
}
body.theme-pd .pd-thread-share-item--utility {
    margin-top: calc(var(--pd-space-1) / 2);
    border-top: 1px solid var(--pd-color-divider);
    border-top-left-radius: 0;
    border-top-right-radius: 0;
}
@media (max-width: 640px) {
    body.theme-pd .pd-thread-action-group {
        gap: var(--pd-space-2);
    }
    body.theme-pd .pd-tact,
    body.theme-pd .pd-thread-share {
        font-size: var(--pd-fs-xs);
    }
    body.theme-pd .pd-tact i,
    body.theme-pd .pd-thread-share i {
        font-size: var(--pd-icon-xs);
    }
}

body.theme-pd .pd-vote-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    min-width: 78px;
    height: var(--pd-btn-h);
    padding: 0 var(--pd-btn-px-sm);
    color: var(--pd-color-text-secondary) !important;
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    text-decoration: none;
    background: var(--pd-color-surface-soft) !important;
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-btn-radius) !important;
    box-shadow: none;
    cursor: pointer;
}

body.theme-pd .pd-vote-button i {
    color: var(--pd-color-text-tertiary);
}

body.theme-pd .pd-vote-button strong {
    color: var(--pd-color-text);
    font-weight: var(--pd-btn-weight);
}

body.theme-pd .pd-vote-button:hover,
body.theme-pd .pd-vote-button.active {
    color: var(--pd-color-on-primary) !important;
    background: var(--pd-color-primary) !important;
    border-color: var(--pd-color-primary);
}

body.theme-pd .pd-vote-button:hover i,
body.theme-pd .pd-vote-button:hover strong,
body.theme-pd .pd-vote-button.active i,
body.theme-pd .pd-vote-button.active strong {
    color: var(--pd-color-on-primary);
}

body.theme-pd .post-content-card {
    margin-top: 14px;
    padding: 26px;
}

body.theme-pd .post-content-box,
body.theme-pd .reply .content {
    color: var(--pd-color-text);
}

body.theme-pd .content a {
    color: var(--pd-color-primary);
}

body.theme-pd .pd-reply-pagination {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 6px;
    margin: 0;
    padding: 16px 24px 20px;
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-reply-pagination a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 34px;
    height: 34px;
    padding: 0 10px;
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-btn-radius);
    background: var(--pd-color-surface);
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-btn-weight);
    text-decoration: none;
    transition: background .15s ease, color .15s ease, border-color .15s ease;
}
body.theme-pd .pd-reply-pagination a:hover {
    background: var(--pd-color-surface-soft);
    border-color: var(--pd-color-border-strong);
}
body.theme-pd .pd-reply-pagination a.active {
    color: var(--pd-color-on-primary);
    border-color: var(--pd-color-primary);
    background: var(--pd-color-primary);
}
body.theme-pd-dark .pd-reply-pagination {
    border-top-color: var(--pd-color-border);
}
body.theme-pd-dark .pd-reply-pagination a {
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border);
    color: var(--pd-color-primary-hover);
}
body.theme-pd-dark .pd-reply-pagination a.active {
    background: var(--pd-color-primary);
    border-color: var(--pd-color-primary);
    color: var(--pd-color-on-primary);
}

body.theme-pd .pd-reply-body {
    position: relative;
    min-width: 0;
}

body.theme-pd .pd-reply-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
}

body.theme-pd .reply .post-meta {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    margin: 0;
    color: var(--pd-color-text-tertiary);
}

body.theme-pd .reply .post-meta strong,
body.theme-pd .pd-reply-author {
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-regular);
}

body.theme-pd .pd-only-author {
    color: var(--pd-color-text-tertiary);
    font-weight: var(--pd-fw-semibold);
    text-decoration: none;
}

body.theme-pd .pd-only-author:hover {
    color: var(--pd-color-primary);
}

/* 回复区局部刷新（assets/pages.js）时整段变淡 */
body.theme-pd .card.replies.is-loading {
    opacity: .5;
    pointer-events: none;
    transition: opacity .15s ease;
}

body.theme-pd .pd-floor-no {
    display: inline-flex;
    align-items: center;
    white-space: nowrap;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    font-variant-numeric: tabular-nums;
}

body.theme-pd .reply .content {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: 1.75;
}

body.theme-pd .pd-signature {
    padding-top: 0;
    color: var(--pd-color-text);
    border-top: 1px dashed var(--pd-color-border-strong);
}

body.theme-pd .pd-signature > span {
    display: inline-block;
    padding-right: 12px;
    color: var(--pd-color-primary);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-2xs);
    font-weight: var(--pd-fw-regular);
    letter-spacing: 1px;
    background: var(--pd-color-surface);
}

body.theme-pd .pd-signature p {
    margin: 8px 0 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    line-height: 1.6;
}

/* 帖子底部：回复操作栏默认淡化，悬浮清晰（类似 Discuz 楼层底栏）；签名常显 */

body.theme-pd .pd-post-votes {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

body.theme-pd .pd-post-votes form {
    margin: 0;
}

body.theme-pd .pd-vote-button-sm {
    min-width: 64px;
    height: var(--pd-btn-h-sm);
    padding: 0 var(--pd-btn-px-sm);
    font-size: var(--pd-btn-fs-sm);
    gap: 5px;
}

body.theme-pd .action-badge {
    border-radius: var(--pd-btn-radius);
}

body.theme-pd.page-thread main.wrap > .card:not(.post-title-card):not(.post-content-card):not(.replies) {
    margin-top: 14px;
    padding: 22px 24px;
}

body.theme-pd.page-thread textarea,
body.theme-pd.page-post textarea,
body.theme-pd.page-edit-thread textarea,
body.theme-pd.page-thread input,
body.theme-pd.page-post input,
body.theme-pd.page-edit-thread input,
body.theme-pd.page-thread select,
body.theme-pd.page-post select,
body.theme-pd.page-edit-thread select {
    border-color: var(--pd-color-divider);
    border-radius: var(--pd-input-radius);
}

body.theme-pd .pd-empty {
    margin: 18px 0;
    color: var(--pd-color-text-tertiary);
}

@media (max-width: 900px) {
    body.theme-pd.page-forum main.wrap,
    body.theme-pd.page-thread main.wrap,
    body.theme-pd.page-search main.wrap,
    body.theme-pd.page-post main.wrap,
    body.theme-pd.page-edit-thread main.wrap,
    body.theme-pd.page-user main.wrap,
    body.theme-pd.page-profile main.wrap,
    body.theme-pd.page-page main.wrap,
    body.theme-pd.page-about main.wrap,
    body.theme-pd.page-login main.wrap,
    body.theme-pd.page-register main.wrap {
        width: 100%;
        max-width: 100%;
        padding-top: 14px;
    }

    body.theme-pd .thread-list {
        padding: 6px 16px;
    }

    body.theme-pd .thread-row {
        grid-template-columns: 40px minmax(0, 1fr);
        gap: 12px;
    }

    body.theme-pd .thread-title {
        font-size: var(--pd-fs-sm);
    }

    body.theme-pd .thread-main p {
        font-size: var(--pd-fs-xs);
    }

    body.theme-pd .thread-count {
        grid-column: 2;
        justify-content: flex-start;
        margin-top: -5px;
        font-size: var(--pd-fs-xs);
    }

    body.theme-pd .pd-thread-title-card,
    body.theme-pd .pd-thread-main-card,
    body.theme-pd .post-content-card {
        padding: 18px;
    }

    body.theme-pd .pd-thread-title-row {
        gap: var(--pd-space-2);
        align-items: start;
    }
    body.theme-pd .pd-thread-title-row > .pd-avatar-wrap > .pd-author-avatar {
        width: var(--pd-thread-avatar-size-sm);
        height: var(--pd-thread-avatar-size-sm);
    }

    body.theme-pd .pd-author-avatar,
    body.theme-pd .pd-reply-avatar {
        width: 44px;
        height: 44px;
    }

    body.theme-pd .pd-reply-header {
        align-items: flex-start;
        margin-bottom: 12px;
    }

    body.theme-pd .reply .post-meta {
        gap: 8px;
        font-size: var(--pd-fs-xs);
    }

    body.theme-pd .reply .post-meta strong {
        font-size: var(--pd-fs-nick);
    }

    body.theme-pd .pd-floor-no {
        font-size: var(--pd-fs-xs);
    }

    body.theme-pd .reply .content {
        font-size: var(--pd-fs-sm);
    }

}

/* php.net component scale pass */
body.theme-pd {
    font-family: var(--pd-font-body);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}

body.theme-pd code,
body.theme-pd pre,
body.theme-pd kbd,
body.theme-pd .pd-signature > span {
    font-family: var(--pd-font-mono);
}

body.theme-pd .pd-home-shell,
body.theme-pd .footer .wrap {
    width: min(1200px, calc(100vw - 3rem));
}

body.theme-pd.page-forum main.wrap,
body.theme-pd.page-thread main.wrap,
body.theme-pd.page-search main.wrap,
body.theme-pd.page-post main.wrap,
body.theme-pd.page-edit-thread main.wrap,
body.theme-pd.page-user main.wrap,
body.theme-pd.page-profile main.wrap,
body.theme-pd.page-messages main.wrap,
body.theme-pd.page-page main.wrap,
body.theme-pd.page-login main.wrap,
body.theme-pd.page-register main.wrap {
    width: 100%;
    max-width: 100%;
}

body.theme-pd .pd-side-card,
body.theme-pd .post-title-card,
body.theme-pd .post-content-card,
body.theme-pd.page-thread main.wrap > .card:not(.post-title-card):not(.post-content-card):not(.replies),
body.theme-pd.page-user main.wrap > .card,
body.theme-pd.page-profile main.wrap > .card,
body.theme-pd.page-messages main.wrap > .card,
body.theme-pd.page-page main.wrap > .card,
body.theme-pd.page-login main.wrap > .card,
body.theme-pd.page-register main.wrap > .card,
body.theme-pd .thread-list,
body.theme-pd.page-search .thread-list {
    border-radius: var(--pd-card-radius-lg) !important;
    box-shadow: var(--pd-shadow-1);
}

body.theme-pd .pd-side-card,
body.theme-pd .post-title-card,
body.theme-pd .post-content-card,
body.theme-pd.page-thread main.wrap > .card:not(.post-title-card):not(.post-content-card):not(.replies) {
    padding: var(--pd-card-padding);
}

body.theme-pd .filter-tabs a,
body.theme-pd.page-thread main.wrap > .card .btn,
body.theme-pd .pd-vote-button {
    border-radius: var(--pd-tab-radius) !important;
}

body.theme-pd .filter-tabs {
    margin-bottom: var(--pd-space-2);
}

/* 列表行：40px 头像 + 上下 8px，单行约 58px（原 68px） */
body.theme-pd .pd-thread-row,
body.theme-pd .thread-row {
    min-height: 0;
    padding: var(--pd-space-1) 0;
}

body.theme-pd .pd-thread-main h2,
body.theme-pd .thread-title {
    font-size: var(--pd-list-title-size);
    font-weight: var(--pd-list-title-weight);
    line-height: 1.35;
}

body.theme-pd .pd-thread-main p,
body.theme-pd .thread-main p,
body.theme-pd .post-meta,
body.theme-pd .thread-count,
body.theme-pd .pd-side-card {
    font-size: var(--pd-fs-xs);
}

body.theme-pd .post-title-card h1 {
    font-size: var(--pd-h1-size);
    font-weight: var(--pd-h1-weight);
    line-height: var(--pd-h1-lh);
}

body.theme-pd .pd-side-card h2 {
    font-size: var(--pd-h2-size);
    font-weight: var(--pd-h2-weight);
}

body.theme-pd .post-content-box,
body.theme-pd .reply .content {
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}

body.theme-pd .reply .post-meta {
    font-size: var(--pd-fs-xs);
}

/* 回复者昵称与同一行的元信息同大，不加粗（不比主楼作者行大） */
body.theme-pd .reply .post-meta strong,
body.theme-pd .pd-reply-author {
    font-size: var(--pd-fs-nick);
}

body.theme-pd .pd-floor-no {
    border-radius: var(--pd-badge-radius);
}

@media (max-width: 900px) {
    body.theme-pd .pd-home-shell,
    body.theme-pd .footer .wrap {
        width: calc(100vw - 1.25rem);
    }

    body.theme-pd.page-forum main.wrap,
    body.theme-pd.page-thread main.wrap,
    body.theme-pd.page-search main.wrap,
    body.theme-pd.page-post main.wrap,
    body.theme-pd.page-edit-thread main.wrap,
    body.theme-pd.page-user main.wrap,
    body.theme-pd.page-profile main.wrap,
    body.theme-pd.page-page main.wrap,
    body.theme-pd.page-login main.wrap,
    body.theme-pd.page-register main.wrap {
        width: 100%;
        max-width: 100%;
    }

    body.theme-pd .pd-side-card,
    body.theme-pd .post-title-card,
    body.theme-pd .post-content-card,
    body.theme-pd.page-thread main.wrap > .card:not(.post-title-card):not(.post-content-card):not(.replies) {
        padding: var(--pd-card-padding-sm);
    }

    body.theme-pd .post-title-card h1 {
        font-size: var(--pd-h1-size);
    }

    body.theme-pd .pd-thread-main h2,
    body.theme-pd .thread-title {
        font-size: var(--pd-list-title-size);
    }

    body.theme-pd .pd-home-layout,
    body.theme-pd .pd-home-sidebar {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* PHP official dark variant */
body.theme-pd-dark {
    color: var(--pd-color-text);
    background: var(--pd-color-surface-subtle);
}

body.theme-pd-dark a {
    color: var(--pd-color-link);
}

body.theme-pd-dark .post-meta,
body.theme-pd-dark .thread-main p,
body.theme-pd-dark .pd-thread-main p,
body.theme-pd-dark .thread-count,
body.theme-pd-dark .muted {
    color: var(--pd-color-text-secondary);
}

body.theme-pd-dark .pd-side-card,
body.theme-pd-dark .post-title-card,
body.theme-pd-dark .post-content-card,
body.theme-pd-dark.page-thread main.wrap > .card:not(.post-title-card):not(.post-content-card):not(.replies),
body.theme-pd-dark.page-user main.wrap > .card,
body.theme-pd-dark.page-profile main.wrap > .card,
body.theme-pd-dark.page-messages main.wrap > .card,
body.theme-pd-dark.page-page main.wrap > .card,
body.theme-pd-dark.page-login main.wrap > .card,
body.theme-pd-dark.page-register main.wrap > .card,
body.theme-pd-dark .thread-list,
body.theme-pd-dark.page-search .thread-list,
body.theme-pd-dark .card,
body.theme-pd-dark .signin-modal-box,
body.theme-pd-dark .editor-dialog-box,
body.theme-pd-dark .pd-confirm-box {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border);
    box-shadow: var(--pd-shadow-1);
}

body.theme-pd-dark .filter-tabs a,
body.theme-pd-dark .pd-vote-button {
    color: var(--pd-color-text) !important;
    background: var(--pd-color-surface-soft) !important;
    border-color: var(--pd-color-border);
}

body.theme-pd-dark .filter-tabs a.active {
    color: var(--pd-color-on-primary) !important;
    background: var(--pd-color-primary) !important;
    border-color: var(--pd-color-primary);
}

body.theme-pd-dark .filter-tabs a:hover {
    color: var(--pd-color-on-primary) !important;
    background: var(--pd-color-surface-subtle) !important;
    border-color: var(--pd-color-border-strong);
}

body.theme-pd-dark .pd-thread-row,
body.theme-pd-dark .thread-row,
body.theme-pd-dark .pd-side-card h2 {
    border-color: var(--pd-color-divider);
}

body.theme-pd-dark .pd-thread-main h2,
body.theme-pd-dark .pd-thread-main h2 a,
body.theme-pd-dark .thread-title,
body.theme-pd-dark .post-title-card h1,
body.theme-pd-dark .pd-side-card h2,
body.theme-pd-dark .post-content-box,
body.theme-pd-dark .reply .content,
body.theme-pd-dark .pd-reply-author,
body.theme-pd-dark .reply .post-meta strong:not(.pd-name--system):not(.pd-name--ai),
body.theme-pd-dark h1,
body.theme-pd-dark h2,
body.theme-pd-dark h3,
body.theme-pd-dark label {
    color: var(--pd-color-text) !important;
}

body.theme-pd-dark .content a,
body.theme-pd-dark .pd-author-link:not(.pd-name--system):not(.pd-name--ai):hover,
body.theme-pd-dark .pd-reply-author:not(.pd-name--system):not(.pd-name--ai):hover {
    color: var(--pd-color-link) !important;
}

body.theme-pd-dark .pd-avatar,
body.theme-pd-dark .pd-author-avatar,
body.theme-pd-dark .pd-reply-avatar {
    background: var(--pd-color-border);
}

body.theme-pd-dark .tag {
    color: var(--pd-color-error-hover) !important;
    background: rgba(255, 138, 120, .13) !important;
    border-color: rgba(255, 138, 120, .28);
}

body.theme-pd-dark .tag.good {
    color: var(--pd-color-text) !important;
    background: rgba(var(--pd-color-primary-rgb), .18) !important;
    border-color: rgba(var(--pd-color-primary-rgb), .34);
}

body.theme-pd-dark .pd-badge-sq { color: var(--pd-color-on-primary) !important; }
body.theme-pd-dark .pd-thread-main h2 a.pd-title-good,
body.theme-pd-dark .thread-title.pd-title-good,
body.theme-pd-dark .post-title-card h1.pd-title-good {
    color: var(--pd-color-featured) !important;
}

body.theme-pd-dark .pd-thread-main h2 a.pd-title-good:hover,
body.theme-pd-dark .thread-title.pd-title-good:hover {
    color: var(--pd-color-featured) !important;
}

body.theme-pd-dark .pd-thread-main h2 a.pd-title-top,
body.theme-pd-dark .thread-title.pd-title-top,
body.theme-pd-dark .post-title-card h1.pd-title-top {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd-dark .pd-thread-main h2 a.pd-title-top-board,
body.theme-pd-dark .thread-title.pd-title-top-board,
body.theme-pd-dark .post-title-card h1.pd-title-top-board {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd-dark .pd-thread-main h2 a.pd-title-top:hover,
body.theme-pd-dark .thread-title.pd-title-top:hover,
body.theme-pd-dark .post-title-card h1.pd-title-top:hover {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd-dark .pd-thread-main h2 a.pd-title-top-board:hover,
body.theme-pd-dark .thread-title.pd-title-top-board:hover,
body.theme-pd-dark .post-title-card h1.pd-title-top-board:hover {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd-dark .pd-thread-main h2 a.pd-title-top.pd-title-good,
body.theme-pd-dark .thread-title.pd-title-top.pd-title-good,
body.theme-pd-dark .post-title-card h1.pd-title-top.pd-title-good {
    color: var(--pd-color-pinned) !important;
}

body.theme-pd-dark .pd-image-icon,
body.theme-pd-dark .pd-attach-icon,
body.theme-pd-dark .thread-count i,
body.theme-pd-dark .pd-only-author {
    color: var(--pd-color-text-tertiary);
}

body.theme-pd-dark .pd-floor-no {
    color: var(--pd-color-text-secondary);
}

body.theme-pd-dark .pd-signature {
    color: var(--pd-color-text);
    border-top-color: var(--pd-color-border-strong);
}

body.theme-pd-dark .pd-signature > span {
    color: var(--pd-color-link);
    background: var(--pd-color-surface);
}

body.theme-pd-dark .pd-signature p {
    color: var(--pd-color-text);
}

body.theme-pd-dark input,
body.theme-pd-dark select,
body.theme-pd-dark textarea {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border-strong);
}

body.theme-pd-dark input::placeholder,
body.theme-pd-dark textarea::placeholder {
    color: var(--pd-color-text-tertiary);
}

body.theme-pd-dark .pd-vote-button strong,
body.theme-pd-dark .pd-vote-button i {
    color: var(--pd-color-text-secondary);
}

body.theme-pd-dark .pd-vote-button:hover,
body.theme-pd-dark .pd-vote-button.active {
    color: var(--pd-color-on-primary) !important;
    background: var(--pd-color-primary) !important;
    border-color: var(--pd-color-primary);
}

body.theme-pd-dark .pd-vote-button:hover strong,
body.theme-pd-dark .pd-vote-button:hover i,
body.theme-pd-dark .pd-vote-button.active strong,
body.theme-pd-dark .pd-vote-button.active i {
    color: var(--pd-color-on-primary);
}

body.theme-pd-dark .footer {
    background: transparent;
}

body.theme-pd-dark .footer-logo {
    padding: 4px 8px;
    background: var(--pd-color-text);
    border-radius: var(--pd-card-radius);
}

/* ==========================================================================
   分类导航行 · 深色/浅色切换按钮 · 顶部加载指示（新增）
   ========================================================================== */

.pd-cat-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    font-size: var(--pd-icon-md);
    line-height: 1;
}

.pd-cat-icon-img {
    width: 20px;
    height: 20px;
    object-fit: contain;
    border-radius: var(--pd-radius-xs);
}

.pd-cat-icon-svg {
    width: 20px;
    height: 20px;
}

.pd-cat-icon-svg svg {
    width: 100%;
    height: 100%;
    display: block;
}

/* 全站共用右上角圆形加载提示，不占 Tabs 空间，也不遮挡内容。 */
.pd-loading-indicator {
    position: fixed;
    top: max(var(--pd-loading-edge), env(safe-area-inset-top));
    right: max(var(--pd-loading-edge), env(safe-area-inset-right));
    z-index: 1300;
    display: grid;
    place-items: center;
    width: var(--pd-loading-size);
    height: var(--pd-loading-size);
    color: var(--pd-color-primary);
    background: transparent;
    border: 0;
    box-shadow: none;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 160ms ease;
}

.pd-loading-indicator svg {
    display: block;
    width: 100%;
    height: 100%;
}

@keyframes pd-spin {
    to { transform: rotate(360deg); }
}

body.pd-is-loading .pd-loading-indicator {
    opacity: 1;
    visibility: visible;
}

body.pd-is-loading .pd-loading-indicator svg {
    animation: pd-spin .75s linear infinite;
}

@media (prefers-reduced-motion: reduce) {
    .pd-loading-indicator { transition: none; }
    body.pd-is-loading .pd-loading-indicator svg { animation: none; }
}

@media (max-width: 640px) {
    .pd-loading-indicator { --pd-loading-edge: var(--pd-space-3); }
}

/* 全站 PJAX 换页（assets/pjax.js）：0.3 秒后还没换好，屏幕正中间出现四个小方块依次一跳，换好后淡出。
   只有图标：不盖磨砂、不挡点击（站长 2026-10-05：每次换页整屏闪一下太难看），不锁滚动 */
.pd-pjax-veil {
    position: fixed;
    top: 50%;
    left: 50%;
    z-index: 1290;
    transform: translate(-50%, -50%);
    pointer-events: none;
    opacity: 0;
    visibility: hidden;
    transition: opacity 160ms ease, visibility 0s linear 160ms;
}
.pd-pjax-veil.is-on {
    opacity: 1;
    visibility: visible;
    transition: opacity 160ms ease;
}
.pd-pjax-spinner {
    display: block;
    width: var(--pd-pjax-spinner-size);
    height: var(--pd-pjax-spinner-size);
    color: var(--pd-color-primary);
}
.pd-pjax-spinner svg {
    display: block;
    width: 100%;
    height: 100%;
    fill: currentColor;
    overflow: visible;
}
/* 四个方块按 左上 → 右上 → 右下 → 左下 依次放大一下再缩回，一圈 1.2 秒（原 SMIL 动画改成 CSS，减少动态效果时可以停） */
.pd-pjax-spinner rect {
    transform-box: fill-box;
    transform-origin: center;
    animation: pd-pjax-square 1.2s ease-out infinite;
}
.pd-pjax-spinner rect:nth-child(2) { animation-delay: .15s; }
.pd-pjax-spinner rect:nth-child(3) { animation-delay: .3s; }
.pd-pjax-spinner rect:nth-child(4) { animation-delay: .45s; }
@keyframes pd-pjax-square {
    0% { transform: scale(1); }
    10% { transform: scale(1.22); }
    50%, 100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
    .pd-pjax-veil { transition: none; }
    .pd-pjax-spinner rect { animation: none; }
}

/* ============================================================
   phpBB 式页头（banner + 导航栏 + 面包屑）
   Tailwind preflight 已关闭，这里给页头做作用域内 reset + 组件样式
   ============================================================ */
.pd-topbar { width: 100%; padding-top: 14px; }
.pd-topbar-inner { max-width: 1200px; margin: 0 auto; }
.pd-topbar a { text-decoration: none !important; }
.pd-topbar ul, .pd-topbar li { list-style: none; margin: 0; padding: 0; }

.pd-banner {
    display: flex;
    align-items: center;
    min-height: 200px;
    padding: 0 28px;
    background: linear-gradient(120deg, var(--pd-color-primary) 0%, var(--pd-color-primary) 58%, var(--pd-color-primary-hover) 100%);
}
.pd-banner-logo img { height: 52px; }

.pd-navbar {
    /* 菜单栏只放首页和版块（2026-10-05 起；搜索在横幅右上角，RSS、主题切换在页脚），左右不留内边距：16 格 × 75px 正好铺满 1200px 白框 */
    background: var(--pd-color-primary);
    padding: 0;
    box-shadow: var(--pd-shadow-1);
}

/* 头部：banner 图铺满 banner+菜单两段，菜单栏透明叠图 */
.pd-topbar-hasbg { position: relative; z-index: 40; }   /* 高于页面内容，「更多」下拉才不会被首页标签栏等盖住 */
.pd-topbar-bg {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 0;
}
.pd-topbar-scrim {
    position: absolute;
    inset: 0;
    z-index: 0;
    background: linear-gradient(180deg,
        rgba(0, 0, 0, .30) 0%,
        rgba(0, 0, 0, .08) 32%,
        rgba(0, 0, 0, .06) 70%,
        rgba(0, 0, 0, .14) 100%);
}
.pd-topbar-hasbg .pd-banner {
    position: relative;
    z-index: 2;
    min-height: 191px;
    background: transparent;
}
/* 新配对横幅按原图比例完整显示；导航展开独立增加一行，不改变图片画框。 */
.pd-topbar-responsive {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    isolation: isolate;
}
.pd-banner-picture {
    position: relative;
    display: block;
    grid-area: 1 / 1;
    width: 100%;
    aspect-ratio: 1200 / 239;
    z-index: 0;
}
.pd-topbar-responsive .pd-topbar-bg { object-fit: contain; }
.pd-banner-weather {
    position: absolute;
    inset: 0;
    display: block;
    overflow: hidden;
    pointer-events: none;
    z-index: 1;
}
.pd-workshop-motion { position:absolute; inset:0; width:100%; height:100%; pointer-events:none; }
.pd-workshop-eyes { transform-box:fill-box; transform-origin:center; animation:pd-workshop-blink var(--pd-workshop-blink-cycle) infinite; }
.pd-workshop-eye-stroke { fill:none; stroke:var(--pd-workshop-signal-blue); stroke-width:var(--pd-workshop-line-width); stroke-linecap:round; }
.pd-workshop-eye-halo { opacity:.3; stroke-width:calc(var(--pd-workshop-line-width) * 3); }
.pd-workshop-led { r:var(--pd-workshop-led-radius); fill:var(--pd-workshop-led-green); animation:pd-workshop-led var(--pd-workshop-led-cycle) ease-in-out infinite; animation-delay:var(--pd-workshop-delay,0s); }
.pd-workshop-led-halo { r:var(--pd-workshop-led-halo-radius); opacity:.18; }
.pd-workshop-antenna { fill:var(--pd-workshop-signal-blue); opacity:.35; animation:pd-workshop-led var(--pd-workshop-led-cycle) ease-in-out infinite; }
.pd-workshop-signal { fill:none; stroke:var(--pd-workshop-led-green); stroke-width:var(--pd-workshop-line-width); stroke-linecap:round; stroke-dasharray:var(--pd-workshop-signal-dashes); animation:pd-workshop-signal var(--pd-workshop-signal-cycle) linear infinite; }
.pd-workshop-signal-blue { stroke:var(--pd-workshop-signal-blue); }
.pd-workshop-connection {fill:var(--pd-workshop-signal-blue);animation:pd-workshop-led var(--pd-workshop-led-cycle) var(--pd-workshop-delay) ease-in-out infinite;}
.pd-workshop-cursor {fill:var(--pd-workshop-signal-blue);animation:pd-workshop-cursor var(--pd-workshop-cursor-cycle) steps(1) infinite;}
.pd-workshop-sparkle {fill:var(--pd-workshop-sparkle-color);transform-box:fill-box;transform-origin:center;animation:pd-workshop-sparkle var(--pd-workshop-soft-cycle) var(--pd-workshop-delay) ease-in-out infinite;}
.pd-workshop-scan {fill:none;stroke:var(--pd-workshop-steam-color);stroke-width:calc(var(--pd-workshop-line-width) * 2);animation:pd-workshop-scan var(--pd-workshop-soft-cycle) linear infinite;}
.pd-workshop-steam,.pd-workshop-sound {fill:none;stroke:var(--pd-workshop-steam-color);stroke-width:var(--pd-workshop-line-width);stroke-linecap:round;animation:pd-workshop-steam var(--pd-workshop-soft-cycle) var(--pd-workshop-delay) ease-out infinite;}
.pd-workshop-sound {stroke:var(--pd-workshop-signal-blue);animation-name:pd-workshop-sound;}
[data-pd-banner-workshop][data-pd-motion-paused] * { animation-play-state:paused; }
@keyframes pd-workshop-cursor {0%,100%{opacity:1}50%{opacity:0}}
@keyframes pd-workshop-sparkle {0%,65%,100%{opacity:0;transform:scale(.4)}20%,40%{opacity:.9;transform:scale(1)}}
@keyframes pd-workshop-scan {0%,100%{opacity:0;transform:translateY(0)}15%{opacity:.3}75%{opacity:.15}90%{opacity:0;transform:translateY(var(--pd-workshop-scan-travel))}}
@keyframes pd-workshop-steam {0%,100%{opacity:0;transform:translateY(0)}25%{opacity:.65}80%{opacity:0;transform:translateY(var(--pd-workshop-steam-travel))}}
@keyframes pd-workshop-sound {0%,100%{opacity:0;transform:translateX(0)}30%{opacity:.65}80%{opacity:0;transform:translateX(var(--pd-workshop-sound-travel))}}
@keyframes pd-workshop-blink { 0%,40%,46%,100% {transform:scaleY(1)} 42%,44% {transform:scaleY(.1)} }
@keyframes pd-workshop-led { 0%,100% {opacity:.2} 30%,65% {opacity:.9} }
@keyframes pd-workshop-signal { to {stroke-dashoffset:-56} }
@media (prefers-reduced-motion:reduce) { .pd-workshop-motion {display:none} }

.pd-banner-flag {
    position: absolute;
    display: block;
    pointer-events: none;
}
.pd-banner-rainfall,
.pd-banner-umbrella {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    pointer-events: none;
}
.pd-banner-rainfall {
    mask-size: 100% 100%;
    mask-repeat: no-repeat;
    -webkit-mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
}
.pd-banner-umbrella path {
    fill: none;
    stroke: var(--pd-gray-100);
    stroke-width: var(--pd-banner-umbrella-stroke);
    stroke-linecap: round;
}
.pd-umbrella-hit {
    stroke-dasharray: 24 110;
    animation: pd-umbrella-hit var(--pd-banner-umbrella-cycle) var(--pd-umbrella-delay) linear infinite;
}
.pd-umbrella-splash {
    transform-box: fill-box;
    transform-origin: center bottom;
    animation: pd-umbrella-splash var(--pd-banner-umbrella-cycle) var(--pd-umbrella-delay) linear infinite;
}
.pd-umbrella-flow {
    stroke-dasharray: 18 110;
    animation: pd-umbrella-flow var(--pd-banner-umbrella-cycle) var(--pd-umbrella-delay) linear infinite;
}
.pd-umbrella-drip {
    fill: var(--pd-gray-100);
    animation: pd-umbrella-drip var(--pd-banner-umbrella-cycle) var(--pd-umbrella-delay) linear infinite;
}
@keyframes pd-umbrella-hit {
    0% { opacity: 0; stroke-dashoffset: 24; }
    5% { opacity: 1; stroke-dashoffset: 24; }
    22% { opacity: 1; stroke-dashoffset: -100; }
    25%, 100% { opacity: 0; stroke-dashoffset: -100; }
}
@keyframes pd-umbrella-splash {
    0%, 19% { opacity: 0; transform: scale(0.25); }
    25% { opacity: 0.95; transform: scale(1); }
    42%, 100% { opacity: 0; transform: scale(1.5); }
}
@keyframes pd-umbrella-flow {
    0%, 26% { opacity: 0; stroke-dashoffset: 18; }
    30% { opacity: 0.8; stroke-dashoffset: 18; }
    80% { opacity: 0.8; stroke-dashoffset: -100; }
    85%, 100% { opacity: 0; stroke-dashoffset: -100; }
}
@keyframes pd-umbrella-drip {
    0%, 75% { opacity: 0; transform: translateY(0); }
    79% { opacity: 0.95; transform: translateY(0); }
    100% { opacity: 0; transform: translateY(var(--pd-banner-umbrella-drip-travel)); }
}
.pd-banner-weather[data-pd-weather-paused="true"] .pd-banner-umbrella * { animation-play-state: paused; }
.pd-banner-weather-particle {
    position: absolute;
    top: calc(-1 * var(--pd-banner-weather-margin));
    left: var(--pd-weather-left);
    display: block;
    width: calc(var(--pd-banner-weather-rain-width) * var(--pd-weather-scale));
    height: calc(var(--pd-banner-weather-rain-height) * var(--pd-weather-scale));
    background: linear-gradient(transparent, var(--pd-gray-100) 55%, var(--pd-gray-100));
    opacity: var(--pd-weather-opacity);
    animation: pd-banner-rain var(--pd-weather-duration) var(--pd-weather-delay) linear infinite;
}
.pd-banner-weather-snow .pd-banner-weather-particle {
    width: calc(var(--pd-banner-weather-snow-size) * var(--pd-weather-scale));
    height: calc(var(--pd-banner-weather-snow-size) * var(--pd-weather-scale));
    border-radius: var(--pd-radius-round);
    background: var(--pd-gray-100);
    animation-name: pd-banner-snow;
}
.pd-banner-weather-snow .pd-banner-weather-flake {
    width: auto;
    height: auto;
    background: transparent;
    color: var(--pd-gray-100);
    font-family: var(--pd-font-system);
    font-size: var(--pd-icon-xs);
    line-height: var(--pd-lh-tight);
}
.pd-banner-weather[data-pd-weather-paused="true"] .pd-banner-weather-particle { animation-play-state: paused; }
@keyframes pd-banner-rain {
    from { transform: translate3d(0, 0, 0) rotate(-12deg); }
    to { transform: translate3d(var(--pd-weather-drift), var(--pd-weather-travel), 0) rotate(-12deg); }
}
@keyframes pd-banner-snow {
    0% { transform: translate3d(0, 0, 0); }
    50% { transform: translate3d(var(--pd-weather-drift), calc(var(--pd-weather-travel) / 2), 0); }
    100% { transform: translate3d(0, var(--pd-weather-travel), 0); }
}
@media (prefers-reduced-motion: reduce) { .pd-banner-weather { display: none; } }
.pd-topbar-responsive > .pd-topbar-scrim {
    position: relative;
    grid-area: 1 / 1;
    pointer-events: none;
}
.pd-topbar-responsive > .pd-banner {
    grid-area: 1 / 1;
    min-height: 0;
    padding: 0 var(--pd-space-4) calc(var(--pd-btn-h-lg) + var(--pd-space-1));
    pointer-events: none;
}
.pd-topbar-responsive > .pd-banner .pd-banner-logo,
.pd-topbar-responsive > .pd-banner .pd-weather,
.pd-topbar-responsive > .pd-banner .pd-banner-account-tools {
    pointer-events: auto;
}
body.pd-standalone .pd-topbar-responsive > .pd-banner {
    min-height: 0;
    align-items: center;
    padding-bottom: 0;
}
.pd-topbar-responsive > .pd-navbar {
    grid-area: 1 / 1;
    align-self: end;
}
@media (width < 640px) {
    .pd-topbar-responsive > .pd-banner-picture { aspect-ratio: 3 / 2; }
    .pd-topbar-responsive > .pd-banner,
    body.pd-standalone .pd-topbar-responsive > .pd-banner {
        align-items: flex-start;
        padding-top: var(--pd-space-1);
        padding-left: var(--pd-space-3);
    }
    .pd-topbar-responsive .pd-banner-logo img,
    body.pd-standalone .pd-topbar-responsive .pd-banner-logo img { height: var(--pd-btn-h-sm); }
    .pd-topbar-responsive > .pd-navbar {
        display: grid;
        grid-template-columns: auto minmax(0, 1fr);
    }
    .pd-topbar-responsive > .pd-navbar .pd-burger { grid-area: 1 / 1; }
    .pd-topbar-responsive > .pd-navbar .pd-menu { grid-area: 2 / 1 / 3 / -1; flex-direction: column; }
    .pd-topbar-responsive:has([data-nav-burger][aria-expanded="true"]) > .pd-navbar {
        grid-row: 2;
        background: var(--pd-color-on-dark-surface);
    }
}
@media (min-width: 640px) {
    .pd-topbar-responsive > .pd-navbar .pd-menu {
        flex: 1;
        flex-direction: row;
        width: auto;
        overflow-x: auto;
    }
}
/* 顶栏「更多」下拉：≥1024px 是浮层，更窄时摊平成普通菜单项（菜单本身要横向滚动，浮层会被裁掉） */
.pd-navbar .pd-menu-more { position: relative; }
.pd-navbar .pd-menu-more-toggle {
    background: transparent;
    border: 0;
    cursor: pointer;
    font-family: inherit;
}
.pd-navbar .pd-menu-more-list {
    display: none;
    position: absolute;
    top: 100%;
    right: 0;
    z-index: 30;
    min-width: 128px;
    margin: 0;
    padding: var(--pd-space-1) 0;
    list-style: none;
    background: var(--pd-color-on-dark-surface);
    border-radius: 0 0 var(--pd-card-radius) var(--pd-card-radius);
    box-shadow: var(--pd-shadow-2);
}
.pd-navbar .pd-menu-more.is-open .pd-menu-more-list { display: block; }
@media (hover: hover) and (min-width: 1024px) {
    .pd-navbar .pd-menu-more:hover .pd-menu-more-list,
    .pd-navbar .pd-menu-more:focus-within .pd-menu-more-list { display: block; }
}
/* 横幅图上的导航栏：下拉同样是磨砂玻璃（下拉落在白色页面上，模糊更强、底色略深，白字才看得清） */
.pd-topbar-hasbg .pd-navbar .pd-menu-more-list {
    background: rgba(0, 0, 0, .5);
    -webkit-backdrop-filter: blur(16px) saturate(130%);
    backdrop-filter: blur(16px) saturate(130%);
}
.pd-navbar .pd-menu-more-list .pd-menu-link {
    width: 100%;
    min-width: 0;
    justify-content: flex-start;
    padding-left: var(--pd-space-3);
    padding-right: var(--pd-space-3);
}
@media (min-width: 1024px) {
    .pd-topbar-responsive > .pd-navbar .pd-menu { overflow: visible; }
}
@media (width < 1024px) {
    .pd-navbar .pd-menu-more .pd-menu-more-toggle { display: none; }   /* 要比后面 .pd-navbar .pd-menu-link 的 inline-flex 更具体 */
    .pd-navbar .pd-menu-more,
    .pd-navbar .pd-menu-more-list { display: contents; }
}
@media (width < 640px) {
    .pd-navbar .pd-menu-more-list > li { width: 100%; }
}
.pd-topbar-hasbg .pd-navbar {
    position: relative;
    z-index: 1;
    background: transparent;
    border-top: 1px solid rgba(255, 255, 255, .10);
    box-shadow: none;
}
/* 磨砂底放在伪元素上：导航栏本身不带 backdrop-filter，里面的「更多」下拉才能再做自己的磨砂（嵌套的 backdrop-filter 看不到祖先后面的内容） */
.pd-topbar-hasbg .pd-navbar::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background: rgba(0, 0, 0, .28);
    -webkit-backdrop-filter: blur(3px) saturate(115%);
    backdrop-filter: blur(3px) saturate(115%);
}
.pd-topbar-hasbg .pd-navbar .pd-menu-link,
.pd-topbar-hasbg .pd-navbar .pd-menu-link span,
.pd-topbar-hasbg .pd-navbar .pd-menu-link i {
    color: rgba(255, 255, 255, .90);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
    text-shadow: 0 1px 4px rgba(0, 0, 0, .55);
    transition: color .12s ease, background .12s ease;
}
.pd-topbar-hasbg .pd-navbar .pd-menu-link:hover {
    color: var(--pd-color-on-dark);
    background: rgba(255, 255, 255, .10);
}
.pd-topbar-hasbg .pd-navbar .pd-menu-link:hover span,
.pd-topbar-hasbg .pd-navbar .pd-menu-link:hover i {
    color: var(--pd-color-on-dark);
    background: transparent;
}
.pd-topbar-hasbg .pd-navbar .pd-menu-link.active {
    color: var(--pd-color-on-dark);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    background: rgba(0, 0, 0, .30);
    -webkit-backdrop-filter: blur(12px) saturate(135%);
    backdrop-filter: blur(12px) saturate(135%);
    border-radius: 0;
    text-shadow: 0 1px 6px rgba(0, 0, 0, .65);
}
.pd-topbar-hasbg .pd-navbar .pd-menu-link.active span,
.pd-topbar-hasbg .pd-navbar .pd-menu-link.active i {
    color: var(--pd-color-on-dark);
    background: transparent;
    font-size: inherit;
    font-weight: inherit;
    text-shadow: inherit;
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
}
.pd-navbar .pd-menu-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-navbar-item-width);
    min-width: var(--pd-navbar-item-width);
    gap: 7px;
    padding: 13px var(--pd-space-1);   /* 每格 75px 里内容最宽约 53px（图标 + 两个字），左右各留 8px 就够 */
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    transition: background .12s ease, color .12s ease;
}
.pd-navbar .pd-menu-link,
.pd-navbar .pd-menu-link span,
.pd-navbar .pd-menu-link i {
    color: rgba(255, 255, 255, .82);
}
.pd-navbar .pd-menu-link:hover {
    color: var(--pd-color-on-dark);
    background: rgba(0, 0, 0, .06);
}
.pd-navbar .pd-menu-link:hover span,
.pd-navbar .pd-menu-link:hover i {
    color: var(--pd-color-on-dark);
    background: transparent;
}
.pd-navbar .pd-menu-link.active {
    color: var(--pd-color-on-dark);
    background: rgba(0, 0, 0, .1);
}
.pd-navbar .pd-menu-link.active span,
.pd-navbar .pd-menu-link.active i {
    color: var(--pd-color-on-dark);
    background: transparent;
}
@media (width < 640px) {
    .pd-navbar .pd-menu > li { width: 100%; }
    .pd-navbar .pd-menu-link { width: 100%; min-width: 0; justify-content: flex-start; padding-left: var(--pd-space-3); padding-right: var(--pd-space-3); }
}
.pd-menu-link i, .pd-menu-link .pd-cat-icon { font-size: var(--pd-icon-sm); }
.pd-menu-link .pd-cat-icon-img { width: 16px; height: 16px; filter: brightness(0) invert(1); }
.pd-menu-link .pd-cat-icon-svg svg { fill: currentColor; }

.pd-search { height: 34px; background: var(--pd-color-surface); border-radius: var(--pd-input-radius); overflow: hidden; }
.pd-search input { border: 0; outline: 0; height: 34px; padding: 0 10px; width: 140px; max-width: 40vw; background: transparent; font-size: var(--pd-fs-sm); color: var(--pd-color-text); }
.pd-search button { border: 0; background: transparent; padding: 0 10px; color: var(--pd-color-text-secondary); cursor: pointer; height: 34px; }

.pd-btn { display: inline-flex; align-items: center; gap: var(--pd-btn-gap); height: var(--pd-btn-h); padding: 0 var(--pd-btn-px-sm); border-radius: var(--pd-btn-radius); font-size: var(--pd-btn-fs); font-weight: var(--pd-btn-weight); cursor: pointer; }
.pd-btn-ghost { color: var(--pd-color-on-dark); background: rgba(255,255,255,.12); }
.pd-btn-ghost:hover, .pd-btn-ghost.active { background: rgba(255,255,255,.24); }
.pd-btn-solid { color: var(--pd-color-primary-hover); background: var(--pd-color-on-primary); }
.pd-btn-solid:hover, .pd-btn-solid.active { background: var(--pd-color-on-dark); }
/* 深色下顶栏在浅色横幅图上：幽灵按钮的半透明白底配浅字看不清，改成深色半透明底 */
body.theme-pd-dark .pd-btn-ghost { background: rgba(17, 24, 39, .6); }
body.theme-pd-dark .pd-btn-ghost:hover, body.theme-pd-dark .pd-btn-ghost.active { background: rgba(17, 24, 39, .8); }
body.theme-pd-dark .pd-btn-solid { color: var(--pd-color-link); background: var(--pd-color-surface); }
body.theme-pd-dark .pd-btn-solid:hover, body.theme-pd-dark .pd-btn-solid.active { background: var(--pd-color-surface-soft); }

/* 横幅右上角：天气（登录用户的头像在菜单栏最右，游客的登录 / 注册不放在横幅里） */
.pd-banner-account-tools {
    position: absolute;
    top: var(--pd-space-3);
    right: var(--pd-space-3);
    z-index: 2;
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    pointer-events: auto;
}
.pd-banner-account-tools .pd-weather {
    width: var(--pd-navbar-tool-size);
    height: var(--pd-navbar-tool-size);
}

/* 横幅右上角的天气：平时只有一个线性图标，鼠标悬停 / 键盘聚焦 / 手机点按时，在图标左边浮出日期和天气。
   浮层绝对定位，不会把旁边的元素挤动 */
.pd-weather {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-btn-h);
    height: var(--pd-btn-h);
    color: var(--pd-color-on-dark);
    font-size: var(--pd-icon-xl);
    cursor: default;
    text-shadow: 0 1px 3px rgba(0, 0, 0, .45);
}
.pd-weather[hidden] { display: none; }
.pd-weather:focus-visible { outline: 2px solid var(--pd-color-on-dark); outline-offset: 2px; border-radius: var(--pd-radius-sm); }
.pd-weather-pop {
    position: absolute;
    right: 100%;
    top: 50%;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 2px;
    margin-right: var(--pd-space-2);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    line-height: 1.5;
    white-space: nowrap;
    pointer-events: none;
    opacity: 0;
    transform: translate(4px, -50%);
    transition: opacity .16s ease, transform .16s ease;
}
.pd-weather:hover .pd-weather-pop,
.pd-weather:focus .pd-weather-pop {
    opacity: 1;
    transform: translate(0, -50%);
}
@media (max-width: 640px) { .pd-weather-date { display: none; } }

/* 横幅右上角的搜索（2026-10-05 从菜单栏挪上来）：天气右边、头像 / 登录左边，和天气同一套白色图标，点开全屏搜索窗 */
body.theme-pd .pd-banner-search {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-navbar-tool-size);
    height: var(--pd-navbar-tool-size);
    border-radius: var(--pd-radius-round);
    color: var(--pd-color-on-dark);
    font-size: var(--pd-icon-lg);
    text-shadow: 0 1px 3px rgba(0, 0, 0, .45);
    text-decoration: none;
    transition: background-color .15s ease;
}
body.theme-pd .pd-banner-search:hover { color: var(--pd-color-on-dark); background: rgba(17, 24, 39, .35); }
body.theme-pd .pd-banner-search:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-on-dark);
    outline-offset: calc(var(--pd-tab-indicator) * -1);
}

/* 顶部头像的账户导航使用 popover 顶层，短页面也不会被外框裁切。 */
.pd-account-menu { display: inline-flex; align-items: center; margin-left: 0; }
body.theme-pd .pd-account-trigger {
    position: relative;
    display: inline-grid;
    place-items: center;
    flex: 0 0 auto;
    width: var(--pd-navbar-tool-size);
    height: var(--pd-navbar-tool-size);
    padding: 0;
    background: transparent;
    border: 0;
    border-radius: var(--pd-radius-round);
    cursor: pointer;
}
.pd-account-trigger img {
    display: block;
    width: var(--pd-account-avatar-size);
    height: var(--pd-account-avatar-size);
    object-fit: cover;
    background: var(--pd-color-on-primary);
    border: 0;
    border-radius: var(--pd-radius-round);
}
.pd-account-unread-badge {
    position: absolute;
    top: 0;
    right: 0;
    transform: translate(25%, -25%);
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: var(--pd-account-unread-size);
    height: var(--pd-account-unread-size);
    padding: 0 calc(var(--pd-space-1) / 2);
    border: var(--pd-tab-indicator) solid var(--pd-color-on-primary);
    border-radius: var(--pd-radius-pill);
    color: var(--pd-color-on-primary);
    background: var(--pd-color-error);
    font-family: var(--pd-font-system);
    font-size: var(--pd-fs-2xs);
    font-weight: var(--pd-fw-semibold);
    line-height: 1;
    font-variant-numeric: tabular-nums;
    pointer-events: none;
}
.pd-account-unread-badge[hidden], .pd-account-count[hidden] { display: none; }
.pd-account-count {
    margin-left: auto;
    min-width: var(--pd-space-4);
    padding: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-error);
    background: var(--pd-color-error-soft);
    border-radius: var(--pd-radius-pill);
    font-size: var(--pd-fs-xs);
    font-variant-numeric: tabular-nums;
    text-align: center;
}
.pd-account-trigger:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-on-dark);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-account-panel {
    position: fixed;
    inset: auto;
    width: min(var(--pd-account-menu-width), calc(100vw - var(--pd-space-3) * 2));
    max-height: calc(100dvh - var(--pd-space-3) * 2);
    margin: 0;
    padding: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-2);
    z-index: var(--pd-z-popover);
}
.pd-account-panel[hidden] { display: none; }
.pd-account-panel::backdrop { background: transparent; pointer-events: none; }
/* 账户下拉（2026-10-04 收紧）：240px 宽、40px 头像、ID 和鱼种一行；链接每行 32px、行间不留空，分三组用细线隔开 */
body.theme-pd .pd-account-summary {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-2);
    color: var(--pd-color-text);
    text-decoration: none;
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-account-summary:hover { background: var(--pd-color-surface-soft); }
.pd-account-summary-avatar {
    width: var(--pd-account-summary-avatar);
    height: var(--pd-account-summary-avatar);
    flex: none;
    object-fit: cover;
    background: var(--pd-color-on-primary);
    border-radius: var(--pd-radius-md);
}
.pd-account-summary-info { min-width: 0; }
.pd-account-meta {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    min-width: 0;
    margin-top: calc(var(--pd-space-1) / 2);
}
.pd-account-level { display: inline-flex; min-width: 0; }
.pd-account-level :is(.pd-level-badge, .pd-group-badge) { margin-left: 0; }
.pd-account-name {
    display: block;
    margin: 0;
    overflow: hidden;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pd-account-uid {
    flex: none;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
.pd-account-links { display: block; padding: 0; }
.pd-account-group { display: grid; padding: calc(var(--pd-space-1) / 2); }
.pd-account-group + .pd-account-group { border-top: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-account-panel :is(.pd-account-link, .pd-account-signout) {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    width: 100%;
    min-height: var(--pd-space-5);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    color: var(--pd-color-text);
    font-family: var(--pd-font-body);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-tight);
    text-align: left;
    text-decoration: none;
    background: transparent;
    border: 0;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
.pd-account-panel :is(.pd-account-link, .pd-account-signout) i {
    width: var(--pd-icon-md);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-icon-sm);
    text-align: center;
}
body.theme-pd .pd-account-panel :is(.pd-account-link, .pd-account-signout):hover {
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
}
.pd-account-panel :is(.pd-account-link, .pd-account-signout):hover i { color: inherit; }
.pd-account-panel :is(.pd-account-link, .pd-account-signout):focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-tab-indicator) * -1);
}
.pd-account-logout { margin: 0; padding: calc(var(--pd-space-1) / 2); border-top: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-account-panel .pd-account-signout { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-account-panel .pd-account-signout:hover { color: var(--pd-color-error); background: var(--pd-color-error-soft); }

.pd-burger { color: var(--pd-color-on-dark); background: transparent; border: 0; font-size: var(--pd-icon-lg); padding: 11px 12px; cursor: pointer; }

@media (max-width: 640px) {
    .pd-menu { flex-direction: column; width: 100%; align-items: stretch; }
    .pd-menu-link { padding: 12px 14px; }
    .pd-search input { width: 100%; max-width: none; flex: 1; }
    .pd-search { flex: 1; }
}

/* ============================================================
   phpBB 风格页面外壳：灰褐底 + 白色圆角立体内容框
   ============================================================ */

.pd-page-frame {
    width: calc(100% - 44px);
    max-width: 1200px;
    margin: 24px auto 12px;
    background: var(--pd-color-surface);
    border-radius: var(--pd-radius-2xl);
    box-shadow: 0 0 0 1px rgba(255, 255, 255, .28),
                0 7px 22px rgba(0, 0, 0, .30);
    overflow: hidden;
}
body.theme-pd-dark .pd-page-frame {
    background: var(--pd-color-surface);
    box-shadow: 0 0 0 1px rgba(255, 255, 255, .05),
                0 7px 22px rgba(0, 0, 0, .6);
}
/* 手机端：白框铺满屏幕宽度（去掉框外两侧 22px 和上下边距、圆角、阴影），左右留白只剩框内正文的内边距 */
@media (width < 640px) {
    .pd-page-frame {
        width: 100%;
        margin: 0;
        border-radius: 0;
        box-shadow: none;
    }
}

/* 页头铺满框宽、banner 顶角交给外框圆角裁切 */
.pd-page-frame .pd-topbar { padding-top: 0; }
.pd-page-frame .pd-topbar-inner { max-width: none; margin: 0; padding: 0; }
.pd-page-frame .pd-banner { border-radius: 0; }

/* 正文区在白框内留出内边距（灰褐底只在框外显示） */
.pd-page-frame main.wrap { padding-bottom: 12px; }
body.theme-pd .pd-page-frame main.wrap { background: transparent; }

/* PHP 官网风背景：深底 + 4px 极细斜纹纹理（复刻 php.net bg-texture） */
body.theme-pd,
body.theme-pd-dark {
    background-color: var(--pd-color-page-bg) !important;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath d='M0 0L4 4M0 4L4 0' stroke='%23000000' stroke-width='.5' stroke-opacity='.28'/%3E%3C/svg%3E") !important;
    background-size: 4px 4px !important;
    background-attachment: fixed !important;
}

/* 页面滚动条：轨道与页面背景同色。Chrome/Edge/Firefox 认 scrollbar-color，
   Safari 只认 ::-webkit-scrollbar，两套都写；html 同步底色，避免回弹时露白 */
html {
    background-color: var(--pd-color-page-bg) !important;
    scrollbar-color: var(--pd-color-scrollbar-thumb) var(--pd-color-page-bg) !important;
    /* 始终预留滚动条位置：页面长短切换时中间内容不左右晃动 */
    scrollbar-gutter: stable;
}
html::-webkit-scrollbar {
    width: 12px;
    background-color: var(--pd-color-page-bg) !important;
}
html::-webkit-scrollbar-track {
    background-color: var(--pd-color-page-bg) !important;
}
html::-webkit-scrollbar-thumb {
    background-color: var(--pd-color-scrollbar-thumb) !important;
    border: 3px solid var(--pd-color-page-bg);
    border-radius: var(--pd-radius-pill);
}
html::-webkit-scrollbar-thumb:hover {
    background-color: var(--pd-color-scrollbar-thumb-hover) !important;
}

/* logo：悬浮轻微放大 + 禁止选中/拖拽（右键已在 HTML 层禁用） */
.pd-banner-logo img {
    filter: brightness(0) invert(1);   /* 顶部横幅图上用白色 logo */
    transition: transform .18s ease;
    transform-origin: left center;
    user-select: none;
    -webkit-user-drag: none;
    -webkit-touch-callout: none;
}
.pd-banner-logo:hover img { transform: scale(1.06); }

/* 顶部菜单合并为一行：超出则横向滚动（隐藏滚动条） */
.pd-menu {
    flex: 1;
    min-width: 0;
    flex-wrap: nowrap;
    overflow-x: auto;
    scrollbar-width: none;
}
.pd-menu::-webkit-scrollbar { display: none; }
.pd-menu-link { flex: 0 0 auto; white-space: nowrap; }
@media (max-width: 640px) {
    .pd-menu { flex: none; overflow-x: visible; }
}
/* 白框内正文区左右内边距（提高专属性以盖过基础 main.wrap 规则），并让 home-shell 填满 */
/* 左右各 20px：1200px 白框内正文可用宽约 1160px；勿写 shorthand padding，避免盖掉内页 padding-top */
body.theme-pd .pd-page-frame main.wrap,
body.theme-pd-dark .pd-page-frame main.wrap {
    padding-left: 20px;
    padding-right: 20px;
    padding-bottom: 12px;   /* 内容到白框底边 */
}
/* 手机端：正文左右留白收窄到 8px */
@media (width < 640px) {
    body.theme-pd .pd-page-frame main.wrap,
    body.theme-pd-dark .pd-page-frame main.wrap {
        padding-left: var(--pd-space-1);
        padding-right: var(--pd-space-1);
    }
}

/* 帖子页：菜单栏 ↔ 面包屑 ↔ 帖子卡片，上下间距统一为 14px */
body.theme-pd.page-thread .pd-page-frame main.wrap,
body.theme-pd-dark.page-thread .pd-page-frame main.wrap {
    padding-top: 14px;
}

body.theme-pd .pd-page-frame .pd-home-shell,
body.theme-pd-dark .pd-page-frame .pd-home-shell {
    width: 100%;
    max-width: none;
    margin: var(--pd-space-4) 0 0;
}

/* ===== 搜索模态窗（快捷键 ⌘/Ctrl+K 或 / 打开） ===== */
.pd-search-window {
    position: fixed;
    inset: 0;
    z-index: 2000;
    display: none;
    align-items: flex-start;
    justify-content: center;
    padding: 12vh var(--pd-space-3) var(--pd-space-3);
    background: rgba(15, 17, 22, .55);
    backdrop-filter: blur(3px);
}
.pd-search-window.is-open { display: flex; }
.pd-search-window-box {
    width: 100%;
    max-width: 560px;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-modal-radius);
    box-shadow: var(--pd-shadow-2);
    overflow: hidden;
}
/* 搜索行：整行是一个输入区，聚焦时只让图标和底边变主色，输入框自己不画框、不发光
   （全局的 input:focus 会给 input 加描边环，这里用更高的优先级压掉） */
.pd-search-window form {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    height: calc(var(--pd-space-5) + var(--pd-space-4));   /* 56px */
    padding: 0 var(--pd-space-3);
    border-bottom: 1px solid var(--pd-color-divider);
    transition: border-color .15s ease;
}
.pd-search-window form:focus-within {
    border-bottom-color: var(--pd-color-primary);
}
.pd-search-window form > i {
    flex: 0 0 auto;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-xl);
    transition: color .15s ease;
}
.pd-search-window form:focus-within > i {
    color: var(--pd-color-primary);
}
.pd-search-window form input,
.pd-search-window form input:focus {
    flex: 1;
    min-width: 0;
    height: 100%;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    outline: 0;
    box-shadow: none;
    background: transparent;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    caret-color: var(--pd-color-primary);
}
.pd-search-window form input::placeholder {
    color: var(--pd-color-text-tertiary);
}
.pd-search-window kbd {
    display: inline-flex;
    align-items: center;
    padding: 0 var(--pd-space-1);
    height: var(--pd-space-4);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-badge-radius);
    background: var(--pd-color-surface-subtle);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-family: inherit;
    line-height: 1;
    white-space: nowrap;
}
.pd-search-window form kbd {
    flex: 0 0 auto;
}
.pd-search-window-hint {
    padding: var(--pd-space-1) var(--pd-space-3);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-space-4);
    background: var(--pd-color-surface-subtle);
}
.pd-search-window-hint kbd {
    margin: 0 calc(var(--pd-space-1) / 4);
    vertical-align: middle;
}
/* 手机 / 平板没有键盘快捷键，提示行整行不显示 */
@media (max-width: 640px), (hover: none) and (pointer: coarse) {
    .pd-search-window-hint { display: none; }
}
body.theme-pd-dark .pd-search-window-box { background: var(--pd-color-surface-subtle); }
body.theme-pd-dark .pd-search-window kbd { background: var(--pd-color-surface-soft); border-color: var(--pd-color-border-strong); color: var(--pd-color-text-secondary); }
body.theme-pd-dark .pd-search-window-hint { background: var(--pd-color-surface); color: var(--pd-color-text-tertiary); }

/* ============================================================
   页面显示不依赖 JS：body 直接可见，只做一次淡入
   ============================================================ */
body {
    opacity: 1;
    animation: pdBodyFadeIn 240ms ease-out;
}
@keyframes pdBodyFadeIn { from { opacity: 0; } to { opacity: 1; } }

/* 页头关键布局兜底（不依赖 Tailwind，CDN 慢/被墙也不错位） */
.pd-banner { position: relative; z-index: 2; width: 100%; overflow: visible; }
.pd-banner > img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
.pd-banner > span { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, .25); }
.pd-banner-logo { position: relative; z-index: 2; display: inline-flex; align-items: center; }
.pd-banner > div { position: absolute; top: 16px; right: 16px; z-index: 2; display: flex; align-items: center; gap: 8px; }
.pd-navbar { position: relative; z-index: 1; display: flex; flex-wrap: wrap; align-items: center; }
.pd-menu { display: flex; align-items: center; }
.pd-burger { display: none; }
@media (max-width: 640px) {
    .pd-burger { display: inline-flex; align-items: center; }
}

/* ============================================================
   重构页脚（深色纹理底上的浅色页脚）
   ============================================================ */
.site-footer {
    margin-top: 0;
    padding: var(--pd-space-2) 0 var(--pd-space-4);
}
.site-footer-inner {
    max-width: var(--pd-page-max-width);
    margin: 0 auto;
    padding: 0 var(--pd-page-edge-gap);
}
.site-footer-links {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-1) var(--pd-space-3);
    margin: 0 0 var(--pd-space-2);
    padding: 0;
    border: 0;
}
body .site-footer .site-footer-links a {
    color: var(--pd-color-on-dark-secondary);
    font-size: var(--pd-fs-xs);
    transition: color .12s ease;
}
body .site-footer .site-footer-links a:hover { color: var(--pd-color-on-dark); }

/* 一行：logo + 版权在左、菜单居中、三个计数在右，最右 RSS 和主题切换（2026-10-05 起） */
.site-footer-row {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto auto;
    align-items: center;
    gap: var(--pd-space-2) var(--pd-space-4);
}
.site-footer-row > .site-footer-links { margin: 0; }
.site-footer-side {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    min-width: 0;
}
.site-footer-logo { display: inline-flex; flex: 0 0 auto; }
.site-footer-logo img {
    display: block;
    width: auto;
    height: var(--pd-icon-lg);
    filter: brightness(0) invert(1);   /* 深色页脚上用白色 logo */
    user-select: none;
    -webkit-user-drag: none;
}
.site-footer-copy {
    margin: 0;
    color: var(--pd-color-on-dark-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    white-space: nowrap;
}
.site-footer-icp a { color: var(--pd-color-on-dark-secondary); }
.site-footer-icp a:hover { color: var(--pd-color-on-dark); }
.site-footer-stats {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
}
.site-footer-links a:focus-visible,
.site-footer-logo:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-on-dark);
    outline-offset: calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-radius-xs);
}
.site-footer-row.site-footer-friends {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    margin-top: var(--pd-space-2);
    gap: var(--pd-space-1) var(--pd-space-3);
}
.site-footer-friends-label,
.site-footer-friends a {
    color: var(--pd-color-on-dark-tertiary);
    font-size: var(--pd-fs-xs);
}
@media (max-width: 960px) {
    .site-footer-inner { text-align: center; }
    .site-footer-row { display: flex; flex-wrap: wrap; justify-content: center; }
    .site-footer-row:not(.site-footer-friends) { flex-direction: column; }
    .site-footer-side { flex: none; width: 100%; flex-wrap: wrap; justify-content: center; }
    .site-footer-copy { white-space: normal; }
    .site-footer-stats { flex: none; flex-wrap: wrap; justify-content: center; }
}
@media (max-width: 640px) {
    .site-footer-inner { padding: 0 var(--pd-space-3); }
    .site-footer-row { column-gap: var(--pd-space-2); }
    .site-footer-side { gap: var(--pd-space-1); }
}

.pd-scroll-top {
    position: fixed;
    right: max(var(--pd-space-4), env(safe-area-inset-right));
    bottom: max(var(--pd-space-4), env(safe-area-inset-bottom));
    z-index: 1000;
    display: grid;
    place-items: center;
    width: var(--pd-navbar-tool-size);
    height: var(--pd-navbar-tool-size);
    padding: 0;
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-round);   /* 圆形按钮 */
    box-shadow: var(--pd-shadow-1);
    font-size: var(--pd-icon-lg);
    cursor: pointer;
}
.pd-scroll-top[hidden] { display: none; }
.pd-scroll-top:hover { color: var(--pd-color-primary); }
.pd-scroll-top:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: var(--pd-tab-indicator); }
@media (max-width: 960px) {
    .pd-scroll-top { display: none; }
}
.pd-home-mobile-actions { display: none; }
@media (max-width: 960px) {
    .pd-home-mobile-actions { display: flex; justify-content: flex-end; margin-bottom: var(--pd-space-2); }
}

/* 页脚性能/在线指标芯片 */
.pd-stat-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 0;
    font-size: var(--pd-fs-xs);
    white-space: nowrap;
}
.pd-stat-chip__ico {
    display: inline-flex;
    font-size: var(--pd-icon-xs);
    line-height: 1;
}
.pd-stat-chip__k { color: var(--pd-color-on-dark-tertiary); }
.pd-stat-chip__v {
    font-family: var(--pd-font-mono);   /* 数字用代码字体，比前面的标签（xs）小一档，不加粗 */
    font-size: var(--pd-fs-2xs);
    font-weight: var(--pd-fw-regular);
    font-variant-numeric: tabular-nums;
    color: var(--pd-color-on-dark-secondary);
}
.pd-stat-chip--tip { position: relative; cursor: default; outline: 0; }
.pd-stat-tip {
    position: absolute; left: 50%; bottom: calc(100% + 8px);
    display: flex; flex-direction: column; gap: 4px;
    padding: 8px 12px;
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    box-shadow: 0 4px 12px rgba(0, 0, 0, .1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs); white-space: nowrap;
    opacity: 0; visibility: hidden; transform: translate(-50%, 4px);
    transition: opacity .12s ease, transform .12s ease, visibility .12s;
    pointer-events: none; z-index: 20;
}
.pd-stat-tip span { display: flex; justify-content: space-between; gap: 16px; }
.pd-stat-tip b { color: var(--pd-color-text); font-weight: var(--pd-fw-semibold); font-variant-numeric: tabular-nums; }
.pd-stat-chip--tip:hover .pd-stat-tip,
.pd-stat-chip--tip:focus-visible .pd-stat-tip { opacity: 1; visibility: visible; transform: translate(-50%, 0); }
.pd-stat-chip__ico { color: var(--pd-color-on-dark-tertiary); }   /* 图标统一用三级灰，不再黄、蓝、绿各一色 */
/* 在线：只用一个绿点 */
.pd-stat-chip__dot {
    flex: 0 0 auto;
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    background: var(--pd-color-success);
    border-radius: var(--pd-radius-round);
}
/* ===== 关于 / 社区页 ===== */
body.theme-pd .pd-about {
    max-width: 960px;
    margin: 0 auto;
    padding: 4px 0 10px;
}
body.theme-pd .pd-about-hero {
    text-align: center;
    padding: 34px 24px 30px;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-about-hero h1 {
    margin: 0;
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-primary);
    letter-spacing: .5px;
}
body.theme-pd .pd-about-slogan {
    margin: 8px 0 0;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-about-topstats {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 14px 34px;
    margin-top: 22px;
}
body.theme-pd .pd-about-topstat {
    display: flex;
    flex-direction: column;
    align-items: center;
    min-width: 72px;
}
body.theme-pd .pd-about-topstat b { font-size: var(--pd-fs-lg); font-weight: var(--pd-fw-semibold); color: var(--pd-color-text); }
body.theme-pd .pd-about-topstat span { margin-top: 2px; font-size: var(--pd-fs-xs); color: var(--pd-color-text-tertiary); }

body.theme-pd .pd-about-block { margin-top: 30px; }
body.theme-pd .pd-about-block > h2 {
    margin: 0 0 14px;
    padding-left: 11px;
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
    border-left: 4px solid var(--pd-color-primary);
    line-height: 1.1;
}
body.theme-pd .pd-about-text { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); line-height: 1.9; }

body.theme-pd .pd-staff-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
    gap: 12px;
}
body.theme-pd .pd-staff-card {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-card-radius);
    text-decoration: none;
    transition: border-color .15s, transform .12s;
}
body.theme-pd .pd-staff-card:hover { border-color: var(--pd-color-primary); transform: translateY(-1px); }
body.theme-pd .pd-staff-avatar {
    width: 46px;
    height: 46px;
    flex: 0 0 auto;
    object-fit: cover;
    background: var(--pd-color-surface-soft);
    border-radius: 0;
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 0c9.601 0 12 2.399 12 12 0 9.601-2.399 12-12 12-9.601 0-12-2.399-12-12C0 2.399 2.399 0 12 0z'/%3E%3C/svg%3E");
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 0c9.601 0 12 2.399 12 12 0 9.601-2.399 12-12 12-9.601 0-12-2.399-12-12C0 2.399 2.399 0 12 0z'/%3E%3C/svg%3E");
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}
body.theme-pd .pd-staff-meta { display: flex; flex-direction: column; min-width: 0; }
body.theme-pd .pd-staff-name {
    font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-semibold); color: var(--pd-color-text);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
body.theme-pd .pd-staff-title {
    margin-top: 2px; font-size: var(--pd-fs-xs); color: var(--pd-color-text-tertiary);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

body.theme-pd .pd-about-contact p { margin: 0 0 8px; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); line-height: 1.8; }
body.theme-pd .pd-about-contact p.muted { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-about-contact a { color: var(--pd-color-primary); font-weight: var(--pd-fw-semibold); }

/* 关于页：官方账号与 AI 助手、怎么使用（pages/about.php） */
body.theme-pd .pd-about-block > p.pd-about-text { margin: 0 0 var(--pd-space-3); }
body.theme-pd .pd-service-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: var(--pd-space-2);
}
body.theme-pd .pd-service-card {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    padding: var(--pd-space-3);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-service-head {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    margin-bottom: var(--pd-space-1);
    text-decoration: none;
}
body.theme-pd .pd-service-card .pd-staff-name { white-space: normal; }
body.theme-pd .pd-service-role {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: 1.7;
}
body.theme-pd .pd-service-how {
    margin: 0;
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-md);
    font-size: var(--pd-fs-xs);
    line-height: 1.7;
}
body.theme-pd .pd-service-cta {
    display: inline-block;
    width: fit-content;
    margin-top: var(--pd-space-1);
    padding: var(--pd-space-1) var(--pd-space-3);
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
    border-radius: var(--pd-radius-pill);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    text-decoration: none;
}
body.theme-pd .pd-service-cta.is-plain {
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
}
body.theme-pd .pd-about-steps {
    margin: 0;
    padding-left: var(--pd-space-4);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: 1.9;
}
body.theme-pd .pd-about-steps b { color: var(--pd-color-text); }
body.theme-pd .pd-about-steps ul { margin: var(--pd-space-1) 0 0; padding-left: var(--pd-space-3); }
body.theme-pd .pd-about-steps a { color: var(--pd-color-primary); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-about-links {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin: var(--pd-space-3) 0 0;
}
body.theme-pd .pd-about-links .pd-service-cta { margin-top: 0; }
body.theme-pd-dark .pd-service-card { background: var(--pd-color-surface-soft); border-color: var(--pd-color-border); }
body.theme-pd-dark .pd-service-how { background: var(--pd-color-surface); }

body.theme-pd .pd-about-activity {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
}
body.theme-pd .pd-about-metric {
    padding: 16px 18px;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-about-metric b { display: block; font-size: var(--pd-fs-xl); font-weight: var(--pd-fw-semibold); color: var(--pd-color-primary); }
body.theme-pd .pd-about-metric span { display: block; margin-top: 4px; font-size: var(--pd-fs-xs); color: var(--pd-color-text); }
body.theme-pd .pd-about-metric em { display: block; margin-top: 2px; font-size: var(--pd-fs-xs); color: var(--pd-color-text-tertiary); font-style: normal; }

@media (max-width: 640px) {
    body.theme-pd .pd-about-activity { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

body.theme-pd-dark .pd-about-hero,
body.theme-pd-dark .pd-staff-card,
body.theme-pd-dark .pd-about-metric { background: var(--pd-color-surface-soft); border-color: var(--pd-color-border); }
body.theme-pd-dark .pd-about-topstat b,
body.theme-pd-dark .pd-about-block > h2,
body.theme-pd-dark .pd-staff-name,
body.theme-pd-dark .pd-about-metric span { color: var(--pd-color-text); }
body.theme-pd-dark .pd-about-text,
body.theme-pd-dark .pd-about-contact p { color: var(--pd-color-text-secondary); }

body.theme-pd .pd-newuser-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 14px 8px;
}
body.theme-pd .pd-newuser {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    min-width: 0;
    text-decoration: none;
}
body.theme-pd .pd-newuser img {
    width: 52px;
    height: 52px;
    object-fit: cover;
    background: var(--pd-color-surface-soft);
    transition: transform .12s ease;
}
/* 圆角方形（超椭圆）头像遮罩 */
body.theme-pd .pd-newuser img,
body.theme-pd .pd-squircle {
    border-radius: 0;
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 0c9.601 0 12 2.399 12 12 0 9.601-2.399 12-12 12-9.601 0-12-2.399-12-12C0 2.399 2.399 0 12 0z'/%3E%3C/svg%3E");
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 0c9.601 0 12 2.399 12 12 0 9.601-2.399 12-12 12-9.601 0-12-2.399-12-12C0 2.399 2.399 0 12 0z'/%3E%3C/svg%3E");
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}
body.theme-pd .pd-newuser:hover img { transform: translateY(-2px); }
body.theme-pd .pd-newuser span {
    max-width: 100%;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
body.theme-pd .pd-newuser:hover span { color: var(--pd-color-primary); }
body.theme-pd-dark .pd-newuser span { color: var(--pd-color-text-secondary); }

/* ============================================================
   首页右栏：一张实色品牌卡 + 几张浅灰小卡（参照 phpBB 首页右侧的发布卡和 SPONSORS 卡）
   右栏卡片一律不加阴影，浅灰卡也不加边框；深色模式只靠令牌切换
   ============================================================ */

/* 品牌卡：访客 → 注册；会员 → 发帖 + 签到 / 等级进度 */
body.theme-pd .pd-promo {
    /* 在卡片里把文字类语义令牌改成白色系，深色模式里带 !important 的 h2 / a 规则解析出来也是白色 */
    --pd-color-text: var(--pd-color-promo-fg);
    --pd-color-text-secondary: var(--pd-color-promo-fg-muted);
    --pd-color-link: var(--pd-color-promo-fg);
    --pd-color-link-hover: var(--pd-color-promo-fg);
    display: grid;
    grid-template-columns: minmax(0, 1fr) var(--pd-side-art);
    column-gap: var(--pd-space-2);
    padding: var(--pd-card-padding);
    overflow: hidden;
    color: var(--pd-color-promo-fg);
    background: var(--pd-color-promo);
    border-radius: var(--pd-card-radius-side);
}
body.theme-pd .pd-promo-text { min-width: 0; }
body.theme-pd .pd-promo h2 {
    margin: 0 0 var(--pd-space-1);
    overflow: hidden;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
    text-overflow: ellipsis;
}
body.theme-pd .pd-promo p {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-promo-art {
    align-self: start;
    width: var(--pd-side-art);
    height: var(--pd-side-art);
    object-fit: contain;
    user-select: none;
}
body.theme-pd .pd-promo-actions {
    display: flex;
    grid-column: 1 / -1;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-promo-actions > * { flex: 1; min-width: 0; }
body.theme-pd .pd-promo-form { margin: 0; }
/* 不用 .btn：全局 .btn 带 !important 的品牌底色 */
body.theme-pd .pd-promo-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-btn-gap);
    width: 100%;
    height: var(--pd-btn-h);
    padding: 0 var(--pd-space-2);
    color: var(--pd-color-promo);
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    white-space: nowrap;
    text-decoration: none;
    background: var(--pd-color-promo-fg);
    border: 1px solid transparent;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
body.theme-pd .pd-promo-btn i { font-size: var(--pd-btn-icon); }
body.theme-pd .pd-promo-btn:hover { color: var(--pd-color-promo); background: var(--pd-color-promo-fg-muted); }
body.theme-pd .pd-promo-btn--ghost {
    color: var(--pd-color-promo-fg);
    background: transparent;
    border-color: var(--pd-color-promo-fg);
}
body.theme-pd .pd-promo-btn--ghost:hover { color: var(--pd-color-promo-fg); background: var(--pd-color-promo-hover); }
body.theme-pd .pd-promo-btn--ghost.is-done,
body.theme-pd .pd-promo-btn--ghost.is-done:hover {
    background: transparent;
    border-color: var(--pd-color-promo-fg-muted);
}
body.theme-pd .pd-promo-btn:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-promo-fg);
    outline-offset: var(--pd-tab-indicator);
}

/* 会员欢迎卡 = 个人助手（2026-10-04 改版）：智能问候 + 头像（悬浮出账户菜单）、本地时间和天气、鱼丸 / 成长值 / 鱼龄、升级进度胶囊、待办。
   发新帖是卡片上面单独的按钮；签到在下面单独的签到卡 */
body.theme-pd .pd-promo--member {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-3);
}
/* 会员欢迎卡：白底卡片（和右栏其他卡一致），页面里只留发新帖按钮一块蓝；
   把卡片里的白字令牌换回正常文字色，`unset` = 取回 :root 上的原值 */
body.theme-pd .pd-promo--member {
    --pd-color-text: unset;
    --pd-color-text-secondary: unset;
    --pd-color-link: unset;
    --pd-color-link-hover: unset;
    --pd-color-promo-fg: var(--pd-color-text);
    --pd-color-promo-fg-muted: var(--pd-color-text-secondary);
    --pd-color-promo-track: var(--pd-color-border);
    --pd-color-promo-chip: var(--pd-color-surface-soft);
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    box-shadow: var(--pd-shadow-2);
}
body.theme-pd .pd-promo--member .pd-promo-btn--go,
body.theme-pd .pd-promo--member .pd-promo-btn--go:hover { color: #fff; }
body.theme-pd .pd-promo--member .pd-promo-btn--go.is-done { color: #fff; }
body.theme-pd .pd-promo-shell { position: relative; display: flex; flex-direction: column; }
body.theme-pd .pd-promo-shell > .pd-promo { flex: 1 1 auto; }
/* 鱼丸 / 成长值 / 鱼龄：一行小字，标签在前、数字在后，不抢问候和待办的位置 */
body.theme-pd .pd-promo-stats {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1) var(--pd-space-3);
    margin: 0;
}
body.theme-pd .pd-promo-stats div {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-1);
    min-width: 0;
}
body.theme-pd .pd-promo-stats dt {
    color: var(--pd-color-promo-fg-muted);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-tight);
}
body.theme-pd .pd-promo-stats dd {
    margin: 0;
    color: var(--pd-color-promo-fg);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
body.theme-pd .pd-promo-stats dd a {
    color: inherit;
    text-decoration: none;
}
body.theme-pd .pd-promo-stats dd a:hover { text-decoration: underline; }
body.theme-pd .pd-promo-stats small {
    margin-left: calc(var(--pd-space-1) / 4);
    color: var(--pd-color-promo-fg-muted);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}
/* 升级进度：一条胶囊（按升级最慢的条件算，pd_group_upgrade_progress()） */
body.theme-pd .pd-promo-bar {
    display: block;
    width: 100%;
    height: var(--pd-space-1);
    margin: var(--pd-space-1) 0;
    overflow: hidden;
    color: var(--pd-color-promo-progress);
    background: var(--pd-color-promo-track);
    border: 0;
    border-radius: var(--pd-radius-pill);
    -webkit-appearance: none;
    appearance: none;
}
body.theme-pd .pd-promo-bar::-webkit-progress-bar { background: var(--pd-color-promo-track); }
body.theme-pd .pd-promo-bar::-webkit-progress-value {
    background: var(--pd-color-promo-progress);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-promo-bar::-moz-progress-bar {
    background: var(--pd-color-promo-progress);
    border-radius: var(--pd-radius-pill);
}
/* 升级进度默认收起：鼠标移到欢迎卡上（或键盘焦点进到卡片里）时卡片慢慢变高、进度淡入；触屏没有悬浮，直接展开。
   用 grid-template-rows 0fr → 1fr 做高度动画；收起时用负的上外边距抵掉卡片 flex 的 gap，不留空白 */
body.theme-pd .pd-promo-more {
    display: grid;
    grid-template-rows: 0fr;
    margin-top: calc(var(--pd-space-3) * -1);
    opacity: 0;
    transition: grid-template-rows .3s ease, margin-top .3s ease, opacity .3s ease;
}
body.theme-pd .pd-promo-more > div {
    min-height: 0;
    overflow: hidden;
}
body.theme-pd .pd-promo-shell:hover .pd-promo-more,
body.theme-pd .pd-promo-shell:focus-within .pd-promo-more {
    grid-template-rows: 1fr;
    margin-top: 0;
    opacity: 1;
}
@media (hover: none) {
    body.theme-pd .pd-promo-more {
        grid-template-rows: 1fr;
        margin-top: 0;
        opacity: 1;
    }
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-promo-more { transition: none; }
}
body.theme-pd .pd-promo--member .pd-promo-actions { margin-top: 0; }
body.theme-pd .pd-promo-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--pd-space-1);
    color: var(--pd-color-promo-fg-muted);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-promo-row b {
    color: var(--pd-color-promo-fg);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-promo-row a {
    color: var(--pd-color-promo-fg);
    text-decoration: underline;
    text-underline-offset: calc(var(--pd-space-1) / 4);
}
body.theme-pd .pd-promo-chips {
    display: flex;
    flex-wrap: wrap;
    gap: calc(var(--pd-space-1) / 2);
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-promo-chips li {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: 0 calc(var(--pd-space-1) * .75);
    color: var(--pd-color-promo-fg);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    background: var(--pd-color-promo-chip);
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-promo-chips li i { color: var(--pd-color-promo-progress); }
body.theme-pd .pd-promo-btn--go,
body.theme-pd .pd-promo-btn--go:hover {
    color: var(--pd-color-promo-fg);
    background: var(--pd-color-promo-go);
}
body.theme-pd .pd-promo-btn--go:hover { background: var(--pd-color-promo-go-hover); }

/* 发新帖：会员欢迎卡上面单独一个按钮（不用 .btn：全局 .btn 带 !important 和固定内边距）。
   拟物按钮：同色系的厚底边 + 多层柔和投影 + 内部高光，按下下沉；
   悬停时文字滑出右侧，图标放大移到中间 */
body.theme-pd .pd-side-post-btn {
    --pd-key-edge: color-mix(in srgb, var(--pd-color-primary) 82%, #000);
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-1);
    height: var(--pd-btn-h);
    margin-bottom: var(--pd-space-1);   /* 让下面第一张卡的顶边和左侧第一张帖子卡对齐（标签栏高度 + 间距 - 按钮高 - 卡片间距） */
    padding: 0 var(--pd-space-2);
    overflow: hidden;
    color: var(--pd-color-on-primary);
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    white-space: nowrap;
    text-decoration: none;
    text-shadow: 0 1px 0 rgba(0, 0, 0, .3);
    user-select: none;
    background: var(--pd-color-primary);
    border: 1px solid var(--pd-key-edge);
    border-radius: var(--pd-btn-radius);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, .3),
        0 3px 0 var(--pd-key-edge),
        0 6px 10px -2px rgba(0, 40, 120, .3);
    transition: transform .15s ease-in-out, box-shadow .15s ease-in-out;
}
body.theme-pd .pd-side-post-btn i {
    font-size: var(--pd-btn-icon);
    transition: transform .5s ease-in-out;
}
body.theme-pd .pd-side-post-btn .pd-side-post-text { transition: transform .5s ease-in-out; }
body.theme-pd .pd-side-post-btn:hover {
    color: var(--pd-color-on-primary);
    text-decoration: none;
}
body.theme-pd .pd-side-post-btn:hover .pd-side-post-text { transform: translateX(calc(var(--pd-space-5) * 10)); }
body.theme-pd .pd-side-post-btn:hover i { transform: translateX(var(--pd-space-4)) scale(1.5); }
body.theme-pd .pd-side-post-btn:active {
    transform: translateY(3px);
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, .15),
        0 0 0 var(--pd-key-edge),
        0 2px 4px -1px rgba(0, 40, 120, .3);
}
body.theme-pd .pd-side-post-btn:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-space-1);
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-side-post-btn,
    body.theme-pd .pd-side-post-btn i,
    body.theme-pd .pd-side-post-btn .pd-side-post-text { transition: none; }
}
/* 深色模式品牌蓝是亮的 logo 蓝，实色按钮用深色字（和 .btn 一致） */
body.theme-pd-dark .pd-side-post-btn,
body.theme-pd-dark .pd-side-post-btn:hover { color: var(--pd-color-surface); text-shadow: none; }
body.theme-pd-dark .pd-checkin-btn { color: var(--pd-color-surface); }

/* 首页签到卡（2026-10-04）：独立一张卡，不和欢迎卡合并；外壳就是右栏的 .pd-side-box（同一底色，深浅主题都和其他卡片一致）。
   参照「连续打卡」小组件：火苗 + 连续天数、本周七个圆点（签了绿底对号，今天没签是绿圈带奖励数）、本月每天一格（签了变绿），没签到时下面选心情签到。
   卡片底是 surface-soft，卡里空圆点、空格子用 border 色，心情格用 surface，才看得出来 */
body.theme-pd .pd-side-checkin { --pd-mood-bg: var(--pd-color-surface-soft); }
body.theme-pd-dark .pd-side-checkin { --pd-mood-bg: var(--pd-color-surface); }
body.theme-pd .pd-checkin-head {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    padding-bottom: var(--pd-space-2);
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-checkin-flame {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: var(--pd-side-avatar);
    height: var(--pd-side-avatar);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-xl);
    background: var(--pd-color-border);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-checkin-flame.is-on {
    color: var(--pd-color-checkin-flame);
    background: var(--pd-color-checkin-flame-soft);
}
body.theme-pd .pd-checkin-streak {
    display: flex;
    flex: 1;
    flex-direction: column;
    min-width: 0;
}
body.theme-pd .pd-checkin-streak > span,
body.theme-pd .pd-checkin-label {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-tight);
}
body.theme-pd .pd-checkin-streak b,
body.theme-pd .pd-checkin-month-row b {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-checkin-streak small,
body.theme-pd .pd-checkin-month-row small {
    margin-left: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-checkin-month-row small { margin-left: 0; }
/* 「签到日历」放在「本月签到」那一行右边（下面就是每天一格的月历条）；右上角留给今天的心情鱼 */
body.theme-pd .pd-checkin-label-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-checkin-cal {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    white-space: nowrap;
    text-decoration: none;
}
body.theme-pd .pd-checkin-cal:hover { color: var(--pd-color-link-hover); text-decoration: none; }
body.theme-pd .pd-checkin-week {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: calc(var(--pd-space-1) / 2);
    margin: var(--pd-space-2) 0 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-checkin-week li {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
}
body.theme-pd .pd-checkin-dot {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    max-width: var(--pd-side-avatar);
    aspect-ratio: 1;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-2xs);
    font-weight: var(--pd-fw-semibold);
    line-height: 1;
    background: var(--pd-color-border);
    border: var(--pd-tab-indicator) solid transparent;
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-checkin-week li.is-signed .pd-checkin-dot {
    color: var(--pd-color-checkin-on-signed);
    font-size: var(--pd-icon-sm);
    background: var(--pd-color-checkin-signed);
}
body.theme-pd .pd-checkin-week li.is-today:not(.is-signed) .pd-checkin-dot {
    background: transparent;
    border-color: var(--pd-color-checkin-signed);
}
body.theme-pd .pd-checkin-day {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
    line-height: var(--pd-lh-tight);
}
body.theme-pd .pd-checkin-week li.is-signed .pd-checkin-day { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-checkin-week li.is-today .pd-checkin-day {
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-checkin-month { margin-top: var(--pd-space-2); }
body.theme-pd .pd-checkin-label { display: block; }
body.theme-pd .pd-checkin-month-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--pd-space-1);
    margin-top: calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-checkin-month-row b { font-size: var(--pd-fs-lg); }
body.theme-pd .pd-checkin-month-row > span {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-variant-numeric: tabular-nums;
}
/* 本月每天一格：当月几天就几格（28～31），过去没签的比还没到的深一档，今天没签描绿边 */
body.theme-pd .pd-checkin-days {
    display: grid;
    grid-auto-columns: minmax(0, 1fr);
    grid-auto-flow: column;
    gap: calc(var(--pd-space-1) / 4);
    margin-top: var(--pd-space-1);
}
body.theme-pd .pd-checkin-days span {
    height: var(--pd-space-2);
    background: var(--pd-color-border-strong);
    border-radius: calc(var(--pd-radius-xs) / 2);
}
body.theme-pd .pd-checkin-days span.is-future { background: var(--pd-color-border); }
body.theme-pd .pd-checkin-days span.is-signed { background: var(--pd-color-checkin-signed); }
body.theme-pd .pd-checkin-days span.is-today:not(.is-signed) {
    background: transparent;
    box-shadow: inset 0 0 0 1px var(--pd-color-checkin-signed);
}
body.theme-pd .pd-checkin-hint {
    margin: var(--pd-space-1) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
/* 右上角今天的心情鱼：只放图，悬浮（title）提示心情 */
body.theme-pd .pd-checkin-mood {
    flex: none;
    width: var(--pd-side-icon-art);
    height: var(--pd-side-icon-art);
    user-select: none;
}
body.theme-pd .pd-checkin-form { margin: 0; }
/* 不用 .btn：全局 .btn 带 !important 和固定内边距 */
body.theme-pd .pd-checkin-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-btn-gap);
    width: 100%;
    height: var(--pd-btn-h);
    margin-top: var(--pd-space-2);
    padding: 0 var(--pd-space-2);
    color: var(--pd-color-on-primary);
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    white-space: nowrap;
    background: var(--pd-color-primary);
    border: 1px solid transparent;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
body.theme-pd .pd-checkin-btn i { font-size: var(--pd-btn-icon); }
body.theme-pd .pd-checkin-btn:hover { background: var(--pd-color-primary-hover); }
body.theme-pd .pd-checkin-btn:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}

/* 选心情签到（首页签到卡、签到页共用）：九条鱼（assets/moji/checkin-fish-v1），图在上、字在下 */
body.theme-pd .pd-mood-pick {
    min-width: 0;
    margin: var(--pd-space-3) 0 0;
    padding: 0;
    border: 0;
}
body.theme-pd .pd-mood-pick legend {
    margin-bottom: var(--pd-space-1);
    padding: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-mood-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-mood {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    margin: 0;   /* 全局 label 带上下外边距 */
    padding: calc(var(--pd-space-1) / 2) 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
    background: var(--pd-mood-bg, var(--pd-color-surface-soft));
    border: 1px solid transparent;
    border-radius: var(--pd-radius-md);
    cursor: pointer;
}
body.theme-pd .pd-mood input {
    position: absolute;
    width: 1px;
    height: 1px;
    opacity: 0;
    pointer-events: none;
}
body.theme-pd .pd-mood img {
    flex: 0 0 auto;
    width: var(--pd-side-avatar);
    max-width: 100%;
    height: auto;
    aspect-ratio: 1;
    user-select: none;
    transition: transform .15s ease;
}
body.theme-pd .pd-mood:hover { color: var(--pd-color-text); background: var(--pd-color-primary-soft); }
body.theme-pd .pd-mood:hover img { transform: translateY(calc(var(--pd-space-1) / -4)); }
body.theme-pd .pd-mood:has(input:checked) {
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-primary-soft);
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-mood:has(input:focus-visible) {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-mood img { transition: none; }
    body.theme-pd .pd-mood:hover img { transform: none; }
}

/* 浅灰小卡公共外壳 */
/* 右栏小卡：和版块页 Hero / 帖子列表卡同一套外观（surface 底 + 边框 + 二级阴影），深浅主题一致 */
body.theme-pd .pd-side-box,
body.theme-pd-dark .pd-side-box {
    padding: var(--pd-card-padding);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius-side);
    box-shadow: var(--pd-shadow-2);
}
body.theme-pd .pd-side-head,
body.theme-pd .pd-side-subhead {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-side-head { margin-bottom: var(--pd-space-2); }
/* 首页卡片标题的小图标，沿用原有标题布局和文字省略规则。 */
body.theme-pd :is(.pd-home-shell, .pd-forum-layout) .pd-card-heading-icon {
    display: inline-block;
    width: var(--pd-icon-md);
    margin-right: var(--pd-space-2);
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-xl);
    text-align: center;
}
body.theme-pd .pd-home-shell .pd-promo .pd-card-heading-icon {
    color: inherit;
}
body.theme-pd .pd-side-title {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-h3-size);
    font-weight: var(--pd-h3-weight);
    line-height: var(--pd-h3-lh);
}
/* 侧栏标题图标与文字居中对齐，避免大图标挤占标题和卡片高度。 */
body.theme-pd :is(.pd-home-shell, .pd-forum-layout) .pd-side-title {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd :is(.pd-home-shell, .pd-forum-layout) .pd-side-title .pd-card-heading-icon {
    flex: 0 0 var(--pd-icon-md);
    height: var(--pd-icon-md);
    margin-right: 0;
    font-size: var(--pd-icon-md);
    line-height: 1;
}
body.theme-pd .pd-side-sub {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-side-link {
    color: var(--pd-color-link);
    font-size: var(--pd-fs-xs);
    text-decoration: none;
}
body.theme-pd .pd-side-link:hover { color: var(--pd-color-link-hover); text-decoration: none; }
body.theme-pd .pd-side-meta {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}

/* 鱼塘近况：三个数字 + 新成员 */
body.theme-pd .pd-pulse-stats {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
}
body.theme-pd .pd-pulse-stats > div { min-width: 0; }
body.theme-pd .pd-pulse-stats > div + div {
    padding-left: var(--pd-space-2);
    border-left: 1px solid var(--pd-color-border-strong);
}
body.theme-pd .pd-pulse-stats b {
    display: block;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-pulse-stats span {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-dot {
    display: inline-block;
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    margin-right: calc(var(--pd-space-1) / 2);
    background: var(--pd-color-success);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-pulse-new {
    margin-top: var(--pd-space-3);
    padding-top: var(--pd-space-3);
    border-top: 1px solid var(--pd-color-border-strong);
}
body.theme-pd .pd-pulse-new .pd-side-subhead { margin-bottom: var(--pd-space-2); }
body.theme-pd .pd-side-pulse .pd-newuser-grid { gap: var(--pd-space-2) var(--pd-space-1); }
/* 灰底上头像要白底才看得出轮廓 */
body.theme-pd .pd-side-pulse .pd-newuser img {
    width: var(--pd-side-avatar);
    height: var(--pd-side-avatar);
    background: var(--pd-color-surface);
}

/* 初来乍到：细分隔线列表（phpBB SPONSORS 卡的样子） */
body.theme-pd .pd-side-list {
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-side-list li {
    padding: var(--pd-space-1) 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    border-top: 1px solid var(--pd-color-border-strong);
}
/* 列表标题后面的「未读」：比标题小很多的小字，只提示这篇没点开过 */
body.theme-pd .pd-unread {
    flex: 0 0 auto;
    color: var(--pd-color-text-tertiary);   /* 和元信息同一个灰色，不用蓝色 */
    font-size: var(--pd-fs-2xs);
    font-weight: var(--pd-fw-regular);
    line-height: 1;
    white-space: nowrap;
}
body.theme-pd .pd-unread[hidden] { display: none; }

/* 侧边栏「热门帖子」「最近浏览」：序号 + 标题（一行省略）+ 浏览数 */
body.theme-pd .pd-side-rank {
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-side-rank li {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-1);
    padding: 5px 0;
    border-top: 1px solid var(--pd-color-divider);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-side-rank li:first-child { border-top: 0; }
body.theme-pd .pd-side-rank a {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    color: var(--pd-color-text);
    text-decoration: none;
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd .pd-side-rank a:hover { color: var(--pd-color-primary); }
body.theme-pd .pd-rank-no {
    flex: 0 0 var(--pd-space-2);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-variant-numeric: tabular-nums;
    text-align: center;
}
body.theme-pd .pd-rank-no.is-top { color: var(--pd-color-primary); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-rank-count {
    flex: 0 0 auto;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-rank-count i {
    margin-right: calc(var(--pd-space-1) / 2);
}
/* 侧边栏 Telegram 卡片：交流群 / 新帖频道 / 订阅机器人，整行可点 */
body.theme-pd .pd-tg-list {
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-tg-item {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    padding: 5px 0;
    color: var(--pd-color-text);
    text-decoration: none;
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-tg-list li:first-child .pd-tg-item { border-top: 0; padding-top: 0; }
body.theme-pd .pd-tg-ico {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: var(--pd-space-4);
    height: var(--pd-space-4);
    color: #ffffff;
    font-size: var(--pd-icon-xs);
    background: var(--pd-color-telegram);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-tg-text {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
    min-width: 0;
    line-height: var(--pd-lh-tight);
}
/* 名称不加粗、和说明只差颜色与一档字号：名称 12px 常规，说明 11px 三级灰 */
body.theme-pd .pd-tg-text b {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-tg-text span {
    margin-top: calc(var(--pd-space-1) / 4);
    overflow: hidden;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-2xs);
    white-space: nowrap;
    text-overflow: ellipsis;
}
body.theme-pd .pd-tg-go {
    flex: 0 0 auto;
    padding: 0 var(--pd-space-1);
    color: var(--pd-color-telegram);
    font-size: var(--pd-fs-2xs);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-space-4);
    border: 1px solid var(--pd-color-telegram);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-tg-item:hover .pd-tg-go { color: #ffffff; background: var(--pd-color-telegram); }
body.theme-pd .pd-tg-item:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-telegram);
    outline-offset: calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-side-new {
    flex: 0 0 auto;
    padding: 0 calc(var(--pd-space-1) / 2);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-newuser .pd-newuser-count {
    margin-top: calc(var(--pd-space-1) / -2);
    color: var(--pd-color-text-tertiary);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-side-rank-box[hidden] { display: none; }
body.theme-pd .pd-side-inline {
    padding: 0;
    color: var(--pd-color-link);
    font: inherit;
    background: none;
    border: 0;
    cursor: pointer;
}
body.theme-pd .pd-side-inline:hover { color: var(--pd-color-link-hover); text-decoration: none; }
body.theme-pd .pd-side-foot {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
    padding-top: var(--pd-space-1);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    border-top: 1px solid var(--pd-color-border-strong);
}
body.theme-pd .pd-side-foot a { display: inline-flex; align-items: center; gap: var(--pd-space-1); color: var(--pd-color-link); text-decoration: none; }
body.theme-pd .pd-side-foot a:hover { color: var(--pd-color-link-hover); text-decoration: none; }

/* 首页侧栏插画卡：背景按 3:2 完整显示，真实文字、按钮和倒计时使用正常布局。 */
body.theme-pd .pd-sidebar-art-card {
    --pd-color-text: var(--pd-sidebar-art-fg);
    --pd-color-text-secondary: var(--pd-sidebar-art-muted);
    --pd-color-link: var(--pd-sidebar-art-fg);
    --pd-color-link-hover: var(--pd-sidebar-art-fg);
    --pd-color-promo: var(--pd-sidebar-art-blue);
    position: relative;
    isolation: isolate;
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    min-width: 0;
    width: 100%;
    max-width: var(--pd-sidebar-width);
    justify-self: center;
    grid-column: auto;
    min-height: var(--pd-sidebar-art-height);
    padding: var(--pd-card-padding);
    overflow: hidden;
    border-radius: var(--pd-card-radius-side);
    color: var(--pd-color-text);
    background: var(--pd-sidebar-art-blue);
}
body.theme-pd .pd-sidebar-card-bg {
    position: absolute;
    inset: 0 auto auto 0;
    z-index: -2;
    display: block;
    width: 100%;
    height: auto;
    pointer-events: none;
    user-select: none;
}
body.theme-pd .pd-sidebar-card-copy { width: var(--pd-sidebar-art-copy-width); }
body.theme-pd .pd-sidebar-card-copy h2 {
    margin: 0 0 var(--pd-space-1);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
}
body.theme-pd .pd-sidebar-card-copy p {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-sidebar-art-card .pd-promo-actions { margin-top: auto; padding-top: var(--pd-space-1); }
body.theme-pd .pd-sidebar-card-actions { display: flex; margin-top: auto; padding-top: var(--pd-space-1); }
body.theme-pd .pd-sidebar-card-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 1;
    gap: var(--pd-btn-gap);
    min-height: var(--pd-btn-h);
    padding-inline: var(--pd-btn-px);
    border: 1px solid transparent;
    border-radius: var(--pd-btn-radius);
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    text-decoration: none;
}
body.theme-pd .pd-sidebar-art-card--telegram {
    min-height: var(--pd-sidebar-art-long-height);
    background: var(--pd-sidebar-art-telegram);
}
body.theme-pd .pd-sidebar-art-card--telegram::after,
body.theme-pd .pd-sidebar-art-card--lottery::after {
    content: '';
    position: absolute;
    inset-inline: 0;
    bottom: 0;
    z-index: -1;
    height: calc(var(--pd-space-5) * 4);
    background: linear-gradient(transparent, var(--pd-sidebar-art-telegram) 52%);
    pointer-events: none;
}
body.theme-pd .pd-sidebar-card-links { display: grid; gap: var(--pd-space-1); margin: auto 0 0; padding: 0; list-style: none; }
body.theme-pd .pd-sidebar-card-links a {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    min-height: var(--pd-btn-h-sm);
    padding-inline: var(--pd-space-2);
    border: 1px solid var(--pd-sidebar-art-line);
    border-radius: var(--pd-btn-radius);
    color: var(--pd-color-text);
    background: var(--pd-color-promo-chip);
    font-size: var(--pd-fs-sm);
    text-decoration: none;
    transition: background 150ms, transform 150ms;
}
body.theme-pd .pd-sidebar-card-links a:hover { background: var(--pd-color-promo-track); transform: translateX(calc(var(--pd-space-1) / 4)); }
body.theme-pd .pd-sidebar-card-links small { font-size: var(--pd-fs-xs); color: var(--pd-color-text-secondary); }
body.theme-pd .pd-sidebar-card-links a:focus-visible,
body.theme-pd .pd-sidebar-card-btn:focus-visible { outline: var(--pd-tab-indicator) solid currentColor; outline-offset: var(--pd-tab-indicator); }
body.theme-pd .pd-sidebar-art-card.pd-sidebar-art-card--lottery {
    --pd-color-text: var(--pd-sidebar-art-lottery-ink);
    --pd-color-text-secondary: var(--pd-sidebar-art-lottery-ink);
    --pd-color-text-tertiary: var(--pd-sidebar-art-lottery-ink);
    --pd-color-link: var(--pd-sidebar-art-fg);
    --pd-color-link-hover: var(--pd-sidebar-art-fg);
    background: var(--pd-sidebar-art-lottery);
}
body.theme-pd .pd-sidebar-art-card--lottery::after { background: linear-gradient(transparent, var(--pd-sidebar-art-lottery) 52%); }
body.theme-pd .pd-sidebar-art-card--lottery .pd-sidebar-card-copy { min-height: var(--pd-sidebar-art-lotto-head); }
body.theme-pd .pd-sidebar-art-card--lottery .pd-sidebar-card-copy h2 { font-size: var(--pd-fs-md); }
body.theme-pd .pd-sidebar-art-card--lottery .pd-sidebar-card-copy p { font-size: var(--pd-fs-xs); }
body.theme-pd .pd-sidebar-art-card .pd-side-lotto-clock { flex: 0 0 auto; justify-items: start; align-content: start; }
body.theme-pd .pd-sidebar-art-card .pd-side-lotto-digits { gap: var(--pd-space-1); }
body.theme-pd .pd-sidebar-art-card .pd-side-lotto-digits b {
    min-width: calc(var(--pd-space-5) + var(--pd-space-1));
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    border: 1px solid var(--pd-sidebar-art-digit-line);
    border-radius: var(--pd-radius-xs);
    background: var(--pd-sidebar-art-digit);
}
body.theme-pd .pd-sidebar-art-card .pd-side-lotto-state,
body.theme-pd .pd-sidebar-art-card .pd-side-lotto-prev { font-size: var(--pd-fs-2xs); text-align: left; }
body.theme-pd .pd-sidebar-art-card .pd-side-lotto-meta { margin: 0; padding: var(--pd-space-1) 0 0; border-color: var(--pd-sidebar-art-digit-line); }
body.theme-pd .pd-sidebar-art-card .pd-side-lotto-meta dd { font-size: var(--pd-fs-xs); }
body.theme-pd .pd-sidebar-art-card .pd-sidebar-card-btn { background: var(--pd-sidebar-art-lottery-accent); color: var(--pd-sidebar-art-fg); }
body.theme-pd .pd-sidebar-art-card .pd-sidebar-card-btn:hover { filter: brightness(.95); }
@media (prefers-reduced-motion: reduce) { body.theme-pd .pd-sidebar-card-links a { transition: none; } }

/* 问问 Fish */
body.theme-pd .pd-side-fish-body {
    display: grid;
    grid-template-columns: minmax(0, 1fr) var(--pd-side-icon-art);
    align-items: center;
    gap: var(--pd-space-2);
}
body.theme-pd .pd-side-fish-body p {
    margin: var(--pd-space-1) 0 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-side-fish-body p.pd-side-meta { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-side-fish-body .pd-squircle {
    width: var(--pd-side-icon-art);
    height: var(--pd-side-icon-art);
    object-fit: cover;
    background: var(--pd-color-surface);
}

/* 右栏标题卡重构：通栏标题行（白底 + 底部分隔线）+ 内容区自适应撑满卡片高度，不再下方留白。
   卡片高度取整数倍时多出来的空间由列表行均分（行变高）、头像网格均匀分布，而不是留空 */
body.theme-pd .pd-side-box:not(.pd-side-checkin) {
    display: flex;
    flex-direction: column;
    padding: 0;
    overflow: hidden;
}
body.theme-pd .pd-side-box:not(.pd-side-checkin) > .pd-side-head {
    align-items: center;
    margin: 0;
    padding: var(--pd-space-2) var(--pd-card-padding);
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-side-box:not(.pd-side-checkin) > :not(.pd-side-head) {
    margin-inline: var(--pd-card-padding);
}
body.theme-pd .pd-side-box:not(.pd-side-checkin) > .pd-side-head + * { margin-top: var(--pd-space-1); }
body.theme-pd .pd-side-box:not(.pd-side-checkin) > :last-child { margin-bottom: var(--pd-space-2); }
body.theme-pd .pd-side-rank,
body.theme-pd .pd-tg-list,
body.theme-pd .pd-side-list {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
}
body.theme-pd .pd-side-rank > li,
body.theme-pd .pd-tg-list > li,
body.theme-pd .pd-side-list > li {
    display: flex;
    flex: 1 1 auto;
    align-items: center;
}
body.theme-pd .pd-tg-list .pd-tg-item { flex: 1 1 auto; }
body.theme-pd .pd-side-pulse .pd-pulse-new {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
}
body.theme-pd .pd-side-pulse .pd-newuser-grid,
body.theme-pd .pd-side-box:not(.pd-side-checkin) > .pd-newuser-grid {
    flex: 1 1 auto;
    align-content: space-evenly;
}
body.theme-pd .pd-side-fish-body { flex: 1 1 auto; }
body.theme-pd .pd-side-fish-body p:first-child { margin-top: 0; }

/* 初来乍到：黑板报弹窗（新注册会员前 3 天每天弹一次，见 footer.php / main.js）：深绿黑板 + 木框 + 粉笔字，虚线分隔，规则前带粉笔圈数字 */
body.theme-pd .pd-chalkboard,
body.theme-pd-dark .pd-chalkboard {
    width: 400px;
    max-width: 94vw;
    padding: var(--pd-space-3);
    color: var(--pd-chalkboard-chalk);
    background: var(--pd-chalkboard-bg);
    border: var(--pd-space-1) solid var(--pd-chalkboard-frame);
    border-radius: var(--pd-modal-radius);
    box-shadow: var(--pd-shadow-2);
    animation: pdConfirmIn .16s ease;
}
body.theme-pd .pd-chalkboard-head,
body.theme-pd-dark .pd-chalkboard-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    padding-bottom: var(--pd-space-2);
    border-bottom: 1px dashed var(--pd-chalkboard-chalk-soft);
}
body.theme-pd .pd-chalkboard-head h2,
body.theme-pd-dark .pd-chalkboard-head h2 {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
    color: var(--pd-chalkboard-chalk);
    font-size: var(--pd-h3-size);
    font-weight: var(--pd-h3-weight);
}
body.theme-pd .pd-chalkboard-head h2 i,
body.theme-pd-dark .pd-chalkboard-head h2 i { color: var(--pd-chalkboard-accent); }
body.theme-pd .pd-chalkboard-x,
body.theme-pd-dark .pd-chalkboard-x {
    width: var(--pd-space-4);
    height: var(--pd-space-4);
    color: var(--pd-chalkboard-chalk);
    background: none;
    border: 0;
    border-radius: var(--pd-radius-round);
    cursor: pointer;
}
body.theme-pd .pd-chalkboard-x:hover,
body.theme-pd-dark .pd-chalkboard-x:hover { background: var(--pd-chalkboard-chalk-soft); }
body.theme-pd .pd-chalkboard-lead,
body.theme-pd-dark .pd-chalkboard-lead {
    margin: var(--pd-space-2) 0 var(--pd-space-1);
    color: var(--pd-chalkboard-chalk);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-chalkboard-list,
body.theme-pd-dark .pd-chalkboard-list {
    margin: 0;
    padding: 0;
    list-style: none;
    counter-reset: pd-chalk;
}
body.theme-pd .pd-chalkboard-list li,
body.theme-pd-dark .pd-chalkboard-list li {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-1) 0;
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    border-top: 1px dashed var(--pd-chalkboard-chalk-soft);
    counter-increment: pd-chalk;
}
body.theme-pd .pd-chalkboard-list li:first-child,
body.theme-pd-dark .pd-chalkboard-list li:first-child { border-top: 0; }
body.theme-pd .pd-chalkboard-list li::before,
body.theme-pd-dark .pd-chalkboard-list li::before {
    content: counter(pd-chalk);
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    width: var(--pd-space-3);
    height: var(--pd-space-3);
    color: var(--pd-chalkboard-accent);
    font-size: var(--pd-fs-2xs);
    border: 1px solid var(--pd-chalkboard-accent);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-chalkboard-inline,
body.theme-pd-dark .pd-chalkboard-inline {
    padding: 0;
    color: var(--pd-chalkboard-accent);
    font: inherit;
    text-decoration: underline wavy;
    text-underline-offset: var(--pd-space-1);
    background: none;
    border: 0;
    cursor: pointer;
}
body.theme-pd .pd-chalkboard-foot,
body.theme-pd-dark .pd-chalkboard-foot {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: var(--pd-space-1) 0 0;
    padding-top: var(--pd-space-2);
    color: var(--pd-chalkboard-chalk);
    font-size: var(--pd-fs-xs);
    border-top: 1px dashed var(--pd-chalkboard-chalk-soft);
}
body.theme-pd .pd-chalkboard-foot a,
body.theme-pd-dark .pd-chalkboard-foot a {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    color: var(--pd-chalkboard-accent);
    text-decoration: none;
}
body.theme-pd .pd-chalkboard-ok,
body.theme-pd-dark .pd-chalkboard-ok {
    display: block;
    width: 100%;
    height: var(--pd-btn-h);
    margin-top: var(--pd-space-3);
    color: var(--pd-chalkboard-bg);
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    background: var(--pd-chalkboard-accent);
    border: 0;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
body.theme-pd .pd-chalkboard-ok:hover,
body.theme-pd-dark .pd-chalkboard-ok:hover { background: color-mix(in srgb, var(--pd-chalkboard-accent) 90%, #000); }

/* 帖子流空状态 */
body.theme-pd .pd-feed-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-5) 0;
    text-align: center;
}
body.theme-pd .pd-feed-empty i {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-xl);
}
body.theme-pd .pd-feed-empty h2 {
    margin: var(--pd-space-1) 0 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-feed-empty p {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-feed-empty-btn {
    display: inline-flex;
    align-items: center;
    height: var(--pd-btn-h);
    margin-top: var(--pd-space-2);
    padding: 0 var(--pd-space-3);
    color: var(--pd-color-primary);
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    text-decoration: none;
    background: transparent;
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-feed-empty-btn:hover { background: var(--pd-color-surface-soft); }

/* 帖子流最后一行也留底线，给列表收个口 */
body.theme-pd .pd-feed .pd-thread-row:last-child { border-bottom: 1px solid var(--pd-color-divider); }

/* 独立页面的外层留白统一由 main 提供，首卡不再叠加通用 card 的上边距。
   首页、版块和帖子保留各自的列表 / 阅读布局；单栏认证表单居中。 */
body.theme-pd:not(:is(.page-index, .page-forum, .page-thread)) .pd-page-frame main.wrap {
    display: flow-root;
    margin-top: 0;
    padding: var(--pd-page-spacing) var(--pd-page-gutter);
}
body.theme-pd:not(:is(.page-index, .page-forum, .page-thread)) .pd-page-frame main.wrap > :nth-child(1 of :not(script, style, link)) {
    margin-top: 0;
}
body.theme-pd:not(:is(.page-index, .page-forum, .page-thread)) .pd-page-frame main.wrap > :nth-last-child(1 of :not(script, style, link)) {
    margin-bottom: 0;
}
body.theme-pd:not(:is(.page-index, .page-forum, .page-thread)) .pd-page-frame main.wrap > :is(.pd-info, .pd-settings, .pd-wallet, .pd-medals-page, .pd-post-page) {
    padding: 0;
}
body.theme-pd.page-search .pd-page-frame main.wrap > .pd-search-page > :first-child {
    margin-top: 0;
}
body.theme-pd.page-search .pd-page-frame main.wrap > .pd-search-page > :last-child {
    margin-bottom: 0;
}
body.theme-pd.page-rankings .rank-grid {
    margin-top: var(--pd-space-3);
    gap: var(--pd-space-3);
}
body.theme-pd.page-rankings .rank-grid > .card { margin: 0; }
body.theme-pd.page-post .pd-post-form { margin-bottom: 0; }
body.theme-pd.pd-standalone .pd-info:has(.pd-auth2--single) {
    width: 100%;
    max-width: var(--pd-auth-max-width);
    margin-inline: auto;
}
@media (max-width: 640px) {
    body.theme-pd {
        --pd-page-gutter: var(--pd-space-3);
        --pd-page-spacing: var(--pd-space-3);
    }
}

/* 我的收藏：紧凑标题、原帖子列表和有明确去向的空状态。 */
body.theme-pd .pd-favorites {
    padding: 0;
    overflow: hidden;
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-card-radius);
    box-shadow: none;
}
.pd-favorites-head,
.pd-favorites-heading,
.pd-favorites-actions {
    display: flex;
    align-items: center;
    gap: var(--pd-space-3);
}
.pd-favorites-head {
    justify-content: space-between;
    flex-wrap: wrap;
    padding: var(--pd-space-4);
    border-bottom: 1px solid var(--pd-color-divider);
}
.pd-favorites-heading { min-width: 0; }
.pd-favorites-heading-icon {
    display: grid;
    place-items: center;
    flex: 0 0 auto;
    width: var(--pd-side-icon-art);
    height: var(--pd-side-icon-art);
    border-radius: var(--pd-radius-lg);
    background: var(--pd-color-primary-soft);
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-xl);
}
.pd-favorites h1 {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-h1-size);
    font-weight: var(--pd-h1-weight);
    line-height: var(--pd-h1-lh);
}
.pd-favorites-heading p {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-favorites-actions { flex-wrap: wrap; gap: var(--pd-space-2); }
.pd-favorites-count {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-variant-numeric: tabular-nums;
}
.pd-favorites-browse {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    min-height: var(--pd-btn-h-sm);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    text-decoration: none;
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-favorites-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-2);
    min-height: calc(var(--pd-space-5) * 8);
    padding: var(--pd-space-5) var(--pd-space-4);
}
.pd-favorites-empty-icon {
    display: grid;
    place-items: center;
    width: calc(var(--pd-space-5) * 2);
    height: calc(var(--pd-space-5) * 2);
    margin-bottom: var(--pd-space-1);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-xl);
}
body.theme-pd .pd-favorites-empty h2,
body.theme-pd .pd-favorites-empty p {
    margin: 0;
}
body.theme-pd .pd-favorites-empty p {
    max-width: 32em;
    line-height: var(--pd-lh-relaxed);
}
body.theme-pd .pd-favorites-empty .pd-feed-empty-btn {
    margin-top: var(--pd-space-1);
}
body.theme-pd .pd-favorites .pd-thread-list { padding-inline: var(--pd-space-4); }
body.theme-pd .pd-favorites .pd-feed-foot { padding-inline: var(--pd-space-4); }
.pd-favorites a:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
@media (max-width: 640px) {
    .pd-favorites-head { padding: var(--pd-space-3); gap: var(--pd-space-2); }
    .pd-favorites-heading { gap: var(--pd-space-2); }
    .pd-favorites-heading-icon { width: var(--pd-rail-btn-size); height: var(--pd-rail-btn-size); }
    .pd-favorites-actions { width: 100%; justify-content: space-between; }
    body.theme-pd .pd-favorites-empty { padding: var(--pd-space-5) var(--pd-space-3); }
    body.theme-pd .pd-favorites .pd-thread-list,
    body.theme-pd .pd-favorites .pd-feed-foot { padding-inline: var(--pd-space-3); }
}

/* 帖子行（首页）：高约 56px = 上下内边距 8 + 标题行 25 + 元信息行 15 + 下内边距 8，两行合起来 40px，和头像等高。三列：头像 | 标题 / 元信息 | 回复数胶囊；头像跨两行。
   元信息 = 分类（图标 + 彩色字，无胶囊）· 作者 · 时间（悬浮显示完整日期）· 最新回复。
   .pd-thread-main 用 display: contents，标题和元信息直接参与网格，各列才能逐行对齐 */
body.theme-pd .pd-thread-row {
    grid-template-columns: 40px minmax(0, 1fr) auto;
    grid-template-rows: 25px 15px;
    column-gap: var(--pd-space-2);
    row-gap: 0;
    align-items: stretch;
    padding-top: var(--pd-space-1);
    padding-bottom: var(--pd-space-1);
}
body.theme-pd .pd-thread-row > .pd-avatar { grid-column: 1; grid-row: 1 / span 2; align-self: center; }
body.theme-pd .pd-thread-row > .pd-thread-main { display: contents; }
body.theme-pd .pd-thread-row > .pd-thread-main > h2 { grid-column: 2; grid-row: 1; align-self: end; padding-bottom: calc(var(--pd-space-1) / 4); }
body.theme-pd .pd-thread-row > .pd-thread-main > .pd-thread-meta { grid-column: 2; grid-row: 2; align-self: start; }
body.theme-pd .pd-thread-main p.pd-thread-meta {
    flex-wrap: nowrap;
    gap: var(--pd-space-1);
    overflow: hidden;
    white-space: nowrap;
}
/* 元信息各项之间的间隔点 */
body.theme-pd .pd-thread-meta .pd-sep {
    color: var(--pd-color-text-tertiary);
}
/* 分类：图标 + 彩色文字，不要胶囊（颜色仍按版块 8 色板，文字色见下面 .pd-forum-tag-N） */
body.theme-pd .pd-thread-meta .pd-forum-tag,
body.theme-pd-dark .pd-thread-meta .pd-forum-tag {
    margin-left: 0;
    padding: 0;
    background: transparent;
    border: 0;
    border-radius: 0;
}
/* 右侧：版块 + 分类标签，整行垂直居中（不好看可改成 align-self: start 放到上面） */
body.theme-pd .pd-thread-row > .pd-thread-tags {
    grid-column: 3;
    grid-row: 1 / span 2;
    align-self: center;
    justify-self: end;
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    min-width: 0;
    white-space: nowrap;
}
body.theme-pd .pd-thread-tags .pd-forum-tag,
body.theme-pd-dark .pd-thread-tags .pd-forum-tag {
    margin: 0;
    padding: 0;
    font-size: var(--pd-fs-3xs);
    background: transparent;
    border: 0;
    border-radius: 0;
}
body.theme-pd .pd-thread-tags .pd-forum-tag i { font-size: inherit; }
body.theme-pd .pd-thread-row .pd-thread-tags .pd-forum-tag,
body.theme-pd .pd-thread-row .pd-thread-tags .pd-forum-tag i {
    color: var(--pd-color-text-tertiary) !important;
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-thread-row .pd-thread-tags a.pd-forum-tag:hover { color: var(--pd-color-text-secondary) !important; }
/* 元信息里的浏览数、回复数：图标 + 数字，字号跟元信息 */
body.theme-pd .pd-thread-views,
body.theme-pd .pd-thread-replies {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 4);
    padding: 0;
    color: var(--pd-color-text-tertiary);
    font-size: inherit;
    line-height: inherit;
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-thread-views i,
body.theme-pd .pd-thread-replies i,
body.theme-pd .pd-thread-row .pd-thread-meta .pd-name-icon {
    font-size: inherit;   /* 帖子列表元信息行：作者、浏览、回复三个图标同一字号（跟元信息文字一样大） */
}
/* 最新回复：在元信息行最后，用间隔点跟时间隔开；字号同元信息，字重更细。窄屏整段隐藏 */
body.theme-pd .pd-thread-meta .pd-last-reply {
    display: inline-flex;
    gap: var(--pd-space-1);
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-weight: var(--pd-fw-light);
}
@media (max-width: 760px) {
    body.theme-pd .pd-thread-meta .pd-last-reply {
        display: none;
    }
}

/* 首页（和版块页）手机列表：标题独占第一行，头像不留空位，计数放到元信息右侧。 */
@media (max-width: 640px) {
    body.theme-pd.page-index .pd-home-shell .pd-home-layout,
    body.theme-pd.page-index .pd-home-shell .pd-home-sidebar {
        grid-template-columns: minmax(0, 1fr);
    }
    body.theme-pd.page-index .pd-home-shell .pd-feed-tabs {
        position: relative;
    }
    body.theme-pd :is(.page-index .pd-home-shell, .pd-forum-feed) .pd-thread-row {
        grid-template-columns: minmax(0, 1fr) auto;
        grid-template-rows: auto auto;
        row-gap: calc(var(--pd-space-1) / 2);
        padding-block: var(--pd-space-1);
    }
    body.theme-pd :is(.page-index .pd-home-shell, .pd-forum-feed) .pd-thread-row > .pd-avatar {
        display: none;
    }
    body.theme-pd :is(.page-index .pd-home-shell, .pd-forum-feed) .pd-thread-row > .pd-thread-main > h2 {
        grid-column: 1 / -1;
        align-self: center;
        gap: calc(var(--pd-space-1) / 2);
        flex-wrap: nowrap;
        min-height: 0;
        padding: 0;
        font-size: var(--pd-list-title-size-mobile);
        line-height: var(--pd-lh-snug);
    }
    /* 手机上标题只显示一行，放不下的部分截断（徽章、图标、未读不换行、不被挤掉） */
    body.theme-pd :is(.page-index .pd-home-shell, .pd-forum-feed) .pd-thread-main h2 > a {
        display: block;
        flex: 0 1 auto;
        min-width: 0;
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    body.theme-pd :is(.page-index .pd-home-shell, .pd-forum-feed) .pd-thread-main h2 > :not(a) { flex-shrink: 0; }
    body.theme-pd :is(.page-index .pd-home-shell, .pd-forum-feed) .pd-thread-row > .pd-thread-main > .pd-thread-meta {
        grid-column: 1;
        min-width: 0;
        align-self: center;
    }
    body.theme-pd :is(.page-index .pd-home-shell, .pd-forum-feed) .pd-thread-row > .pd-thread-tags {
        grid-column: 2;
        grid-row: 2;
        align-self: center;
    }
}

/* 相对时间：悬浮由 assets/pages.js 弹出 .pd-tooltip 显示具体时间，不再有虚线和问号光标 */
.pd-tooltip {
    position: fixed;
    z-index: 1000;
    max-width: 240px;
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-on-primary);
    font-size: var(--pd-fs-xs);
    line-height: 1.5;
    white-space: nowrap;
    pointer-events: none;
    background: var(--pd-color-tooltip-bg);
    border-radius: var(--pd-radius-sm);
}

/* 帖子底部的管理操作记录（加精 / 置顶 / 移动是谁做的） */
body.theme-pd .pd-thread-modlog:empty { display: none; }
body.theme-pd .pd-thread-modlog {
    margin: var(--pd-space-3) 0 0;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-thread-modlog p {
    text-align: center;
    margin: 0;
    line-height: var(--pd-lh-relaxed);
    overflow-wrap: anywhere;
}
body.theme-pd .pd-thread-modlog a,
body.theme-pd .pd-thread-edit-note a { color: inherit; text-decoration: none; }
body.theme-pd .pd-thread-modlog a:hover,
body.theme-pd .pd-thread-edit-note a:hover { color: var(--pd-color-link); }
body.theme-pd .post-content-box > .pd-thread-edit-note {
    margin: 0 0 var(--pd-space-4);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-relaxed);
    text-align: center;
    overflow-wrap: anywhere;
}

/* 首页帖子 meta 里的版块（类别）名称徽章：胶囊状，不同板块不同颜色 */
body.theme-pd .pd-forum-tag {
    display: inline-flex;
    align-items: center;
    margin-left: 8px;
    padding: 0 var(--pd-badge-px);
    font-size: var(--pd-badge-fs);
    font-weight: var(--pd-fw-medium);
    line-height: 1.5;
    text-decoration: none;
    white-space: nowrap;
    border: 1px solid transparent;
    border-radius: var(--pd-radius-pill);
}
/* 8 色板：柔和底 + 同色系文字/边框 */
body.theme-pd .pd-forum-tag-0 { color: #1d6fb8; background: #e8f2fc; border-color: #cfe4f7; }
body.theme-pd .pd-forum-tag-1 { color: #2f8f4e; background: #e7f6ec; border-color: #cdeed7; }
body.theme-pd .pd-forum-tag-2 { color: #b7791f; background: #fdf3e0; border-color: #f6e3bf; }
body.theme-pd .pd-forum-tag-3 { color: #d1495b; background: #fdeaec; border-color: #f7ced4; }
body.theme-pd .pd-forum-tag-4 { color: #6b4bd6; background: #f0ecfd; border-color: #ddd3f7; }
body.theme-pd .pd-forum-tag-5 { color: #1a8a9d; background: #e4f6f8; border-color: #c4ebef; }
body.theme-pd .pd-forum-tag-6 { color: #c2410c; background: #fdece2; border-color: #f7d4c0; }
body.theme-pd .pd-forum-tag-7 { color: #5a6270; background: #eef0f3; border-color: #dde1e8; }

body.theme-pd-dark .pd-forum-tag { border-color: transparent; }
body.theme-pd-dark .pd-forum-tag-0 { color: #7fc0f5; background: rgba(29,111,184,.18); }
body.theme-pd-dark .pd-forum-tag-1 { color: #7fd6a0; background: rgba(47,143,78,.18); }
body.theme-pd-dark .pd-forum-tag-2 { color: #f0c778; background: rgba(183,121,31,.20); }
body.theme-pd-dark .pd-forum-tag-3 { color: #f39aa6; background: rgba(209,73,91,.18); }
body.theme-pd-dark .pd-forum-tag-4 { color: #b7a4f5; background: rgba(107,75,214,.20); }
body.theme-pd-dark .pd-forum-tag-5 { color: #7fd4de; background: rgba(26,138,157,.18); }
body.theme-pd-dark .pd-forum-tag-6 { color: #f0a878; background: rgba(194,65,12,.20); }
body.theme-pd-dark .pd-forum-tag-7 { color: #b7bdc8; background: rgba(90,98,112,.22); }

/* ===== 手写工具类（替代已移除的 Tailwind，仅覆盖 header.php 实际用到的类） ===== */
.mx-auto { margin-left: auto; margin-right: auto; }
.px-3 { padding-left: .75rem; padding-right: .75rem; }
.relative { position: relative; }
.absolute { position: absolute; }
.w-full { width: 100%; }
.w-auto { width: auto; }
.inline-flex { display: inline-flex; }
.flex { display: flex; }
.flex-wrap { flex-wrap: wrap; }
.items-center { align-items: center; }
.z-10 { z-index: 10; }
.rounded-t-xl { border-top-left-radius: .75rem; border-top-right-radius: .75rem; }
.hidden { display: none; }
@media (min-width: 640px) {
    .sm\:px-4 { padding-left: 1rem; padding-right: 1rem; }
    .sm\:inline { display: inline; }
    .sm\:hidden { display: none; }
    .sm\:flex { display: flex; }
}

/* 页脚最右的 RSS 订阅（点击复制地址）和主题切换（2026-10-05 从菜单栏挪下来）：深色页脚上的浅色图标按钮 */
.site-footer-tools {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
}
.site-footer-tool {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    flex: 0 0 auto;
    padding: 0;
    color: var(--pd-color-on-dark-secondary);
    font-size: var(--pd-icon-md);
    background: transparent;
    border: 0;
    border-radius: var(--pd-radius-round);
    cursor: pointer;
    transition: color .12s ease, background-color .12s ease;
}
.site-footer-tool:hover { color: var(--pd-color-on-dark); background: rgba(255, 255, 255, .08); }
.pd-footer-icon { display:block; width:var(--pd-icon-lg); height:var(--pd-icon-lg); flex:none; filter:grayscale(1); opacity:.72; transition:filter .15s ease,opacity .15s ease; }
.site-footer-tool:is(:hover,:focus-visible) .pd-footer-icon { filter:none; opacity:1; }
.site-footer-zh .pd-footer-glyph-label, .site-footer-zh [data-zh-icon] { display:none; }
.site-footer-zh[data-zh-mode="hans"] [data-zh-icon="hant"], .site-footer-zh[data-zh-mode="hant"] [data-zh-icon="hans"] { display:block; }
.site-footer-zh[aria-busy="true"] .pd-footer-icon { animation:pd-zh-busy 1s ease-in-out infinite; }
@media (prefers-reduced-motion:reduce) { .pd-footer-icon { transition:none; } .site-footer-zh[aria-busy="true"] .pd-footer-icon { animation:none; } }

.site-footer-tool:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-on-dark);
    outline-offset: calc(var(--pd-space-1) / 2);
}
.site-footer-rss:hover { color: var(--pd-color-warning); }
.site-footer-rss.is-copied,
.site-footer-rss.is-copied:hover { color: var(--pd-color-success); }
.site-footer-rss [data-rss-icon="success"],
.site-footer-rss.is-copied [data-rss-icon="default"] { display: none; }
.site-footer-rss.is-copied [data-rss-icon="success"] { display: block; filter: none; opacity: 1; }
/* 主题切换只显示当前模式的图标 */
.site-footer-theme [data-theme-icon] { display: none; }
.site-footer-theme[data-theme-mode="light"] [data-theme-icon="light"],
.site-footer-theme[data-theme-mode="dark"] [data-theme-icon="dark"],
.site-footer-theme[data-theme-mode="system"] [data-theme-icon="system"] { display: inline-block; }
/* 简繁切换（2026-10-05）：按钮上直接写要切过去的字（简体页「繁」，繁体页「簡」）；第一次切换要下载字库，加载时字形呼吸闪烁 */
.site-footer-zh {
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: 1;
}
.site-footer-zh[aria-busy="true"] { cursor: progress; }
.site-footer-zh[aria-busy="true"] [data-zh-glyph] { animation: pd-zh-busy 1s ease-in-out infinite; }
@keyframes pd-zh-busy {
    50% { opacity: .35; }
}
@media (prefers-reduced-motion: reduce) {
    .site-footer-zh[aria-busy="true"] [data-zh-glyph] { animation: none; color: var(--pd-color-on-dark-tertiary); }
}
/* 繁体页（assets/zh-hant.js 把 <html lang> 改成 zh-TW）优先用台湾字形的系统字体：覆盖「标题 / 正文字体栈」两个令牌（同在 html 上，这条更具体） */
html:lang(zh-TW) {
    --pd-title-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft JhengHei", "PingFang TC", sans-serif;
    --pd-content-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft JhengHei", "PingFang TC", sans-serif;
}

/* 主楼底部按钮点中时弹一下（收藏 / 支持 / 反对） */
@keyframes pd-tact-pop {
    0% { transform: scale(1); }
    35% { transform: scale(1.12); }
    100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-tact.is-popping { animation: none; }
}

/* 鱼丸 / 用户组：鱼的阶梯（鱼苗 → 鲲），颜色分三段：灰 / 品牌蓝 / 琥珀金，名字前一个小鱼图标 */
.pd-group-badge {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    height: 20px;
    padding: 0 8px;
    margin-left: 6px;
    color: var(--pd-color-on-primary);
    font-size: var(--pd-badge-fs);
    font-weight: var(--pd-badge-weight);
    line-height: 20px;
    vertical-align: middle;
    background: var(--group-color, var(--pd-color-primary));
    border-radius: var(--pd-badge-radius);
}
.pd-group-badge i {
    font-size: var(--pd-icon-xs);
}
/* 排行榜表格里徽章独占一格：不要跟在名字后面的左外边距；手机上一列只剩六十来像素，
   「活跃会员」会折成两行，固定 20px 高会把第二行裁掉（浅色模式下白字落在白底上直接看不见），改成最小高度。
   单行时 16px 行高 + 上下 2px 内边距仍是 20px，和别处的徽章一样高 */
body.theme-pd .forum-table .pd-group-badge {
    height: auto;
    min-height: 20px;
    margin-left: 0;
    padding: 2px 8px;
    line-height: 16px;
}
.pd-level-progress {
    max-width: 420px;
    margin: 10px 0 4px;
}
.pd-level-progress-meta {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 6px;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
.pd-level-progress-track {
    height: 8px;
    overflow: hidden;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
}
.pd-level-progress-track span {
    display: block;
    height: 100%;
    background: var(--pd-color-primary);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd-dark .pd-level-progress-track {
    background: rgba(255,255,255,.08);
}

/* 帮助页的活跃等级规则表（pages/legal/help.php），徽章列直接复用 .pd-lv */
body.theme-pd .pd-activity-rules {
    width: 100%;
    margin: 0 0 16px;
    border-collapse: collapse;
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-activity-rules th,
body.theme-pd .pd-activity-rules td {
    padding: 8px 12px;
    color: var(--pd-color-text);
    text-align: left;
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-activity-rules th {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
}
/* 规则页「100 级成长等级与权益」（pages/legal/points.php）：按阶折叠，默认展开自己所在的那一阶；阶名用这一阶的颜色 */
body.theme-pd .pd-level-bands {
    display: grid;
    gap: var(--pd-space-2);
    margin: 0 0 var(--pd-space-3);
}
body.theme-pd .pd-level-band {
    --pd-band-color: var(--pd-level-c1);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    background: var(--pd-color-surface);
}
body.theme-pd .pd-level-band > summary {
    padding: var(--pd-space-2) var(--pd-space-3);
    cursor: pointer;
}
body.theme-pd .pd-level-band > summary::marker { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-level-band-name {
    color: var(--pd-band-color);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-level-band-range,
body.theme-pd .pd-level-band-meta {
    color: var(--pd-color-text-secondary);
    margin-left: var(--pd-space-2);
    font-size: var(--pd-fs-sm);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-level-band > .pd-level-perks-wrap { margin: 0; padding: 0 var(--pd-space-3) var(--pd-space-3); }
body.theme-pd .pd-level-band--b2 { --pd-band-color: var(--pd-level-c2); }
body.theme-pd .pd-level-band--b3 { --pd-band-color: var(--pd-level-c3); }
body.theme-pd .pd-level-band--b4 { --pd-band-color: var(--pd-level-c4); }
body.theme-pd .pd-level-band--b5 { --pd-band-color: var(--pd-level-c5); }
body.theme-pd .pd-level-band--b6 { --pd-band-color: var(--pd-level-c6); }
body.theme-pd .pd-level-band--b7 { --pd-band-color: var(--pd-level-c7); }
body.theme-pd .pd-level-band--b8 { --pd-band-color: var(--pd-level-c8); }
body.theme-pd .pd-level-band--b9 { --pd-band-color: var(--pd-level-c9); }
body.theme-pd .pd-level-band--b10 { --pd-band-color: var(--pd-level-c10); }
/* 每一阶的表：列多，窄屏整张表横向滚动；数字不换行，「新解锁」一行一条 */
body.theme-pd .pd-level-perks-wrap {
    margin: 0 0 var(--pd-space-3);
    overflow-x: auto;
}
body.theme-pd .pd-level-perks-wrap .pd-level-perks {
    min-width: calc(var(--pd-space-5) * 22);
    margin: 0;
}
body.theme-pd .pd-level-perks td { vertical-align: top; }
body.theme-pd .pd-level-perks td.is-num {
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-level-perks-note {
    display: block;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-level-unlocks {
    display: grid;
    gap: calc(var(--pd-space-1) / 2);
    margin: 0;
    padding-left: var(--pd-space-3);
}

/* ==========================================================================
   私信页面
   ========================================================================== */
.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

body.theme-pd .pd-messages-card { padding: 0; overflow: hidden; }
body.theme-pd .pd-messages {
    display: grid;
    grid-template-columns: var(--pd-sidebar-width) minmax(0, 1fr);
    height: var(--pd-pm-fit, clamp(var(--pd-pm-min-height), calc(100dvh - var(--pd-pm-page-offset)), var(--pd-pm-height)));   /* --pd-pm-fit：messages.js 量出来的「刚好一屏」高度 */
    background: var(--pd-color-surface);
}
body.theme-pd .pd-messages-sidebar {
    display: flex;
    flex-direction: column;
    min-height: 0;
    min-width: 0;
    border-right: 1px solid var(--pd-color-divider);
    background: var(--pd-color-surface-subtle);
}
body.theme-pd .pd-messages-sidebar-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    padding: var(--pd-space-3);
    min-height: calc(var(--pd-btn-h-lg) + var(--pd-space-3) * 2);
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-messages-sidebar-head h1 { margin: 0; font-size: var(--pd-h1-size); font-weight: var(--pd-h1-weight); }
body.theme-pd .pd-messages-unread-total {
    display: inline-flex;
    align-items: center;
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
}
.pd-messages-unread-total[hidden] { display: none !important; }
body.theme-pd .pd-messages-thread-list { flex: 1; min-height: 0; overflow: auto; padding: var(--pd-space-1); }
body.theme-pd .pd-messages-thread-row { display: grid; grid-template-columns: minmax(0, 1fr) var(--pd-btn-h-sm); align-items: center; padding-right: calc(var(--pd-space-1) / 2); border-radius: var(--pd-card-radius); }
body.theme-pd .pd-messages-thread-row:hover { background: var(--pd-color-surface-soft); }
body.theme-pd .pd-messages-thread-row.is-active { background: var(--pd-color-primary-soft); }
body.theme-pd .pd-messages-thread {
    display: grid;
    grid-template-columns: var(--pd-pm-avatar-size) minmax(0, 1fr) auto;
    gap: var(--pd-space-2);
    align-items: center;
    width: 100%;
    min-width: 0;
    padding: var(--pd-space-2);
    color: var(--pd-color-text);
    font: inherit;
    text-align: left;
    background: transparent;
    border: 0;
    border-radius: var(--pd-card-radius);
    cursor: pointer;
}
body.theme-pd .pd-messages-thread:focus-visible,
body.theme-pd .pd-messages-hide-btn:focus-visible,
body.theme-pd .pd-messages-back:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: calc(var(--pd-tab-indicator) * -1); }
body.theme-pd .pd-messages-thread.is-unread :is(.pd-messages-thread-preview, strong) { color: var(--pd-color-text); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-messages-thread-avatar { width: var(--pd-pm-avatar-size); height: var(--pd-pm-avatar-size); border-radius: var(--pd-radius-round); object-fit: cover; }
body.theme-pd .pd-messages-thread-main { display: grid; gap: calc(var(--pd-space-1) / 2); min-width: 0; }
body.theme-pd .pd-messages-thread-top { display: flex; justify-content: space-between; align-items: center; gap: var(--pd-space-1); min-width: 0; }
body.theme-pd .pd-messages-thread-top strong { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-messages-thread-top time { flex-shrink: 0; color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-2xs); }
body.theme-pd .pd-messages-thread-preview { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-messages-thread-badge { min-width: var(--pd-badge-h); padding: 0 calc(var(--pd-space-1) / 2); color: var(--pd-color-on-primary); font-size: var(--pd-fs-xs); font-weight: var(--pd-fw-semibold); text-align: center; background: var(--pd-color-primary); border-radius: var(--pd-radius-pill); }
body.theme-pd .pd-messages-hide-btn { display: inline-grid; place-items: center; flex: 0 0 auto; width: var(--pd-btn-h); height: var(--pd-btn-h); padding: 0; color: var(--pd-color-text-tertiary); font-size: var(--pd-icon-md); background: transparent; border: 0; border-radius: var(--pd-btn-radius); cursor: pointer; }
body.theme-pd .pd-messages-hide-btn:hover { color: var(--pd-color-error); background: var(--pd-color-error-soft); }
body.theme-pd .pd-messages-thread-delete { width: var(--pd-btn-h-sm); height: var(--pd-btn-h-sm); opacity: 0; transition: opacity .15s ease; }
body.theme-pd .pd-messages-thread-row:is(:hover, :focus-within) .pd-messages-thread-delete { opacity: 1; }
body.theme-pd .pd-messages-main { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; min-height: 0; min-width: 0; }
body.theme-pd .pd-messages-main-head { display: flex; align-items: center; gap: var(--pd-space-2); min-height: calc(var(--pd-btn-h-lg) + var(--pd-space-3) * 2); padding: var(--pd-space-3); border-bottom: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-messages-back { display: none; align-items: center; justify-content: center; flex: 0 0 auto; width: var(--pd-btn-h); height: var(--pd-btn-h); padding: 0; color: var(--pd-color-text-secondary); font-size: var(--pd-icon-md); background: var(--pd-color-surface-soft); border: 0; border-radius: var(--pd-btn-radius); cursor: pointer; }
body.theme-pd .pd-messages-peer-avatar-link { flex: 0 0 auto; display: block; line-height: 0; }
body.theme-pd .pd-messages-peer-avatar { width: var(--pd-side-avatar); height: var(--pd-side-avatar); border-radius: var(--pd-radius-round); object-fit: cover; }
body.theme-pd .pd-messages-peer-meta { display: grid; gap: calc(var(--pd-space-1) / 4); min-width: 0; flex: 1; }
body.theme-pd .pd-messages-peer-meta strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-messages-peer-meta span { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-messages-stream { min-height: 0; overflow: auto; overscroll-behavior: contain; padding: var(--pd-space-4); background: var(--pd-color-surface-subtle); }
body.theme-pd .pd-messages-stream:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: calc(var(--pd-tab-indicator) * -1); }
body.theme-pd .pd-msg-row { display: flex; align-items: flex-end; gap: var(--pd-space-1); max-width: 82%; margin-bottom: var(--pd-space-3); }
body.theme-pd .pd-msg-row:last-child { margin-bottom: 0; }
body.theme-pd .pd-msg-row.is-mine { margin-left: auto; justify-content: flex-end; }
body.theme-pd .pd-msg-row.is-peer { margin-right: auto; }
body.theme-pd .pd-msg-avatar { width: var(--pd-btn-h-sm); height: var(--pd-btn-h-sm); border-radius: var(--pd-radius-round); object-fit: cover; flex-shrink: 0; }
body.theme-pd .pd-msg-bubble { min-width: 0; max-width: 100%; padding: var(--pd-space-2) var(--pd-space-3); border-radius: var(--pd-radius-lg); box-shadow: var(--pd-shadow-1); }
body.theme-pd .pd-msg-row.is-peer .pd-msg-bubble { color: var(--pd-color-text); background: var(--pd-color-surface); border: 1px solid var(--pd-color-divider); border-bottom-left-radius: var(--pd-radius-xs); }
body.theme-pd .pd-msg-row.is-mine .pd-msg-bubble { color: var(--pd-color-on-primary); background: var(--pd-color-primary); border-bottom-right-radius: var(--pd-radius-xs); }
body.theme-pd .pd-msg-bubble p { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; line-height: var(--pd-lh-normal); }
body.theme-pd .pd-msg-bubble time { display: block; margin-top: calc(var(--pd-space-1) / 2); font-size: var(--pd-fs-2xs); opacity: .78; }
/* 输入区一行：工具、输入框、发送（站长要的，把高度让给聊天记录）。输入框一行高、和按钮齐平，随内容长高到 --pd-pm-compose-max（messages.js 的 fitInput），
   多行时工具和按钮贴底 */
body.theme-pd .pd-messages-compose { display: flex; align-items: flex-end; gap: var(--pd-space-2); padding: var(--pd-space-2) var(--pd-space-3); border-top: 1px solid var(--pd-color-divider); background: var(--pd-color-surface); }
body.theme-pd .pd-messages-compose textarea { flex: 1 1 0; min-width: 0; min-height: var(--pd-btn-h); max-height: var(--pd-pm-compose-max); margin: 0; padding: calc((var(--pd-btn-h) - 2px - var(--pd-lh-normal) * 1em) / 2) var(--pd-space-3); resize: none; overflow-y: auto; color: var(--pd-color-text); border: 1px solid var(--pd-color-divider); border-radius: var(--pd-input-radius); background: var(--pd-color-surface); font: inherit; font-size: var(--pd-fs-sm); line-height: var(--pd-lh-normal); }
body.theme-pd .pd-messages-compose textarea:focus { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: calc(var(--pd-tab-indicator) * -1); }
body.theme-pd .pd-messages-send { flex: none; height: var(--pd-btn-h); margin: 0; padding-block: 0; line-height: calc(var(--pd-btn-h) - 2px); }
body.theme-pd :is(.pd-messages-empty-list, .pd-messages-placeholder, .pd-messages-empty-chat) { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--pd-space-2); padding: var(--pd-space-4); color: var(--pd-color-text-tertiary); text-align: center; }
body.theme-pd :is(.pd-messages-empty-list, .pd-messages-empty-chat) { min-height: calc(var(--pd-side-art) * 2); }
body.theme-pd .pd-messages-placeholder { grid-row: 1 / -1; }
body.theme-pd :is(.pd-messages-empty-list, .pd-messages-placeholder, .pd-messages-empty-chat) p { margin: 0; }
body.theme-pd .pd-messages-placeholder-icon { display: grid; place-items: center; width: var(--pd-ucard-avatar); height: var(--pd-ucard-avatar); color: var(--pd-color-text-tertiary); font-size: var(--pd-icon-xl); background: var(--pd-color-surface-soft); border-radius: var(--pd-radius-round); }
body.theme-pd .pd-messages-placeholder h2 { margin: 0; color: var(--pd-color-text); font-size: var(--pd-h2-size); font-weight: var(--pd-h2-weight); }
body.theme-pd .pd-messages-placeholder p { font-size: var(--pd-fs-sm); }
body.theme-pd .pd-messages-empty-list p { color: var(--pd-color-text-secondary); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-messages-empty-list span:last-child { font-size: var(--pd-fs-xs); }
body.theme-pd .pd-messages-empty-icon { color: var(--pd-color-text-tertiary); font-size: var(--pd-icon-xl); }
.pd-messages[aria-busy="true"] .pd-messages-main { opacity: .65; }
@media (hover: none) { body.theme-pd .pd-messages-thread-delete { opacity: 1; } }
@media (max-width: 900px) {
    body.theme-pd .pd-messages { grid-template-columns: minmax(0, 1fr); }
    body.theme-pd .pd-messages[data-pm-open="1"] .pd-messages-sidebar { display: none; }
    body.theme-pd .pd-messages:not([data-pm-open="1"]) .pd-messages-main { display: none; }
    body.theme-pd .pd-messages-back { display: inline-flex; }
    body.theme-pd .pd-messages-thread-delete { opacity: 1; }
    body.theme-pd .pd-messages-stream { padding: var(--pd-space-3); }
    body.theme-pd .pd-msg-row { max-width: 90%; }
}

/* ===== 个人设置页：全宽 + 分组卡片网格（替代原 560px 单列 narrow-card）===== */
/* ===== 个人设置（pages/profile.php，2026-10-05 改成分页）：左侧导航分页、右侧卡片 =====
   有开关、输入框的卡片各是一张表单，底部有自己的「保存」；卡片里每一行「标签在左、控件在右」；
   不到 900px 导航变成顶部横滑的一排，不到 640px 标签和控件上下排。分页和保存状态由 pages.js 的「个人设置：分页」那段控制 */
/* 白框原来是 overflow: hidden，会让左侧导航的 position: sticky 失效；clip 同样按圆角裁切，但不会变成滚动容器 */
body.theme-pd.page-profile .pd-page-frame { overflow: clip; }
body.theme-pd .pd-settings-layout {
    display: grid;
    grid-template-columns: calc(var(--pd-space-5) * 7) minmax(0, 1fr);
    gap: var(--pd-space-4);
    align-items: start;
}
body.theme-pd .pd-settings-nav {
    position: sticky;
    top: var(--pd-space-3);
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-settings-me {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    margin-bottom: var(--pd-space-2);
    padding: 0 var(--pd-space-1) var(--pd-space-3);
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-settings-me img {
    flex: none;
    width: var(--pd-side-avatar);
    height: var(--pd-side-avatar);
    object-fit: cover;
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-settings-me div {
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
}
body.theme-pd .pd-settings-me b {
    overflow: hidden;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--pd-color-text);
}
body.theme-pd .pd-settings-me span {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-settings-me span .pd-level-badge { margin-left: 0; }
body.theme-pd .pd-settings-nav > a,
body.theme-pd .pd-settings-quick > a {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    height: var(--pd-btn-h-lg);
    padding: 0 var(--pd-space-2);
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
    text-decoration: none;
    border-radius: var(--pd-radius-sm);
}
body.theme-pd .pd-settings-nav > a i,
body.theme-pd .pd-settings-quick > a i {
    flex: none;
    width: var(--pd-icon-lg);
    font-size: var(--pd-icon-md);
    text-align: center;
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-settings-nav > a:hover,
body.theme-pd .pd-settings-quick > a:hover {
    color: var(--pd-color-text);
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-settings-nav > a.is-active {
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-primary-soft);
}
body.theme-pd .pd-settings-nav > a.is-active i { color: var(--pd-color-primary); }
/* 这一页有卡片改了还没保存 */
body.theme-pd .pd-settings-dot {
    flex: none;
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    margin-left: auto;
    background: var(--pd-color-warning);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-settings-quick {
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
    margin-top: var(--pd-space-2);
    padding-top: var(--pd-space-2);
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-settings-quick > span {
    padding: 0 var(--pd-space-2);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-settings-quick > a {
    height: var(--pd-btn-h-sm);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-settings-main { min-width: 0; }
body.theme-pd .pd-settings-page {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-3);
    min-width: 0;
}
body.theme-pd .pd-settings-page[hidden] { display: none; }
/* 没有脚本时几页依次排下来 */
body.theme-pd .pd-settings-page + .pd-settings-page { margin-top: var(--pd-space-5); }
body.theme-pd .pd-settings.is-paged .pd-settings-page + .pd-settings-page { margin-top: 0; }
body.theme-pd .pd-settings-page-head h1 {
    margin: 0;
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    color: var(--pd-color-text);
}
body.theme-pd .pd-settings-page-head p {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
}

/* 卡片：标题、若干行或列表、底部保存栏。圆角由上面「个人页、设置页、通知页」那条统一成 --pd-card-radius-page */
body.theme-pd .pd-set-card {
    scroll-margin-top: var(--pd-space-3);
    overflow: clip;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius-page);
}
body.theme-pd .pd-set-card-head { padding: var(--pd-space-3) var(--pd-space-4) 0; }
body.theme-pd .pd-set-card-head h2 {
    margin: 0;
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
    color: var(--pd-color-text);
}
body.theme-pd .pd-set-card-head p {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-set-form { margin: 0; }
body.theme-pd .pd-set-card :is(input:not([type="checkbox"], [type="radio"], [type="file"]), select) {
    height: var(--pd-input-h);
    padding: 0 var(--pd-input-px);
}
body.theme-pd .pd-set-card textarea {
    padding: var(--pd-space-1) var(--pd-input-px);
    line-height: var(--pd-lh-normal);
}
/* 只读（管理员账号的邮箱要到后台改）：看得出不能在这里改 */
body.theme-pd .pd-set-card input[readonly] {
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-set-rows { padding: var(--pd-space-1) 0; }
body.theme-pd .pd-set-row {
    display: grid;
    grid-template-columns: calc(var(--pd-space-5) * 5) minmax(0, 1fr);
    gap: var(--pd-space-4);
    align-items: start;
    padding: var(--pd-space-2) var(--pd-space-4);
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-set-rows > .pd-set-row:first-child { border-top: 0; }
body.theme-pd .pd-set-row[hidden] { display: none; }
body.theme-pd .pd-set-label {
    display: block;
    margin: 0;
    padding-top: var(--pd-space-1);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
    color: var(--pd-color-text);
}
body.theme-pd .pd-set-control {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    min-width: 0;
    max-width: calc(var(--pd-space-5) * 15);
}
body.theme-pd .pd-set-control > * { margin: 0; }
body.theme-pd .pd-set-hint {
    margin: 0;
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-set-row--switch { align-items: center; }
body.theme-pd .pd-set-row--switch > .pd-set-label { padding-top: 0; }
body.theme-pd .pd-set-row--switch > .pd-set-control {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-3);
    max-width: none;
}
body.theme-pd .pd-set-value {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    min-height: var(--pd-input-h);
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
}
body.theme-pd .pd-set-value strong {
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-set-inline {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-set-inline[hidden],
body.theme-pd .pd-set-fields[hidden] { display: none; }
body.theme-pd .pd-set-inline > input {
    flex: 1 1 calc(var(--pd-space-5) * 5);
    width: auto;
    min-width: 0;
}
body.theme-pd .pd-set-card .btn { margin: 0; }
body.theme-pd .pd-set-fields {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-set-tag {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    height: var(--pd-badge-h);
    padding: 0 var(--pd-badge-px);
    font-size: var(--pd-badge-fs);
    font-weight: var(--pd-badge-weight);
    white-space: nowrap;
    vertical-align: middle;
    color: var(--pd-color-success);
    background: var(--pd-color-success-soft);
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-set-tag--muted {
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-set-tag-slot:empty { display: none; }
/* 性别、历法：做成可点的小块，选中的描主题色 */
body.theme-pd .pd-set-card .pd-choice-row { gap: var(--pd-space-1); margin: 0; }
body.theme-pd .pd-set-card .pd-choice {
    position: relative;
    height: var(--pd-input-h);
    padding: 0 var(--pd-space-3);
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-input-radius);
}
body.theme-pd .pd-set-card .pd-choice:has(input:checked) {
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-primary-soft);
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-set-card .pd-choice:has(input:focus-visible) {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-set-card .pd-birth-fields { margin: 0; }
body.theme-pd .pd-set-card .pd-birth-fields select { flex: 1 1 0; min-width: 0; }
body.theme-pd .pd-set-card .pd-birth-result { min-height: 0; margin: 0; }
body.theme-pd .pd-set-card .pd-birth-result:empty { display: none; }
body.theme-pd .pd-set-card .pd-signature-preview { margin: 0; }
body.theme-pd .pd-set-card label.pd-switch {
    --pd-switch-w: calc(var(--pd-space-5) + var(--pd-space-3));
    --pd-switch-h: calc(var(--pd-space-4) + var(--pd-space-1) / 2);
    --pd-switch-knob: calc(var(--pd-space-3) + var(--pd-space-1) / 2);
    --pd-switch-gap: calc((var(--pd-switch-h) - var(--pd-switch-knob)) / 2);
    position: relative;
    display: inline-block;
    flex: none;
    width: var(--pd-switch-w);
    height: var(--pd-switch-h);
    margin: 0;
}
body.theme-pd .pd-switch input {
    position: absolute;
    inset: 0;
    z-index: 1;
    width: 100%;
    height: 100%;
    margin: 0;
    opacity: 0;
    cursor: pointer;
}
body.theme-pd .pd-switch-track {
    position: absolute;
    inset: 0;
    background: var(--pd-color-border-strong);
    border-radius: var(--pd-radius-pill);
    transition: background .15s;
}
body.theme-pd .pd-switch-track::after {
    content: "";
    position: absolute;
    top: var(--pd-switch-gap);
    left: var(--pd-switch-gap);
    width: var(--pd-switch-knob);
    height: var(--pd-switch-knob);
    background: var(--pd-color-surface);
    border-radius: var(--pd-radius-round);
    box-shadow: var(--pd-shadow-1);
    transition: left .15s cubic-bezier(.4, 0, .2, 1);
}
body.theme-pd .pd-switch input:checked + .pd-switch-track { background: var(--pd-color-primary); }
body.theme-pd .pd-switch input:checked + .pd-switch-track::after {
    left: calc(var(--pd-switch-w) - var(--pd-switch-knob) - var(--pd-switch-gap));
}
body.theme-pd .pd-switch input:focus-visible + .pd-switch-track {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-timezone-detect {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-1) var(--pd-space-2);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-timezone-detect[hidden] { display: none; }
body.theme-pd .pd-link-button {
    padding: 0;
    font: inherit;
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-primary);
    background: none;
    border: 0;
    cursor: pointer;
}
body.theme-pd .pd-link-button:hover { text-decoration: underline; }

/* 列表：通行密钥、第三方账号、Telegram、已授权的应用；每行图标、文字、右边一个按钮 */
body.theme-pd .pd-set-list {
    display: flex;
    flex-direction: column;
    padding: var(--pd-space-1) 0;
}
body.theme-pd .pd-set-item {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    min-width: 0;
    padding: var(--pd-space-2) var(--pd-space-4);
}
body.theme-pd .pd-set-list > .pd-set-item + .pd-set-item { border-top: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-set-item-icon {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: var(--pd-btn-h);
    height: var(--pd-btn-h);
    font-size: var(--pd-icon-md);
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-sm);
}
body.theme-pd .pd-set-item-icon img {
    width: var(--pd-icon-lg);
    height: var(--pd-icon-lg);
}
body.theme-pd .pd-set-logo--telegram { color: var(--pd-color-telegram); }
body.theme-pd-dark .pd-set-logo--github { filter: invert(1); }
body.theme-pd .pd-set-item-text {
    flex: 1;
    min-width: 0;
}
body.theme-pd .pd-set-item-text > b {
    display: block;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
    color: var(--pd-color-text);
}
body.theme-pd .pd-set-item-text > span {
    display: block;
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    overflow-wrap: anywhere;
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-set-item-text .pd-set-tag { margin-right: calc(var(--pd-space-1) / 2); }
body.theme-pd .pd-set-item > form { flex: none; margin: 0; }
body.theme-pd .pd-set-empty {
    margin: 0;
    padding: var(--pd-space-2) var(--pd-space-4);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-set-note {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--pd-space-1);
    padding: var(--pd-space-1) var(--pd-space-4) var(--pd-space-3);
}
body.theme-pd .pd-set-note > input { max-width: calc(var(--pd-space-5) * 10); }
body.theme-pd .pd-set-note > .pd-set-label { padding-top: 0; }
body.theme-pd .pd-set-card .pd-tglink-pending { margin: 0 var(--pd-space-4) var(--pd-space-3); }

/* 底部保存栏：没改东西时「保存」点不了；改了以后左边写「有 N 项修改还没保存」，前面一个小点 */
body.theme-pd .pd-set-foot {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-space-4);
    background: var(--pd-color-surface-subtle);
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-set-status {
    margin-right: auto;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-set-form.is-dirty .pd-set-status { color: var(--pd-color-text); }
body.theme-pd .pd-set-form.is-dirty .pd-set-status::before {
    content: "";
    display: inline-block;
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    margin-right: var(--pd-space-1);
    vertical-align: middle;
    background: var(--pd-color-warning);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-set-foot [hidden] { display: none; }

@media (max-width: 900px) {
    body.theme-pd .pd-settings-layout {
        grid-template-columns: minmax(0, 1fr);
        gap: var(--pd-space-3);
    }
    body.theme-pd .pd-settings-nav {
        top: 0;
        z-index: 3;
        flex-direction: row;
        margin: calc(var(--pd-page-spacing) * -1) calc(var(--pd-page-gutter) * -1) 0;
        padding: var(--pd-space-1) var(--pd-page-gutter);
        overflow-x: auto;
        scrollbar-width: none;
        background: var(--pd-color-surface);
        border-bottom: 1px solid var(--pd-color-divider);
    }
    body.theme-pd .pd-settings-nav::-webkit-scrollbar { display: none; }
    body.theme-pd .pd-settings-me,
    body.theme-pd .pd-settings-quick { display: none; }
    body.theme-pd .pd-settings-nav > a {
        flex: none;
        height: var(--pd-tab-h-touch);
        white-space: nowrap;
    }
    body.theme-pd .pd-settings-nav > a i { width: auto; }
}
@media (max-width: 640px) {
    body.theme-pd .pd-set-card-head { padding: var(--pd-space-3) var(--pd-space-3) 0; }
    body.theme-pd .pd-set-row {
        grid-template-columns: minmax(0, 1fr);
        gap: var(--pd-space-1);
        padding: var(--pd-space-2) var(--pd-space-3);
    }
    body.theme-pd .pd-set-label { padding-top: 0; }
    body.theme-pd .pd-set-row--switch {
        grid-template-columns: minmax(0, 1fr) auto;
        align-items: center;
    }
    body.theme-pd .pd-set-row--switch > .pd-set-control { display: contents; }
    body.theme-pd .pd-set-row--switch .pd-set-hint {
        grid-column: 1 / -1;
        grid-row: 2;
    }
    body.theme-pd .pd-set-item,
    body.theme-pd .pd-set-empty { padding: var(--pd-space-2) var(--pd-space-3); }
    body.theme-pd .pd-set-note { padding: var(--pd-space-1) var(--pd-space-3) var(--pd-space-3); }
    body.theme-pd .pd-set-note > input { max-width: none; }
    body.theme-pd .pd-set-foot {
        position: sticky;
        bottom: 0;
        padding: var(--pd-space-2) var(--pd-space-3);
    }
    body.theme-pd .pd-set-status { display: none; }
    body.theme-pd .pd-set-foot [data-settings-save] { flex: 1; }
}

/* ===== 签到成功面板：收敛排版，与全站按钮/字号阶梯协调 ===== */
body.theme-pd .signin-modal-box,
body.theme-pd-dark .signin-modal-box {
    width: 460px;
    padding: 24px 26px;
}
body.theme-pd .signin-modal-box h2,
body.theme-pd-dark .signin-modal-box h2 {
    margin: 0 0 6px;
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
body.theme-pd .signin-modal-box > p,
body.theme-pd-dark .signin-modal-box > p {
    margin: 0 0 4px;
    font-size: var(--pd-fs-sm);
    line-height: 1.6;
}
body.theme-pd .signin-rank-mini,
body.theme-pd-dark .signin-rank-mini {
    gap: 20px;
    margin: 18px 0 20px;
    padding-top: 16px;
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .signin-rank-mini h3,
body.theme-pd-dark .signin-rank-mini h3 {
    margin: 0 0 8px;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .signin-rank-mini ol,
body.theme-pd-dark .signin-rank-mini ol {
    font-size: var(--pd-fs-xs);
    line-height: 1.9;
    color: var(--pd-color-text);
}
/* 确认按钮：跟随全站默认按钮尺寸，右对齐，不再是超大胶囊 */
body.theme-pd .signin-modal-box > .btn,
body.theme-pd-dark .signin-modal-box > .btn {
    display: inline-flex;
    float: right;
    height: var(--pd-btn-h-lg);
    min-height: var(--pd-btn-h-lg);
    padding: 0 var(--pd-btn-px-lg);
    font-size: var(--pd-btn-fs);
}
body.theme-pd .signin-modal-box::after {
    content: "";
    display: block;
    clear: both;
}

/* 官方 AI 档案页（pages/partials/assistant-profile.php）：资料卡（名字、在岗状态、职能、性格）→ 工作记录 →
   两栏：我负责什么、怎么找我、最近回复 | 人物设定、其他 AI 伙伴。卡片标题的竖条用 AI 紫，和 AI 的名字、号码徽章同色 */
body.theme-pd .pd-ai-profile .pd-side-card h2 span { background: var(--pd-color-role-ai); }
body.theme-pd .pd-profile-hero.pd-ai-hero { align-items: center; }
body.theme-pd .pd-ai-status {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-height: var(--pd-badge-h);
    padding-inline: var(--pd-badge-px);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-ai-status i {
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    background: var(--pd-color-text-tertiary);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-ai-status--on { color: var(--pd-text-green); background: var(--pd-color-success-soft); }
body.theme-pd .pd-ai-status--on i { background: var(--pd-color-success); }
body.theme-pd .pd-ai-status--trial { color: var(--pd-text-orange); background: var(--pd-color-warning-soft); }
body.theme-pd .pd-ai-status--trial i { background: var(--pd-color-warning); }
body.theme-pd .pd-ai-handle {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-ai-handle-item + .pd-ai-handle-item::before {
    content: "·";
    margin-right: var(--pd-space-1);
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-ai-quote {
    margin: var(--pd-space-2) 0 0;
    padding-left: var(--pd-space-2);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    border-left: calc(var(--pd-space-1) / 4) solid color-mix(in srgb, var(--pd-color-role-ai) 45%, transparent);
}
body.theme-pd .pd-ai-actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-ai-actions .btn {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
}
body.theme-pd .pd-ai-work {
    overflow: hidden;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    box-shadow: var(--pd-shadow-1);
}
body.theme-pd .pd-ai-work-head {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--pd-space-1) var(--pd-space-3);
    padding: var(--pd-space-3) var(--pd-space-4);
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-ai-work-head h2 {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-h2-size);
    font-weight: var(--pd-h2-weight);
}
body.theme-pd .pd-ai-work-head p {
    margin: 0;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-ai-stats {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 1px;
    background: var(--pd-color-divider);
}
body.theme-pd .pd-ai-stats > div {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: var(--pd-space-3) var(--pd-space-1);
    text-align: center;
    background: var(--pd-color-surface);
}
body.theme-pd .pd-ai-stats b {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    font-variant-numeric: tabular-nums;
    line-height: var(--pd-lh-tight);
}
body.theme-pd .pd-ai-stats span {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-ai-stats small {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-2xs);
}
body.theme-pd .pd-ai-main { min-width: 0; }
body.theme-pd .pd-ai-main > * + *,
body.theme-pd .pd-ai-profile .pd-profile-side > * + * { margin-top: var(--pd-space-3); }
body.theme-pd .pd-ai-list {
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-ai-list li {
    display: grid;
    grid-template-columns: var(--pd-space-3) minmax(0, 1fr);
    gap: var(--pd-space-1);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-relaxed);
    overflow-wrap: anywhere;
}
body.theme-pd .pd-ai-list li i {
    color: var(--pd-color-success);
    font-size: var(--pd-fs-xs);
    line-height: inherit;
    text-align: center;
}
body.theme-pd .pd-ai-list--limit li { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-ai-list--limit li i { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-ai-subhead {
    margin: var(--pd-space-3) 0 var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-ai-steps {
    margin: 0;
    padding: 0;
    list-style: none;
    counter-reset: pd-ai-step;
}
body.theme-pd .pd-ai-steps li {
    position: relative;
    padding-left: var(--pd-space-5);
    counter-increment: pd-ai-step;
}
body.theme-pd .pd-ai-steps li + li { margin-top: var(--pd-space-3); }
body.theme-pd .pd-ai-steps li::before {
    content: counter(pd-ai-step);
    position: absolute;
    top: 0;
    left: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-space-4);
    height: var(--pd-space-4);
    color: var(--pd-color-role-ai);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    background: color-mix(in srgb, var(--pd-color-role-ai) 12%, transparent);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-ai-steps b {
    display: block;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-space-4);
}
body.theme-pd .pd-ai-steps p {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-relaxed);
    overflow-wrap: anywhere;
}
body.theme-pd .pd-ai-example {
    display: inline-block;
    margin-top: var(--pd-space-1);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    color: var(--pd-color-text);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xs);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-badge-radius);
    overflow-wrap: anywhere;
}
body.theme-pd .pd-ai-calls {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-3);
    padding-top: var(--pd-space-3);
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-ai-calls span {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-ai-calls code {
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    color: var(--pd-color-role-ai);
    font-size: var(--pd-fs-xs);
    background: color-mix(in srgb, var(--pd-color-role-ai) 10%, transparent);
    border-radius: var(--pd-badge-radius);
}
body.theme-pd .pd-ai-facts {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: var(--pd-space-1) var(--pd-space-2);
    margin: var(--pd-space-3) 0 0;
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-ai-facts dt { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-ai-facts dd { margin: 0; color: var(--pd-color-text-secondary); overflow-wrap: anywhere; }
body.theme-pd .pd-ai-intro {
    margin: 0 0 var(--pd-space-3);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-relaxed);
    overflow-wrap: anywhere;
}
body.theme-pd .pd-ai-profile .pd-profile-meta { align-items: start; }
body.theme-pd .pd-ai-profile .pd-profile-meta dd { overflow-wrap: anywhere; text-align: left; }   /* 性格是一整句话，右对齐折行难读 */
body.theme-pd .pd-ai-mates {
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-ai-mates a {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    padding-block: var(--pd-space-1);
    color: var(--pd-color-text);
    text-decoration: none;
}
body.theme-pd .pd-ai-mates img {
    flex: none;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    object-fit: cover;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-ai-mates span {
    display: flex;
    flex-direction: column;
    min-width: 0;
}
body.theme-pd .pd-ai-mates b {
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-ai-mates small {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-ai-mates a:hover b { color: var(--pd-color-role-ai); }
body.theme-pd .pd-ai-profile .pd-profile-reply { padding-block: var(--pd-space-2); }
body.theme-pd .pd-ai-profile .pd-profile-reply-body { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-ai-profile .pd-profile-reply-meta { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-ai-reply-list .pd-empty { margin: 0; padding: var(--pd-space-4) 0; text-align: center; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); }
@media (max-width: 640px) {
    body.theme-pd .pd-profile-hero.pd-ai-hero { flex-wrap: wrap; }
    body.theme-pd .pd-ai-actions { justify-content: flex-start; width: 100%; }
    body.theme-pd .pd-ai-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* 个人页（用户主页、官方 AI 档案页）、设置页、通知页：所有卡片同一个圆角（12px，--pd-card-radius-page） */
body.theme-pd .pd-profile .pd-profile-hero,
body.theme-pd .pd-profile .pd-profile-content,
body.theme-pd .pd-profile .pd-side-card,
body.theme-pd .pd-profile .pd-ai-work,
body.theme-pd .pd-set-card,
body.theme-pd .pd-notifications {
    border-radius: var(--pd-card-radius-page) !important;
}
/* ===== 个人中心（用户主页）=====
   结构：面包屑 → 资料卡（hero）→ 统计条 → 主体两栏（主题 / 回复列表 + 资料侧栏）。
   列表面板放在已经是卡片的 .pd-profile-content 里，所以面板本身不再套 .thread-list（它自带卡片边框和内边距，
   会和这里的 padding 互相覆盖，头像就贴到了卡片边上）。 */
body.theme-pd .pd-profile > * + * {
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-profile-hero {
    display: flex;
    align-items: flex-start;
    gap: var(--pd-space-4);
    padding: var(--pd-space-4);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-1);
}
body.theme-pd .pd-profile-avatar {
    flex: none;
    width: calc(var(--pd-space-5) * 3);
    height: calc(var(--pd-space-5) * 3);
    border-radius: var(--pd-radius-round);
    object-fit: cover;
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-profile-main {
    flex: 1 1 auto;
    min-width: 0;
}
body.theme-pd .pd-profile-name {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-profile-name h1 {
    margin: 0;
    font-size: var(--pd-h1-size);
    font-weight: var(--pd-h1-weight);
    line-height: var(--pd-h1-lh);
    color: var(--pd-color-text);
}
body.theme-pd .pd-profile-handle {
    margin: var(--pd-space-1) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-profile-level {
    display: grid;
    gap: var(--pd-space-2);
    max-width: calc(var(--pd-space-5) * 13);
    margin-top: var(--pd-space-3);
}
/* 升级条件进度（core/level.php 的 pd_fish_upgrade_progress_html：钱包页、个人主页）：一项一块，项与项之间留距离，满足的那句用绿色 */
body.theme-pd .pd-level-progress-item .pd-level-progress-meta { margin-bottom: var(--pd-space-1); }
body.theme-pd .pd-level-progress-item.is-met .pd-level-progress-meta span:last-child { color: var(--pd-text-green); }
body.theme-pd .pd-profile-actions {
    flex: none;
}

/* 主体两栏 */
body.theme-pd .pd-profile-body {
    display: grid;
    grid-template-columns: minmax(0, 1fr) var(--pd-sidebar-width);
    gap: var(--pd-space-3);
    align-items: start;
}
body.theme-pd .pd-profile-content {
    min-width: 0;
    overflow: hidden;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-1);
}
body.theme-pd .pd-profile-panel {
    padding: var(--pd-space-1) var(--pd-space-3);
}
body.theme-pd .pd-profile-privacy-note {
    margin: 0;
    padding: var(--pd-space-2) var(--pd-space-3);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-profile-points-total {
    margin: var(--pd-space-2) 0;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-profile-point {
    display: flex;
    align-items: center;
    gap: var(--pd-space-3);
}
body.theme-pd .pd-profile-point-reason {
    flex: 1;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
}
body.theme-pd .pd-profile-panel[hidden] {
    display: none;
}
body.theme-pd .pd-profile-panel .pd-empty {
    padding: var(--pd-space-5) var(--pd-space-3);
    text-align: center;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
/* 回复条目 */
body.theme-pd .pd-profile-reply {
    padding: var(--pd-space-2) 0;
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-profile-reply:last-child {
    border-bottom: 0;
}
body.theme-pd .pd-profile-reply-title {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    text-decoration: none;
}
body.theme-pd .pd-profile-reply-title:hover {
    color: var(--pd-color-primary);
}
body.theme-pd .pd-profile-reply-body {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-relaxed);
}
body.theme-pd .pd-profile-reply-meta {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
/* 侧栏资料表 */
body.theme-pd .pd-profile-meta {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: center;
    gap: var(--pd-space-1) var(--pd-space-3);
    margin: 0;
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-profile-meta dt {
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-profile-meta dd {
    margin: 0;
    color: var(--pd-color-text);
    text-align: right;
}

@media (max-width: 900px) {
    body.theme-pd .pd-profile-body { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
    body.theme-pd .pd-profile-hero { flex-wrap: wrap; gap: var(--pd-space-2); padding: var(--pd-space-3); }
    body.theme-pd .pd-profile-avatar { width: calc(var(--pd-space-5) * 2); height: calc(var(--pd-space-5) * 2); }
    body.theme-pd .pd-profile-actions { width: 100%; }
    body.theme-pd .pd-profile-panel { padding: var(--pd-space-1) var(--pd-space-2); }
}

/* ===== 个人主页 /space/<UID>（pages/user.php，2026-10-05 改成站长选的方案 A）=====
   左边一列：头像、昵称和徽章、号码、签名、按钮、关注 / 粉丝、（看自己时）升级进度，下面接「资料」「荣誉勋章」；
   右边：一排数字小卡片，再是主题 / 回复 / 积分 / 收藏。不到 900px 变成一栏：名片、按钮、数字、列表在前，资料和勋章排到最后 */
body.theme-pd .pd-profile.pd-space {
    display: grid;
    grid-template-columns: calc(var(--pd-space-5) * 9) minmax(0, 1fr);
    gap: var(--pd-space-5);
    align-items: start;
}
body.theme-pd .pd-profile.pd-space > * + * { margin-top: 0; }
body.theme-pd .pd-space-side {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-3);
    min-width: 0;
}
body.theme-pd .pd-space-side > * { margin: 0; }
body.theme-pd .pd-space-head {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-3);
}
body.theme-pd .pd-space-avatar {
    display: block;
    flex: none;
    width: calc(var(--pd-space-5) * 5);
    height: calc(var(--pd-space-5) * 5);
    object-fit: cover;
    background: var(--pd-color-surface-soft);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-space-id {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    min-width: 0;
}
body.theme-pd .pd-space-name {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-space-name > * { margin: 0; }
body.theme-pd .pd-space-name h1 {
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    overflow-wrap: anywhere;
    color: var(--pd-color-text);
}
body.theme-pd .pd-space-chips {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
}
body.theme-pd .pd-space-chips .pd-zodiac { margin-left: 0; }
body.theme-pd .pd-space-id .pd-verified-labels { margin: 0; }
body.theme-pd .pd-space-sign {
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    overflow-wrap: anywhere;
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-space-actions .pd-social-actions {
    flex-wrap: nowrap;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-space-actions .pd-social-actions > * {
    flex: 1 1 0;
    min-width: 0;
}
body.theme-pd .pd-space-actions .pd-social-note { margin: var(--pd-space-1) 0 0; }
body.theme-pd .pd-space-follow {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-3);
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-space-follow b {
    margin-right: calc(var(--pd-space-1) / 2);
    font-weight: var(--pd-fw-semibold);
    font-variant-numeric: tabular-nums;
    color: var(--pd-color-text);
}
/* 升级进度（只在看自己时）：一行「下一级 / 怎么升」，每个条件一行字一条进度 */
body.theme-pd .pd-space-progress {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    padding: var(--pd-space-2) var(--pd-space-3);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-space-progress-head,
body.theme-pd .pd-space-progress-meta {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    margin: 0;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-space-progress-head b {
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
body.theme-pd .pd-space-progress-head a { color: var(--pd-color-link); text-decoration: none; }
body.theme-pd .pd-space-progress-head a:hover { text-decoration: underline; }
body.theme-pd .pd-space-progress-meta.is-met span:last-child { color: var(--pd-text-green); }
body.theme-pd .pd-space-bar {
    height: var(--pd-space-1);
    overflow: hidden;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-space-bar span {
    display: block;
    height: 100%;
    background: var(--pd-color-primary);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-space-block {
    padding-top: var(--pd-space-3);
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-space-block-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--pd-space-2);
    margin-bottom: var(--pd-space-2);
}
body.theme-pd .pd-space-block-head h2 {
    margin: 0;
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
    color: var(--pd-color-text);
}
body.theme-pd .pd-space-block-head a {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-link);
    text-decoration: none;
}
body.theme-pd .pd-space-block-head a:hover { text-decoration: underline; }
body.theme-pd .pd-space-meta {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: var(--pd-space-1) var(--pd-space-3);
    margin: 0;
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-space-meta dt { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-space-meta dd {
    margin: 0;
    text-align: right;
    font-variant-numeric: tabular-nums;
    color: var(--pd-color-text);
}
body.theme-pd .pd-space-empty-medals {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    margin: 0;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-space-empty-medals i {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: var(--pd-btn-h);
    height: var(--pd-btn-h);
    font-size: var(--pd-icon-md);
    color: var(--pd-color-text-tertiary);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-space-main {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-3);
    min-width: 0;
}
/* 数字有几个就分几格排成一行（隐私设置会藏掉主题 / 回复 / 鱼丸，个数不固定）；右栏窄了改成一行三个，不会出现「5 + 1」 */
body.theme-pd .pd-space-stats {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: minmax(0, 1fr);
    gap: var(--pd-space-2);
}
body.theme-pd .pd-space-stats > div {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    padding: var(--pd-space-3) var(--pd-space-1);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-space-stats b {
    display: inline-flex;
    align-items: center;
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
    color: var(--pd-color-text);
}
body.theme-pd .pd-space-stats b .pd-fishcoin-amount {
    gap: calc(var(--pd-space-1) / 2);
    font-size: inherit;
    font-weight: inherit;
    color: inherit;
}
body.theme-pd .pd-space-stats b .pd-fishcoin-icon {
    width: var(--pd-icon-lg);
    height: var(--pd-icon-lg);
}
body.theme-pd .pd-space-stats > div > span {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-space-tabs {
    display: flex;
    gap: var(--pd-space-1);
    overflow-x: auto;
    scrollbar-width: none;
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-space-tabs::-webkit-scrollbar { display: none; }
body.theme-pd .pd-space-tabs button {
    position: relative;
    display: inline-flex;
    flex: none;
    align-items: center;
    gap: var(--pd-space-1);
    height: var(--pd-tab-h-touch);
    padding: 0 var(--pd-space-3);
    font: inherit;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
    background: none;
    border: 0;
    cursor: pointer;
}
body.theme-pd .pd-space-tabs button:hover { color: var(--pd-color-text); }
body.theme-pd .pd-space-tabs button span {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-space-tabs button.active {
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
body.theme-pd .pd-space-tabs button.active::after {
    content: "";
    position: absolute;
    right: var(--pd-space-3);
    bottom: -1px;
    left: var(--pd-space-3);
    height: var(--pd-tab-indicator);
    background: var(--pd-color-primary);
}
body.theme-pd .pd-space .pd-profile-content { box-shadow: none; }
body.theme-pd .pd-space .pd-profile-privacy-note {
    padding: 0;
    border-bottom: 0;
}
body.theme-pd .pd-space-empty {
    margin: 0;
    padding: var(--pd-space-5) 0;
    font-size: var(--pd-fs-sm);
    text-align: center;
    color: var(--pd-color-text-secondary);
}
@media (max-width: 900px) {
    body.theme-pd .pd-profile.pd-space {
        grid-template-columns: minmax(0, 1fr);
        gap: var(--pd-space-3);
    }
    body.theme-pd .pd-space-side { display: contents; }
    body.theme-pd .pd-space-main { order: 2; }
    body.theme-pd .pd-space-block { order: 3; }
    body.theme-pd .pd-space-head {
        flex-direction: row;
        align-items: center;
    }
    body.theme-pd .pd-space-avatar {
        width: calc(var(--pd-space-5) * 2 + var(--pd-space-1));
        height: calc(var(--pd-space-5) * 2 + var(--pd-space-1));
    }
}
@media (max-width: 1180px) {
    body.theme-pd .pd-space-stats {
        grid-auto-flow: row;
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

/* 第三方账号绑定表单里隐形的禁用默认按钮：挡住在密码框里按回车时误触列表里的第一个按钮 */
body.theme-pd .pd-oauth-bind-default {
    display: none !important;
}
/* Telegram 等待绑定时的二维码（个人设置 #telegram） */
body.theme-pd .pd-tglink-pending {
    display: flex;
    align-items: center;
    gap: var(--pd-space-3);
    margin-top: var(--pd-space-2);
    padding: var(--pd-space-2);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-tglink-qr {
    flex: 0 0 auto;
    display: block;
    width: calc(var(--pd-space-5) * 5);
    height: calc(var(--pd-space-5) * 5);
    background: var(--pd-color-qr-bg);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-tglink-steps p {
    margin: 0 0 var(--pd-space-2);
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
}
@media (max-width: 640px) {
    body.theme-pd .pd-tglink-pending { flex-direction: column; align-items: flex-start; }
}
/* 用网鱼账号登录：授权确认页（pages/oauth-authorize.php）。外框沿用登录页的单栏卡片 .pd-auth2--single，
   但不用它的网格（网格每个子元素之间固定 40px），标题也不要登录页的下边距 */
.pd-auth2.pd-oauth-consent {
    display: block;
}
.pd-auth2.pd-oauth-consent h1 {
    margin: 0;
}
.pd-oauth-app {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    margin-bottom: var(--pd-space-4);
}
.pd-oauth-app-mark {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
    border-radius: var(--pd-radius-md);
}
.pd-info-block p.pd-oauth-app-sub {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
}
.pd-oauth-me {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-2);
    margin-bottom: var(--pd-space-3);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-btn-radius);
}
.pd-oauth-me img {
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    border-radius: var(--pd-radius-round);
    object-fit: cover;
}
.pd-oauth-me > div {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
}
.pd-oauth-me strong {
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
}
.pd-oauth-me span {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
.pd-oauth-switch,
.pd-oauth-cancel {
    padding: 0;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-link);
    background: none;
    border: 0;
    cursor: pointer;
}
.pd-oauth-switch:hover,
.pd-oauth-cancel:hover {
    text-decoration: underline;
}
.pd-info-block p.pd-oauth-label {
    margin: 0 0 var(--pd-space-1);
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
}
.pd-info-block ul.pd-oauth-scopes {
    margin: 0 0 var(--pd-space-3);
    padding: 0;
    list-style: none;
}
.pd-info-block ul.pd-oauth-scopes li {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
    padding: var(--pd-space-1) 0;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
    border-bottom: 1px solid var(--pd-color-divider);
}
.pd-oauth-scopes i {
    width: var(--pd-space-3);
    text-align: center;
    color: var(--pd-color-primary);
}
.pd-info-block p.pd-oauth-note,
.pd-info-block p.pd-oauth-foot {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
.pd-oauth-actions {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--pd-space-2);
    margin: var(--pd-space-3) 0;
}
.pd-info-block p.pd-auth-return {
    margin: calc(var(--pd-space-4) * -1 + var(--pd-space-1)) 0 var(--pd-space-3);
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
}
/* 开发者页 /developers（pages/developers.php） */
.pd-dev code {
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xs);
    overflow-wrap: anywhere;
}
.pd-dev pre {
    margin: 0;
    padding: var(--pd-space-2);
    overflow-x: auto;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-btn-radius);
}
.pd-dev pre code {
    white-space: pre;
    overflow-wrap: normal;
}
.pd-dev-steps {
    margin: 0 0 var(--pd-space-3);
    padding-left: var(--pd-space-4);
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
}
.pd-dev-kv {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-1) var(--pd-space-2);
    margin: var(--pd-space-1) 0;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-btn-radius);
}
.pd-dev-kv > span {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
.pd-dev-kv > code {
    flex: 1 1 auto;
    min-width: 0;
    color: var(--pd-color-text);
}
.pd-dev-kv .btn {
    margin-left: 0;
}
.pd-dev-secret {
    background: var(--pd-color-warning-soft);
}
.pd-info-block .pd-dev-secret p {
    flex-basis: 100%;
    margin: 0;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text);
}
.pd-dev-app {
    padding: var(--pd-space-2) 0;
    border-bottom: 1px solid var(--pd-color-divider);
}
.pd-dev-app:last-child {
    border-bottom: 0;
}
.pd-dev-app-head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
}
.pd-dev-app-head .muted {
    font-size: var(--pd-fs-xs);
}
.pd-dev-status {
    padding: 0 var(--pd-space-1);
    font-size: var(--pd-fs-xs);
    border-radius: var(--pd-radius-sm);
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
}
.pd-dev-status--approved { color: var(--pd-color-success); background: var(--pd-color-success-soft); }
.pd-dev-status--pending { color: var(--pd-color-warning); background: var(--pd-color-warning-soft); }
.pd-dev-status--rejected,
.pd-dev-status--disabled { color: var(--pd-color-error); background: var(--pd-color-error-soft); }
.pd-info-block p.pd-dev-reason {
    margin: var(--pd-space-1) 0 0;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-error);
}
.pd-info-block p.pd-dev-meta,
.pd-info-block p.pd-dev-hint {
    margin: var(--pd-space-1) 0 0;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
.pd-dev-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-1);
}
.pd-dev-actions .btn {
    margin-left: 0;
}
.pd-dev-form {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    max-width: calc(var(--pd-space-5) * 18);
}
.pd-dev-form label {
    margin-top: var(--pd-space-1);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
.pd-dev-form input:not([type="checkbox"]),
.pd-dev-form textarea {
    width: 100%;
    font-size: var(--pd-fs-sm);
}
.pd-dev-form label.pd-dev-check {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    font-weight: var(--pd-fw-regular);
}
.pd-dev-form .btn {
    align-self: flex-start;
    margin: var(--pd-space-2) 0 0;
}
/* 楼层小尾巴：用 Telegram 机器人回的回复（pages/thread.php，pd_posts.source = telegram） */
body.theme-pd .pd-post-tail {
    display: flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    margin: var(--pd-space-1) 0 0;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}

/* ===== 签到页 /checkin（紧凑版）=====
   顶部一条状态栏；下面两栏：左边统计 + 小月历 + 补签确认条，右边今日签到头像、连续签到榜、规则。窄屏叠成一栏。 */
.pd-ck {
    display: grid;
    gap: var(--pd-space-3);
}
.pd-ck-head,
.pd-ck-cal,
.pd-ck-card {
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
.pd-ck-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-3);
    padding: var(--pd-space-3) var(--pd-space-4);
}
.pd-ck-head h1 {
    margin: 0;
    font-size: var(--pd-h1-size);
    font-weight: var(--pd-h1-weight);
    line-height: var(--pd-h1-lh);
    color: var(--pd-color-text);
}
.pd-ck-head p {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
}
.pd-ck-head-action {
    flex: none;
}
/* 签到页（2026-10-04）：页头选心情签到（和首页签到卡共用 .pd-mood）、今天的心情、日历格里的心情小鱼 */
.pd-ck-head.has-mood { flex-wrap: wrap; }
.pd-ck-mood-form {
    display: flex;
    flex: 1 0 100%;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--pd-space-2);
    margin: 0;
}
body.theme-pd .pd-ck-mood-form .pd-mood-pick { flex: 1 1 320px; margin: 0; }
body.theme-pd .pd-ck-mood-form .pd-mood-grid { grid-template-columns: repeat(9, minmax(0, 1fr)); }
.pd-ck-today-mood img {
    width: var(--pd-space-5);
    height: var(--pd-space-5);
}
.pd-ck-cell .pd-ck-mood {
    width: min(var(--pd-space-5), 60%);
    height: auto;
    margin-top: calc(var(--pd-space-1) / 4);
    user-select: none;
}
@media (max-width: 600px) {
    body.theme-pd .pd-ck-mood-form .pd-mood-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
.pd-ck-done {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-success);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
}
.pd-ck-hint {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-sm);
}
.pd-ck-layout {
    display: grid;
    grid-template-columns: minmax(0, 22.5rem) minmax(0, 1fr);
    gap: var(--pd-space-3);
    align-items: start;
}
.pd-ck-main,
.pd-ck-side {
    display: grid;
    gap: var(--pd-space-3);
    min-width: 0;
}
.pd-ck-stats {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 1px;
    overflow: hidden;
    background: var(--pd-color-divider);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
.pd-ck-stats > div {
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: var(--pd-space-2) var(--pd-space-1);
    background: var(--pd-color-surface);
}
.pd-ck-stats b {
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    color: var(--pd-color-text);
}
.pd-ck-stats span {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}

/* 小月历：七列等宽，格子是正方形，整个月历宽度由左栏（约 360px）决定 */
.pd-ck-cal {
    padding: var(--pd-space-3);
}
.pd-ck-cal-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: var(--pd-space-2);
}
.pd-ck-cal-head h2 {
    margin: 0;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
.pd-ck-cal-nav {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    color: var(--pd-color-text-secondary);
    border-radius: var(--pd-btn-radius);
    text-decoration: none;
}
a.pd-ck-cal-nav:hover {
    color: var(--pd-color-primary);
    background: var(--pd-color-surface-soft);
}
.pd-ck-cal-nav.is-disabled {
    color: var(--pd-color-text-tertiary);
    opacity: .5;
}
.pd-ck-grid {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: calc(var(--pd-space-1) / 2);
}
.pd-ck-wd {
    padding-bottom: calc(var(--pd-space-1) / 2);
    text-align: center;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}
.pd-ck-cell {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    aspect-ratio: 1;
    margin: 0;
    padding: 0;
    font: inherit;
    font-size: var(--pd-fs-sm);
    line-height: 1.1;
    color: var(--pd-color-text-secondary);
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--pd-radius-sm);
}
.pd-ck-cell.is-empty {
    visibility: hidden;
}
.pd-ck-cell.is-future {
    color: var(--pd-color-text-tertiary);
}
/* 签了的日子整格变绿，不再画对号（补签仍标「补」，正常签到显示当天的心情小鱼） */
.pd-ck-cell.is-signed {
    color: var(--pd-color-checkin-on-signed);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-checkin-signed);
}
.pd-ck-cell.is-signed em {
    font-size: var(--pd-icon-xs);
    font-style: normal;
    font-weight: var(--pd-fw-semibold);
}
.pd-ck-cell.is-today {
    border-color: var(--pd-color-primary);
}
.pd-ck-cell.is-missed {
    color: var(--pd-color-text);
    border: 1px dashed var(--pd-color-border-strong);
    cursor: pointer;
}
.pd-ck-cell.is-missed:hover,
.pd-ck-cell.is-picked {
    border-color: var(--pd-color-primary);
    background: var(--pd-color-surface-soft);
}
.pd-ck-cell.is-missed:focus-visible {
    outline: none;
    box-shadow: var(--pd-focus-ring);
    border-color: var(--pd-color-primary);
}
.pd-ck-makeup-info {
    margin: var(--pd-space-2) 0 0;
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text-secondary);
}
.pd-ck-makeup-info b {
    color: var(--pd-color-text);
}
.pd-ck-makeup {
    display: grid;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-2);
    padding: var(--pd-space-2);
    font-size: var(--pd-fs-sm);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-sm);
}
.pd-ck-makeup[hidden] {
    display: none;
}
.pd-ck-makeup-actions {
    display: flex;
    gap: var(--pd-space-1);
}
.pd-ck-makeup .btn,
.pd-ck-login .btn {
    margin: 0;
    flex: none;
    white-space: nowrap;
}
.pd-ck-makeup .btn[hidden] {
    display: none;
}
.pd-ck-makeup-info a {
    color: var(--pd-color-primary);
    text-decoration: none;
}
/* 签到鱼丸（2026-10-05）：页头的鱼丸提示、月历里暴击那天的小角标 */
.pd-ck-points-hint {
    display: flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    margin-top: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
.pd-ck-points-hint i {
    color: var(--pd-color-checkin-flame);
}
.pd-ck-crit {
    position: absolute;
    top: calc(var(--pd-space-1) / 4);
    right: calc(var(--pd-space-1) / 4);
    padding: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-checkin-flame);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    background: var(--pd-color-surface);
    border-radius: var(--pd-radius-pill);
}

/* 签到成功面板：这次得了多少（鱼龄 / 鱼丸 / 连签奖励），暴击时在上面单独一行跳一下 */
.pd-signin-crit,
body.theme-pd .signin-modal-box > .pd-signin-crit,
body.theme-pd-dark .signin-modal-box > .pd-signin-crit {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    margin: 0 0 var(--pd-space-2);
    color: var(--pd-color-checkin-flame);
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    animation: pd-signin-crit-pop 0.6s ease-out both;
}
@keyframes pd-signin-crit-pop {
    0% { transform: scale(0.4); opacity: 0; }
    60% { transform: scale(1.15); opacity: 1; }
    100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
    .pd-signin-crit { animation: none; }
}
.pd-signin-gains {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin: 0 0 var(--pd-space-2);
    padding: 0;
    list-style: none;
}
.pd-signin-gains li {
    display: inline-flex;
    align-items: baseline;
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
}
.pd-signin-gains b {
    color: var(--pd-color-success);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
}
.pd-signin-gains .is-points b {
    color: var(--pd-color-checkin-flame);
}
.pd-signin-gains em {
    font-style: normal;
    color: var(--pd-color-text-tertiary);
}

/* 右栏卡片 */
.pd-ck-card {
    padding: var(--pd-space-3);
}
.pd-ck-card h2 {
    margin: 0 0 var(--pd-space-2);
    font-size: var(--pd-h2-size);
    font-weight: var(--pd-h2-weight);
    line-height: var(--pd-h2-lh);
    color: var(--pd-color-text);
}
.pd-ck-card h2 b {
    color: var(--pd-color-primary);
}
.pd-ck-empty,
.pd-ck-more {
    margin: 0;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}
.pd-ck-more {
    margin-top: var(--pd-space-2);
}
.pd-ck-more a {
    color: var(--pd-color-primary);
    text-decoration: none;
}
.pd-ck-login {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
}
.pd-ck-login p {
    margin: 0;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text-secondary);
}
.pd-ck-avatars {
    display: flex;
    flex-wrap: wrap;
    gap: calc(var(--pd-space-1) * .75);
    margin: 0;
    padding: 0;
    list-style: none;
}
.pd-ck-avatars a {
    position: relative;
    display: block;
}
.pd-ck-avatars img,
.pd-ck-board-user img {
    display: block;
    object-fit: cover;
    background: var(--pd-color-surface-soft);
    border-radius: 0;
    -webkit-mask-image: var(--pd-squircle-mask);
    mask-image: var(--pd-squircle-mask);
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}
/* 头像上的名字提示：和操作徽章同款的黑色小气泡 */
@media (hover: hover) {
    .pd-ck-avatars a::after {
        content: attr(data-name);
        position: absolute;
        bottom: calc(100% + var(--pd-space-1) / 2);
        left: 50%;
        z-index: 20;
        padding: calc(var(--pd-space-1) * .75) var(--pd-space-1);
        color: var(--pd-color-on-primary);
        font-size: var(--pd-fs-xs);
        line-height: 1;
        white-space: nowrap;
        pointer-events: none;
        background: var(--pd-color-tooltip-bg);
        border-radius: var(--pd-badge-radius);
        opacity: 0;
        transform: translate(-50%, calc(var(--pd-space-1) / 2));
        transition: opacity .14s ease, transform .14s ease;
    }
    .pd-ck-avatars a:hover::after {
        opacity: 1;
        transform: translate(-50%, 0);
    }
}
.pd-ck-board {
    display: grid;
    gap: calc(var(--pd-space-1) / 2);
    margin: 0;
    padding: 0;
    list-style: none;
}
.pd-ck-board li {
    display: grid;
    grid-template-columns: var(--pd-space-4) minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--pd-space-1);
}
.pd-ck-rank {
    text-align: center;
    font-size: var(--pd-fs-sm);
    font-variant-numeric: tabular-nums;
    color: var(--pd-color-text-tertiary);
}
.pd-ck-rank.is-top {
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
}
.pd-ck-board-user {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    min-width: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    text-decoration: none;
}
.pd-ck-board-user span {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pd-ck-board-days {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
    font-variant-numeric: tabular-nums;
}
.pd-ck-board-days b {
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
}
.pd-ck-rules ul {
    margin: 0;
    padding-left: var(--pd-space-3);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-relaxed);
    color: var(--pd-color-text-secondary);
}
@media (max-width: 860px) {
    .pd-ck-layout {
        grid-template-columns: minmax(0, 1fr);
    }
    .pd-ck-head {
        padding: var(--pd-space-3);
    }
}

/* ===== 特殊帖子：投票 / 悬赏 / 抽奖 / 红包（core/thread-types.php） ===== */
/* 四种特殊帖使用同尺寸的 SVG 图形徽章：投票蓝、悬赏金、抽奖绿、红包红。 */
.pd-type-icon {
    display: inline-block;
    width: var(--pd-thread-title-icon-size);
    height: var(--pd-thread-title-icon-size);
    vertical-align: middle;
    flex: 0 0 auto;
}
.pd-tt-title > .pd-type-icon { margin-inline-end: var(--pd-space-1); }
body.theme-pd .pd-feed-tabs .pd-type-icon {
    width: var(--pd-icon-sm);
    height: var(--pd-icon-sm);
}
body.theme-pd .pd-badge-type,
body.theme-pd-dark .pd-badge-type {
    background: transparent;
    width: var(--pd-thread-title-icon-size);
    height: var(--pd-thread-title-icon-size);
    border-radius: 0;
}
/* 帖子详情页大标题后面的图标：比列表里大一档，和标题隔 8px */
body.theme-pd .pd-thread-title-card h1 .pd-badge-sq {
    margin: 0 0 0 var(--pd-space-1);
}
body.theme-pd .pd-thread-title-card h1 .pd-badge-sq i {
    font-size: var(--pd-icon-lg);
}
/* 列表标题后面的小图标和标题 / 相邻图标之间只留 6px（原来徽章右边距 5 + 行内间距 8 = 13px，太松） */
body.theme-pd .pd-thread-main h2 > .pd-badge-sq {
    margin-left: calc(var(--pd-space-1) / -4);
    margin-right: calc(var(--pd-space-1) / -4);
}
.pd-tt-picker {
    margin-bottom: var(--pd-space-2);
}
.pd-tt-picker:not(:has(.pd-tt-form:not([hidden]))) {
    display: none;
}
.pd-tt-help,
.pd-tt-note {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}
.pd-tt-form {
    margin-top: var(--pd-space-2);
    padding: var(--pd-space-3);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
.pd-tt-form[hidden] {
    display: none;
}
.pd-tt-options {
    display: grid;
    gap: var(--pd-space-1);
    margin-bottom: var(--pd-space-2);
}
.pd-tt-option-row {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
}
.pd-tt-option-row input {
    flex: 1 1 auto;
    min-width: 0;
}
.pd-tt-icon-btn {
    flex: 0 0 auto;
    width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    color: var(--pd-color-text-secondary);
    background: transparent;
    border: 0;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
.pd-tt-icon-btn:hover {
    color: var(--pd-color-error);
    background: var(--pd-color-error-soft);
}
.pd-tt-fields {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    align-items: start;
    gap: var(--pd-space-3);
    margin-top: var(--pd-space-3);
}
@media (max-width: 640px) {
    .pd-tt-fields {
        grid-template-columns: minmax(0, 1fr);
    }
}
.pd-tt-field {
    text-align: left;
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    margin: 0;
}
.pd-tt-field.is-wide {
    grid-column: 1 / -1;
}
.pd-tt-field-label {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
    white-space: nowrap;
}
.pd-tt-field input,
.pd-tt-field select {
    width: 100%;
    margin: 0;
}
.pd-tt-field input:disabled {
    opacity: .5;
    cursor: not-allowed;
}
.pd-tt-field-hint {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-snug);
}
.pd-tt-form .btn-light {
    margin-left: 0;
}
.pd-tt-help {
    margin: var(--pd-space-2) 0 0;
}

/* 帖子页上的面板 */
.pd-tt {
    margin: var(--pd-space-3) 0;
    padding: var(--pd-space-3);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
.pd-tt-head {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--pd-space-1);
    margin-bottom: var(--pd-space-2);
}
.pd-tt-title {
    font-size: var(--pd-h2-size);
    font-weight: var(--pd-h2-weight);
    color: var(--pd-color-text);
}
.pd-tt-line {
    margin: 0 0 var(--pd-space-1);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text);
}
.pd-tt-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-2);
}
/* 抽奖：奖品、参与状态和操作各自清楚呈现，状态色不覆盖按钮配色。 */
.pd-tt-lottery {
    padding: var(--pd-space-4);
    background: var(--pd-color-surface);
}
.pd-lottery-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-3);
}
.pd-lottery-heading {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    min-width: 0;
}
.pd-lottery-icon {
    display: grid;
    place-items: center;
    flex: 0 0 auto;
    width: var(--pd-btn-h-lg);
    height: var(--pd-btn-h-lg);
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-lg);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-radius-md);
}
.pd-lottery-title {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
}
.pd-lottery-title:focus {
    outline: none;
}
.pd-lottery-meta {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-lottery-status {
    flex: 0 0 auto;
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-badge-radius);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
    line-height: var(--pd-lh-snug);
}
.pd-lottery-status.is-drawn {
    color: var(--pd-color-success);
    background: var(--pd-color-success-soft);
}
.pd-lottery-status.is-ended {
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
}
.pd-lottery-prize {
    margin-top: var(--pd-space-3);
    padding: var(--pd-space-3);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    overflow-wrap: anywhere;
}
.pd-lottery-prize-label {
    display: block;
    margin-bottom: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-lottery-prize > strong {
    display: block;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
}
.pd-lottery-detail {
    margin: var(--pd-space-1) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-lottery-footer {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-3);
    margin-top: var(--pd-space-3);
    padding-top: var(--pd-space-3);
    border-top: 1px solid var(--pd-color-divider);
}
.pd-lottery-footer > .pd-tt-note {
    flex: 1 1 calc(var(--pd-input-h) * 4);
    margin: 0;
    line-height: var(--pd-lh-normal);
}
.pd-lottery-footer .pd-tt-actions {
    margin: 0;
}
.pd-lottery-footer .btn {
    margin: 0;
}
.pd-lottery-results {
    margin-top: var(--pd-space-3);
    padding-top: var(--pd-space-3);
    border-top: 1px solid var(--pd-color-divider);
}
.pd-lottery-results h4 {
    margin: 0 0 var(--pd-space-2);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
}
.pd-lottery-winners {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--pd-space-1);
    margin: 0;
    padding: 0;
    list-style: none;
}
.pd-lottery-winners li {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    min-width: 0;
    padding: var(--pd-space-1) var(--pd-space-2);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-sm);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
.pd-lottery-winners li > a {
    flex: 1;
    min-width: 0;
    font-weight: var(--pd-fw-medium);
    overflow-wrap: anywhere;
}
.pd-lottery-winners li > span {
    flex: 0 0 auto;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
.pd-lottery-empty {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
@media (max-width: 640px) {
    .pd-tt-lottery {
        padding: var(--pd-space-3);
    }
    .pd-lottery-head {
        align-items: flex-start;
        gap: var(--pd-space-1);
    }
    .pd-lottery-footer {
        flex-direction: column;
        align-items: stretch;
    }
    .pd-lottery-footer > .pd-tt-note {
        flex-basis: auto;
    }
    .pd-lottery-footer .pd-tt-actions > .btn {
        flex: 1;
    }
    .pd-lottery-winners {
        grid-template-columns: minmax(0, 1fr);
    }
}
/* 投票：标题、可选卡片与结果使用同一套结构，避免全局表单规则影响控件。 */
.pd-tt-poll {
    padding: var(--pd-space-4);
    background: var(--pd-color-surface);
    border-radius: var(--pd-radius-lg);
}
.pd-poll-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--pd-space-3);
    margin-bottom: var(--pd-space-4);
}
.pd-poll-heading {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    min-width: 0;
}
.pd-poll-icon {
    display: grid;
    place-items: center;
    flex: 0 0 auto;
    width: var(--pd-btn-h-lg);
    height: var(--pd-btn-h-lg);
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-lg);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-radius-md);
}
.pd-poll-title {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
}
.pd-poll-title:focus {
    outline: none;
}
.pd-poll-rule {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-poll-status {
    flex: 0 0 auto;
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-snug);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-badge-radius);
}
.pd-poll-status.is-ended {
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
}
.pd-poll-status.is-voted {
    color: var(--pd-color-success);
    background: var(--pd-color-success-soft);
}
.pd-tt-poll .pd-poll-options {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--pd-space-2);
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
}
.pd-poll-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
}
.pd-tt-poll .pd-tt-choice {
    display: flex;
    align-items: center;
    gap: var(--pd-space-3);
    min-width: 0;
    min-height: calc(var(--pd-btn-h-lg) + var(--pd-space-2));
    margin: 0;
    padding: var(--pd-space-3);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-normal);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    cursor: pointer;
    transition: background-color .15s, border-color .15s;
}
.pd-tt-poll .pd-poll-option-label {
    order: 0;
    flex: 1 1 auto;
    min-width: 0;
    overflow-wrap: anywhere;
}
.pd-tt-poll .pd-tt-choice > input:is([type="checkbox"], [type="radio"]) {
    -webkit-appearance: none;
    appearance: none;
    display: grid;
    place-items: center;
    order: 1;
    flex: 0 0 auto;
    width: var(--pd-icon-lg);
    height: var(--pd-icon-lg);
    margin: 0;
    padding: 0;
    color: var(--pd-color-on-primary);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-radius-xs);
    box-shadow: none;
    outline: none;
    cursor: inherit;
}
.pd-tt-poll .pd-tt-choice > input[type="radio"] {
    border-radius: var(--pd-radius-round);
}
.pd-tt-poll .pd-tt-choice > input::after {
    content: "";
    width: calc(var(--pd-space-1) / 2);
    height: var(--pd-space-1);
    border: solid currentColor;
    border-width: 0 var(--pd-tab-indicator) var(--pd-tab-indicator) 0;
    transform: rotate(45deg);
    opacity: 0;
}
.pd-tt-poll .pd-tt-choice > input[type="radio"]::after {
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    background: currentColor;
    border: 0;
    border-radius: var(--pd-radius-round);
    transform: none;
}
.pd-tt-poll .pd-tt-choice > input:checked {
    background: var(--pd-color-primary);
    border-color: var(--pd-color-primary);
}
.pd-tt-poll .pd-tt-choice > input:checked::after {
    opacity: 1;
}
.pd-tt-poll .pd-tt-choice:has(input:checked) {
    background: var(--pd-color-primary-soft);
    border-color: var(--pd-color-primary);
}
.pd-tt-poll .pd-tt-choice:has(input:checked) .pd-poll-option-label {
    color: var(--pd-color-primary);
}
@media (hover: hover) {
    .pd-tt-poll .pd-tt-choice:hover:not(:has(input:disabled, input:checked)) {
        background: var(--pd-color-surface-soft);
        border-color: var(--pd-color-border-strong);
    }
}
.pd-tt-poll .pd-tt-choice:has(input:focus-visible) {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-space-1) / 2);
}
.pd-tt-poll .pd-tt-choice:has(input:disabled:not(:checked)) {
    cursor: not-allowed;
}
.pd-tt-poll .pd-tt-choice:has(input:disabled:not(:checked)) .pd-poll-option-label {
    color: var(--pd-color-text-secondary);
}
.pd-tt-poll form[aria-busy="true"] .pd-tt-choice {
    cursor: wait;
}
.pd-poll-footer {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-3);
    margin-top: var(--pd-space-4);
    padding-top: var(--pd-space-3);
    border-top: 1px solid var(--pd-color-divider);
}
.pd-poll-selection {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-poll-selection [data-poll-selection] {
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-medium);
    font-variant-numeric: tabular-nums;
}
.pd-poll-hint {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-tt-poll .pd-poll-submit {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: var(--pd-btn-h-lg);
    margin: 0;
    padding: var(--pd-space-1) var(--pd-space-4);
    color: var(--pd-color-on-primary);
    font-family: var(--pd-font-body);
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    line-height: var(--pd-lh-snug);
    background: var(--pd-color-primary);
    border: 1px solid var(--pd-color-primary);
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
.pd-tt-poll .pd-poll-submit:hover:not(:disabled) {
    background: var(--pd-color-primary-hover);
    border-color: var(--pd-color-primary-hover);
}
.pd-tt-poll .pd-poll-submit:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-space-1) / 2);
}
.pd-tt-poll .pd-poll-submit:disabled {
    color: var(--pd-color-text-tertiary);
    background: var(--pd-color-surface-soft);
    border-color: var(--pd-color-border);
    cursor: not-allowed;
    box-shadow: none;
}
.pd-poll-meta {
    display: flex;
    flex-wrap: wrap;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-3);
    margin-top: var(--pd-space-3);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-tt-poll .pd-tt-bars {
    display: grid;
    gap: var(--pd-space-3);
    margin: 0;
    padding: 0;
    list-style: none;
}
.pd-tt-poll .pd-tt-bar {
    margin: 0;
}
.pd-tt-poll .pd-tt-bar-line {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--pd-space-2);
    margin-bottom: var(--pd-space-1);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
.pd-poll-result-label {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--pd-space-1);
    min-width: 0;
    overflow-wrap: anywhere;
}
.pd-poll-result-label > span:first-child {
    min-width: 0;
    overflow-wrap: anywhere;
}
.pd-poll-mine {
    flex: 0 0 auto;
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-xs);
    white-space: nowrap;
}
.pd-tt-poll .pd-tt-bar-num {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-2);
    flex: 0 0 auto;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.pd-poll-percent {
    min-width: calc(var(--pd-space-5) + var(--pd-space-1));
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    text-align: right;
}
.pd-tt-poll .pd-tt-bar-track {
    height: var(--pd-space-1);
    overflow: hidden;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
}
.pd-tt-poll .pd-tt-bar-fill {
    height: 100%;
    background: var(--pd-color-primary-muted);
    border-radius: var(--pd-radius-pill);
}
.pd-tt-poll .pd-tt-bar.is-mine .pd-tt-bar-fill {
    background: var(--pd-color-primary);
}
@media (max-width: 640px) {
    .pd-tt-poll {
        padding: var(--pd-space-3);
    }
    .pd-poll-head {
        gap: var(--pd-space-1);
        margin-bottom: var(--pd-space-3);
    }
    .pd-tt-poll .pd-poll-options {
        grid-template-columns: minmax(0, 1fr);
        gap: var(--pd-space-1);
    }
    .pd-tt-poll .pd-poll-submit {
        width: 100%;
    }
    .pd-tt-poll .pd-tt-bar-num {
        gap: var(--pd-space-1);
    }
}
@media (prefers-reduced-motion: reduce) {
    .pd-tt-poll .pd-tt-choice {
        transition: none;
    }
}
.pd-tt-claims {
    margin: var(--pd-space-2) 0 0;
    padding: 0;
    list-style: none;
    border-top: 1px solid var(--pd-color-divider);
}
.pd-tt-claims li {
    display: flex;
    justify-content: space-between;
    gap: var(--pd-space-2);
    padding: var(--pd-space-1) 0;
    font-size: var(--pd-fs-sm);
    border-bottom: 1px solid var(--pd-color-divider);
}
.pd-tt-claims span {
    color: var(--pd-color-text-secondary);
}
.pd-tt-claims em {
    font-style: normal;
    color: var(--pd-color-featured);
}
.pd-tt-best {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-success);
}
.pd-tt .btn-light {
    margin-left: 0;
}

/* 移动帖子弹窗（assets/thread-move.js，沿用 .pd-confirm-* 的外壳） */
.pd-confirm-icon-info {
    color: var(--pd-color-primary);
    border-color: var(--pd-color-primary-soft);
}
.pd-confirm-field {
    display: block;
    margin: var(--pd-space-2) 0 0 calc(var(--pd-space-5) + var(--pd-space-2) + var(--pd-space-1));
}
.pd-confirm-field select {
    width: 100%;
}

/* 移动帖子弹窗改版：遮罩不模糊（和搜索、签到弹窗一致）；说明、下拉、提示都通栏对齐，不再缩进到图标下面；
   下拉框自绘箭头，离右边框留出一段距离；聚焦只换边框色，不加光晕。 */
#pd-move-overlay {
    background: rgba(34, 34, 34, .42);
    backdrop-filter: none;
}
#pd-move-overlay .pd-confirm-box {
    width: 420px;
    padding: var(--pd-space-4);
}
#pd-move-overlay .pd-confirm-head {
    align-items: center;
    margin-bottom: var(--pd-space-2);
}
#pd-move-overlay .pd-confirm-title {
    margin: 0;
}
#pd-move-overlay .pd-confirm-message {
    margin-left: 0;
}
#pd-move-overlay .pd-confirm-field {
    margin: var(--pd-space-2) 0 0;
}
#pd-move-overlay .pd-confirm-field select {
    -webkit-appearance: none;
    appearance: none;
    height: var(--pd-btn-h-lg);
    padding: 0 calc(var(--pd-space-5) + var(--pd-space-1)) 0 var(--pd-space-2);
    border: 1px solid var(--pd-color-border);
    color: var(--pd-color-text);
    background: var(--pd-color-surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none' stroke='%239ca3af' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E") no-repeat right var(--pd-space-3) center / 12px 8px;
    cursor: pointer;
}
#pd-move-overlay .pd-confirm-field select:hover {
    border-color: var(--pd-color-border-strong);
}
#pd-move-overlay .pd-confirm-field select:focus,
#pd-move-overlay .pd-confirm-field select:focus-visible {
    outline: 0;
    box-shadow: none;
    border-color: var(--pd-color-primary);
}
#pd-move-overlay .pd-confirm-actions {
    margin-top: var(--pd-space-4);
}
.pd-confirm-box .pd-confirm-hint {
    margin-top: var(--pd-space-1);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}

/* 「处置」弹窗（assets/admin-tools.js 的 openStaffDialog → api/staff.php）：外壳同移动帖子弹窗；一行一个动作，标签在左 */
#pd-staff-overlay {
    background: rgba(34, 34, 34, .42);
    backdrop-filter: none;
}
#pd-staff-overlay .pd-confirm-box {
    width: 480px;
    padding: var(--pd-space-4);
}
#pd-staff-overlay .pd-confirm-head {
    align-items: center;
    margin-bottom: var(--pd-space-2);
}
#pd-staff-overlay .pd-confirm-title {
    margin: 0;
}
#pd-staff-overlay .pd-confirm-message,
#pd-staff-overlay .pd-confirm-hint {
    margin-left: 0;
}
.pd-staff-field {
    display: grid;
    gap: var(--pd-space-1);
    margin: var(--pd-space-3) 0 0;
}
.pd-staff-field textarea {
    padding: var(--pd-space-1) var(--pd-space-2);
    font-size: var(--pd-fs-sm);
}
.pd-staff-actions {
    display: grid;
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-3);
}
.pd-staff-row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
}
.pd-staff-label {
    min-width: var(--pd-space-5);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
.pd-staff-row .pd-staff-label {
    flex: 0 0 calc(var(--pd-space-5) + var(--pd-space-3));
}
.pd-staff-row select {
    width: auto;
    height: var(--pd-btn-h);
    padding: 0 var(--pd-space-2);
    font-size: var(--pd-fs-sm);
}
.pd-staff-ip {
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xs);
}
#pd-staff-overlay .pd-staff-error {
    margin-top: var(--pd-space-2);
    color: var(--pd-color-error);
}
#pd-staff-overlay .pd-staff-error:empty {
    display: none;
}
#pd-staff-overlay .pd-confirm-actions {
    margin-top: var(--pd-space-4);
}

/* ===== 回复区：顶栏和全部楼层合成一张卡片（pages/thread.php 的 section#replies.card.replies）=====
   ├ .pd-replies-head      标题栏：左参与文案 + 盖否，右正倒序 / 楼层输入 / 楼梯按钮
   ├ .pd-replies-filter    「只看 Ta」时的筛选条（可选）；.pd-replies-empty 没有回复时的一行空状态（可选）
   ├ .reply × N            每层楼是卡片里的一行：左列头像，右边正文；楼与楼之间一条整宽分隔线
   └ .pd-reply-pagination  分页，卡片的底栏
   颜色令牌在 :root 里已经按浅色值算死了，深色要在 body.theme-pd-dark 上重新引用一遍（和代码块令牌同一个做法）。 */
:root {
    --pd-replies-pad-x: var(--pd-space-4);                              /* 24px 卡片左右内边距 */
    --pd-replies-pad-y: var(--pd-space-3);                              /* 16px 每层楼上下内边距 */
    --pd-replies-avatar: var(--pd-space-5);                             /* 32px 左列头像 */
    --pd-replies-ctl-h: var(--pd-btn-h-sm);                             /* 32px 标题栏里控件统一高度 */
    --pd-replies-seg-pad: calc(var(--pd-space-1) / 2);                  /* 4px 排序分段的轨道内边距 */
    --pd-replies-seg-h: calc(var(--pd-replies-ctl-h) - var(--pd-replies-seg-pad) * 2);
    --pd-replies-jump-w: calc(var(--pd-space-5) + var(--pd-space-3));   /* 48px 楼层输入框，放得下「1-9999」 */
    --pd-replies-inner-radius: calc(var(--pd-card-radius-thread) - 1px);       /* 标题栏底色贴着卡片 1px 边框内侧 */
    --pd-replies-sub-bg: var(--pd-color-surface-subtle);
    --pd-replies-sort-fg: var(--pd-gray-600);   /* 未选中的排序项：轨道 gray-100 底上 gray-500 只有 4.4:1 */
}
body.theme-pd-dark {
    --pd-replies-sub-bg: var(--pd-color-surface-soft);
    --pd-replies-sort-fg: var(--pd-color-text-secondary);
}

/* ---------- 卡片：边框不带阴影；帖子页上下三张卡片（主楼、回复、发表回复）统一只要边框 ---------- */
body.theme-pd.page-thread main.wrap > #reply-form {
    box-shadow: none;
}
/* 发表回复：外层不再画卡片边框，只保留编辑器自己的边框；下面是评论按钮和验证 */
body.theme-pd.page-thread main.wrap > #reply-form:not(.pd-reply-locked-card):not(.pd-reply-guest) {
    padding: 0;
    background: transparent;
    border: 0;
}
body.theme-pd .replies {
    margin-top: var(--pd-space-3);
    padding: 0;
    overflow: visible;   /* 楼层的「···」菜单、头像名片要能伸出卡片 */
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    box-shadow: none;
}

/* ---------- 标题栏 ---------- */
body.theme-pd .replies > .pd-replies-head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1) var(--pd-space-3);
    min-height: calc(var(--pd-replies-ctl-h) + var(--pd-space-2) * 2);
    margin: 0;
    padding: var(--pd-space-2) var(--pd-replies-pad-x);
    background: var(--pd-color-surface);
    border-bottom: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-replies-inner-radius) var(--pd-replies-inner-radius) 0 0;
}
/* 管理员把最后一层楼也删掉以后（main.js 直接移除节点），卡片里只剩标题栏 */
body.theme-pd .replies > .pd-replies-head:last-child {
    border-bottom: 0;
    border-radius: var(--pd-replies-inner-radius);
}
body.theme-pd .replies > .pd-replies-filter:last-child {
    border-bottom: 0;
    border-radius: 0 0 var(--pd-replies-inner-radius) var(--pd-replies-inner-radius);
}
body.theme-pd .replies > :is(.pd-replies-head, .pd-replies-filter) + .pd-reply-pagination {
    border-top: 0;
}
/* 左侧保留原参与文案和「盖否?」；右侧控件优先同行，长文案自然换行。 */
body.theme-pd .pd-replies-title {
    display: flex;
    flex: 1 1 0;
    align-items: center;
    gap: var(--pd-space-1);
    min-width: 0;
}
body.theme-pd .pd-replies-title h2 {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    min-width: 0;
    margin: 0;
    padding: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
    line-height: var(--pd-lh-normal);
    white-space: normal;
}
body.theme-pd .pd-replies-title h2 i {
    flex: none;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-md);
}
body.theme-pd .pd-replies-summary {
    min-width: 0;
    overflow-wrap: anywhere;
}

/* 右侧工具：排序分段 + 电梯直达 */
body.theme-pd .pd-replies-tools {
    display: flex;
    flex: none;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-replies-sort {
    display: inline-flex;
    flex: none;
    gap: var(--pd-replies-seg-pad);
    padding: var(--pd-replies-seg-pad);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-tab-group-radius);
}
body.theme-pd .pd-replies-sort > a,
body.theme-pd .pd-replies-sort > span {
    display: inline-flex;
    align-items: center;
    height: var(--pd-replies-seg-h);
    padding: 0 var(--pd-space-2);
    color: var(--pd-replies-sort-fg);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-tab-weight);
    line-height: 1;
    white-space: nowrap;
    text-decoration: none;
    border: 1px solid transparent;
    border-radius: var(--pd-tab-radius);
}
body.theme-pd .pd-replies-sort > a:hover {
    color: var(--pd-color-text);
}
body.theme-pd .pd-replies-sort > .is-active {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border);
    cursor: default;
}

/* 楼层输入框后接楼梯按钮，点一下直达；label 留给读屏。 */
body.theme-pd .pd-replies-jump {
    display: inline-flex;
    flex: none;
    align-items: stretch;
    height: var(--pd-replies-ctl-h);
    margin: 0;
    overflow: hidden;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-input-radius);
}
body.theme-pd .pd-replies-jump:hover {
    border-color: var(--pd-color-border-strong);
}
body.theme-pd .pd-replies-jump:focus-within {
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-replies-jump label {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: 0;
    padding: 0;
    overflow: hidden;
    white-space: nowrap;
    clip-path: inset(50%);
    border: 0;
}
body.theme-pd .pd-replies-jump input,
body.theme-pd .pd-replies-jump input:focus {
    width: var(--pd-replies-jump-w);
    height: auto;
    min-height: 0;
    margin: 0;
    padding: 0;   /* 内容区就是整 48px，「1-9999」的占位才放得下 */
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-variant-numeric: tabular-nums;
    text-align: center;
    background: transparent;
    border: 0;
    border-radius: 0;
    outline: 0;
    box-shadow: none;
    -moz-appearance: textfield;
    appearance: textfield;
}
body.theme-pd .pd-replies-jump input::placeholder {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-replies-jump input::-webkit-outer-spin-button,
body.theme-pd .pd-replies-jump input::-webkit-inner-spin-button {
    margin: 0;
    -webkit-appearance: none;
}
body.theme-pd .pd-replies-jump button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-replies-ctl-h);
    height: auto;
    min-height: 0;
    margin: 0;
    padding: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-icon-sm);
    background: transparent;
    border: 0;
    border-left: 1px solid var(--pd-color-divider);
    border-radius: 0;
    cursor: pointer;
}
body.theme-pd .pd-replies-jump button:hover {
    color: var(--pd-color-primary);
    background: var(--pd-color-surface-soft);
}

/* 「盖否?」接在原文案后面，用轻量文字入口。 */
body.theme-pd .pd-replies-cta {
    display: inline-flex;
    flex: none;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-height: var(--pd-replies-ctl-h);
    color: var(--pd-color-link);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
    line-height: var(--pd-lh-normal);
    white-space: nowrap;
    text-decoration: none;
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-replies-cta:hover {
    color: var(--pd-color-link-hover);
    text-decoration: underline;
}
body.theme-pd .pd-replies-cta i {
    font-size: var(--pd-icon-sm);
}

/* 键盘焦点：排序、跳楼按钮、盖楼、「查看全部回复」统一一圈主色描边。
   电梯直达整组是 overflow: hidden，箭头按钮的描边往里画，不然会被裁掉 */
body.theme-pd .pd-replies-sort > a:focus-visible,
body.theme-pd .pd-replies-cta:focus-visible,
body.theme-pd .pd-replies-filter a:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-replies-jump button:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-tab-indicator) * -1);
}

/* ---------- 「只看 Ta」筛选条：紧贴标题栏，浅灰底 + 主色图标（浅蓝底留给「定位到某一楼」） ---------- */
body.theme-pd .replies > .pd-replies-filter {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-3);
    margin: 0;
    padding: var(--pd-space-1) var(--pd-replies-pad-x);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    background: var(--pd-color-surface-subtle);
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-replies-filter > span {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
}
body.theme-pd .pd-replies-filter > span > i {
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-sm);
}
body.theme-pd .pd-replies-filter strong {
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-replies-filter a {
    display: inline-flex;
    flex: none;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-link);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    text-decoration: none;
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-replies-filter a:hover {
    color: var(--pd-color-link-hover);
    text-decoration: underline;
}

/* ---------- 空状态：「只看 Ta」没有回复、整帖还没人回复，都只占一行；行动按钮在标题栏右边 ---------- */
body.theme-pd .replies > .pd-replies-filter-empty,
body.theme-pd .replies > .pd-replies-empty {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-1);
    margin: 0;
    padding: var(--pd-space-4) var(--pd-replies-pad-x);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    text-align: center;
}
body.theme-pd .pd-replies-empty i {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-md);
}

/* ---------- 每层楼：卡片里的一行 ---------- */
body.theme-pd .replies > .reply {
    display: grid;
    grid-template-columns: var(--pd-replies-avatar) minmax(0, 1fr);
    align-items: start;
    gap: var(--pd-space-3);
    margin: 0;
    padding: var(--pd-replies-pad-y) var(--pd-replies-pad-x);
    background: transparent;
    border: 0;
    transition: background .3s ease;
}
body.theme-pd .replies > .reply + .reply {
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .replies > .reply:last-child {
    border-radius: 0 0 var(--pd-replies-inner-radius) var(--pd-replies-inner-radius);
}
body.theme-pd .replies > .reply .pd-reply-avatar {
    width: var(--pd-replies-avatar);
    height: var(--pd-replies-avatar);
    padding: 0;
}
/* 定位到某一楼（#comment-N、#post-N、电梯直达、刚发的回帖）：浅蓝底 + 左边一条主色竖线只闪一下，约 1 秒后退回默认样式，
   不常亮（站长要求）。:target 只靠动画上色，动画放完就回到默认；is-target 由 pages.js 加上、1.8 秒后去掉 */
@keyframes pd-floor-flash {
    0%, 40% {
        background-color: var(--pd-color-primary-soft);
        box-shadow: inset var(--pd-tab-indicator) 0 0 var(--pd-color-primary);
    }
    100% {
        background-color: transparent;
        box-shadow: inset 0 0 0 transparent;
    }
}
/* 签名虚线上的「SIGNATURE」、顶 / 踩、「AI 生成」声明自带卡片底色遮住虚线，跟着楼层一起闪 */
@keyframes pd-floor-flash-label {
    0%, 40% { background-color: var(--pd-color-primary-soft); }
    100% { background-color: var(--pd-color-surface); }
}
body.theme-pd .replies > .reply:target,
body.theme-pd .replies > .reply.is-target {
    animation: pd-floor-flash 1.4s ease-out;
}
body.theme-pd .replies > .reply:is(:target, .is-target) .pd-signature > span,
body.theme-pd .replies > .reply:is(:target, .is-target) .pd-signature .pd-post-votes,
body.theme-pd .replies > .reply:is(:target, .is-target) .pd-signature > .pd-bot-sig-note {
    animation: pd-floor-flash-label 1.4s ease-out;
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .replies > .reply:is(:target, .is-target),
    body.theme-pd .replies > .reply:is(:target, .is-target) .pd-signature > span,
    body.theme-pd .replies > .reply:is(:target, .is-target) .pd-signature .pd-post-votes,
    body.theme-pd .replies > .reply:is(:target, .is-target) .pd-signature > .pd-bot-sig-note {
        animation: none;
    }
}

/* ---------- 分页：卡片底栏 ---------- */
body.theme-pd .replies > .pd-reply-pagination {
    margin: 0;
    padding: var(--pd-space-3) var(--pd-replies-pad-x);
    border-top: 1px solid var(--pd-color-divider);
}

/* ---------- 手机：完整文案在上，排序与跳楼控件保持同行；头像左列收起 ---------- */
@media (max-width: 640px) {
    :root {
        --pd-replies-pad-x: var(--pd-card-padding-sm);
        --pd-replies-pad-y: var(--pd-card-padding-sm);
        --pd-replies-ctl-h: var(--pd-tab-h-touch);   /* 40px：排序分段 32px，触控都不小于 32px */
    }
    body.theme-pd .replies > .pd-replies-head {
        gap: var(--pd-space-1);
    }
    body.theme-pd .pd-replies-title {
        display: block;
        flex-basis: 100%;
    }
    body.theme-pd .pd-replies-title h2 {
        display: inline;
    }
    body.theme-pd .pd-replies-title h2 i {
        margin-inline-end: var(--pd-space-1);
    }
    body.theme-pd .pd-replies-cta {
        min-height: var(--pd-btn-h-sm);
        margin-inline-start: var(--pd-space-1);
        vertical-align: middle;
    }
    body.theme-pd .pd-replies-sort > a,
    body.theme-pd .pd-replies-sort > span {
        padding-inline: var(--pd-space-1);
    }
    body.theme-pd .pd-replies-tools {
        flex-wrap: nowrap;
        margin-left: auto;
    }
    body.theme-pd .replies > .reply {
        grid-template-columns: minmax(0, 1fr);
        gap: var(--pd-space-1);
    }
    body.theme-pd .replies > .reply > .pd-avatar-wrap {
        display: none;
    }
    body.theme-pd .pd-replies-filter a {
        min-height: var(--pd-btn-h-sm);
    }
}
/* ===== 回复楼层里的元信息：昵称 + 等级徽章 + 普通文字，楼层号靠右 ===== */
body.theme-pd .pd-reply-header {
    margin: 0 0 var(--pd-space-2);
}
body.theme-pd .reply .post-meta {
    gap: var(--pd-space-1);
}
/* 昵称那一行和左侧头像一样高、垂直居中（昵称、徽章、时间、右侧楼层号和头像水平对齐），正文再往下留一段空隙；手机上头像隐藏，不撑高 */
@media (min-width: 641px) {
    body.theme-pd .replies > .reply .pd-reply-header {
        min-height: var(--pd-replies-avatar);
        margin-bottom: var(--pd-space-3);
    }
}
body.theme-pd .pd-reply-meta-item {
    display: inline-flex;
    align-items: center;
    padding: 0;
    color: var(--pd-color-text-secondary);
    font-family: inherit;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-normal);
    white-space: nowrap;
    text-decoration: none;
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
}
body.theme-pd .reply a.pd-reply-meta-item:hover,
body.theme-pd .pd-reply-link:hover {
    color: var(--pd-color-primary);
}
body.theme-pd .reply a.pd-reply-meta-item:focus-visible,
body.theme-pd .pd-reply-link:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-space-1) / 4);
}
body.theme-pd .reply .pd-only-author {
    margin: 0;
    min-height: 0;
    font-weight: var(--pd-fw-regular);
}

body.theme-pd .pd-mention {
    color: var(--pd-color-primary);
}

body.theme-pd .pd-reply-meta-item .pd-time {
    border-bottom: 0;
    cursor: default;
}

/* 回复环境元信息：管理员的地区与浏览器 / 系统并排展示。 */
body.theme-pd .pd-env[hidden],
body.theme-pd .pd-env-region[hidden] {
    display: none;
}
body.theme-pd .pd-env-region {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    height: var(--pd-env-icon-size);
}
body.theme-pd .pd-env-region .pd-country-flag {
    display: block;
    flex: none;
    width: calc(var(--pd-env-icon-size) * 4 / 3);
    height: var(--pd-env-icon-size);
    aspect-ratio: 4 / 3;
    border-radius: calc(var(--pd-radius-xs) / 2);
}
/* 地区胶囊：长方形国旗 + 国家（国外）或省份 + 城市（国内）；系统、浏览器图标后面带版本号 */
body.theme-pd .pd-env-region .pd-region-text,
body.theme-pd .pd-env-version {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-2xs);
    font-variant-numeric: tabular-nums;
    line-height: 1;
}
body.theme-pd .pd-env-region [data-region-content],
body.theme-pd .pd-env-region {
    gap: calc(var(--pd-space-1) / 2);
}

/* 回复里的浏览器 / 系统图标（core/client-env.php） */
body.theme-pd .pd-env {
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-env-device {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    flex: none;
    min-width: var(--pd-env-icon-size);
    height: var(--pd-env-icon-size);
}
body.theme-pd .pd-env-icon {
    display: block;
    flex: none;
    width: var(--pd-env-icon-size);
    height: var(--pd-env-icon-size);
    object-fit: contain;
}
/* 苹果的叶片占了上方空间：按主体补偿大小和中心，不拉伸 SVG。 */
body.theme-pd .pd-env-icon--apple {
    transform: translateY(var(--pd-env-apple-offset)) scale(var(--pd-env-apple-scale));
}
body.theme-pd.theme-pd-dark .pd-env-icon--apple {
    filter: invert(1);
}

/* 版块标签里的图标（和顶部菜单同一套） */
body.theme-pd .pd-forum-tag i {
    margin-right: calc(var(--pd-space-1) / 2);
    font-size: var(--pd-icon-xs);
}

/* 回复列表头像：和帖子列表一样的超级椭圆，不用圆形 */
:root {
    --pd-squircle-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 0c9.601 0 12 2.399 12 12 0 9.601-2.399 12-12 12-9.601 0-12-2.399-12-12C0 2.399 2.399 0 12 0z'/%3E%3C/svg%3E");
}
body.theme-pd .reply .pd-reply-avatar {
    border-radius: 0;
    -webkit-mask-image: var(--pd-squircle-mask);
    mask-image: var(--pd-squircle-mask);
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}

/* 带图标的下拉框：原生控件作为回退，pages.js 增强后菜单内也显示图标。 */
.pd-select-icon {
    position: relative;
}
.pd-select-icon > i {
    position: absolute;
    top: 50%;
    left: var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-icon-md);
    transform: translateY(-50%);
    pointer-events: none;
}
.pd-select-icon > select {
    padding-left: calc(var(--pd-space-2) + var(--pd-icon-md) + var(--pd-space-1));
}
.pd-icon-select-ready > i {
    display: none;
}
.pd-icon-select-ready > .pd-icon-select-native {
    position: absolute;
    inset: 0;
    opacity: 0;
    pointer-events: none;
}
.pd-icon-select-trigger {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    width: 100%;
    min-height: var(--pd-input-h);
    padding: 0 var(--pd-input-px);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-input-radius);
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    font: inherit;
    font-size: var(--pd-input-fs);
    font-weight: var(--pd-fw-regular);
    text-align: left;
    cursor: pointer;
}
.pd-icon-select-trigger > i,
.pd-icon-select-option > i {
    flex: 0 0 var(--pd-icon-md);
    width: var(--pd-icon-md);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-icon-md);
    text-align: center;
}
.pd-icon-select-label {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.pd-icon-select-trigger > .pd-icon-select-caret {
    margin-left: auto;
    font-size: var(--pd-icon-xs);
}
.pd-icon-select-trigger:hover {
    border-color: var(--pd-color-border-strong);
}
.pd-icon-select-trigger:focus-visible,
.pd-icon-select-trigger[aria-expanded="true"] {
    border-color: var(--pd-color-primary);
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary-soft);
    outline-offset: var(--pd-tab-indicator);
}
.pd-icon-select-trigger:disabled {
    opacity: .5;
    cursor: not-allowed;
}
.pd-icon-select-menu {
    position: absolute;
    z-index: var(--pd-z-popover);
    top: calc(100% + var(--pd-space-1) / 2);
    left: 0;
    right: 0;
    max-height: calc(100dvh - var(--pd-space-5));
    margin: 0;
    padding: calc(var(--pd-space-1) / 2);
    overflow-y: auto;
    overscroll-behavior: contain;
    scrollbar-width: thin;
    scrollbar-color: var(--pd-color-border-strong) transparent;
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-input-radius);
    background: var(--pd-color-surface);
    box-shadow: var(--pd-shadow-2);
}
.pd-icon-select-menu::-webkit-scrollbar {
    width: calc(var(--pd-space-1) / 2);
}
.pd-icon-select-menu::-webkit-scrollbar-track,
.pd-icon-select-menu::-webkit-scrollbar-corner {
    background: transparent;
}
.pd-icon-select-menu::-webkit-scrollbar-thumb {
    background: var(--pd-color-border-strong);
    border-radius: var(--pd-radius-pill);
}
.pd-icon-select-menu::-webkit-scrollbar-button {
    display: none;
}
.pd-icon-select-menu[hidden] {
    display: none;
}
.pd-icon-select-option {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    min-height: var(--pd-input-h);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    border-radius: var(--pd-input-radius);
    color: var(--pd-color-text);
    font-size: var(--pd-input-fs);
    font-weight: var(--pd-fw-regular);
    cursor: pointer;
}
.pd-icon-select-option[hidden] {
    display: none;
}
.pd-icon-select-option.is-active,
.pd-icon-select-option:hover {
    background: var(--pd-color-surface-soft);
}
.pd-icon-select-option.is-selected {
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
}
.pd-icon-select-option.is-selected > i {
    color: inherit;
}
.pd-icon-select-option > .pd-icon-select-check {
    margin-left: auto;
    visibility: hidden;
    font-size: var(--pd-icon-sm);
}
.pd-icon-select-option.is-selected > .pd-icon-select-check {
    visibility: visible;
}
.pd-icon-select-option[aria-disabled="true"] {
    opacity: .5;
    cursor: not-allowed;
}

/* ===== 名字按身份上色、头像在线绿点（core/user.php 的 pd_user_name_class / pd_online_dot_html）===== */
body.theme-pd :is(a, span, h1, strong).pd-name--system {
    color: var(--pd-color-role-system) !important;
}
body.theme-pd a.pd-name--official { color: var(--pd-color-role-official); }
body.theme-pd a.pd-name--admin { color: var(--pd-color-role-admin); }
body.theme-pd a.pd-name--moderator { color: var(--pd-color-role-moderator); }
body.theme-pd :is(a, span, h1, strong, b).pd-name--ai { color: var(--pd-color-role-ai) !important; }
/* 深色主题把作者名统一用 !important 设成了正文色（见「深色适配」），身份色要压过它 */
body.theme-pd-dark a.pd-name--official { color: var(--pd-color-role-official) !important; }
body.theme-pd-dark a.pd-name--admin { color: var(--pd-color-role-admin) !important; }
body.theme-pd-dark a.pd-name--moderator { color: var(--pd-color-role-moderator) !important; }
body.theme-pd-dark a.pd-name--ai { color: var(--pd-color-role-ai) !important; }
body.theme-pd a.pd-mention { text-decoration: none; }
body.theme-pd a.pd-mention:hover { text-decoration: underline; }

/* 头像外层：给右上角的在线绿点定位用，尺寸跟着里面的头像走 */
body.theme-pd .pd-avatar-wrap {
    position: relative;
    display: block;
    width: fit-content;
    height: fit-content;
    line-height: 0;
}
/* 圆心落在头像右上角附近：一半压在头像上、一半露在外面（头像是超级椭圆，角是圆的，所以只往外挪三分之一） */
body.theme-pd .pd-online-dot {
    position: absolute;
    top: calc(var(--pd-online-dot) / -3);
    right: calc(var(--pd-online-dot) / -3);
    box-sizing: border-box;
    width: var(--pd-online-dot);
    height: var(--pd-online-dot);
    background: var(--pd-color-online);
    border: var(--pd-online-ring) solid var(--pd-color-surface);
    border-radius: var(--pd-radius-round);
}
/* 主楼头像的圆角较大：在线点内收，避免悬在头像右上角外侧。 */
body.theme-pd .pd-thread-title-row > .pd-avatar-wrap > .pd-online-dot {
    top: var(--pd-online-ring);
    right: var(--pd-online-ring);
}

/* 管理员的用户列表（pages/members.php） */
body.theme-pd .pd-members-avatar {
    display: block;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    object-fit: cover;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-members-tabs {
    display: flex;
    gap: var(--pd-space-1);
    margin: var(--pd-space-2) 0;
}
body.theme-pd .pd-members-tabs a {
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-members-tabs a.is-current {
    color: var(--pd-color-primary);
    background: var(--pd-color-surface-soft);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-members-status.is-online {
    color: var(--pd-color-success);
}

/* 客服聊天页（pages/support.php、assets/support-chat.js） */
body.theme-pd .pd-support-head {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    margin-bottom: var(--pd-space-2);
}
body.theme-pd .pd-support-head h1,
body.theme-pd .pd-support-head p {
    margin: 0;
}
body.theme-pd .pd-support-avatar {
    flex: none;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    object-fit: cover;
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-support-log {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    max-height: 60vh;
    min-height: calc(var(--pd-space-5) * 4);
    padding: var(--pd-space-2) 0;
    overflow-y: auto;
}
body.theme-pd .pd-support-msg {
    max-width: 85%;
    padding: var(--pd-space-1) var(--pd-space-2);
    border-radius: var(--pd-radius-lg);
    white-space: pre-wrap;
    overflow-wrap: anywhere;
    line-height: 1.6;
}
body.theme-pd .pd-support-msg--bot {
    align-self: flex-start;
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-support-msg--user {
    align-self: flex-end;
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
}
/* 等待回答的三点动画：颜色用主题主色，尺寸固定一个字高，气泡随内容收紧 */
body.theme-pd .pd-support-msg.pd-support-loading {
    display: flex;
    align-items: center;
    padding-block: var(--pd-space-1);
    color: var(--pd-color-primary);
}
body.theme-pd .pd-support-loading svg {
    display: block;
    width: var(--pd-space-4);
    height: var(--pd-space-4);
}
/* 固定回复和 AI 回复后面的站内链接（找回密码、去注册……） */
body.theme-pd .pd-support-links {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-1);
}
body.theme-pd .pd-support-actions-row {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    align-self: flex-start;
}
body.theme-pd button.pd-support-link {
    border: 0;
    cursor: pointer;
}
body.theme-pd .pd-support-actions-row .pd-support-link {
    background: var(--pd-color-primary-soft);
}
body.theme-pd .pd-support-link {
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-primary);
    background: var(--pd-color-surface);
    border-radius: var(--pd-radius-pill);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    text-decoration: none;
}
body.theme-pd .pd-support-msg.is-error {
    color: var(--pd-color-error);
    background: var(--pd-color-error-soft);
}
body.theme-pd .pd-support-chips {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin: var(--pd-space-1) 0;
}
body.theme-pd .pd-support-chips[hidden] {
    display: none;
}
body.theme-pd .pd-support-chip {
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
    border: 0;
    border-radius: var(--pd-radius-pill);
    font-size: var(--pd-fs-xs);
    cursor: pointer;
}
body.theme-pd .pd-support-form {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-1);
}
body.theme-pd .pd-support-form textarea {
    box-sizing: border-box;
    display: block;
    width: 100%;
    min-height: calc(var(--pd-space-5) * 2);
    resize: vertical;
}
body.theme-pd .pd-support-actions {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
}
body.theme-pd .pd-support-send,
body.theme-pd .pd-support-reset {
    padding: var(--pd-space-1) var(--pd-space-4);
    border: 0;
    border-radius: var(--pd-btn-radius);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.5;
    cursor: pointer;
}
body.theme-pd .pd-support-send {
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
}
body.theme-pd .pd-support-reset {
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-support-send:disabled {
    opacity: .6;
    cursor: default;
}
body.theme-pd .pd-support-note {
    margin-top: var(--pd-space-2);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-act {
    display: inline-flex;
    align-items: baseline;
    gap: calc(var(--pd-space-1) / 2);
    padding: 0;
    color: var(--pd-color-text-tertiary);
    font: inherit;
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    text-decoration: none;
    background: none;
    border: 0;
    cursor: pointer;
}
body.theme-pd .pd-act strong {
    color: inherit;
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-act:hover {
    color: var(--pd-color-primary);
}
/* 顶、踩各自独立、投过就不能撤销：已投的上色并禁用 */
body.theme-pd .pd-act.active[data-vote-button="up"] {
    color: var(--pd-color-primary);
}
body.theme-pd .pd-act.active[data-vote-button="down"] {
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-act:disabled {
    cursor: default;
}

/* 顶 / 踩：右对齐的小按钮（图标 + 文字 + 计数）。顶点一下图标蹦起来，踩点一下图标往下沉再晃回来 */
/* 顶 / 踩放在 SIGNATURE 虚线的最右端，和标签同一水平线；没有签名的回复单独占一行靠右 */
body.theme-pd .pd-signature {
    position: relative;
}
body.theme-pd .pd-signature .pd-post-votes {
    position: absolute;
    top: calc(var(--pd-space-4) / -2);
    right: 0;
    padding-left: var(--pd-space-1);
    background: var(--pd-color-surface);
}
/* Fish 的专属签名：怎么叫它 + 三个统计 + AI 声明 */
body.theme-pd .pd-signature.pd-signature--bot {
    margin-top: var(--pd-space-4);
}
body.theme-pd .pd-bot-sig {
    display: grid;
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-3);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-relaxed);
}
body.theme-pd .pd-signature .pd-bot-sig p {
    margin: 0;
    color: var(--pd-color-text-secondary);
    line-height: var(--pd-lh-relaxed);
}
body.theme-pd .pd-bot-sig-how b {
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-bot-sig-stats {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-2);
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-bot-sig-stats li {
    display: inline-flex;
    align-items: baseline;
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 4) var(--pd-space-2);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-bot-sig-stats b {
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-semibold);
}
/* 「AI 生成」声明：放在 SIGNATURE 虚线的右端，位置和普通回复的顶 / 踩一样 */
body.theme-pd .pd-signature--bot > .pd-bot-sig-note {
    position: absolute;
    top: calc(var(--pd-space-4) / -2);
    right: 0;
    display: inline-flex;
    align-items: center;
    height: var(--pd-space-4);
    padding-left: var(--pd-space-1);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    background: var(--pd-color-surface);
}
@media (max-width: 640px) {
    body.theme-pd .pd-signature--bot > .pd-bot-sig-note {
        position: static;
        display: block;
        height: auto;
        padding: var(--pd-space-2) 0 0;
        line-height: var(--pd-lh-normal);
    }
}
body.theme-pd .pd-reply-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-1);
}
body.theme-pd .pd-reply-foot .pd-post-votes {
    margin-left: auto;
}
body.theme-pd .reply .pd-post-votes {
    flex: 0 0 auto;
    gap: calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-vote {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    height: var(--pd-space-4);
    color: var(--pd-color-text-secondary);
    font: inherit;
    font-size: var(--pd-fs-xs);
    text-decoration: none;
    background: var(--pd-color-surface-soft);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
    transition: color .15s ease, background .15s ease, border-color .15s ease;
}
body.theme-pd .pd-vote i {
    display: inline-block;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-sm);
    transition: color .15s ease;
}
body.theme-pd .pd-vote strong {
    color: inherit;
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-vote--up:hover,
body.theme-pd .pd-vote--up.active {
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-vote--up:hover i,
body.theme-pd .pd-vote--up.active i {
    color: var(--pd-color-primary);
}
body.theme-pd .pd-vote--down:hover,
body.theme-pd .pd-vote--down.active {
    color: var(--pd-color-error);
    background: var(--pd-color-error-soft);
    border-color: var(--pd-color-error);
}
body.theme-pd .pd-vote--down:hover i,
body.theme-pd .pd-vote--down.active i {
    color: var(--pd-color-error);
}
body.theme-pd .pd-vote.active i {
    font-weight: 900;   /* fa-regular 的图标已投后换成实心 */
}
body.theme-pd .pd-vote:disabled {
    cursor: default;
}
body.theme-pd .pd-vote--up.is-anim i {
    animation: pd-vote-up 520ms cubic-bezier(.3, 1.6, .5, 1);
}
body.theme-pd .pd-vote--down.is-anim i {
    transform-origin: 50% 20%;
    animation: pd-vote-down 640ms ease-in-out;
}
@keyframes pd-vote-up {
    0% { transform: translateY(0) rotate(0) scale(1); }
    35% { transform: translateY(-6px) rotate(-18deg) scale(1.35); }
    100% { transform: translateY(0) rotate(0) scale(1); }
}
@keyframes pd-vote-down {
    0% { transform: translateY(0) rotate(0); }
    30% { transform: translateY(5px) rotate(24deg) scale(1.2); }
    55% { transform: translateY(2px) rotate(-14deg); }
    78% { transform: translateY(3px) rotate(8deg); }
    100% { transform: translateY(0) rotate(0); }
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-vote--up.is-anim i,
    body.theme-pd .pd-vote--down.is-anim i { animation: none; }
}
/* 「回复」留在作者信息行，沿用时间 / 只看 Ta 的文字样式。 */
body.theme-pd .pd-reply-link {
    margin: 0;
    cursor: pointer;
}
body.theme-pd .pd-reply-head-end {
    display: inline-flex;
    flex-shrink: 0;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-reply-more {
    position: relative;
}
body.theme-pd .pd-reply-more > summary {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-sm);
    list-style: none;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
body.theme-pd .pd-reply-more > summary::-webkit-details-marker {
    display: none;
}
body.theme-pd .pd-reply-more > summary:hover,
body.theme-pd .pd-reply-more[open] > summary {
    color: var(--pd-color-text);
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-reply-menu {
    position: absolute;
    top: calc(100% + var(--pd-space-1) / 2);
    right: 0;
    z-index: 30;
    display: grid;
    /* 按最长的一项撑开：锚点（··· 按钮）只有一个图标宽，不写的话停在 min-width，「标记为已处理」这类长项会顶出右边 */
    width: max-content;
    min-width: 8em;
    padding: calc(var(--pd-space-1) / 2);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    box-shadow: var(--pd-shadow-2);
}
/* 菜单项：普通按钮和删除用的 .action-badge 统一成一行文字，去掉 action-badge 的方块、悬浮提示 */
body.theme-pd .pd-reply-menu .pd-reply-menu-item {
    position: static;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: var(--pd-space-1);
    width: 100%;
    min-width: 0;
    height: auto;
    min-height: 0;
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-text) !important;
    font: inherit;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);   /* 菜单挂在标题行里，不写会跟着标题变粗 */
    line-height: var(--pd-lh-normal);
    text-align: left;
    text-decoration: none;
    white-space: nowrap;
    background: none;
    border: 0;
    border-radius: var(--pd-radius-sm);
    cursor: pointer;
}
body.theme-pd .pd-reply-menu .pd-reply-menu-item:hover {
    color: var(--pd-color-text) !important;
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-reply-menu .pd-reply-menu-item.action-badge-danger,
body.theme-pd .pd-reply-menu .pd-reply-menu-item.action-badge-danger:hover {
    color: var(--pd-color-error) !important;
}
body.theme-pd .pd-reply-menu .pd-reply-menu-item i {
    width: var(--pd-icon-md);
    font-size: var(--pd-icon-sm);
    text-align: center;
}
body.theme-pd .pd-reply-menu .action-badge > span {
    position: static;
    width: auto;
    max-width: none;
    padding: 0;
    color: inherit;
    font-size: inherit;
    line-height: inherit;
    background: none;
    opacity: 1;
    transform: none;
    pointer-events: auto;
}
body.theme-pd .pd-ip-address {
    display: block;
    max-width: 100%;
    color: var(--pd-color-text-tertiary);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xs);
    overflow-wrap: anywhere;
}

/* 帖子行元信息整体再小一号（11px）；分类标签、图标、最新回复都跟着走 */
body.theme-pd .pd-thread-row .pd-thread-meta,
body.theme-pd .pd-thread-row .pd-thread-meta .pd-forum-tag,
body.theme-pd .pd-thread-row .pd-thread-meta .pd-last-reply {
    font-size: var(--pd-fs-3xs);
}
body.theme-pd .pd-thread-row .pd-thread-meta .pd-forum-tag i {
    font-size: inherit;
}
/* 用户名的装饰图标与时间图标同级，不参与昵称的身份着色。 */
body.theme-pd .pd-name-icon {
    margin-right: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-xs);
}

/* 普通用户的作者昵称和名片昵称统一用浅灰（--pd-color-name），悬浮时也不着色。
   管理员 / 官方 / AI / 版主 / 总版主 / 总管理员保留各自的身份色（a.pd-name--*，颜色令牌见 :root）。 */
body.theme-pd .pd-thread-title-meta a.pd-author-link:not([class*="pd-name--"]),
body.theme-pd .reply a.pd-reply-author:not([class*="pd-name--"]),
body.theme-pd .pd-ucard-name:not([class*="pd-name--"]),
body.theme-pd .pd-thread-title-meta a.pd-author-link:not([class*="pd-name--"]):hover,
body.theme-pd .reply a.pd-reply-author:not([class*="pd-name--"]):hover,
body.theme-pd .pd-ucard-name:not([class*="pd-name--"]):hover {
    color: var(--pd-color-name) !important;
}
/* 帖子行元信息默认灰色；系统通知保留金色，AI 昵称保留紫色。
   （!important 是为了压过 a.pd-name--* 的身份色，它们在深色模式下也带 !important） */
body.theme-pd .pd-thread-row .pd-thread-meta .pd-forum-tag,
body.theme-pd .pd-thread-row .pd-thread-meta .pd-forum-tag i,
body.theme-pd .pd-thread-row .pd-thread-meta a.pd-author-link:not(.pd-name--system):not(.pd-name--ai),
body.theme-pd .pd-thread-row .pd-thread-meta .pd-last-reply a:not(.pd-name--system):not(.pd-name--ai) {
    color: var(--pd-color-text-tertiary) !important;
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-thread-row .pd-thread-meta a.pd-author-link:not(.pd-name--system):not(.pd-name--ai):hover,
body.theme-pd .pd-thread-row .pd-thread-meta .pd-last-reply a:not(.pd-name--system):not(.pd-name--ai):hover,
body.theme-pd .pd-thread-row .pd-thread-meta a.pd-forum-tag:hover {
    color: var(--pd-color-text-secondary) !important;
}

/* ===== 首页标签行：前四个是排序，后四个是帖子模式，中间一条细竖线隔开 ===== */
body.theme-pd .pd-feed-tabs a {
    gap: calc(var(--pd-space-1) / 2);
    padding: 0 var(--pd-space-2);
}
/* 排序标签默认灰色，只有选中项的图标、文字和下划线使用对应颜色。 */
body.theme-pd .pd-feed-tabs a.active[data-feed-filter="reply"] { --pd-feed-type-color: var(--pd-feed-color-reply); }
body.theme-pd .pd-feed-tabs a.active[data-feed-filter="latest"] { --pd-feed-type-color: var(--pd-feed-color-latest); }
body.theme-pd .pd-feed-tabs a.active[data-feed-filter="hot"] { --pd-feed-type-color: var(--pd-feed-color-hot); }
body.theme-pd .pd-feed-tabs a.active[data-feed-filter="good"] { --pd-feed-type-color: var(--pd-feed-color-good); }
body.theme-pd .pd-feed-tabs a.active:is([data-feed-filter="reply"], [data-feed-filter="latest"], [data-feed-filter="hot"], [data-feed-filter="good"]) {
    color: var(--pd-feed-type-color);
}
/* 帖子类型沿用列表徽章的四色，选中线也跟随类型颜色。 */
body.theme-pd .pd-feed-tabs a[data-feed-filter="redpacket"] { --pd-feed-type-color: var(--pd-color-type-redpacket); }
body.theme-pd .pd-feed-tabs a[data-feed-filter="lottery"] { --pd-feed-type-color: var(--pd-color-type-lottery); }
body.theme-pd .pd-feed-tabs a[data-feed-filter="bounty"] { --pd-feed-type-color: var(--pd-color-type-bounty); }
body.theme-pd .pd-feed-tabs a[data-feed-filter="poll"] { --pd-feed-type-color: var(--pd-color-type-poll); }
body.theme-pd .pd-feed-tabs a i {
    color: var(--pd-feed-type-color, var(--pd-color-text-tertiary));
    font-size: var(--pd-icon-sm);
}
body.theme-pd .pd-feed-tabs a:hover i {
    color: var(--pd-feed-type-color, var(--pd-color-text-secondary));
}
body.theme-pd .pd-feed-tabs a.active i {
    color: var(--pd-feed-type-color, var(--pd-color-primary));
}
body.theme-pd .pd-feed-sort-icon {
    display: block;
    width: var(--pd-icon-sm);
    height: var(--pd-icon-sm);
    flex: none;
    filter: grayscale(1);
    opacity: .72;
    transition: filter .15s ease, opacity .15s ease;
}
body.theme-pd .pd-feed-tabs a:is(:hover, :focus-visible) .pd-feed-sort-icon { opacity: 1; }
body.theme-pd .pd-feed-tabs a.active .pd-feed-sort-icon { filter: none; opacity: 1; }
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-feed-sort-icon { transition: none; }
}
body.theme-pd .pd-feed-tabs-sep {
    flex: none;
    align-self: center;
    width: 1px;
    height: var(--pd-space-3);
    margin: 0 var(--pd-space-1);
    background: var(--pd-color-border);
}
/* 标签行放不下时（按标签行自己的宽度算，不看窗口宽度）：标签只留图标，文字留给读屏。选中项靠底部色线区分 */
body.theme-pd .pd-feed-head {
    container-type: inline-size;
}
@container (max-width: 800px) {
    body.theme-pd .pd-feed-tabs a {
        padding: 0 var(--pd-space-2);
    }
    body.theme-pd .pd-feed-tabs a i {
        font-size: var(--pd-icon-md);
    }
    body.theme-pd .pd-feed-sort-icon {
        width: var(--pd-icon-md);
        height: var(--pd-icon-md);
    }
    body.theme-pd .pd-feed-tabs a span {
        position: absolute;
        width: 1px;
        height: 1px;
        overflow: hidden;
        clip: rect(0 0 0 0);
    }
}

/* 图标模式的悬停提示：和操作徽章同款的黑色小气泡，显示在图标下方。
   .pd-feed-tabs 是 overflow-x:auto，会把向外伸出的气泡裁掉，所以标签行够宽（图标能全放下）时改成 overflow:visible；
   再窄（手机）就保持可滑动、不出提示，触屏本来也没有悬停 */
@media (hover: hover) {
    @container (min-width: 481px) and (max-width: 800px) {
        body.theme-pd .pd-feed-tabs {
            overflow: visible;
        }
        body.theme-pd .pd-feed-tabs a {
            position: relative;
        }
        body.theme-pd .pd-feed-tabs a::after {
            content: attr(aria-label);
            position: absolute;
            top: calc(100% + var(--pd-space-1) / 2);
            left: 50%;
            z-index: 20;
            padding: calc(var(--pd-space-1) * .75) var(--pd-space-1);
            color: var(--pd-color-on-primary);
            font-size: var(--pd-fs-xs);
            font-weight: var(--pd-fw-regular);
            line-height: 1;
            white-space: nowrap;
            pointer-events: none;
            background: var(--pd-color-tooltip-bg);
            border-radius: var(--pd-badge-radius);
            opacity: 0;
            transform: translate(-50%, calc(var(--pd-space-1) / -2));
            transition: opacity .14s ease, transform .14s ease;
        }
        body.theme-pd .pd-feed-tabs a:hover::after,
        body.theme-pd .pd-feed-tabs a:focus-visible::after {
            opacity: 1;
            transform: translate(-50%, 0);
        }
    }
}

/* 首页底部：加载更多按钮 / 分页导航 */
body.theme-pd .pd-feed-foot {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-4) 0 var(--pd-space-2);
}
body.theme-pd .pd-pager {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-pager-num,
body.theme-pd .pd-pager-step,
body.theme-pd .pd-pager-gap {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    padding: 0 calc(var(--pd-space-1) * .75);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    font-variant-numeric: tabular-nums;
    text-decoration: none;
    border-radius: var(--pd-btn-radius);
}
body.theme-pd a.pd-pager-num:hover,
body.theme-pd a.pd-pager-step:hover {
    color: var(--pd-color-text);
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-pager-num.is-current {
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-primary-soft);
}
body.theme-pd .pd-pager-step.is-disabled {
    color: var(--pd-color-text-tertiary);
    opacity: .5;
}
body.theme-pd .pd-pager-gap {
    min-width: 0;
    color: var(--pd-color-text-tertiary);
}

/* ===== 昵称悬浮名片、关注 / 私信按钮（core/follow.php、assets/user-card.js）===== */
/* 名片挂在 body 下，由脚本按触发元素的位置摆放（left / top）；手机上宽度不超出屏幕，两边各留一格 */
body.theme-pd .pd-ucard {
    position: absolute;
    z-index: var(--pd-z-popover);
    box-sizing: border-box;
    width: var(--pd-ucard-width);
    max-width: calc(100vw - var(--pd-space-3));
    max-height: calc(100dvh - var(--pd-space-3));
    overflow-y: auto;
    overscroll-behavior: contain;
    padding: var(--pd-card-padding);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-normal);
    text-align: left;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-2);
}
body.theme-pd .pd-ucard[hidden] {
    display: none;
}
body.theme-pd .pd-ucard-head {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
}
body.theme-pd .pd-ucard-avatar-link {
    flex: none;
}
body.theme-pd .pd-ucard-avatar {
    display: block;
    width: var(--pd-account-summary-avatar);
    height: var(--pd-account-summary-avatar);
    object-fit: cover;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-round);
    -webkit-mask-image: none;
    mask-image: none;
}
body.theme-pd .pd-ucard-ident {
    display: flex;
    flex: 1;
    flex-direction: column;
    align-items: flex-start;
    min-width: 0;
}
body.theme-pd .pd-ucard-namerow {
    display: flex;
    align-items: center;
    max-width: 100%;
    min-width: 0;
}
/* 名字默认正文色；管理员 / 版主 / 官方的身份色（a.pd-name--…）优先级更高，会盖过这里 */
body.theme-pd .pd-ucard-name {
    display: block;
    max-width: 100%;
    overflow: hidden;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
    text-overflow: ellipsis;
    text-decoration: none;
}
body.theme-pd a.pd-ucard-name:hover {
    text-decoration: underline;
}
body.theme-pd .pd-ucard-uid {
    margin-top: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-ucard-badges {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-start;
    gap: calc(var(--pd-space-1) / 2);
    margin-top: var(--pd-space-2);
}
/* 鱼种徽章自带的左外边距是给「跟在昵称后面」用的；名片里它是一行的第一个，间距交给 gap */
body.theme-pd .pd-ucard-badges .pd-group-badge {
    margin-left: 0;
}
/* 名片完整身份徽章与鱼种并排；昵称旁的紧凑身份图标使用 roles.css。 */
body.theme-pd .pd-ucard-role {
    display: inline-flex;
    align-items: center;
    flex: none;
    gap: calc(var(--pd-space-1) / 2);
    height: var(--pd-badge-h);
    padding: 0 var(--pd-badge-px);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-badge-fs);
    font-weight: var(--pd-badge-weight);
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
    background: color-mix(in srgb, currentColor 10%, transparent);
    border: 1px solid color-mix(in srgb, currentColor 25%, transparent);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-ucard-role > span { color: var(--pd-color-text); }
body.theme-pd .pd-ucard-role:focus-visible {
    outline: var(--pd-tab-indicator) solid currentColor;
    outline-offset: calc(var(--pd-space-1) / 4);
}
body.theme-pd .pd-ucard-times {
    display: grid;
    gap: calc(var(--pd-space-1) / 2);
    margin: var(--pd-space-2) 0 0;
    padding: 0;
    list-style: none;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-ucard-times li {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-ucard-times i {
    width: var(--pd-icon-xs);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-xs);
    text-align: center;
}
body.theme-pd .pd-ucard-online {
    color: var(--pd-color-success);
}
body.theme-pd .pd-ucard-online::before {
    content: "";
    display: inline-block;
    width: calc(var(--pd-online-dot) / 2);
    height: calc(var(--pd-online-dot) / 2);
    margin-right: calc(var(--pd-space-1) / 2);
    vertical-align: middle;
    background: var(--pd-color-online);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-ucard-honors {
    margin-top: var(--pd-space-3);
    padding-top: var(--pd-space-2);
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-ucard-honors-heading {
    display: flex;
    justify-content: center;
    gap: var(--pd-space-1);
    margin: 0 0 var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-2xs);
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-ucard-honors-heading span { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-ucard-medals {
    display: flex;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-ucard-medals li {
    flex: 1 1 0;
    min-width: 0;
    max-width: calc(100% / 3);
}
body.theme-pd .pd-ucard-medals a {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-2xs);
    line-height: var(--pd-lh-tight);
    text-decoration: none;
}
body.theme-pd .pd-ucard-medals a:hover { color: var(--pd-color-primary); }
body.theme-pd .pd-ucard-medals a:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: var(--pd-tab-indicator); border-radius: var(--pd-radius-sm); }
body.theme-pd .pd-ucard-medals img {
    display: block;
    width: var(--pd-side-avatar);
    height: var(--pd-side-avatar);
    object-fit: contain;
}
body.theme-pd .pd-ucard-medals span {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* 五项统计：数字在上、名称在下（dl 里 dt 必须在前，靠 column-reverse 倒过来显示） */
body.theme-pd .pd-ucard-stats {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    margin: var(--pd-space-3) 0 0;
    padding: var(--pd-space-2) 0;
    text-align: center;
    background: var(--pd-color-surface-subtle);
    border-radius: var(--pd-radius-sm);
}
body.theme-pd .pd-ucard-stats > div {
    display: flex;
    flex-direction: column-reverse;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
}
body.theme-pd .pd-ucard-stats dt {
    white-space: nowrap;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-ucard-stats dd {
    margin: 0;
    white-space: nowrap;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-ucard-banned {
    margin: var(--pd-space-2) 0 0;
    color: var(--pd-color-error);
}
body.theme-pd .pd-ucard-banned i {
    margin-right: calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-ucard-bot {
    margin: var(--pd-space-2) 0 0;
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-ucard-help {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    margin-top: var(--pd-space-1);
    font-weight: var(--pd-fw-medium);
}
body.theme-pd .pd-ucard-loading,
body.theme-pd .pd-ucard-error {
    margin: 0;
    padding: var(--pd-space-2) 0;
    color: var(--pd-color-text-secondary);
    text-align: center;
}
body.theme-pd .pd-ucard .pd-social-actions {
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-ucard .pd-social-btn {
    flex: 1 1 0;
    min-width: 0;
    padding: 0 calc(var(--pd-space-1) / 2);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
}

/* 回复昵称前的小头像：只在手机上出现（那时左边的大头像藏起来了） */
body.theme-pd .pd-reply-meta-avatar {
    display: none;
    flex: none;
    width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    object-fit: cover;
    background: var(--pd-color-surface-soft);
    border-radius: 0;
    -webkit-mask-image: var(--pd-squircle-mask);
    mask-image: var(--pd-squircle-mask);
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}
@media (max-width: 640px) {
    body.theme-pd .pd-reply-meta-avatar {
        display: block;
    }
    /* 小头像和昵称挨近些：post-meta 的间距是一格，这里收回半格 */
    body.theme-pd .pd-reply-meta-avatar + .pd-reply-author-name {
        margin-left: calc(var(--pd-space-1) / -2);
    }
}

/* 关注 / 私信按钮：主按钮实色品牌蓝，次按钮描边；名片和个人主页共用 */
body.theme-pd .pd-social-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-social-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    box-sizing: border-box;
    height: var(--pd-btn-h-sm);
    margin: 0;
    padding: 0 var(--pd-btn-px-sm);
    font: inherit;
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    line-height: 1;
    white-space: nowrap;
    text-decoration: none;
    border: 1px solid transparent;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
body.theme-pd .pd-social-btn i {
    font-size: var(--pd-icon-sm);
}
body.theme-pd .pd-social-btn.is-primary {
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-social-btn.is-primary:hover {
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary-hover);
    border-color: var(--pd-color-primary-hover);
}
body.theme-pd .pd-social-btn.is-outline {
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-color: var(--pd-color-border-strong);
}
body.theme-pd .pd-social-btn.is-outline:hover {
    color: var(--pd-color-primary);
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-social-btn:focus-visible {
    outline: none;
    box-shadow: var(--pd-focus-ring);
}
body.theme-pd .pd-social-btn[disabled],
body.theme-pd .pd-social-btn[disabled]:hover {
    color: var(--pd-color-text-tertiary);
    background: var(--pd-color-surface-soft);
    border-color: var(--pd-color-border);
    cursor: not-allowed;
}
body.theme-pd .pd-social-btn.is-busy {
    cursor: progress;
}
body.theme-pd .pd-social-note {
    margin: var(--pd-space-1) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}

/* 官方 AI 档案页右上角的按钮 */
body.theme-pd .pd-profile-actions .pd-social-actions {
    justify-content: flex-end;
}
body.theme-pd .pd-profile-actions .pd-social-note {
    text-align: right;
}
@media (max-width: 640px) {
    body.theme-pd .pd-profile-actions .pd-social-actions { justify-content: flex-start; }
    body.theme-pd .pd-profile-actions .pd-social-note { text-align: left; }
}

/* 私信页：对方不收我的私信时，输入框禁用、原因写在输入框里（占位文字）。灰底、浅字，不要看着和能输入时一样（深色主题的令牌值不同，同一条规则即可，
   但要压过 body.theme-pd-dark .pd-messages-compose textarea 的背景） */
body.theme-pd .pd-messages-compose textarea:disabled,
body.theme-pd-dark .pd-messages-compose textarea:disabled {
    color: var(--pd-color-text-tertiary);
    background: var(--pd-color-surface-soft);
    border-color: var(--pd-color-border);
    resize: none;
    cursor: not-allowed;
}

/* 私信转账 / 红包（core/bank-pay.php）：输入框旁的两个按钮、聊天里的卡片、金额与支付密码面板、拆红包。
   卡片待处理时整块是底色（转账琥珀、红包红），处理完变成白底描边，一眼分得清 */
body.theme-pd .pd-messages-tool {
    display: inline-grid;
    place-items: center;
    width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    padding: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-icon-md);
    background: transparent;
    border: 0;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
body.theme-pd .pd-messages-tool:hover { background: var(--pd-color-surface-soft); }
body.theme-pd .pd-messages-tool[data-pay-open="transfer"]:hover { color: var(--pd-color-pay-transfer); }
body.theme-pd .pd-messages-tool[data-pay-open="redpacket"]:hover { color: var(--pd-color-type-redpacket); }
body.theme-pd .pd-messages-tool[data-pay-block] { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-messages-tool:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: calc(var(--pd-tab-indicator) * -1); }

body.theme-pd .pd-msg-row.is-pay .pd-msg-bubble.pd-msg-bubble--pay { padding: 0; color: var(--pd-color-text); background: transparent; border: 0; box-shadow: none; }
body.theme-pd .pd-msg-row.is-pay .pd-msg-bubble--pay time { color: var(--pd-color-text-tertiary); opacity: 1; }
body.theme-pd .pd-msg-row.is-pay.is-mine .pd-msg-bubble--pay time { text-align: right; }
body.theme-pd .pd-pay-card {
    --pd-pay-fill: var(--pd-color-pay-transfer);
    width: var(--pd-pay-card-w);
    max-width: 100%;
    overflow: hidden;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-lg);
}
body.theme-pd .pd-pay-card--redpacket { --pd-pay-fill: var(--pd-color-type-redpacket); }
body.theme-pd .pd-pay-card-main { display: flex; align-items: center; gap: var(--pd-space-2); padding: var(--pd-space-2) var(--pd-space-3); color: var(--pd-color-on-primary); background: var(--pd-pay-fill); }
body.theme-pd .pd-pay-card-icon { display: grid; place-items: center; flex: 0 0 auto; width: var(--pd-btn-h-lg); height: var(--pd-btn-h-lg); font-size: var(--pd-icon-lg); background: var(--pd-color-pay-icon-bg); border-radius: var(--pd-radius-round); }
body.theme-pd .pd-pay-card-text { display: grid; gap: calc(var(--pd-space-1) / 4); min-width: 0; }
body.theme-pd .pd-pay-card-text strong { font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); overflow-wrap: anywhere; }
body.theme-pd .pd-pay-card-text small { font-size: var(--pd-fs-xs); line-height: var(--pd-lh-snug); }
body.theme-pd .pd-pay-card-text em { font-size: var(--pd-fs-xs); font-style: normal; line-height: var(--pd-lh-snug); overflow-wrap: anywhere; }
body.theme-pd .pd-pay-card:not(.is-pending) .pd-pay-card-main { color: var(--pd-color-text); background: var(--pd-color-surface); }
body.theme-pd .pd-pay-card:not(.is-pending) .pd-pay-card-icon { color: var(--pd-pay-fill); background: var(--pd-color-surface-soft); }
body.theme-pd .pd-pay-card:not(.is-pending) .pd-pay-card-text :is(small, em) { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-pay-card-foot { display: flex; align-items: center; justify-content: space-between; gap: var(--pd-space-1); min-height: var(--pd-btn-h-lg); padding: calc(var(--pd-space-1) / 2) var(--pd-space-3); color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-2xs); border-top: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-pay-card-actions { display: inline-flex; gap: calc(var(--pd-space-1) / 2); }
body.theme-pd .pd-pay-card-btn { height: var(--pd-btn-h-sm); padding: 0 var(--pd-btn-px-sm); color: var(--pd-color-text); font: inherit; font-size: var(--pd-fs-xs); font-weight: var(--pd-fw-semibold); background: var(--pd-color-surface-soft); border: 0; border-radius: var(--pd-btn-radius); cursor: pointer; }
body.theme-pd .pd-pay-card-btn.is-primary { color: var(--pd-color-on-primary); background: var(--pd-pay-fill); }
body.theme-pd .pd-pay-card-btn:hover { filter: brightness(.9); }
body.theme-pd .pd-pay-card-btn:disabled { cursor: progress; opacity: .6; }
body.theme-pd .pd-pay-card-btn:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: var(--pd-tab-indicator); }

.pd-pay-dialog {
    width: min(var(--pd-pay-dialog-w), calc(100vw - var(--pd-space-4)));
    max-height: calc(100dvh - var(--pd-space-5));
    margin: auto;
    padding: 0;
    color: var(--pd-color-text);
    font-family: var(--pd-font-body);
    font-size: var(--pd-fs-sm);
    background: var(--pd-color-surface);
    border: 0;
    border-radius: var(--pd-modal-radius);
    box-shadow: var(--pd-shadow-2);
}
.pd-pay-dialog::backdrop { background: rgba(15, 17, 22, .55); }
.pd-pay-dialog[aria-busy="true"] .pd-pay-pin { opacity: .6; }
.pd-pay-sheet { display: grid; gap: var(--pd-space-3); padding: var(--pd-space-4); }
.pd-pay-sheet[hidden], .pd-pay-step[hidden], .pd-pay-envelope[hidden] { display: none; }
.pd-pay-head { display: flex; align-items: center; justify-content: space-between; gap: var(--pd-space-2); }
.pd-pay-head h2 { margin: 0; color: var(--pd-color-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--pd-fs-lg); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); }
.pd-pay-close { display: inline-grid; place-items: center; flex: 0 0 auto; width: var(--pd-btn-h); height: var(--pd-btn-h); padding: 0; color: var(--pd-color-text-tertiary); font-size: var(--pd-icon-lg); background: transparent; border: 0; border-radius: var(--pd-btn-radius); cursor: pointer; }
.pd-pay-close:hover { color: var(--pd-color-text); background: var(--pd-color-surface-soft); }
.pd-pay-peer { display: flex; align-items: center; gap: var(--pd-space-2); padding: var(--pd-space-2); background: var(--pd-color-surface-subtle); border-radius: var(--pd-radius-md); }
.pd-pay-peer img { width: var(--pd-btn-h-lg); height: var(--pd-btn-h-lg); border-radius: var(--pd-radius-round); object-fit: cover; }
.pd-pay-peer span { display: grid; min-width: 0; }
.pd-pay-peer strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: var(--pd-fw-semibold); }
.pd-pay-peer small { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
.pd-pay-step { display: grid; gap: var(--pd-space-2); }
.pd-pay-label { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
.pd-pay-amount { display: flex; align-items: baseline; gap: var(--pd-space-1); padding-bottom: calc(var(--pd-space-1) / 2); border-bottom: 1px solid var(--pd-color-border-strong); }
.pd-pay-amount:focus-within { border-bottom-color: var(--pd-color-primary); }
.pd-pay-amount input { flex: 1; min-width: 0; padding: 0; box-shadow: none; color: var(--pd-color-text); font: inherit; font-size: var(--pd-fs-display); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); background: transparent; border: 0; outline: none; }
.pd-pay-amount span { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-md); }
.pd-pay-hint { margin: 0; color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
.pd-pay-hint.is-error { color: var(--pd-color-error); }
.pd-pay-memo { width: 100%; height: var(--pd-btn-h); padding: 0 var(--pd-btn-px-sm); color: var(--pd-color-text); font: inherit; font-size: var(--pd-fs-md); background: var(--pd-color-surface); border: 1px solid var(--pd-color-border-strong); border-radius: var(--pd-input-radius); }
.pd-pay-memo:focus { border-color: var(--pd-color-primary); outline: none; box-shadow: none; }
.pd-pay-risk { display: flex; align-items: flex-start; gap: var(--pd-space-1); margin: 0; padding: var(--pd-space-1) var(--pd-space-2); color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); background: var(--pd-color-warning-soft); border-radius: var(--pd-radius-sm); }
.pd-pay-risk[hidden] { display: none; }
.pd-pay-risk i { margin-top: calc(var(--pd-space-1) / 4); color: var(--pd-color-warning); }
.pd-pay-submit { width: 100%; height: var(--pd-btn-h-lg); margin-top: var(--pd-space-1); }
.pd-pay-summary { display: grid; justify-items: center; gap: calc(var(--pd-space-1) / 2); margin: 0; text-align: center; }
.pd-pay-summary span { color: var(--pd-color-text-secondary); }
.pd-pay-summary strong { font-size: var(--pd-fs-display); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); }
.pd-pay-summary small { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
.pd-pay-pin-label { text-align: center; }
.pd-pay-pin { position: relative; justify-self: center; }
.pd-pay-pin input { position: absolute; inset: 0; width: 100%; height: 100%; padding: 0; font-size: var(--pd-fs-md); opacity: 0; border: 0; cursor: text; }
.pd-pay-pin-cells { display: grid; grid-template-columns: repeat(6, var(--pd-btn-h-lg)); gap: var(--pd-space-1); }
.pd-pay-pin-cells i { display: grid; place-items: center; height: var(--pd-btn-h-lg); border: 1px solid var(--pd-color-border-strong); border-radius: var(--pd-radius-sm); }
.pd-pay-pin:focus-within .pd-pay-pin-cells i { border-color: var(--pd-color-primary); }
.pd-pay-pin-cells i.is-filled::after { content: ""; width: var(--pd-space-1); height: var(--pd-space-1); background: var(--pd-color-text); border-radius: var(--pd-radius-round); }
.pd-pay-error { margin: 0; color: var(--pd-color-error); font-size: var(--pd-fs-xs); text-align: center; }
.pd-pay-error[hidden] { display: none; }
.pd-pay-pin-actions { display: flex; align-items: center; justify-content: space-between; gap: var(--pd-space-2); font-size: var(--pd-fs-xs); }

.pd-pay-dialog.is-envelope { width: min(var(--pd-pay-envelope-w), calc(100vw - var(--pd-space-4))); color: var(--pd-color-on-primary); background: var(--pd-color-type-redpacket); }
.pd-pay-envelope { position: relative; display: grid; align-content: start; justify-items: center; gap: var(--pd-space-2); min-height: var(--pd-pay-envelope-h); padding: var(--pd-space-5) var(--pd-space-4); text-align: center; }
.pd-pay-envelope .pd-pay-close { position: absolute; top: var(--pd-space-1); right: var(--pd-space-1); color: var(--pd-color-on-primary); }
.pd-pay-envelope .pd-pay-close:hover { color: var(--pd-color-on-primary); background: var(--pd-color-pay-icon-bg); }
.pd-pay-envelope img { width: var(--pd-ucard-avatar); height: var(--pd-ucard-avatar); border: 2px solid var(--pd-color-pay-gold); border-radius: var(--pd-radius-round); object-fit: cover; }
.pd-pay-env-from { margin: 0; font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); }
.pd-pay-env-memo { margin: 0; font-size: var(--pd-fs-lg); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-snug); overflow-wrap: anywhere; }
.pd-pay-env-open { display: grid; place-items: center; width: var(--pd-pay-open-size); height: var(--pd-pay-open-size); margin-top: var(--pd-space-4); padding: 0; color: var(--pd-color-pay-on-gold); font: inherit; font-size: var(--pd-fs-display); font-weight: var(--pd-fw-semibold); background: var(--pd-color-pay-gold); border: 0; border-radius: var(--pd-radius-round); cursor: pointer; }
.pd-pay-env-open:hover { filter: brightness(.9); }
.pd-pay-env-open:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-pay-gold); outline-offset: var(--pd-tab-indicator); }
.pd-pay-env-open[hidden] { display: none; }
.pd-pay-env-open.is-opening { animation: pdPayFlip .9s linear infinite; cursor: progress; }
@keyframes pdPayFlip { to { transform: rotateY(360deg); } }
@media (prefers-reduced-motion: reduce) { .pd-pay-env-open.is-opening { animation: none; opacity: .7; } }
.pd-pay-env-result { display: grid; gap: calc(var(--pd-space-1) / 2); margin-top: var(--pd-space-3); }
.pd-pay-env-result[hidden] { display: none; }
.pd-pay-env-result strong { font-size: var(--pd-fs-display); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); }
.pd-pay-env-result span { font-size: var(--pd-fs-sm); }
.pd-pay-env-error { margin: 0; padding: var(--pd-space-1) var(--pd-space-2); font-size: var(--pd-fs-xs); background: var(--pd-color-pay-icon-bg); border-radius: var(--pd-radius-sm); }
.pd-pay-env-error[hidden] { display: none; }
@media (max-width: 640px) {
    .pd-pay-pin-cells { grid-template-columns: repeat(6, var(--pd-btn-h)); }
    .pd-pay-pin-cells i { height: var(--pd-btn-h); }
}

/* 私信像 QQ（core/pm-im.php，2026-10-05）：消息 / 好友两栏、在线绿点、输入框上方的工具栏、表情面板、图片和表情消息。
   根节点 data-pm-view 记住看的是哪一栏（侧栏每次刷新整块换掉，按钮上的状态会丢） */
body.theme-pd .pd-messages { position: relative; }
body.theme-pd .pd-messages-tabs { display: flex; gap: calc(var(--pd-space-1) / 2); padding: var(--pd-space-1) var(--pd-space-2); border-bottom: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-messages-tabs button {
    flex: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    height: var(--pd-btn-h-sm);
    padding: 0 var(--pd-btn-px-sm);
    color: var(--pd-color-text-secondary);
    font: inherit;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    background: transparent;
    border: 0;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
body.theme-pd .pd-messages-tabs button:hover { color: var(--pd-color-text); background: var(--pd-color-surface-soft); }
body.theme-pd .pd-messages-tabs button[aria-selected="true"] { color: var(--pd-color-primary); background: var(--pd-color-primary-soft); }
body.theme-pd .pd-messages-tabs button:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: calc(var(--pd-tab-indicator) * -1); }
body.theme-pd .pd-messages-tab-count { color: var(--pd-color-success); font-size: var(--pd-fs-2xs); font-weight: var(--pd-fw-medium); }
body.theme-pd .pd-messages:not([data-pm-view="friends"]) [data-pm-panel="friends"],
body.theme-pd .pd-messages[data-pm-view="friends"] [data-pm-panel="threads"] { display: none; }
body.theme-pd .pd-messages-friend-list { flex: 1; min-height: 0; overflow: auto; padding: var(--pd-space-1); }
body.theme-pd .pd-messages-friend {
    position: relative;
    display: grid;
    grid-template-columns: var(--pd-pm-avatar-size) minmax(0, 1fr);
    gap: var(--pd-space-2);
    align-items: center;
    width: 100%;
    padding: var(--pd-space-2);
    color: var(--pd-color-text);
    font: inherit;
    text-align: left;
    background: transparent;
    border: 0;
    border-radius: var(--pd-card-radius);
    cursor: pointer;
}
body.theme-pd .pd-messages-friend:hover { background: var(--pd-color-surface-soft); }
body.theme-pd .pd-messages-friend:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: calc(var(--pd-tab-indicator) * -1); }
body.theme-pd .pd-messages-friend:disabled { cursor: progress; opacity: .7; }
body.theme-pd .pd-messages-friend strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-messages-friend-status { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-messages-friend.is-online .pd-messages-friend-status { color: var(--pd-color-success); }
body.theme-pd .pd-messages-friend:not(.is-online) .pd-messages-thread-avatar { filter: grayscale(.6); opacity: .8; }
/* 绿点画在头像右下角：头像在按钮里的位置是固定的（内边距 + 头像尺寸） */
body.theme-pd .pd-messages-thread { position: relative; }
body.theme-pd .pd-messages-online-dot {
    position: absolute;
    left: calc(var(--pd-space-2) + var(--pd-pm-avatar-size) - var(--pd-pm-dot-size));
    top: calc(50% + var(--pd-pm-avatar-size) / 2 - var(--pd-pm-dot-size));
    width: var(--pd-pm-dot-size);
    height: var(--pd-pm-dot-size);
    background: var(--pd-color-success);
    border: 2px solid var(--pd-color-surface-subtle);
    border-radius: var(--pd-radius-round);
    pointer-events: none;
}
body.theme-pd .pd-messages-peer-avatar-link { position: relative; }
body.theme-pd .pd-messages-peer-avatar-link .pd-messages-online-dot { left: auto; top: auto; right: 0; bottom: 0; border-color: var(--pd-color-surface); }
body.theme-pd .pd-messages-peer-status.is-online { color: var(--pd-color-success); }

/* 输入区工具（表情、图片、转账、红包）在输入框左边，和输入框第一行齐平；很窄的屏幕上单独占一行 */
body.theme-pd .pd-messages-compose-bar { display: flex; flex: none; align-items: center; gap: calc(var(--pd-space-1) / 2); height: var(--pd-btn-h); margin-left: calc(var(--pd-space-1) / -2); }
@media (max-width: 480px) {
    body.theme-pd .pd-messages-compose { flex-wrap: wrap; row-gap: var(--pd-space-1); }
    body.theme-pd .pd-messages-compose-bar { flex-basis: 100%; height: var(--pd-btn-h-sm); }
}
body.theme-pd .pd-messages-tool[data-pm-emoji-toggle]:hover,
body.theme-pd .pd-messages-tool[data-pm-emoji-toggle][aria-expanded="true"],
body.theme-pd .pd-messages-tool[data-pm-image-pick]:hover { color: var(--pd-color-primary); }
body.theme-pd .pd-messages-tool[data-pm-image-block] { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-messages-tool:disabled { cursor: progress; opacity: .6; }

/* 表情面板：放在聊天区外面，位置由 messages.js 按表情按钮算 */
body.theme-pd .pd-messages-emoji {
    position: absolute;
    z-index: 20;
    display: flex;
    flex-direction: column;
    width: var(--pd-pm-emoji-w);
    max-width: calc(100% - var(--pd-space-3));
    background: var(--pd-color-surface);
    border-radius: var(--pd-radius-lg);
    box-shadow: var(--pd-shadow-2);
    overflow: hidden;
}
body.theme-pd .pd-messages-emoji[hidden] { display: none; }
body.theme-pd .pd-messages-emoji-tabs { display: flex; gap: calc(var(--pd-space-1) / 2); padding: calc(var(--pd-space-1) / 2); background: var(--pd-color-surface-subtle); border-bottom: 1px solid var(--pd-color-divider); overflow-x: auto; }
body.theme-pd .pd-messages-emoji-tab { display: grid; place-items: center; flex: 0 0 auto; width: var(--pd-btn-h); height: var(--pd-btn-h); padding: 0; background: transparent; border: 0; border-radius: var(--pd-btn-radius); cursor: pointer; }
body.theme-pd .pd-messages-emoji-tab[aria-selected="true"] { background: var(--pd-color-surface); }
body.theme-pd .pd-messages-emoji-tab img { width: var(--pd-icon-xl); height: var(--pd-icon-xl); object-fit: contain; }
body.theme-pd .pd-messages-emoji-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(var(--pd-pm-emoji-cell), 1fr)); align-content: start; height: var(--pd-pm-emoji-h); padding: calc(var(--pd-space-1) / 2); overflow-y: auto; }
body.theme-pd .pd-messages-emoji-item { display: grid; place-items: center; height: var(--pd-pm-emoji-cell); padding: calc(var(--pd-space-1) / 2); background: transparent; border: 0; border-radius: var(--pd-btn-radius); cursor: pointer; }
body.theme-pd .pd-messages-emoji-item:hover,
body.theme-pd .pd-messages-emoji-tab:hover { background: var(--pd-color-surface-soft); }
body.theme-pd .pd-messages-emoji-item img { width: auto; max-width: 100%; height: auto; max-height: 100%; object-fit: contain; }
body.theme-pd .pd-messages-emoji-status { grid-column: 1 / -1; margin: auto; color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }

/* 气泡里的表情、只发表情、图片、自己这边的头像 */
body.theme-pd .pd-msg-bubble img.pd-emoji { display: inline-block; width: auto; height: var(--pd-moji-inline); margin: 0 2px; vertical-align: middle; object-fit: contain; }
body.theme-pd .pd-msg-bubble img.pd-emoji.pd-emoji-lg { height: auto; }
body.theme-pd .pd-msg-row.is-sticker .pd-msg-bubble.pd-msg-bubble,
body.theme-pd .pd-msg-row.is-image .pd-msg-bubble.pd-msg-bubble { padding: 0; color: var(--pd-color-text); background: transparent; border: 0; box-shadow: none; }
body.theme-pd .pd-msg-row.is-sticker .pd-msg-bubble img.pd-emoji { height: var(--pd-pm-sticker-size); }
body.theme-pd .pd-msg-row.is-sticker .pd-msg-bubble img.pd-emoji.pd-emoji-lg { height: auto; }
body.theme-pd .pd-msg-row:is(.is-sticker, .is-image) .pd-msg-bubble time { color: var(--pd-color-text-tertiary); opacity: 1; }
body.theme-pd .pd-msg-row.is-mine:is(.is-sticker, .is-image) .pd-msg-bubble time { text-align: right; }
body.theme-pd .pd-msg-image { display: block; line-height: 0; }
body.theme-pd .pd-msg-image img { max-width: 100%; height: auto; background: var(--pd-color-surface-soft); border-radius: var(--pd-radius-lg); cursor: zoom-in; }
@media (max-width: 640px) {
    body.theme-pd .pd-messages-emoji { left: var(--pd-space-1) !important; right: var(--pd-space-1); width: auto; max-width: none; }
}

/* 聊天区像微信（2026-10-05 站长给的参考图）：气泡带小尖角指向头像，自己绿、对方白（深色下灰），头像圆角方形、和气泡顶部对齐；
   时间不在气泡里，在中间单独一行（core/messages-view.php：第一条或隔了 5 分钟以上才显示） */
body.theme-pd .pd-messages-stream { background: var(--pd-pm-stream-bg); }
body.theme-pd .pd-msg-row { align-items: flex-start; gap: var(--pd-space-2); max-width: 75%; margin-bottom: var(--pd-space-3); }
body.theme-pd .pd-msg-avatar { width: var(--pd-pm-msg-avatar); height: var(--pd-pm-msg-avatar); border-radius: var(--pd-radius-sm); }
body.theme-pd .pd-msg-row .pd-msg-bubble {
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-height: var(--pd-pm-msg-avatar);
    padding: var(--pd-space-1) var(--pd-space-2);
    font-size: var(--pd-fs-md);
    border: 0;
    border-radius: var(--pd-radius-sm);
    box-shadow: none;
}
body.theme-pd .pd-msg-row.is-peer .pd-msg-bubble { color: var(--pd-pm-on-bubble-peer); background: var(--pd-pm-bubble-peer); border: 0; border-radius: var(--pd-radius-sm); }
body.theme-pd .pd-msg-row.is-mine .pd-msg-bubble { color: var(--pd-pm-on-bubble-mine); background: var(--pd-pm-bubble-mine); border-radius: var(--pd-radius-sm); }
body.theme-pd .pd-msg-row:not(.is-pay, .is-image, .is-sticker) .pd-msg-bubble::before {
    content: "";
    position: absolute;
    top: calc((var(--pd-pm-msg-avatar) - var(--pd-pm-tail) * 2) / 2);
    border: var(--pd-pm-tail) solid transparent;
}
body.theme-pd .pd-msg-row.is-peer:not(.is-pay, .is-image, .is-sticker) .pd-msg-bubble::before { left: calc(var(--pd-pm-tail) * -1); border-left-width: 0; border-right-color: var(--pd-pm-bubble-peer); }
body.theme-pd .pd-msg-row.is-mine:not(.is-pay, .is-image, .is-sticker) .pd-msg-bubble::before { right: calc(var(--pd-pm-tail) * -1); border-right-width: 0; border-left-color: var(--pd-pm-bubble-mine); }
body.theme-pd .pd-msg-row.is-sticker .pd-msg-bubble.pd-msg-bubble,
body.theme-pd .pd-msg-row.is-image .pd-msg-bubble.pd-msg-bubble,
body.theme-pd .pd-msg-row.is-pay .pd-msg-bubble.pd-msg-bubble { min-height: 0; padding: 0; background: transparent; }
body.theme-pd .pd-msg-time { display: flex; justify-content: center; margin: var(--pd-space-3) 0 var(--pd-space-2); }
body.theme-pd .pd-msg-time:first-child { margin-top: 0; }
body.theme-pd .pd-msg-time time { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }

/* 私信页：横幅照常显示，聊天卡片下面多留一段空隙（2026-10-05 站长要的） */
body.theme-pd.page-messages .pd-messages-card { margin-bottom: var(--pd-space-5); }

/* 私信里的滚动条：全站给页面滚动条定了深色轨道，会被这些区域继承成又粗又黑的一条；这里改成细的、轨道透明，鼠标移到区域上才显示 */
body.theme-pd :is(.pd-messages-stream, .pd-messages-thread-list, .pd-messages-friend-list, .pd-messages-emoji-grid, .pd-messages-compose textarea) {
    scrollbar-width: thin;
    scrollbar-color: transparent transparent;
}
body.theme-pd :is(.pd-messages-stream, .pd-messages-thread-list, .pd-messages-friend-list, .pd-messages-emoji-grid, .pd-messages-compose textarea):is(:hover, :focus-within) {
    scrollbar-color: var(--pd-pm-scroll-thumb) transparent;
}
body.theme-pd :is(.pd-messages-stream, .pd-messages-thread-list, .pd-messages-friend-list, .pd-messages-emoji-grid, .pd-messages-compose textarea)::-webkit-scrollbar { width: var(--pd-space-1); height: var(--pd-space-1); }
body.theme-pd :is(.pd-messages-stream, .pd-messages-thread-list, .pd-messages-friend-list, .pd-messages-emoji-grid, .pd-messages-compose textarea)::-webkit-scrollbar-track { background: transparent; }
body.theme-pd :is(.pd-messages-stream, .pd-messages-thread-list, .pd-messages-friend-list, .pd-messages-emoji-grid, .pd-messages-compose textarea)::-webkit-scrollbar-thumb { background: transparent; border-radius: var(--pd-radius-pill); }
body.theme-pd :is(.pd-messages-stream, .pd-messages-thread-list, .pd-messages-friend-list, .pd-messages-emoji-grid, .pd-messages-compose textarea):is(:hover, :focus-within)::-webkit-scrollbar-thumb { background: var(--pd-pm-scroll-thumb); }
@media (hover: none) {
    body.theme-pd :is(.pd-messages-stream, .pd-messages-thread-list, .pd-messages-friend-list, .pd-messages-emoji-grid, .pd-messages-compose textarea) { scrollbar-color: var(--pd-pm-scroll-thumb) transparent; }
}
@media (max-width: 640px) {
    body.theme-pd .pd-msg-row { max-width: 88%; }
    body.theme-pd .pd-msg-row .pd-msg-bubble { font-size: var(--pd-fs-sm); }
}

/* 消息提醒：头像、来源、正文和时间分层；无目标的消息保持静态。 */
body.theme-pd .pd-notifications {
    padding: 0;
    overflow: hidden;
    box-shadow: none;
}
.pd-notifications-head,
.pd-notifications-heading,
.pd-notifications-actions {
    display: flex;
    align-items: center;
    gap: var(--pd-space-3);
}
.pd-notifications-head {
    justify-content: space-between;
    flex-wrap: wrap;
    padding: var(--pd-space-4);
}
.pd-notifications-heading { min-width: 0; }
.pd-notifications-heading-icon {
    display: grid;
    place-items: center;
    flex: 0 0 auto;
    width: var(--pd-side-icon-art);
    height: var(--pd-side-icon-art);
    border-radius: var(--pd-radius-lg);
    background: var(--pd-color-primary-soft);
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-xl);
}
.pd-notifications h1 {
    margin: 0;
    color: var(--pd-color-text);
}
.pd-notifications-heading p {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-notifications-actions {
    flex-wrap: wrap;
    gap: var(--pd-space-1);
}
.pd-notifications-actions form { margin: 0; }
.pd-notifications-type-form {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
}
.pd-notifications-select {
    position: relative;
    display: inline-flex;
    align-items: center;
    min-width: 0;
}
.pd-notifications-select > i {
    position: absolute;
    right: var(--pd-input-px);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-xs);
    pointer-events: none;
}
.pd-notifications-actions select {
    -webkit-appearance: none;
    appearance: none;
    width: auto;
    min-width: 0;
    min-height: var(--pd-btn-h-lg);
    margin: 0;
    padding: 0 calc(var(--pd-input-px) + var(--pd-icon-xs) + var(--pd-space-1)) 0 var(--pd-input-px);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-input-radius);
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    font: inherit;
    font-size: var(--pd-fs-xs);
    cursor: pointer;
}
.pd-notifications-type-form .pd-notifications-preview { width: auto; }
.pd-notifications-actions button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-btn-gap);
    min-height: var(--pd-btn-h-lg);
    padding: 0 var(--pd-btn-px-sm);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-btn-radius);
    background: var(--pd-color-surface);
    color: var(--pd-color-text-secondary);
    font: inherit;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
    white-space: nowrap;
    cursor: pointer;
}
.pd-notifications-actions button i { font-size: var(--pd-icon-md); }
.pd-notifications-actions button:hover:not(:disabled) {
    background: var(--pd-color-surface-subtle);
    color: var(--pd-color-text);
}
.pd-notifications-actions button:disabled {
    color: var(--pd-color-text-tertiary);
    cursor: default;
}
.pd-notifications-toggle {
    position: relative;
    flex: 0 0 auto;
    width: var(--pd-btn-h-sm);
    height: var(--pd-space-3);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-border-strong);
}
.pd-notifications-toggle::after {
    content: '';
    position: absolute;
    top: calc(var(--pd-space-1) / 4);
    left: calc(var(--pd-space-1) / 4);
    width: var(--pd-space-2);
    height: var(--pd-space-2);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-on-primary);
}
.pd-notifications-sound[aria-pressed="true"] .pd-notifications-toggle { background: var(--pd-color-primary); }
.pd-notifications-sound[aria-pressed="true"] .pd-notifications-toggle::after { transform: translateX(calc(var(--pd-btn-h-sm) - var(--pd-space-3))); }
.pd-notifications-system-sound {
    margin: 0 var(--pd-space-4) var(--pd-space-3);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-notifications-system-sound > span > i { color: var(--pd-color-role-system); }
.pd-notifications-summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    padding: var(--pd-space-2) var(--pd-space-4);
    border-top: 1px solid var(--pd-color-divider);
    border-bottom: 1px solid var(--pd-color-divider);
    background: var(--pd-color-surface-subtle);
}
.pd-notifications-summary h2 {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
.pd-notifications-count {
    display: inline-grid;
    place-items: center;
    min-width: var(--pd-icon-xl);
    padding: 0 calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-badge-radius);
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
}
.pd-notifications-summary > span,
.pd-notifications-footnote {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-notifications-list {
    list-style: none;
    margin: 0;
    padding: 0;
}
.pd-notifications-list > li + li { border-top: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-notification {
    display: flex;
    align-items: flex-start;
    gap: var(--pd-space-3);
    padding: var(--pd-space-3) var(--pd-space-4);
    color: var(--pd-color-text);
    text-decoration: none;
}
body.theme-pd a.pd-notification:hover { background: var(--pd-color-surface-subtle); }
.pd-notification-avatar {
    flex: 0 0 auto;
    width: var(--pd-side-avatar);
    height: var(--pd-side-avatar);
    border-radius: var(--pd-radius-round);
    object-fit: cover;
}
img.pd-notification-avatar { background: var(--pd-color-on-primary); }
.pd-notification-icon {
    display: grid;
    place-items: center;
    background: var(--pd-color-primary-soft);
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-lg);
}
.pd-notification-content {
    display: block;
    min-width: 0;
    flex: 1;
}
.pd-notification-meta {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    margin-bottom: calc(var(--pd-space-1) / 2);
    line-height: var(--pd-lh-normal);
}
.pd-notification-sender {
    min-width: 0;
    overflow-wrap: anywhere;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
}
.pd-notification-kind {
    display: inline-block;
    margin-left: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}
.pd-notification-time {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    white-space: nowrap;
    font-weight: var(--pd-fw-regular);
}
.pd-notification-message {
    display: block;
    overflow-wrap: anywhere;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-relaxed);
}
.pd-notification-arrow {
    flex: 0 0 auto;
    align-self: center;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-xs);
}
body.theme-pd a.pd-notification:hover .pd-notification-arrow { color: var(--pd-color-primary); }
.pd-notifications-actions button:focus-visible,
.pd-notifications-actions select:focus-visible,
body.theme-pd a.pd-notification:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-tab-indicator) * -1);
}
.pd-notifications-empty {
    display: grid;
    justify-items: center;
    gap: var(--pd-space-2);
    padding: calc(var(--pd-space-5) * 2) var(--pd-space-4);
    text-align: center;
}
.pd-notifications-empty > span {
    display: grid;
    place-items: center;
    width: var(--pd-ucard-avatar);
    height: var(--pd-ucard-avatar);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-primary-soft);
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-xl);
}
.pd-notifications-empty h2 {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-h2-size);
}
.pd-notifications-empty p,
.pd-notifications-footnote {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-relaxed);
}
.pd-notifications-footnote {
    padding: var(--pd-space-3) var(--pd-space-4);
    border-top: 1px solid var(--pd-color-divider);
    text-align: center;
}
@media (max-width: 640px) {
    .pd-notifications-head { padding: var(--pd-space-3); }
    .pd-notifications-heading { gap: var(--pd-space-2); }
    .pd-notifications-heading-icon {
        width: var(--pd-side-avatar);
        height: var(--pd-side-avatar);
        font-size: var(--pd-icon-lg);
    }
    .pd-notifications-actions { width: 100%; }
    .pd-notifications-actions form { flex: 1; }
    .pd-notifications-actions .pd-notifications-type-form { flex-basis: 100%; order: 1; }
    .pd-notifications-select { flex: 1; }
    .pd-notifications-actions select { width: 100%; }
    .pd-notifications-actions button { width: 100%; }
    .pd-notifications-summary { padding: var(--pd-space-2) var(--pd-space-3); }
    .pd-notifications-summary > span { font-size: var(--pd-fs-2xs); }
    body.theme-pd .pd-notification {
        gap: var(--pd-space-2);
        padding: var(--pd-space-3);
    }
    .pd-notification-avatar {
        width: var(--pd-space-5);
        height: var(--pd-space-5);
    }
    .pd-notification-arrow { display: none; }
    .pd-notification-time { font-size: var(--pd-fs-2xs); }
}

/* ===== 站务 / 清道夫：暂停回复、楼层提示、举报（pages/thread.php、assets/main.js） ===== */
/* 标题元信息里的「暂停回复」胶囊（自带完整样式，不依赖别的基础类） */
body.theme-pd .pd-chip--locked {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    height: var(--pd-badge-h);
    padding: 0 var(--pd-badge-px);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    white-space: nowrap;
    vertical-align: middle;
    background: var(--pd-color-warning-soft);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-chip--locked i {
    color: var(--pd-color-warning);
    font-size: var(--pd-icon-xs);
}
/* 清道夫挂在楼层正文上方的提示；正文照常显示 */
.pd-patrol-mark,
.pd-reply-locked {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin: 0 0 var(--pd-space-2);
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    background: var(--pd-color-warning-soft);
    border: 1px solid var(--pd-color-warning);
    border-radius: var(--pd-radius-md);
}
.pd-patrol-mark i,
.pd-reply-locked i {
    flex: 0 0 auto;
    color: var(--pd-color-warning);
    font-size: var(--pd-icon-sm);
}
/* 回复框位置的「暂停回复」提示（普通用户只看到这一块；管理员 / 版主在回复框上方看到） */
.pd-reply-locked {
    font-size: var(--pd-fs-sm);
}
.pd-reply-locked a {
    margin-left: auto;
    color: var(--pd-color-link);
    font-weight: var(--pd-fw-medium);
    text-decoration: none;
}
.pd-reply-locked a:hover {
    color: var(--pd-color-link-hover);
    text-decoration: underline;
}
.pd-reply-locked-card .pd-reply-locked {
    margin: 0;
}
/* 暂停回复的主楼、挂了提示的楼层：站外链接换成不可点的文字（core/render.php 的 defang_links） */
.pd-link-disabled {
    color: var(--pd-color-text-secondary);
    text-decoration: underline dotted;
    overflow-wrap: anywhere;
    cursor: not-allowed;
}
/* 举报对话框（assets/main.js 的 pdReportDialog，外壳沿用 .pd-confirm-*）：说明和输入框通栏 */
#pd-report-overlay .pd-confirm-box {
    width: 420px;
    padding: var(--pd-space-4);
}
#pd-report-overlay .pd-confirm-head {
    align-items: center;
    margin-bottom: var(--pd-space-2);
}
#pd-report-overlay .pd-confirm-title {
    margin: 0;
}
#pd-report-overlay .pd-confirm-message {
    margin-left: 0;
}
#pd-report-overlay .pd-confirm-field {
    display: grid;
    gap: var(--pd-space-1);
    margin: var(--pd-space-2) 0 0;
}
#pd-report-overlay .pd-report-label {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
#pd-report-overlay textarea {
    padding: var(--pd-space-1) var(--pd-input-px);
    color: var(--pd-color-text);
    font-size: var(--pd-input-fs);
    line-height: var(--pd-lh-normal);
    border: 1px solid var(--pd-color-border);
}
#pd-report-overlay textarea:focus,
#pd-report-overlay textarea:focus-visible {
    outline: 0;
    box-shadow: none;
    border-color: var(--pd-color-primary);
}
#pd-report-overlay .pd-confirm-actions {
    margin-top: var(--pd-space-4);
}

/* ===== 代码块与行内代码（assets/code-block.js 把 pre 包成 .pd-code：标题栏 + 代码区）=====
   - 跟随站点深浅色：浅色是极浅的中性底，深色比卡片暗一档；1px 边框，不加阴影
   - 标题栏：左边品牌蓝圆点 + 语言名，右边常驻的「复制」幽灵按钮，两边离边框一样远
   - 语法配色：珊瑚（关键字）、品牌蓝（函数 / 类 / 区块）、绿（字符串）、琥珀（数字 / 字面量 / 内置），
     属性、变量用深一档的蓝；对代码底色都在 4.5:1 以上；注释不用斜体（中文斜体是机器拉斜的）
   - code-block.js 是 defer 加载的：裸 pre 先画成同一套外观并留出标题栏高度，包好前后不闪黑底、不跳动，
     没有 JS 时也是这个样子
   - 回复里的代码块最多显示约 20 行，超出在块内滚动；主楼不限高
   - 颜色令牌在深色块里全部重写一遍：引用 --pd-color-* 的值在 :root 上就已求值，不重写深色会拿到浅色值 */
:root {
    /* 尺寸 */
    --pd-code-fs: var(--pd-fs-sm);                 /* 代码块 14px，手机 12px */
    --pd-code-inline-fs: var(--pd-fs-xs);          /* 行内代码 12px：等宽字字面大，和 14px 正文看着齐平 */
    --pd-code-lh: var(--pd-lh-normal);             /* 1.5，回复限高按它算行数 */
    --pd-code-tab: 4;
    --pd-code-gap: calc(var(--pd-space-1) / 2);    /* 4px */
    --pd-code-pad-y: var(--pd-space-2);
    --pd-code-pad-x: var(--pd-space-3);            /* 代码、语言名、「复制」离左右边框都是这个距离 */
    --pd-code-head-h: var(--pd-btn-h-sm);          /* 标题栏 32px（含底边线），手机 40px */
    --pd-code-btn-h: calc(var(--pd-code-head-h) - var(--pd-space-1));   /* 复制按钮比标题栏矮 8px：桌面 24px，手机 32px */
    --pd-code-btn-px: var(--pd-space-1);
    --pd-code-dot: var(--pd-space-1);              /* 语言名前的圆点 8px */
    --pd-code-radius: var(--pd-radius-md);
    --pd-code-scrollbar: var(--pd-space-1);
    --pd-code-transition: .15s ease;
    --pd-code-reply-lines: 20;
    /* pre 按内容区限高（content-box），上下内边距不计入：第 21 行露出一截，一看就知道还能滚 */
    --pd-code-reply-max: calc(var(--pd-code-reply-lines) * var(--pd-code-lh) * 1em);

    /* 颜色（浅色） */
    --pd-code-bg: var(--pd-color-surface-subtle);
    --pd-code-head-bg: var(--pd-color-surface-soft);
    --pd-code-border: var(--pd-color-border);
    --pd-code-fg: var(--pd-gray-800);
    --pd-code-muted: var(--pd-gray-600);           /* 标题栏 gray-100 底上 gray-500 只有 4.4:1，加深一档 */
    --pd-code-dot-color: var(--pd-color-primary);
    --pd-code-btn-hover-bg: var(--pd-color-border);
    --pd-code-btn-active-bg: var(--pd-color-border-strong);
    --pd-code-btn-hover-fg: var(--pd-color-text);
    --pd-code-copied-fg: var(--pd-code-string);    /* 状态绿 #16a34a 在浅绿底上不到 4.5:1，借字符串的深绿 */
    --pd-code-copied-bg: var(--pd-color-success-soft);
    --pd-code-failed-fg: var(--pd-color-error-hover);
    --pd-code-failed-bg: var(--pd-color-error-soft);
    --pd-code-focus: var(--pd-color-primary);
    --pd-code-selection: #cfe0fe;
    --pd-code-scroll-thumb: var(--pd-color-border-strong);
    --pd-code-scroll-thumb-hover: var(--pd-gray-400);
    --pd-code-inline-fg: var(--pd-code-fg);
    --pd-code-inline-bg: var(--pd-color-surface-soft);

    /* 语法配色（浅色） */
    --pd-code-comment: var(--pd-gray-500);
    --pd-code-punct: var(--pd-gray-600);           /* 括号、逗号：比正文淡，比注释深 */
    --pd-code-meta: #5a6782;                       /* <?php、#!、装饰器：灰蓝，像元信息不像代码 */
    --pd-code-keyword: #c8371f;                    /* 珊瑚 #ff674f 压暗 */
    --pd-code-title: var(--pd-color-primary);      /* 品牌蓝 */
    --pd-code-attr: #0a4a9e;                       /* 属性、变量、JSON 键 */
    --pd-code-string: #15803d;
    --pd-code-number: #946200;                     /* 偏金的琥珀，和珊瑚拉开 */
    --pd-code-add-fg: var(--pd-code-string);
    --pd-code-add-bg: var(--pd-color-success-soft);
    --pd-code-del-fg: var(--pd-color-error-hover);
    --pd-code-del-bg: var(--pd-color-error-soft);
}
body.theme-pd-dark {
    --pd-code-head-bg: var(--pd-color-surface-subtle);
    --pd-code-border: var(--pd-color-border);
    --pd-code-fg: var(--pd-color-text);
    --pd-code-muted: var(--pd-color-text-secondary);
    --pd-code-dot-color: var(--pd-color-primary);
    --pd-code-btn-hover-bg: var(--pd-color-border);
    --pd-code-btn-active-bg: var(--pd-color-border-strong);
    --pd-code-btn-hover-fg: var(--pd-color-text);
    --pd-code-copied-fg: var(--pd-color-success);
    --pd-code-copied-bg: var(--pd-color-success-soft);
    --pd-code-failed-fg: var(--pd-color-error);
    --pd-code-failed-bg: var(--pd-color-error-soft);
    --pd-code-focus: var(--pd-color-primary);
    --pd-code-selection: var(--pd-color-primary-soft);   /* 选中后各语法色仍 ≥4.6:1 */
    --pd-code-scroll-thumb: var(--pd-color-border-strong);
    --pd-code-scroll-thumb-hover: var(--pd-color-scrollbar-thumb-hover);
    --pd-code-inline-fg: var(--pd-code-fg);
    --pd-code-inline-bg: var(--pd-color-surface-soft);

    --pd-code-comment: var(--pd-color-text-tertiary);
    --pd-code-punct: var(--pd-color-text-secondary);
    --pd-code-meta: var(--pd-color-text-secondary);
    --pd-code-keyword: #ff8a78;
    --pd-code-title: #79a8ff;
    --pd-code-attr: #a5c8ff;
    --pd-code-string: #8bd5a0;
    --pd-code-number: var(--pd-color-warning);
    --pd-code-add-fg: var(--pd-code-string);
    --pd-code-add-bg: var(--pd-color-success-soft);
    --pd-code-del-fg: var(--pd-color-error);
    --pd-code-del-bg: var(--pd-color-error-soft);
}
@media (max-width: 640px) {
    :root {
        --pd-code-fs: var(--pd-fs-xs);             /* 一行多放几个字符 */
        --pd-code-pad-x: var(--pd-space-2);
        --pd-code-head-h: var(--pd-btn-h-lg);      /* 复制按钮随之变成 32px，点击区域 40px */
    }
}

/* 外框：包好的 .pd-code 和还没包的裸 pre 同一套底色、边框、圆角、间距 */
body.theme-pd .pd-md-body pre,
body.theme-pd .pd-code {
    margin: 0 0 var(--pd-space-3);
    color: var(--pd-code-fg);
    background: var(--pd-code-bg);
    border: 1px solid var(--pd-code-border);
    border-radius: var(--pd-code-radius);
}
body.theme-pd .pd-md-body pre:last-child,
body.theme-pd .pd-code:last-child {
    margin-bottom: 0;
}

/* 代码区。裸 pre 先画出空的标题栏：上边框加粗成标题栏高度、填标题栏底色，外圈 1px 线由 outline 补上，
   分隔线是 1px 内嵌阴影（不是投影）；都不随内容滚动。code-block.js 包好前后整块一样高、代码第一行位置不变。
   box-sizing 用 content-box，回复里的限高只算代码行 */
body.theme-pd .pd-md-body pre {
    box-sizing: content-box;
    padding: calc(1px + var(--pd-code-pad-y)) var(--pd-code-pad-x) var(--pd-code-pad-y);
    overflow: auto;
    font-family: var(--pd-font-mono);
    font-size: var(--pd-code-fs);
    font-variant-ligatures: none;
    line-height: var(--pd-code-lh);
    white-space: pre;
    word-wrap: normal;
    tab-size: var(--pd-code-tab);
    border-top: var(--pd-code-head-h) solid var(--pd-code-head-bg);
    outline: 1px solid var(--pd-code-border);
    outline-offset: -1px;
    box-shadow: inset 0 1px 0 var(--pd-code-border);
    scrollbar-width: thin;
    scrollbar-color: var(--pd-code-scroll-thumb) transparent;   /* 不继承页面滚动条的深色轨道 */
}
/* 包好以后外框交给 .pd-code（overflow 把滚动条、焦点框收进圆角），pre 只管滚动 */
body.theme-pd .pd-code {
    position: relative;   /* 标题栏里读屏用的 .sr-only 状态区以它为定位基准，不会跑出代码块 */
    max-width: 100%;
    min-width: 0;
    overflow: hidden;
}
body.theme-pd div.pd-code > pre {
    margin: 0;
    padding: var(--pd-code-pad-y) var(--pd-code-pad-x);
    background: transparent;
    border: 0;
    border-radius: 0;
    outline: none;
    box-shadow: none;
}
body.theme-pd .reply .pd-md-body pre {
    max-height: var(--pd-code-reply-max);
}
/* 强制颜色模式会把加粗的上边框涂成文字色：改成和底色一样，只留外圈和空出来的标题栏位置 */
@media (forced-colors: active) {
    body.theme-pd .pd-md-body pre {
        border-top-color: Canvas;
    }
}
body.theme-pd .pd-md-body pre > code {
    display: block;
    width: max-content;   /* 横向滚到行尾时右边的内边距还在 */
    min-width: 100%;
    padding: 0;
    color: inherit;
    font-family: inherit;
    font-size: inherit;
    font-variant-ligatures: none;
    line-height: inherit;
    white-space: inherit;
    background: transparent;
    border: 0;
    border-radius: 0;
}
body.theme-pd .pd-md-body pre ::selection {
    background: var(--pd-code-selection);
}
body.theme-pd .pd-md-body pre::-webkit-scrollbar {
    width: var(--pd-code-scrollbar);
    height: var(--pd-code-scrollbar);
}
body.theme-pd .pd-md-body pre::-webkit-scrollbar-track,
body.theme-pd .pd-md-body pre::-webkit-scrollbar-corner {
    background: transparent;
}
body.theme-pd .pd-md-body pre::-webkit-scrollbar-thumb {
    background: var(--pd-code-scroll-thumb);
    border: var(--pd-tab-indicator) solid var(--pd-code-bg);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-md-body pre::-webkit-scrollbar-thumb:hover {
    background: var(--pd-code-scroll-thumb-hover);
}

/* 裸 pre（code-block.js 还没运行或没加载）能滚动时浏览器也让它可聚焦：外圈 1px 线占了 outline，这里换成焦点框 */
body.theme-pd .pd-md-body pre:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-code-focus);
    outline-offset: calc(-1 * var(--pd-tab-indicator));
}
/* pre 有 tabindex=0（键盘滚动用）：聚焦时给整个代码块描框，贴着外圆角、把标题栏也框进去；
   不认 :has() 的浏览器退回描 pre 内侧。都用 outline，强制颜色模式下也看得见 */
body.theme-pd div.pd-code > pre:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-code-focus);
    outline-offset: calc(-1 * var(--pd-tab-indicator));
}
@supports selector(:has(*)) {
    body.theme-pd div.pd-code > pre:focus-visible {
        outline: none;
    }
    body.theme-pd .pd-code:has(> pre:focus-visible) {
        outline: var(--pd-tab-indicator) solid var(--pd-code-focus);
        outline-offset: calc(-1 * var(--pd-tab-indicator));
    }
}

/* 标题栏：圆点 + 语言名在左，「复制」在右 */
body.theme-pd .pd-code-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-1);
    height: var(--pd-code-head-h);
    padding: 0 calc(var(--pd-code-pad-x) - var(--pd-code-btn-px)) 0 var(--pd-code-pad-x);
    font-family: var(--pd-font-body);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-tight);
    background: var(--pd-code-head-bg);
    border-bottom: 1px solid var(--pd-code-border);
    user-select: none;
    -webkit-user-select: none;
}
/* 代码头部继承自己的排版，避免受到外层回复样式影响。 */
body.theme-pd div.pd-code span {
    margin: 0;
    color: inherit;
    font-size: inherit;
}
body.theme-pd .pd-code .pd-code-lang {
    position: relative;
    min-width: 0;
    padding-left: calc(var(--pd-code-dot) + var(--pd-space-1));
    overflow: hidden;
    color: var(--pd-code-muted);
    font-weight: var(--pd-fw-medium);
    white-space: nowrap;
    text-overflow: ellipsis;
}
body.theme-pd .pd-code-lang::before {
    content: "";
    position: absolute;
    inset: 0 auto 0 0;
    width: var(--pd-code-dot);
    height: var(--pd-code-dot);
    margin: auto 0;   /* 上下 auto：在语言名这一行里垂直居中 */
    background: var(--pd-code-dot-color);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-code-copy {
    position: relative;
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    gap: var(--pd-code-gap);
    height: var(--pd-code-btn-h);
    margin: 0;
    padding: 0 var(--pd-code-btn-px);
    color: var(--pd-code-muted);
    font: inherit;
    font-weight: var(--pd-fw-medium);
    white-space: nowrap;
    background: transparent;
    border: 0;
    border-radius: var(--pd-btn-radius);
    box-shadow: none;
    cursor: pointer;
    transition: color var(--pd-code-transition), background-color var(--pd-code-transition);
}
/* 点击区域上下各外扩 4px，和标题栏一样高（桌面 32px，手机 40px） */
body.theme-pd .pd-code-copy::after {
    content: "";
    position: absolute;
    inset: calc(-1 * var(--pd-code-gap)) 0;
}
body.theme-pd .pd-code-copy i {
    width: var(--pd-icon-xs);
    font-size: var(--pd-icon-xs);
    text-align: center;
}
@media (hover: hover) {
    body.theme-pd .pd-code-copy:hover {
        color: var(--pd-code-btn-hover-fg);
        background: var(--pd-code-btn-hover-bg);
    }
}
body.theme-pd .pd-code-copy:active {
    background: var(--pd-code-btn-active-bg);
}
body.theme-pd .pd-code-copy:focus {
    outline: none;
}
body.theme-pd .pd-code-copy:focus-visible {
    color: var(--pd-code-btn-hover-fg);
    outline: var(--pd-tab-indicator) solid var(--pd-code-focus);
    outline-offset: 0;
}
/* 复制结果停留 2 秒：浅底 + 深一档的字，鼠标还停在按钮上时也保持这个底色 */
body.theme-pd .pd-code-copy.is-copied,
body.theme-pd .pd-code-copy.is-copied:hover {
    color: var(--pd-code-copied-fg);
    background: var(--pd-code-copied-bg);
}
body.theme-pd .pd-code-copy.is-failed,
body.theme-pd .pd-code-copy.is-failed:hover {
    color: var(--pd-code-failed-fg);
    background: var(--pd-code-failed-bg);
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-code-copy {
        transition: none;
    }
}

/* 语法高亮（highlight.js 的记号类名，不加载它自带的主题），只在 .pd-code 里生效 */
body.theme-pd .pd-code .hljs-comment,
body.theme-pd .pd-code .hljs-quote {
    color: var(--pd-code-comment);
}
body.theme-pd .pd-code .hljs-punctuation,
body.theme-pd .pd-code .hljs-tag {
    color: var(--pd-code-punct);
}
body.theme-pd .pd-code .hljs-meta {
    color: var(--pd-code-meta);
}
body.theme-pd .pd-code .hljs-keyword,
body.theme-pd .pd-code .hljs-doctag,
body.theme-pd .pd-code .hljs-template-tag,
body.theme-pd .pd-code .hljs-selector-tag,
body.theme-pd .pd-code .hljs-type,
body.theme-pd .pd-code .hljs-variable.language_,
body.theme-pd .pd-code .hljs-meta .hljs-keyword {
    color: var(--pd-code-keyword);
}
body.theme-pd .pd-code .hljs-title,
body.theme-pd .pd-code .hljs-section,
body.theme-pd .pd-code .hljs-name {
    color: var(--pd-code-title);
}
body.theme-pd .pd-code .hljs-section {
    font-weight: var(--pd-fw-semibold);   /* nginx 的 server / location 区块 */
}
body.theme-pd .pd-code .hljs-attr,
body.theme-pd .pd-code .hljs-attribute,
body.theme-pd .pd-code .hljs-property,
body.theme-pd .pd-code .hljs-variable,
body.theme-pd .pd-code .hljs-template-variable,
body.theme-pd .pd-code .hljs-selector-id,
body.theme-pd .pd-code .hljs-selector-class,
body.theme-pd .pd-code .hljs-selector-attr,
body.theme-pd .pd-code .hljs-selector-pseudo {
    color: var(--pd-code-attr);
}
body.theme-pd .pd-code .hljs-string,
body.theme-pd .pd-code .hljs-regexp,
body.theme-pd .pd-code .hljs-char.escape_,
body.theme-pd .pd-code .hljs-meta .hljs-string {
    color: var(--pd-code-string);
}
body.theme-pd .pd-code .hljs-number,
body.theme-pd .pd-code .hljs-literal,
body.theme-pd .pd-code .hljs-built_in,
body.theme-pd .pd-code .hljs-symbol,
body.theme-pd .pd-code .hljs-bullet,
body.theme-pd .pd-code .hljs-variable.constant_ {
    color: var(--pd-code-number);
}
/* JSON 的 true / null 是 literal 里再套一层 keyword，跟外层走，和 Python 的 False 同色 */
body.theme-pd .pd-code .hljs-literal .hljs-keyword {
    color: inherit;
}
body.theme-pd .pd-code .hljs-params,
body.theme-pd .pd-code .hljs-subst,
body.theme-pd .pd-code .hljs-operator {
    color: var(--pd-code-fg);
}
body.theme-pd .pd-code .hljs-addition {
    color: var(--pd-code-add-fg);
    background: var(--pd-code-add-bg);
}
body.theme-pd .pd-code .hljs-deletion {
    color: var(--pd-code-del-fg);
    background: var(--pd-code-del-bg);
}
body.theme-pd .pd-code .hljs-strong {
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-code .hljs-emphasis {
    font-style: italic;
}
body.theme-pd .pd-code .hljs-link {
    text-decoration: underline;
}

/* 行内代码：中性色，和代码块同一套字体、边框；长命令断行后两段都有完整的边框和圆角 */
body.theme-pd .pd-md-body code:not(pre code) {
    padding: 0 var(--pd-code-gap);
    color: var(--pd-code-inline-fg);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-code-inline-fs);
    font-variant-ligatures: none;
    overflow-wrap: anywhere;
    background: var(--pd-code-inline-bg);
    border: 1px solid var(--pd-code-border);
    border-radius: var(--pd-radius-xs);
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
}
/* 链接里的行内代码跟着链接色；彩色文字（.pd-c-*）只在主楼 / 回复里跟随 */
body.theme-pd .pd-md-body a code:not(pre code),
body.theme-pd .pd-md-body span[class^="pd-c-"] code:not(pre code) {
    color: inherit;
}
/* 引用的底色就是 surface-soft：引用里的行内代码换成代码块的浅底，和引用底分开 */
body.theme-pd .pd-md-body blockquote code:not(pre code) {
    background: var(--pd-code-bg);
}
/* 标题、大号字（.pd-fs-large）里的行内代码跟着外层的字号 */
body.theme-pd .pd-md-body :is(h1, h2, h3, h4, h5, .pd-fs-large) code:not(pre code) {
    font-size: inherit;
}

/* 编辑器预览框本身就是 surface-subtle 底：浅色下预览里的代码区改成白底，和外框分开 */
body.theme-pd:not(.theme-pd-dark) .md-preview-body {
    --pd-code-bg: var(--pd-color-surface);
}

/* ===== 表情（assets/moji）：正文里的 <img class="pd-emoji"> 和编辑器里的选择器 ===== */
.content img.pd-emoji,
.reply .content img.pd-emoji,
.md-preview-body img.pd-emoji {
    display: inline-block;
    width: auto;
    height: var(--pd-moji-inline);
    max-width: none;
    max-height: none;
    margin: 0 2px;
    vertical-align: middle;
    cursor: default;
    object-fit: contain;
}

.markdown-editor .editor-toolbar .editor-heading-dropdown.editor-emoji-panel {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    width: min(360px, calc(100vw - var(--pd-space-4)));
    min-width: 0;
    padding: var(--pd-space-1);
}
.markdown-editor .editor-emoji-panel[hidden] {
    display: none !important;
}
.markdown-editor .editor-emoji-panel .emoji-tabs {
    display: flex;
    gap: 4px;
    padding-bottom: var(--pd-space-1);
    overflow-x: auto;
    border-bottom: 1px solid var(--pd-color-divider);
}
.markdown-editor .editor-toolbar .editor-emoji-panel .emoji-tab,
.markdown-editor .editor-toolbar .editor-emoji-panel .emoji-item {
    display: flex;
    flex: none;
    align-items: center;
    justify-content: center;
    padding: 0;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--pd-radius-sm);
}
.markdown-editor .editor-toolbar .editor-emoji-panel .emoji-tab {
    width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    min-height: var(--pd-btn-h-sm);
}
.markdown-editor .editor-toolbar .editor-emoji-panel .emoji-tab[aria-selected="true"] {
    background: var(--pd-color-surface-subtle);
    border-color: var(--pd-color-primary-muted);
}
.markdown-editor .editor-emoji-panel .emoji-tab img {
    width: var(--pd-icon-lg);
    height: var(--pd-icon-lg);
    object-fit: contain;
}
.markdown-editor .editor-emoji-panel .emoji-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, var(--pd-moji-cell));
    gap: 4px;
    justify-content: center;
    max-height: 240px;
    overflow-y: auto;
    overscroll-behavior: contain;
}
.markdown-editor .editor-toolbar .editor-emoji-panel .emoji-item {
    width: var(--pd-moji-cell);
    height: var(--pd-moji-cell);
    min-height: var(--pd-moji-cell);
}
.markdown-editor .editor-emoji-panel .emoji-item img {
    width: calc(var(--pd-moji-cell) - var(--pd-space-1));
    height: calc(var(--pd-moji-cell) - var(--pd-space-1));
    object-fit: contain;
    pointer-events: none;
}
.markdown-editor .editor-emoji-panel .emoji-status {
    grid-column: 1 / -1;
    margin: var(--pd-space-3) 0;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
    text-align: center;
}
.markdown-editor .editor-emoji-panel .emoji-foot {
    min-height: var(--pd-space-3);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* 表情选择器的滚动条：细、浅，不用系统默认的黑色 */
.editor-emoji-panel .emoji-grid,
.editor-emoji-panel .emoji-tabs {
    scrollbar-width: thin;
    scrollbar-color: var(--pd-color-border) transparent;
}

/* 输入框里直接显示表情：镜像层垫在透明字的 textarea 后面（assets/js/admin.js initEmojiMirror） */
.markdown-editor .editor-pane {
    position: relative;
}
.markdown-editor .editor-mirror {
    position: absolute;
    top: 0;
    left: 0;
    overflow: hidden;
    color: var(--pd-color-text);
    white-space: pre-wrap;
    pointer-events: none;
    visibility: hidden;
}
.markdown-editor .editor-mirror.is-on {
    visibility: visible;
}
.markdown-editor .editor-pane.has-emoji-mirror textarea {
    position: relative;
    z-index: 1;
    color: transparent !important;
    -webkit-text-fill-color: transparent;
    caret-color: var(--pd-color-text);
    background: transparent !important;
}
.markdown-editor .editor-pane.has-emoji-mirror textarea::placeholder {
    -webkit-text-fill-color: var(--pd-color-text-secondary);
}
.markdown-editor .editor-mirror .mj {
    color: transparent;
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
    padding: .55em 0;
    margin: -.55em 0;
}

/* 输入框里表情占位字符的定宽字体（只覆盖 U+E000–E1FF，宽 2.2em、没有字形）；assets/fonts 下的文件不能原地改，要换就换文件名 */
@font-face {
    font-family: PdMojiGap;
    src: url("fonts/pd-moji-gap.woff2") format("woff2");
    unicode-range: U+E000-E1FF;
    font-display: block;
}

/* ============================================================
   以下原 standalone.css（信息页、登录注册页、搜索页专属样式），2026-10-04 并入 main.css，少一个请求
   ============================================================ */
/* ============================================================
   信息页（关于 / 帮助 / 规则 / 隐私政策）、登录注册页与搜索页专属样式
   只在精简布局（body.pd-standalone：登录 / 注册 / 找回密码）、信息页和搜索页加载（header.php），
   不与论坛主体样式混用。颜色统一走 --pd-* 令牌，自动适配深浅色主题。
   ============================================================ */

/* ---------- 精简头部（登录 / 注册 / 找回密码）：仅 banner + logo，无导航 ----------
   比首页的 banner 高，随视口在 260~460px 间伸缩。信息页用完整页头，banner 和首页一样高。 */
body.pd-standalone .pd-banner {
    min-height: clamp(260px, 34vw, 460px);
    align-items: flex-end;
    padding-bottom: 26px;
}
body.pd-standalone .pd-banner-logo img {
    height: 52px;
}

/* ---------- 信息页内容列 ----------
   卡片与站点正文同宽（撑满 main.wrap，wrap 已提供左右 20px），
   卡片自身左右内边距 20px。登录 / 注册 / 找回密码也用 .pd-info 包卡片，靠这里的上边距和 banner 隔开。 */
.pd-info {
    max-width: none;
    margin: 0;
    padding: 8px 0;
}
/* 帮助 / 规则 / 隐私政策用完整页头：离导航条的距离只由 main.wrap 的上边距决定，和版块页等内页一样 */
.pd-info.pd-info-page {
    padding-top: 0;
}

/* 正文卡片 */
.pd-info-block {
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    box-shadow: var(--pd-shadow-1);
    padding: 26px 20px;
}
.pd-info-block + .pd-info-block {
    margin-top: 16px;
}
.pd-info-block h1 {
    margin: 0 0 18px;
    padding-left: 12px;
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.25;
    color: var(--pd-color-text);
    border-left: 4px solid var(--pd-color-primary);
}
.pd-info-block:not(.pd-legal) > h2,
.pd-help-guide-copy > h2 {
    margin: 0 0 14px;
    padding-left: 12px;
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.3;
    color: var(--pd-color-text);
    border-left: 4px solid var(--pd-color-primary);
}
.pd-info-block p {
    margin: 0 0 14px;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: 1.8;
}
.pd-info-block p:last-child {
    margin-bottom: 0;
}
.pd-info-block h3 {
    margin: 18px 0 8px;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
.pd-info-block ul {
    margin: 0 0 14px;
    padding-left: 22px;
}
.pd-info-block li {
    margin: 0 0 8px;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: 1.8;
}
.pd-info-block p a,
.pd-info-block li a {
    color: var(--pd-color-primary);
    text-decoration: none;
}
.pd-info-block p a:hover,
.pd-info-block li a:hover {
    text-decoration: underline;
}

.pd-help-guide {
    display: grid;
    grid-template-columns: minmax(0, 1fr) var(--pd-help-guide-art-size);
    align-items: center;
    gap: var(--pd-space-5);
}
.pd-help-guide-copy {
    min-width: 0;
}
.pd-help-guide-copy > ul {
    margin-bottom: 0;
}
.pd-help-guide-art {
    margin: 0;
}
.pd-help-guide-art img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 1;
    object-fit: contain;
}
@media (max-width: 640px) {
    .pd-help-guide {
        grid-template-columns: minmax(0, 1fr);
        gap: 0;
    }
    .pd-help-guide-art {
        display: none;
    }
}

/* 长文法律页排版（隐私政策 / 使用条款 / 服务协议） */
.pd-legal h2 {
    margin: 30px 0 12px;
    padding-top: 6px;
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
    scroll-margin-top: 20px;
}
.pd-legal h3 {
    margin: 20px 0 8px;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
.pd-legal ul {
    margin: 0 0 14px;
    padding-left: 22px;
}
.pd-legal li {
    margin: 0 0 8px;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: 1.8;
}
.pd-legal a {
    color: var(--pd-color-primary);
    text-decoration: none;
}
.pd-legal a:hover {
    text-decoration: underline;
}
.pd-legal-updated {
    margin: 0 0 20px !important;
    color: var(--pd-color-text-secondary) !important;
    font-size: var(--pd-fs-xs) !important;
}
.pd-legal-license {
    margin-top: 26px !important;
    padding-top: 16px;
    border-top: 1px solid var(--pd-color-divider);
    color: var(--pd-color-text-secondary) !important;
    font-size: var(--pd-fs-xs) !important;
}
.pd-legal-toc {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px 14px;
    margin: 0 0 26px;
    padding: 16px 18px;
    background: var(--pd-color-surface-soft);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-md);
    font-size: var(--pd-fs-sm);
}
.pd-legal-toc span {
    color: var(--pd-color-text-secondary);
    font-weight: var(--pd-fw-semibold);
}
.pd-legal-toc a {
    color: var(--pd-color-primary);
    text-decoration: none;
}
.pd-legal-toc a:hover {
    text-decoration: underline;
}

/* 联系邮箱按钮 */
.pd-info-contact {
    margin-top: var(--pd-space-3);
}
.pd-info-contact a.pd-info-mail {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-btn-gap);
    min-height: var(--pd-btn-h-lg);
    padding: var(--pd-space-2) var(--pd-btn-px-lg);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-on-primary) !important;
    background: var(--pd-color-primary);
    border-radius: var(--pd-radius-md);
    text-decoration: none;
    transition: background .15s ease;
}
.pd-info-contact a.pd-info-mail:hover {
    background: var(--pd-color-primary-hover);
}
.pd-info-contact a.pd-info-mail:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd-dark .pd-info-contact a.pd-info-mail {
    color: var(--pd-color-surface) !important;
}
.pd-info-mail i {
    font-size: var(--pd-icon-md);
}

/* 注册页：密码实时强弱指示 */
/* 密码标签行：左侧 label、右侧强度文字（密码强度：弱/中/强） */
.pd-auth-field-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
}
.pd-pw-strength-text {
    font-size: var(--pd-fs-xs);
    white-space: nowrap;
    color: var(--pd-color-text-secondary);
}
/* 强度进度条：位于输入框下方 */
.pd-pw-strength-track {
    height: 6px;
    margin-top: 8px;
    border-radius: var(--pd-radius-xs);
    background: var(--pd-color-border);
    overflow: hidden;
}
.pd-pw-strength-fill {
    display: block;
    height: 100%;
    width: 0;
    border-radius: var(--pd-radius-xs);
    transition: width .2s ease, background .2s ease;
}
.pd-auth-field.pw-weak   .pd-pw-strength-fill { width: 33%;  background: var(--pd-color-highlight); }
.pd-auth-field.pw-mid    .pd-pw-strength-fill { width: 66%;  background: var(--pd-color-warning); }
.pd-auth-field.pw-strong .pd-pw-strength-fill { width: 100%; background: var(--pd-color-success); }
.pd-auth-field.pw-weak   .pd-pw-strength-text { color: var(--pd-color-highlight); }
.pd-auth-field.pw-mid    .pd-pw-strength-text { color: var(--pd-color-warning); }
.pd-auth-field.pw-strong .pd-pw-strength-text { color: var(--pd-color-success); }

/* 关于页：沿用既有 .pd-about-* 组件，和其他页面同宽；上边距同样只由 main.wrap 决定 */
body.theme-pd .pd-about.pd-info {
    max-width: none;
    padding-top: 0;
}

/* ---------- 搜索页：结果统计 + 列表（搜索框统一走顶部 header）---------- */
.pd-search {
    max-width: none;
}
.pd-search-summary {
    margin: 18px 2px 14px;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
.pd-search-summary b {
    color: var(--pd-color-primary);
}
.pd-search-summary span {
    color: var(--pd-color-text);
}
/* 繁体关键词转回简体一起搜时的说明（core/search.php），说明文字跟统计一样用次要色，词本身用正文色 */
.pd-search-summary .pd-search-also {
    color: var(--pd-color-text-secondary);
}
.pd-search-results .pd-empty {
    padding: 44px 20px;
    text-align: center;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
.pd-search-empty {
    margin: 32px 0;
    padding: 48px 20px;
    text-align: center;
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-input-radius);
    box-shadow: var(--pd-shadow-1);
}
.pd-search-empty i {
    display: block;
    margin-bottom: 12px;
    font-size: 30px;
    color: var(--pd-color-border);
}
.pd-search-empty p {
    margin: 0;
    font-size: var(--pd-fs-sm);
}

/* ---------- 响应式 ---------- */
@media (max-width: 640px) {
    .pd-info-block { padding: 22px 18px; }
    .pd-info-block h1 { font-size: var(--pd-fs-lg); }
}

/* ---------- 登录 / 注册 / 找回密码 / 授权确认页的表单件（输入框、提交按钮）；三个登录页的单栏卡片见下方 .pd-auth-card ---------- */
.pd-auth2 {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    align-items: start;
}
.pd-auth2.pd-auth2--single {
    grid-template-columns: 1fr;
    max-width: 480px;
}
/* 注册/登录表单外框与首页卡片边框线保持一致（同一套卡片 token：色/宽/圆角） */
.pd-info-block.pd-auth2 {
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
.pd-auth2 h1 {
    margin: 0 0 22px;
    padding: 0;
    border: 0;
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
.pd-auth-field {
    margin: 0 0 18px;
}
.pd-auth2 label {
    display: block;
    margin: 0 0 7px;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
.pd-auth2 input {
    width: 100%;
    height: 46px;
    padding: 0 14px;
    font-size: var(--pd-fs-sm);
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    /* !important 覆盖全局 input 的 6px；box-shadow:none 去掉全局给 input 的品牌色光晕 */
    border-radius: var(--pd-input-radius) !important;
    box-shadow: none;
    outline: 0;
    transition: border-color .15s ease, box-shadow .15s ease;
}
.pd-auth2 input:focus {
    border-color: var(--pd-color-primary);
    box-shadow: 0 0 0 3px rgba(var(--pd-color-primary-rgb), .12);
}
.pd-auth-submit {
    width: 100%;
    height: 44px;
    margin-top: 6px;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-btn-weight);
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
    border: 0;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
    transition: background .15s ease;
}
.pd-auth-submit:hover {
    background: var(--pd-color-primary-hover);
}
.pd-auth2-switch {
    margin: 22px 0 0;
    text-align: center;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
.pd-auth2-switch a {
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
}

/* 输入框内嵌按钮（骰子/发送验证码）+ 字段提示 */
.pd-input-affix { position: relative; }
.pd-input-affix input { padding-right: 46px; }
.pd-input-affix:has(.pd-affix-text) input { padding-right: 108px; }
/* 图标按钮（骰子）——正方形 */
.pd-affix-btn {
    position: absolute; top: 50%; right: 6px; transform: translateY(-50%);
    width: 34px; height: 34px; padding: 0;
    display: inline-flex; align-items: center; justify-content: center;
    color: var(--pd-color-text-secondary); background: var(--pd-color-surface-soft);
    border: 1px solid var(--pd-color-border); border-radius: var(--pd-radius-sm) !important; cursor: pointer;
    font-size: 14px; transition: color .15s ease, border-color .15s ease;
}
.pd-affix-btn:hover { color: var(--pd-color-primary); border-color: var(--pd-color-primary); }
.pd-affix-btn:disabled { opacity: .55; cursor: default; }
/* 文本按钮（发送验证码）——保持矩形，宽度自适应 */
.pd-affix-btn.pd-affix-text { width: auto; padding: 0 12px; font-size: var(--pd-fs-xs); }
/* 字段提示：更高优先级压过 .pd-info-block p 的 16px，小字号浅灰 */
.pd-info-block .pd-field-hint,
.pd-field-hint {
    margin: 6px 2px 0;
    font-size: var(--pd-fs-xs);
    line-height: 1.5;
    color: var(--pd-color-text-tertiary);
}

/* 验证码：本文件在 main.css 之后加载，.pd-auth2 input 的 100%/46px 会盖掉 .captcha-row input，
   这里按 auth2 的 46px 重新对齐输入框与验证码图，保证两者等高 */
.pd-auth2 .captcha-box { margin: 0; }
.pd-auth2 .captcha-row {
    display: flex;
    align-items: center;
    gap: 12px;
}
.pd-auth2 .captcha-row input {
    flex: 0 1 168px;
    width: 168px;
    min-width: 0;
    height: 46px;
    letter-spacing: .18em;
    text-transform: uppercase;
}
.pd-auth2 .captcha-row img {
    flex: 0 0 auto;
    height: 46px;
    width: auto;
    margin: 0;
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    background: var(--pd-color-surface-soft);
    cursor: pointer;
}

/* 发信接口的人机校验：一行里是 输入框 + 图片 + 「确认发送」三个元素，而 .pd-auth2 是
   两栏栅格，表单列只有一半宽（168px 输入框 + 约 126px 图片 + 按钮 + 两个 12px gap
   已经超过可用宽度）。必须允许换行，否则窄屏上输入框会被挤到不可用。 */
.pd-auth2 [data-mail-captcha] .captcha-row { flex-wrap: wrap; }
.pd-auth2 [data-mail-captcha] .captcha-row input { flex: 1 1 140px; width: auto; }

/* ---------- 登录 / 注册 / 找回密码：单栏卡片（2026-10-05 起，design/login-redesign-v1 的方案 C） ----------
   卡片往上压进横幅，上沿一个鱼头圆标，标题居中；第三方登录（GitHub / Google / 通行密钥）是卡片底部一排圆形图标。
   精简页头只有 logo、没有账户下拉：页头的 z-index（40，给下拉用）降下来卡片才盖得住横幅；电脑上 logo 挪到左上角，免得被卡片挡住 */
body.pd-standalone:has(.pd-auth-card) .pd-topbar-inner {
    z-index: 1;
}
@media (width >= 640px) {
    body.pd-standalone:has(.pd-auth-card) .pd-topbar-responsive > .pd-banner {
        align-items: flex-start;
        padding-top: var(--pd-space-4);
    }
}
/* 选择器要压过「main.wrap 第一个子元素 margin-top: 0」那条 */
body.theme-pd.pd-standalone .pd-page-frame main.wrap > .pd-info.pd-auth-wrap {
    position: relative;
    z-index: 2;
    width: 100%;
    max-width: var(--pd-auth-card-width);
    margin: calc(var(--pd-auth-overlap) * -1) auto 0;
}
.pd-info-block.pd-auth-card {
    display: block;
    position: relative;
    padding: calc(var(--pd-auth-emblem) / 2 + var(--pd-space-3)) var(--pd-space-5) var(--pd-space-4);
    text-align: center;
    box-shadow: var(--pd-shadow-2);
}
.pd-auth-emblem {
    position: absolute;
    top: calc(var(--pd-auth-emblem) / -2);
    left: 50%;
    width: var(--pd-auth-emblem);
    height: var(--pd-auth-emblem);
    transform: translateX(-50%);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-surface) url("fish-head.svg?v=1") center / calc(var(--pd-auth-emblem) - var(--pd-space-4)) no-repeat;
    box-shadow: var(--pd-shadow-1);
}
.pd-auth-card h1 {
    margin: 0 0 var(--pd-space-1);
    line-height: var(--pd-lh-tight);
}
.pd-info-block.pd-auth-card p.pd-auth-sub {
    margin: 0 0 var(--pd-space-4);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text-secondary);
}
.pd-info-block.pd-auth-card p.pd-auth-return {
    margin: calc(var(--pd-space-1) * -1) 0 var(--pd-space-3);
}
/* 管理员邮箱邀请附带的预留号码、赠送、身份（pages/register.php） */
.pd-reg-invite-perks {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    margin: 0 0 var(--pd-space-4);
    padding: var(--pd-space-2) var(--pd-space-3);
    list-style: none;
    text-align: left;
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-card-radius);
}
.pd-reg-invite-perks li {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-1);
}
.pd-reg-invite-perks i {
    width: var(--pd-fs-sm);
    color: var(--pd-color-primary);
    text-align: center;
}
.pd-reg-invite-perks strong {
    font-weight: var(--pd-fw-semibold);
}
.pd-auth-card form {
    text-align: left;
}
.pd-auth-card .pd-auth-field {
    margin: 0 0 var(--pd-space-3);
}
.pd-auth-card input:not([type="radio"]) {
    height: var(--pd-auth-field-h);
}
.pd-auth-card .pd-auth-submit {
    height: var(--pd-auth-field-h);
    margin-top: var(--pd-space-1);
}
/* 密码标签行右边的「忘记密码？」 */
.pd-auth-field-head a {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-primary);
    text-decoration: none;
}
.pd-auth-field-head a:hover {
    color: var(--pd-color-primary-hover);
}
/* 人机验证撑满一行（页面用 pd_render_captcha(false)，不再单独写「人机验证」标签）；发信前那个验证框在 .captcha-row 里，不受影响 */
.pd-auth-card .captcha-box > .cap-box,
.pd-auth-card .captcha-box > .cap-box > .cap-check {
    display: flex;
    width: 100%;
}
.pd-auth-card .captcha-box > .cap-box > .cap-check {
    height: var(--pd-auth-field-h);
}
/* 注册页性别：两格分段按钮，单选框本身藏起来（仍然参与 required 校验） */
.pd-auth-seg {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--pd-space-1);
}
.pd-auth2 .pd-auth-seg label {
    position: relative;
    margin: 0;
    font-weight: var(--pd-fw-regular);
}
.pd-auth2 .pd-auth-seg input {
    position: absolute;
    left: 0;
    bottom: 0;
    width: 1px;
    height: 1px;
    padding: 0;
    opacity: 0;
    pointer-events: none;
}
.pd-auth-seg span {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-1);
    height: var(--pd-auth-field-h);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-input-radius);
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    cursor: pointer;
    transition: border-color .15s ease, background .15s ease, color .15s ease;
}
.pd-auth-seg span:hover {
    border-color: var(--pd-color-border-strong);
}
.pd-auth-seg input:checked + span {
    border-color: var(--pd-color-primary);
    background: rgba(var(--pd-color-primary-rgb), .06);
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
}
.pd-auth-seg input:focus-visible + span {
    box-shadow: var(--pd-focus-ring);
}
/* 「其他方式登录」分隔线：两边细线，中间一行小字 */
.pd-auth-or {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    margin: var(--pd-space-4) 0 var(--pd-space-3);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
    white-space: nowrap;
}
.pd-auth-or::before,
.pd-auth-or::after {
    content: "";
    flex: 1 1 auto;
    height: 1px;
    background: var(--pd-color-divider);
}
/* 第三方登录：圆形图标 + 下面一行名字（core/oauth.php 的 pd_oauth_button_html，通行密钥按钮在 pages/login.php） */
.pd-auth-icons {
    display: flex;
    justify-content: center;
    gap: var(--pd-space-5);
}
.pd-auth-card .pd-auth-icon {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--pd-space-1);
    height: auto;
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    color: var(--pd-color-text-secondary);
    text-decoration: none;
    cursor: pointer;
}
.pd-auth-card .pd-auth-icon:hover {
    color: var(--pd-color-text);
}
.pd-auth-card .pd-auth-icon:focus-visible {
    outline: none;
}
.pd-auth-icon-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-auth-icon-btn);
    height: var(--pd-auth-icon-btn);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    transition: border-color .15s ease, background .15s ease;
}
.pd-auth-icon:hover .pd-auth-icon-btn {
    border-color: var(--pd-color-primary);
    background: var(--pd-color-surface-soft);
}
.pd-auth-icon:focus-visible .pd-auth-icon-btn {
    border-color: var(--pd-color-primary);
    box-shadow: var(--pd-focus-ring);
}
.pd-auth-icon-btn .pd-oauth-logo {
    width: var(--pd-icon-lg);
    height: var(--pd-icon-lg);
}
.pd-auth-icon-btn i {
    font-size: var(--pd-icon-lg);
}
body.theme-pd-dark .pd-oauth-logo--github {
    filter: invert(1);
}
/* 通行密钥说明：点「通行密钥怎么用？」才展开 */
.pd-auth-help {
    margin-top: var(--pd-space-3);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}
.pd-auth-help summary {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    cursor: pointer;
    list-style: none;
}
.pd-auth-help summary::-webkit-details-marker {
    display: none;
}
.pd-auth-help summary:hover {
    color: var(--pd-color-text-secondary);
}
.pd-info-block .pd-auth-help p.pd-field-hint {
    margin: var(--pd-space-1) 0 0;
}
@media (width < 640px) {
    body.theme-pd.pd-standalone .pd-page-frame main.wrap > .pd-info.pd-auth-wrap {
        margin-top: calc(var(--pd-auth-overlap) * -2 / 3);
    }
    .pd-info-block.pd-auth-card {
        padding-inline: var(--pd-space-3);
        padding-bottom: var(--pd-space-3);
    }
}

.content img.pd-emoji.pd-emoji-lg,
.reply .content img.pd-emoji.pd-emoji-lg,
.md-preview-body img.pd-emoji.pd-emoji-lg {
    /* 兔斯基按原图尺寸显示（多数 50×50），不缩放 */
    width: auto;
    height: auto;
}

/* 顶 / 踩：只留手指图标和数字，不要外框和底色，也不写「顶」「踩」二字（读屏仍能读到） */
body.theme-pd .pd-vote,
body.theme-pd .pd-vote:hover,
body.theme-pd .pd-vote.active {
    background: transparent;
    border-color: transparent;
}
body.theme-pd .pd-vote {
    padding: 0 calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-vote span {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

/* 签名：永远在这一层最底下；SIGNATURE 标签压在虚线上，不占一行高度。正文到签名线 24px，签名文字离虚线 16px，标签保持 12px */
body.theme-pd .pd-signature {
    margin-top: var(--pd-space-4);
}
body.theme-pd .pd-signature > span {
    position: absolute;
    top: 0;
    left: 0;
    transform: translateY(-50%);
    line-height: 1;
}
body.theme-pd .pd-signature p {
    margin-top: var(--pd-space-3);
}

/* 版块页 Hero：图标 + 名称 + 简介 + 主题 / 回复 / 版主 + 右侧版块小图；图标配色和首页「全部版块」卡片一致（pd-board-tone-N） */
body.theme-pd .pd-forum-hero {
    display: flex;
    align-items: flex-start;
    gap: var(--pd-space-3);
    margin: 0 0 var(--pd-space-3);
    padding: var(--pd-space-4) 26px;
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius-lg);
}
body.theme-pd .pd-forum-hero-icon {
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    color: var(--pd-board-icon-color);
    font-size: var(--pd-icon-lg);
    background: color-mix(in srgb, var(--pd-board-icon-color) 12%, var(--pd-color-surface));
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-forum-hero-art {
    display: block;
    flex: none;
    width: var(--pd-board-art-size);
    height: var(--pd-board-art-size);
    object-fit: contain;
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-forum-hero-main { flex: 1; min-width: 0; }
body.theme-pd .pd-forum-hero h1 {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.25;
}
body.theme-pd .pd-forum-hero-desc {
    margin: var(--pd-space-1) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
/* Hero 下面一行：排序标签（带图标）；版块页和首页同一套两栏布局（.pd-home-layout），右栏是 .pd-forum-sidebar。
   发新帖按钮和首页同款（.pd-side-post-btn）：宽屏在右栏最上面；右栏排到帖子下面时（≤1180px）改在标签行右边 */
body.theme-pd .pd-forum-main { min-width: 0; }
body.theme-pd .pd-forum-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    margin: 0 0 var(--pd-space-2);
}
body.theme-pd .pd-forum-toolbar .pd-forum-tabs { flex: 1 1 auto; min-width: 0; margin: 0; }
body.theme-pd .pd-forum-tabs a { gap: calc(var(--pd-space-1) / 2); }
/* 排序标签不被挤窄：放不下时整行横向滚动（.filter-tabs 自带 overflow-x） */
body.theme-pd .pd-forum-toolbar .pd-forum-tabs a { flex: none; }
/* 平板两列右栏（761–1180px）：最后一张单出来时占满一行，不孤零零半格；「本版概况」独占一行（右栏的发新帖按钮这时隐藏，
   所以概况是第 2 个子元素，热帖、活跃鱼友照样两两成行） */
@media (min-width: 761px) and (max-width: 1180px) {
    body.theme-pd .pd-forum-sidebar > :last-child:nth-child(odd),
    body.theme-pd .pd-forum-sidebar > .pd-forum-info { grid-column: 1 / -1; }
}
body.theme-pd .pd-forum-toolbar .pd-forum-post-inline { display: none; }
@media (max-width: 1180px) {
    body.theme-pd .pd-forum-sidebar > .pd-side-post-btn { display: none; }
    body.theme-pd .pd-forum-toolbar .pd-forum-post-inline { display: flex; flex: none; margin: 0; }
}
/* 本版概况：沿用首页「鱼塘近况」的三个数字 + 头像格；今日新增和版块卡片的 +N 一样用绿色 */
body.theme-pd .pd-forum-info .pd-pulse-stats b.is-up { color: var(--pd-text-green); }
body.theme-pd .pd-forum-tabs { border-bottom: 0; }
/* 版块页标签行（2026-10-05）：和首页同一套 .pd-feed-head / .pd-feed-tabs（文字 + 图标、选中项下面滑动色线）。
   有分类时「全部 + 分类」单选、色线跟着分类走；竖线后面的新帖 / 热帖 / 精帖可以叠加，选中时图标和文字用首页同款颜色。
   分类标签只有文字：标签行变窄时排序标签只留图标，分类照常显示文字，也不出悬停气泡 */
body.theme-pd .pd-forum-tabs a.active[data-forum-sort="all"] { --pd-feed-type-color: var(--pd-feed-color-reply); }
body.theme-pd .pd-forum-tabs a.active[data-forum-sort="new"] { --pd-feed-type-color: var(--pd-feed-color-latest); }
body.theme-pd .pd-forum-tabs a.active[data-forum-sort="hot"] { --pd-feed-type-color: var(--pd-feed-color-hot); }
body.theme-pd .pd-forum-tabs a.active[data-forum-sort="good"] { --pd-feed-type-color: var(--pd-feed-color-good); }
body.theme-pd .pd-forum-tabs a.active[data-forum-sort] { color: var(--pd-feed-type-color); }
body.theme-pd .pd-feed-tabs a.pd-forum-cat::after { content: none; }
@media (max-width: 640px) {
    body.theme-pd .pd-forum-hero { padding: var(--pd-space-3); }
    body.theme-pd .pd-forum-hero-art { --pd-board-art-size: var(--pd-board-art-size-sm); }
    body.theme-pd .pd-forum-hero:has(.pd-forum-hero-art) .pd-forum-hero-icon { display: none; }
    body.theme-pd .pd-forum-tabs a { min-width: 0; }
    /* 手机上标签行放不下四个标签加整颗按钮：按钮只留图标（读屏靠 aria-label） */
    body.theme-pd .pd-forum-toolbar .pd-forum-post-inline { padding: 0 var(--pd-space-2); }
    body.theme-pd .pd-forum-post-inline .pd-side-post-text { display: none; }
    body.theme-pd .pd-forum-post-inline:hover i { transform: none; }
}

/* 打赏窗（assets/tip.js，沿用 .pd-confirm-* 的外壳）：选数额的一排按钮 */
.pd-tip-amounts {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin: var(--pd-space-2) 0 0 calc(var(--pd-space-5) + var(--pd-space-2) + var(--pd-space-1));
}
.pd-tip-amount {
    position: relative;
    cursor: pointer;
}
.pd-tip-amount input {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}
.pd-tip-amount span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: calc(var(--pd-space-5) + var(--pd-space-2));
    height: var(--pd-btn-h);
    padding: 0 var(--pd-space-2);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-btn-radius);
}
.pd-tip-amount:hover span {
    border-color: var(--pd-color-primary);
}
.pd-tip-amount input:checked + span {
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
    border-color: var(--pd-color-primary);
}
.pd-tip-amount input:focus-visible + span {
    box-shadow: var(--pd-focus-ring);
}

/* 规则页 /points.php 的升级卡片（pages/legal/points.php）：头部「你现在是 → 下一级」+ 状态，条件一格一格（数字、进度条、差多少），
   底部升级按钮、一句说明和去签到页。满足的条件用绿色，没满足的状态用橙色 */
body.theme-pd .pd-upgrade-card {
    display: grid;
    gap: var(--pd-space-3);
    margin-top: var(--pd-space-3);
    padding: var(--pd-space-3);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-upgrade-card p { margin: 0; }
body.theme-pd .pd-upgrade-head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
}
body.theme-pd .pd-upgrade-path {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-upgrade-label {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-upgrade-arrow {
    margin: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-icon-xs);
}
body.theme-pd .pd-upgrade-state {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    color: var(--pd-text-orange);
    background: var(--pd-color-warning-soft);
    border-radius: var(--pd-radius-pill);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    white-space: nowrap;
}
body.theme-pd .pd-upgrade-state.is-ready {
    color: var(--pd-text-green);
    background: var(--pd-color-success-soft);
}
body.theme-pd .pd-upgrade-conds {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--pd-space-5) * 7)), 1fr));
    gap: var(--pd-space-2);
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-upgrade-cond {
    display: grid;
    gap: var(--pd-space-1);
    padding: var(--pd-space-2) var(--pd-space-3);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-upgrade-cond-name {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-upgrade-cond-name i { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-upgrade-cond.is-met .pd-upgrade-cond-name i { color: var(--pd-text-green); }
body.theme-pd .pd-upgrade-cond-value {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-upgrade-cond-value small {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-upgrade-cond.is-met .pd-level-progress-track span { background: var(--pd-color-success); }
body.theme-pd .pd-upgrade-cond-note {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-upgrade-cond.is-met .pd-upgrade-cond-note { color: var(--pd-text-green); }
body.theme-pd .pd-upgrade-foot {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-2) var(--pd-space-3);
}
body.theme-pd .pd-upgrade-foot form { margin: 0; }
body.theme-pd .pd-upgrade-foot .btn {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
}
body.theme-pd .pd-upgrade-hint {
    flex: 1 1 auto;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-upgrade-link {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    font-size: var(--pd-fs-sm);
}

/* 楼主徽章：回复里作者就是发主题的人时挂在昵称后面 */
body.theme-pd .pd-op-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-left: calc(var(--pd-space-2) / 2);
    padding: calc(var(--pd-space-1) / 8) var(--pd-space-1);
    color: var(--pd-color-on-primary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-normal);
    vertical-align: middle;
    white-space: nowrap;
    background: var(--pd-op-badge-bg);
    border-radius: var(--pd-radius-pill);
}

/* 透明官方鱼类头像：图片名和线上 assets/avatar/ 保持一致。
   额外的 [src] 提高 specificity，覆盖 .reply .pd-reply-avatar 的遮罩。
   图片目录可以是 /avatar/ 或本地预览 /exports/，普通头像不受影响。 */
body.theme-pd img[src]:is(
    [src*="/ai-fish-clownbot.webp"]
) {
    background: transparent;
    border-radius: 0;
    -webkit-mask-image: none;
    mask-image: none;
}

/* 帖子列表的底色与遮罩在外层链接/容器上，单独清图片不足以去掉它。 */
body.theme-pd .pd-avatar:has(> img[src]:is(
    [src*="/ai-fish-clownbot.webp"]
)) {
    background: transparent;
    border-radius: 0;
    -webkit-mask-image: none;
    mask-image: none;
}

/* 帖子状态徽章、置顶 / 精华印章与公开评分 / 打赏记录 */
.pd-thread-badges {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: calc(var(--pd-space-1) / 2);
    margin-inline-start: var(--pd-space-1);
    vertical-align: middle;
}
.pd-thread-badge {
    display: inline-flex;
    align-items: center;
    min-height: var(--pd-badge-h);
    padding-inline: var(--pd-badge-px);
    border: 1px solid currentColor;
    border-radius: var(--pd-radius-pill);
    font-size: var(--pd-badge-fs);
    font-weight: var(--pd-badge-weight);
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
}
.pd-thread-badges--prefix { flex-wrap: nowrap; margin-inline-start: 0; }
.pd-thread-badges--prefix > .pd-thread-badge {
    flex: 0 0 auto;
    justify-content: center;
    width: var(--pd-thread-title-icon-size);
    height: var(--pd-thread-title-icon-size);
    min-height: var(--pd-thread-title-icon-size);
    padding: 0;
    border: 0;
    background: transparent;
    border-radius: var(--pd-badge-radius);
    overflow: hidden;
}
.pd-thread-heading .pd-thread-badges {
    --pd-thread-title-icon-size: var(--pd-icon-lg);
}
.pd-thread-badges--prefix > .pd-thread-badge > img {
    display: block;
    width: 100%;
    height: 100%;
}
.pd-thread-badge-hot { color: var(--pd-text-red); background: var(--pd-color-error-soft); }
.pd-thread-badge-rating { color: var(--pd-text-green); background: var(--pd-color-success-soft); }
/* 反馈的处理状态（标题后，core/site-categories.php）：未处理灰、已处理绿 */
.pd-thread-badge-status {
    flex: 0 0 auto;
    width: calc(var(--pd-icon-md) * 8 / 3);
    height: var(--pd-icon-md);
    min-height: var(--pd-icon-md);
    padding: 0;
    border: 0;
    border-radius: var(--pd-badge-radius);
    background: transparent;
    font-weight: var(--pd-fw-regular);
}
.pd-thread-badge-status > img { display: block; width: 100%; height: 100%; }
.pd-thread-badge-status > .pd-status-dark { display: none; }
body.theme-pd-dark .pd-thread-badge-status > .pd-status-light { display: none; }
body.theme-pd-dark .pd-thread-badge-status > .pd-status-dark { display: block; }
/* 站务分类徽章（公告 / 反馈 / 建议，标题前，assets/badges/<分类>-badge.svg 的 44 × 24 图）：和顶 / 精方块同高，宽按 11∶6 */
.pd-thread-badges--prefix > .pd-thread-badge-cat { width: calc(var(--pd-thread-title-icon-size) * 11 / 6); }
body.theme-pd .pd-thread-main h2 > .pd-thread-badges { flex-shrink: 0; margin-inline-start: 0; }
body.theme-pd .pd-thread-title-card h1 .pd-thread-badges .pd-badge-sq { margin: 0; }
/* 印章是跨过标题 / 正文分隔线的水印；不参与网格，不挤标题，不拦截点击。 */
body.theme-pd .pd-thread-title-row {
    position: relative;
}
body.theme-pd .pd-thread-title-row > [data-thread-stamps] {
    position: absolute;
    inset-inline-end: var(--pd-thread-stamp-right);
    bottom: calc(-1 * var(--pd-space-5));
    pointer-events: none;
    user-select: none;
    opacity: var(--pd-thread-stamp-opacity);
}
/* 标题行右侧的收藏、分享按钮画在印章上面：帖子页两栏后标题行变窄，印章会挪到按钮附近（管理员多一个管理按钮时会压住收藏星标） */
body.theme-pd .pd-thread-heading > :is(.pd-tact--head, .pd-thread-share--head),
body.theme-pd .pd-thread-heading > form:has(.pd-tact--head) {
    position: relative;
    z-index: 1;
}
.pd-thread-stamps {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: var(--pd-space-2);
    margin: 0;
    padding: 0;
}
.pd-thread-stamp { display: inline-flex; flex-shrink: 0; width: var(--pd-thread-stamp-width); }
.pd-thread-stamp img { display: block; width: 100%; height: auto; }
body.theme-pd .pd-thread-title-row:has(.pd-thread-stamps--many) > [data-thread-stamps] {
    position: static;
    grid-column: 1 / -1;
    width: 100%;
}
.pd-thread-stamps--many {
    flex-wrap: wrap;
    justify-content: flex-end;
}
#pd-stamp-overlay .pd-confirm-box {
    width: var(--pd-stamp-picker-width);
    max-height: calc(100dvh - var(--pd-space-4));
    overflow-y: auto;
}
.pd-stamp-picker {
    display: grid;
    grid-template-columns: repeat(var(--pd-stamp-picker-columns), minmax(0, 1fr));
    gap: var(--pd-space-2);
    margin-block: var(--pd-space-3);
}
.pd-stamp-choice {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-2);
    border: var(--pd-tab-indicator) solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    cursor: pointer;
    font-size: var(--pd-fs-sm);
}
.pd-stamp-choice:has(input:checked) {
    border-color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
}
.pd-stamp-choice:has(input:focus-visible) { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); }
.pd-stamp-choice:has(input:disabled) { cursor: default; opacity: var(--pd-thread-stamp-opacity); }
.pd-stamp-choice input {
    position: absolute;
    inset-inline-start: var(--pd-space-1);
    top: var(--pd-space-1);
    accent-color: var(--pd-color-primary);
    width: var(--pd-icon-md);
    height: var(--pd-icon-md);
    min-height: 0;
    padding: 0;
    margin: 0;
    box-shadow: none;
}
.pd-stamp-choice img { width: var(--pd-stamp-picker-image-width); max-width: 100%; height: auto; }
#pd-stamp-overlay [data-stamp-error] { color: var(--pd-color-error); }
/* 标题文字与徽章分别参与居中对齐，避免行内基线把小徽章推低。 */
body.theme-pd .pd-thread-heading > h1,
body.theme-pd .thread-title {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-thread-heading > h1 {
    flex-wrap: wrap;
}
.pd-thread-title-text {
    min-width: 0;
}
body.theme-pd .thread-title > .pd-thread-title-text {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd .thread-title > .pd-thread-badges,
.pd-thread-main-card [data-thread-prefix-badges],
.pd-thread-main-card [data-thread-badges] {
    display: inline-flex;
    flex: 0 0 auto;
    max-width: 100%;
}
body.theme-pd .thread-title > .pd-thread-badges,
.pd-thread-main-card [data-thread-prefix-badges] > .pd-thread-badges,
.pd-thread-main-card [data-thread-badges] > .pd-thread-badges {
    margin-inline-start: 0;
}
.pd-thread-main-card [data-thread-prefix-badges]:empty,
.pd-thread-main-card [data-thread-badges]:empty,
.pd-thread-main-card [data-thread-stamps]:empty { display: none; }
@media (max-width: 640px) {
    body.theme-pd .pd-thread-title-row > [data-thread-stamps] {
        inset-inline-end: 0;
        bottom: calc(-1 * (var(--pd-space-5) + var(--pd-space-2)));
    }
    .pd-thread-stamp { width: var(--pd-thread-stamp-width-sm); }
}
.pd-tact--rate:disabled { opacity: .55; cursor: default; }
/* 记录有内容时展示，逐条排列，长理由在同一条记录内自然换行。 */
.pd-feedback-section {
    margin-block: var(--pd-space-3);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-feedback-section:empty { display: none; }
.pd-feedback-title {
    margin: 0 0 var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
    line-height: var(--pd-lh-normal);
}
.pd-feedback-list {
    margin: 0;
    padding: 0;
    list-style: none;
}
.pd-feedback-record {
    margin: 0;
    padding-block: calc(var(--pd-space-1) / 2);
    overflow-wrap: anywhere;
}
.pd-feedback-user { font-weight: var(--pd-fw-medium); }
.pd-feedback-amount { color: var(--pd-text-orange); white-space: nowrap; font-weight: var(--pd-fw-medium); }
.pd-feedback-time { white-space: nowrap; }
.pd-feedback-pages {
    display: flex;
    align-items: center;
    gap: var(--pd-space-3);
    margin-top: var(--pd-space-1);
    font-size: var(--pd-fs-xs);
}
.pd-feedback-pages a { color: var(--pd-color-link); }
.pd-rating-panel { border-block: 1px dashed var(--pd-color-border); }
.pd-rating-summary {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-3);
    padding-block: var(--pd-space-2);
    list-style: none;
    cursor: pointer;
}
.pd-rating-summary::-webkit-details-marker { display: none; }
.pd-rating-summary .pd-feedback-title { margin: 0; font-weight: var(--pd-fw-semibold); }
.pd-rating-toggle { margin-inline-start: auto; color: var(--pd-color-link); }
.pd-rating-panel .pd-rating-collapse,
.pd-rating-panel[open] .pd-rating-expand { display: none; }
.pd-rating-panel[open] .pd-rating-collapse { display: inline; }
.pd-rating-summary:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: var(--pd-tab-indicator); }
.pd-rating-table { width: 100%; table-layout: fixed; border-collapse: collapse; font-size: var(--pd-fs-sm); }
.pd-rating-table th,
.pd-rating-table td { padding: var(--pd-space-2) var(--pd-space-1); text-align: start; vertical-align: top; border-top: 1px dashed var(--pd-color-border); overflow-wrap: anywhere; }
.pd-rating-table th { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); font-weight: var(--pd-fw-medium); }
.pd-rating-table th:first-child { width: 32%; }
.pd-rating-table th:nth-child(2) { width: var(--pd-feedback-amount-width); }
.pd-rating-table .pd-feedback-user { display: inline-flex; align-items: center; gap: var(--pd-space-1); max-width: 100%; }
.pd-feedback-avatar { width: var(--pd-feedback-avatar-size); height: var(--pd-feedback-avatar-size); flex: none; object-fit: cover; border-radius: var(--pd-radius-round); }
.pd-rating-table .pd-feedback-user span { min-width: 0; overflow-wrap: anywhere; }
.pd-rating-table .pd-feedback-time { display: block; margin-block-start: calc(var(--pd-space-1) / 2); color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-2xs); white-space: normal; }
.pd-rating-table .pd-feedback-amount { font-weight: var(--pd-fw-medium); }
.pd-rating-panel .pd-feedback-pages { margin-block: var(--pd-space-2); }
@media (max-width: 640px) {
    .pd-rating-summary { gap: var(--pd-space-2); }
    .pd-rating-table { font-size: var(--pd-fs-xs); }
    .pd-rating-table th:nth-child(2) { width: calc(var(--pd-feedback-amount-width) - var(--pd-space-4)); }
    .pd-rating-table .pd-feedback-user { flex-direction: column; align-items: start; }
}
.pd-rating-field { display: block; margin-block: var(--pd-space-3); font-size: var(--pd-fs-sm); }
textarea.pd-rating-reason {
    display: block;
    width: 100%;
    min-height: calc(var(--pd-input-h) * 2);
    margin-block-start: var(--pd-space-1);
    padding: var(--pd-space-2);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-input-radius);
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    font: inherit;
    resize: vertical;
}
textarea.pd-rating-reason:focus { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: var(--pd-tab-indicator); }
[data-rating-status] { color: var(--pd-color-error); font-size: var(--pd-fs-xs); }

/* End thread feedback components */

/* YouTube：确认前只渲染本站提示，不请求外部缩略图或播放器。 */
.pd-youtube { margin-block: var(--pd-space-3); max-width: 100%; min-width: 0; }
.pd-youtube-player {
    position: relative;
    width: 100%;
    aspect-ratio: var(--pd-youtube-aspect-ratio);
    min-height: var(--pd-youtube-min-height);
    overflow: hidden;
    border: var(--pd-navbar-search-border-width) solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface-soft);
}
.pd-youtube-consent {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-3);
    color: var(--pd-color-text);
    text-align: center;
}
.pd-youtube-consent > i { color: var(--pd-color-error); font-size: var(--pd-icon-xl); }
.pd-youtube-consent > strong { font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-youtube .pd-youtube-consent > .btn { color: var(--pd-color-on-primary) !important; }
.pd-youtube-consent > p {
    margin: 0;
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text-secondary);
}
.pd-youtube-player > iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.pd-youtube-links {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-1);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-youtube .pd-youtube-links > a { color: var(--pd-text-blue); }
/* End YouTube embeds */

/* ---------- 注册成功页（pages/partials/register-done.php）：号码随机分配，大字显示 ---------- */
.pd-info-block.pd-reg-done {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--pd-space-2);
    max-width: var(--pd-auth-max-width);
    margin-inline: auto;
    text-align: center;
}
.pd-reg-done-icon {
    color: var(--pd-color-success);
    font-size: var(--pd-fs-display);
}
.pd-info-block.pd-reg-done h1 {
    margin: 0;
    padding-left: 0;
    border-left: 0;
}
.pd-info-block.pd-reg-done p.pd-reg-done-hello {
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
.pd-reg-done-id {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--pd-space-1);
    width: 100%;
    padding: var(--pd-space-4) var(--pd-space-3);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-radius-md);
}
.pd-reg-done-label {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
.pd-reg-done-number {
    color: var(--pd-color-primary);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-display);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    letter-spacing: .12em;
    font-variant-numeric: tabular-nums;
    user-select: all;
}
.pd-reg-done-copy {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    padding: 0 var(--pd-space-2);
    min-height: var(--pd-navbar-tool-size);
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-xs);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-pill);
    cursor: pointer;
}
.pd-reg-done-copy:hover { border-color: var(--pd-color-primary); }
.pd-reg-done-copy:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
.pd-reg-done-copy.is-copied { color: var(--pd-color-success); border-color: var(--pd-color-success); }
.pd-reg-done-notes {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    margin: 0;
    padding: 0;
    list-style: none;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
.pd-reg-done-actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-1);
}
.pd-reg-done-actions .btn-light { margin-left: 0; }

/* 首页列表视图（版块页的帖子列表同一套）：每个帖子一张卡片，边框、圆角、阴影与「全部版块」卡片一致 */
body.theme-pd :is(.pd-home-shell, .pd-forum-feed) .pd-thread-list {
    gap: var(--pd-home-card-gap);
    padding-top: var(--pd-space-3);
}
/* 版块页：第一张帖子卡和右栏第一张卡（本版概况）顶边对齐 */
body.theme-pd .pd-forum-feed .pd-thread-list { padding-top: var(--pd-space-2); }
body.theme-pd :is(.pd-home-shell, .pd-forum-feed) .pd-thread-list > .pd-thread-row,
body.theme-pd .pd-home-shell .pd-feed .pd-thread-list > .pd-thread-row:last-child,
body.theme-pd .pd-feed.pd-forum-feed .pd-thread-list > .pd-thread-row:last-child {
    min-height: var(--pd-home-card-h);
    padding-inline: var(--pd-space-3);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius-row);
    box-shadow: var(--pd-shadow-2);
    transition: border-color .15s ease;
}
body.theme-pd :is(.pd-home-shell, .pd-forum-feed) .pd-thread-list > .pd-thread-row:hover {
    border-color: var(--pd-color-border-strong);
}

/* ===== 站外链接提醒页 /go 与友情链接（2026-10-04）===== */
body.theme-pd .pd-go-lead {
    margin: 0 0 var(--pd-space-4);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-go-url {
    margin: 0 0 var(--pd-space-3);
    padding: var(--pd-space-3) var(--pd-space-4);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-md);
    font-size: var(--pd-fs-md);
    line-height: var(--pd-lh-normal);
    overflow-wrap: anywhere;
    word-break: break-all;
}
body.theme-pd .pd-go-url b {
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-go-url span {
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-go-warning {
    display: flex;
    gap: var(--pd-space-2);
    align-items: baseline;
    margin: 0 0 var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-space-3);
    background: var(--pd-color-warning-soft);
    border-radius: var(--pd-radius-md);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-go-warning i {
    color: var(--pd-color-warning);
}
body.theme-pd .pd-go-actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-2);
    margin: var(--pd-space-4) 0 var(--pd-space-3);
}
body.theme-pd .pd-go-note {
    margin: 0;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-go-trusted {
    margin-top: var(--pd-space-4);
    padding-top: var(--pd-space-3);
    border-top: 1px solid var(--pd-color-divider);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-go-trusted[hidden] { display: none; }
body.theme-pd .pd-go-trusted summary {
    color: var(--pd-color-text-secondary);
    cursor: pointer;
}
body.theme-pd .pd-go-trusted ul {
    margin: var(--pd-space-2) 0 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-go-trusted li {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-3);
    padding: var(--pd-space-1) 0;
}
body.theme-pd .pd-go-remove {
    padding: 0;
    border: 0;
    background: none;
    color: var(--pd-color-primary);
    font: inherit;
    cursor: pointer;
}
body.theme-pd .pd-go-remove:hover { color: var(--pd-color-primary-hover); }

body.theme-pd .pd-friend-logo {
    position: relative;
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    background: var(--pd-color-primary-soft);
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-friend-logo img {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    background: var(--pd-color-surface);
}
body.theme-pd .pd-friend-list {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-friend-list li {
    min-width: 0;
    max-width: 100%;
}
body.theme-pd .pd-friend-list a {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    max-width: 100%;
    padding: 4px 12px 4px 6px;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    text-decoration: none;
}
body.theme-pd .pd-friend-list a:hover {
    background: var(--pd-color-primary-soft);
    color: var(--pd-color-primary);
}
body.theme-pd .pd-friend-list .pd-friend-logo {
    width: 16px;
    height: 16px;
    border-radius: var(--pd-radius-round);
    font-size: var(--pd-fs-2xs);
}
body.theme-pd .pd-friend-name {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd .pd-friends-note {
    margin: 0 0 var(--pd-space-4);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-friends-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: var(--pd-space-3);
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-friend-card {
    display: flex;
    align-items: center;
    gap: var(--pd-space-3);
    height: 100%;
    padding: var(--pd-space-3);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-lg);
    color: var(--pd-color-text);
    text-decoration: none;
}
body.theme-pd .pd-friend-card:hover { border-color: var(--pd-color-primary); }
body.theme-pd .pd-friend-card .pd-friend-logo {
    width: 40px;
    height: 40px;
    border-radius: var(--pd-radius-round);
    font-size: var(--pd-fs-lg);
}
body.theme-pd .pd-friend-text {
    display: flex;
    flex-direction: column;
    min-width: 0;
}
body.theme-pd .pd-friend-text b {
    overflow: hidden;
    font-weight: var(--pd-fw-semibold);
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd .pd-friend-text span {
    overflow: hidden;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-sm);
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 手机端帖子详情页：标题缩小一档（16px），只显示一行，放不下的部分截断；徽章、复制按钮不换行也不被挤掉 */
@media (width < 640px) {
    body.theme-pd .post-title-card h1 {
        font-size: var(--pd-fs-md);
    }
    body.theme-pd .pd-thread-heading > h1 {
        flex-wrap: nowrap;
    }
    body.theme-pd .pd-thread-heading > h1 > .pd-thread-title-text {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
    body.theme-pd .pd-thread-heading > h1 > :not(.pd-thread-title-text) {
        flex-shrink: 0;
    }
}

/* 手机端回复区标题栏：参与文案 + 「盖否?」强制一行（12px，放不下截断文案），排序和电梯直达整块隐藏 */
@media (width < 640px) {
    body.theme-pd .pd-replies-title {
        display: flex;
        flex-wrap: nowrap;
        align-items: center;
    }
    body.theme-pd .pd-replies-title h2 {
        display: flex;
        flex: 1 1 auto;
        min-width: 0;
        font-size: var(--pd-fs-xs);
    }
    body.theme-pd .pd-replies-title h2 i {
        margin-inline-end: 0;
        font-size: var(--pd-icon-sm);
    }
    body.theme-pd .pd-replies-summary {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
    body.theme-pd .pd-replies-cta {
        min-height: 0;
        margin-inline-start: 0;
        font-size: var(--pd-fs-xs);
    }
    body.theme-pd .pd-replies-tools {
        display: none;
    }
}

/* 帖子详情页：主楼、回复区、发表回复三张独立卡片，同一个圆角（12px） */
body.theme-pd .post-title-card,
body.theme-pd .post-content-card,
body.theme-pd .pd-thread-main-card,
body.theme-pd .card.replies,
body.theme-pd.page-thread main.wrap > #reply-form {
    border-radius: var(--pd-card-radius-thread) !important;
}

/* ===== 引用回复：被引用那层的昵称 / 发表时间 / 摘要，灰底小块，右上角一个大引号；回复框上方的「引用 xx」小条 ===== */
body.theme-pd .pd-quote {
    position: relative;
    margin: 0 0 var(--pd-space-2);
    padding: var(--pd-space-2) calc(var(--pd-space-5) + var(--pd-space-3)) var(--pd-space-2) var(--pd-space-3);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    background: var(--pd-color-surface-soft);
    border: 0;
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-quote-head {
    display: block;
    color: var(--pd-color-text-tertiary);
    text-decoration: none;
}
body.theme-pd .pd-quote-head:hover { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-quote-name { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-quote-text {
    margin: var(--pd-space-1) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    overflow-wrap: anywhere;
}
body.theme-pd .pd-quote-mark {
    position: absolute;
    top: var(--pd-space-2);
    right: var(--pd-space-3);
    color: var(--pd-color-border-strong);
    font-size: var(--pd-icon-xl);
    pointer-events: none;
}
body.theme-pd .pd-quote-chip {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0 0 var(--pd-space-2);
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-quote-chip[hidden] { display: none; }
body.theme-pd .pd-quote-chip > span { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body.theme-pd .pd-quote-chip button {
    flex: none;
    color: var(--pd-color-text-tertiary);
    background: none;
    border: 0;
    cursor: pointer;
}
body.theme-pd .pd-quote-chip button:hover { color: var(--pd-color-text); }

/* ===== UID 徽章（core/account.php 的 pd_uid_badge_html）：描边小胶囊；官方 AI 紫，官方号段蓝，靓号金，其余灰 ===== */
body.theme-pd .pd-uid {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-height: var(--pd-badge-h);
    padding-inline: var(--pd-badge-px);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-variant-numeric: tabular-nums;
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
    background: transparent;
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-pill);
    cursor: default;
}
/* 号码前面的鱼头 logo：用 SVG 当遮罩，颜色跟着文字色走（普通灰 / 官方蓝 / 靓号深棕） */
body.theme-pd .pd-uid-fish {
    flex: 0 0 auto;
    width: 1.1em;
    height: 1.1em;
    background: currentColor;
    -webkit-mask: url("fish-head.svg?v=1") center / contain no-repeat;
    mask: url("fish-head.svg?v=1") center / contain no-repeat;
}
/* 靓号：实心金底深色字 + 尾部一个「靓」字小标，比普通和官方都醒目 */
body.theme-pd .pd-uid--pretty {
    color: var(--pd-uid-pretty-fg);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-type-bounty);
    border-color: var(--pd-color-type-bounty);
}
body.theme-pd .pd-uid-tag {
    padding-inline: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-type-bounty);
    font-size: var(--pd-fs-2xs);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-uid-pretty-fg);
    border-radius: var(--pd-radius-xs);
}
/* 个人主页顶部的大号码：字号 16px，单击整串选中，方便复制（数字 ID 可以用来登录） */
body.theme-pd .pd-uid--lg {
    min-height: calc(var(--pd-badge-h) + var(--pd-space-1));
    padding-inline: var(--pd-space-2);
    font-size: var(--pd-fs-md);
    user-select: all;
}
body.theme-pd .pd-uid--official {
    color: var(--pd-color-primary);
    background: var(--pd-color-primary-soft);
    border-color: color-mix(in srgb, var(--pd-color-primary) 35%, transparent);
}
/* 官方 AI 账号：昵称、身份图标和号码统一用同一个紫色，深浅色一致。 */
body.theme-pd .pd-uid--ai {
    color: var(--pd-color-role-ai);
    background: color-mix(in srgb, var(--pd-color-role-ai) 10%, transparent);
    border-color: color-mix(in srgb, var(--pd-color-role-ai) 35%, transparent);
}
body.theme-pd .pd-uid--system {
    color: var(--pd-color-role-system);
    background: color-mix(in srgb, var(--pd-color-role-system) 10%, transparent);
    border-color: color-mix(in srgb, var(--pd-color-role-system) 35%, transparent);
}
body.theme-pd .pd-uid-ai {
    flex: 0 0 auto;
    line-height: 1;
}

/* 认证会员：昵称旁的蓝色认证标识、认证会员页名录与申请表 */
body.theme-pd .pd-verified-badge {
    display: inline-flex;
    align-items: center;
    margin-left: var(--pd-space-1);
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-sm);
    line-height: 1;
    vertical-align: middle;
    cursor: help;
}
body.theme-pd .pd-verified-badge:focus-visible {
    outline: 2px solid var(--pd-color-primary);
    outline-offset: 2px;
    border-radius: 50%;
}
body.theme-pd .pd-identity-badge + .pd-verified-badge {
    margin-left: calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-verify-count {
    margin-left: var(--pd-space-1);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-verify-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-verify-card {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    min-width: 0;
    padding: var(--pd-space-3);
    background: var(--pd-color-surface-soft);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-verify-avatar img {
    display: block;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    border-radius: 50%;
    object-fit: cover;
}
body.theme-pd .pd-verify-avatar {
    flex: none;
}
body.theme-pd .pd-verify-main {
    display: flex;
    flex: 1;
    flex-wrap: wrap;
    align-items: center;
    min-width: 0;
    gap: 0 var(--pd-space-1);
}
body.theme-pd .pd-verify-name {
    max-width: 100%;
    overflow: hidden;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd .pd-verify-host,
body.theme-pd .pd-verify-intro-text {
    flex-basis: 100%;
    overflow: hidden;
    font-size: var(--pd-fs-xs);
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd .pd-verify-host {
    font-family: var(--pd-font-mono);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-verify-intro-text {
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-verify-pm {
    flex: none;
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-verify-pm:hover {
    color: var(--pd-color-primary);
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-verify-howto {
    margin-top: var(--pd-space-1);
    padding: var(--pd-space-2) var(--pd-space-3);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-verify-howto summary {
    cursor: pointer;
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
body.theme-pd .pd-verify-howto ol {
    margin: 0 0 var(--pd-space-2);
    padding-left: var(--pd-space-4);
    font-size: var(--pd-fs-sm);
    line-height: 1.8;
}
body.theme-pd .pd-verify-mine {
    padding-left: var(--pd-space-4);
}
body.theme-pd .pd-verify-form {
    display: grid;
    gap: var(--pd-space-1);
    max-width: 560px;
}
body.theme-pd .pd-verify-form label {
    margin-top: var(--pd-space-2);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
body.theme-pd .pd-verify-form .btn {
    justify-self: start;
    margin-top: var(--pd-space-3);
}
/* 商家认证（core/merchant.php）：我的认证状态、经营类目勾选、名录卡片上的类目 */
body.theme-pd .pd-merchant-status {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-1);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-merchant-status.is-active > i { color: var(--pd-color-success); }
body.theme-pd .pd-merchant-status.is-expired > i { color: var(--pd-color-role-merchant); }
body.theme-pd .pd-merchant-status.is-rejected > i { color: var(--pd-color-error); }
body.theme-pd .pd-merchant-picks {
    display: grid;
    gap: var(--pd-space-1);
    margin: var(--pd-space-2) 0 0;
    padding: 0;
    border: 0;
}
body.theme-pd .pd-merchant-picks legend {
    margin-bottom: var(--pd-space-1);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}
body.theme-pd .pd-verify-form .pd-merchant-picks label {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-1);
    margin: 0;
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-merchant-picks label .muted { font-size: var(--pd-fs-xs); }
body.theme-pd .pd-merchant-chips {
    display: flex;
    flex-wrap: wrap;
    gap: calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-merchant-chip {
    padding: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-role-merchant);
    font-size: var(--pd-fs-xs);
    background: color-mix(in srgb, var(--pd-color-role-merchant) 12%, transparent);
    border-radius: var(--pd-radius-sm);
}
@media (max-width: 960px) {
    body.theme-pd .pd-verify-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
    body.theme-pd .pd-verify-grid { grid-template-columns: minmax(0, 1fr); }
}
body.theme-pd .pd-verified-badge--merchant {
    color: var(--pd-color-role-merchant);
}
body.theme-pd .pd-verified-labels {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin: var(--pd-space-1) 0 0;
}
body.theme-pd .pd-verified-label {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 4) var(--pd-space-1);
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-xs);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-verified-label--merchant {
    color: var(--pd-color-role-merchant);
    background: color-mix(in srgb, var(--pd-color-role-merchant) 12%, transparent);
}
body.theme-pd .pd-gender {
    display: inline-flex;
    align-items: center;
    margin-left: var(--pd-space-1);
    font-size: var(--pd-fs-sm);
    line-height: 1;
}
body.theme-pd .pd-gender--male { color: var(--pd-color-gender-male); }
body.theme-pd .pd-gender--female { color: var(--pd-color-gender-female); }

/* ===== 个人设置：性别单选、生日（公历 / 农历）选择 ===== */
body.theme-pd .pd-choice-row {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-3);
    margin: var(--pd-space-1) 0;
}
body.theme-pd .pd-choice {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
    font-size: var(--pd-fs-sm);
    cursor: pointer;
}
body.theme-pd .pd-choice[hidden] { display: none; }
body.theme-pd .pd-choice input { width: auto; margin: 0; }
body.theme-pd .pd-birth-fields {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    margin: var(--pd-space-1) 0;
}
body.theme-pd .pd-birth-fields select { width: auto; min-width: 88px; }
body.theme-pd .pd-birth-result {
    min-height: var(--pd-lh-normal);
    margin: var(--pd-space-1) 0;
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
}
body.theme-pd .pd-birth-result.is-error { color: var(--pd-color-error); }

/* 公开的星座标签：符号 + 星座名，描边小胶囊，和 UID 徽章并排 */
body.theme-pd .pd-zodiac {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-height: var(--pd-badge-h);
    margin-left: var(--pd-space-1);
    padding-inline: var(--pd-badge-px);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-zodiac img { width: var(--pd-icon-md); height: var(--pd-icon-md); }
body.theme-pd .pd-birth-result img { margin-right: var(--pd-space-1); vertical-align: middle; }
body.theme-pd .pd-birth-public { margin: 0; }

/* ===== 签名里的图片、对齐、设置页预览（core/signature.php）===== */
:root { --pd-sig-img-max-h: 60px; }   /* 签名图片：横幅式，一张一行，高度不超过 60px（经典 468×60 签名横幅） */
body.theme-pd .pd-signature .pd-sig-img,
body.theme-pd .pd-space-sign .pd-sig-img,
body.theme-pd .pd-signature-preview .pd-sig-img {
    display: block;
    width: auto;
    max-width: 100%;
    height: auto;
    max-height: var(--pd-sig-img-max-h);
    margin: calc(var(--pd-space-1) / 2) 0;
    object-fit: contain;
    object-position: left center;
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-sig-align { display: block; }
body.theme-pd .pd-sig-align--center { text-align: center; }
body.theme-pd .pd-sig-align--right { text-align: right; }
body.theme-pd .pd-signature-preview {
    margin: var(--pd-space-1) 0;
    padding: var(--pd-space-2);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-card-radius);
}
body.theme-pd .pd-signature-preview[hidden] { display: none; }
body.theme-pd .pd-signature-preview-label { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-signature-preview p { margin: var(--pd-space-1) 0 0; font-size: var(--pd-fs-xs); line-height: var(--pd-lh-normal); overflow-wrap: anywhere; }

/* ===== 回复头部右侧：图标按钮（只看Ta · 回复 · 举报 / 「…」菜单）+ 楼层号，整组靠右 ===== */
body.theme-pd .pd-reply-head-end {
    margin-left: auto;
    gap: var(--pd-space-2);
}
body.theme-pd .pd-reply-acts {
    display: inline-flex;
    align-items: center;
    gap: 2px;
}
body.theme-pd .pd-reply-act {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    padding: 0;
    border: 0;
    border-radius: var(--pd-radius-pill);
    background: transparent;
    color: var(--pd-color-text-tertiary);
    font-family: inherit;
    font-size: var(--pd-icon-sm);
    line-height: 1;
    text-decoration: none;
    cursor: pointer;
}
body.theme-pd .pd-reply-act:hover,
body.theme-pd .pd-reply-act:focus-visible {
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-primary);
}
body.theme-pd .reply a.pd-reply-act.pd-only-author {
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .reply a.pd-reply-act.pd-only-author:hover {
    color: var(--pd-color-primary);
}

/* 发布时间 · 版块 · 浏览 · 回复：底部操作栏左侧，右侧是支持 / 反对 / 举报 / 收藏 / 打赏 / 评分 / 分享。 */
body.theme-pd .pd-thread-stats {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-thread-stats .pd-meta-stat {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    white-space: nowrap;
    color: inherit;
    text-decoration: none;
}
body.theme-pd .pd-thread-stats a.pd-meta-stat:hover {
    color: var(--pd-color-primary);
}
body.theme-pd .pd-thread-stats i {
    font-size: var(--pd-icon-xs);
}

/* 底部操作栏统一尺度：文字 / 数字 12px，图标 14px，图标与文字间隔 4px，右侧按钮之间 16px，左侧统计项之间 8px；整排同一行高垂直居中。 */
body.theme-pd .pd-thread-actions {
    min-height: calc(var(--pd-space-4) + var(--pd-space-1));
}
body.theme-pd .pd-tact,
body.theme-pd .pd-thread-share {
    gap: calc(var(--pd-space-1) / 2);
    min-height: var(--pd-space-4);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-tact i,
body.theme-pd .pd-thread-stats i {
    width: var(--pd-icon-xs);
    font-size: var(--pd-icon-xs);
    text-align: center;
}
body.theme-pd .pd-thread-share--head {
    flex: 0 0 auto;
    gap: calc(var(--pd-space-1) / 2);
    min-width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    padding: 0 calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-thread-share--head i {
    width: auto;
    font-size: var(--pd-icon-sm);
}
body.theme-pd .pd-thread-share--head:hover:not(:disabled),
body.theme-pd .pd-thread-share--head[aria-expanded="true"] {
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text);
    opacity: 1;
}
body.theme-pd .pd-tact-count {
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-thread-stats {
    gap: var(--pd-space-1);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-thread-stats .pd-meta-stat {
    gap: calc(var(--pd-space-1) / 2);
}
@media (max-width: 640px) {
    body.theme-pd .pd-thread-action-group {
        gap: var(--pd-space-2);
    }
}

/* 标题右侧的收藏、分享：只有一个图标按钮，不显示文字和数量 */
body.theme-pd .pd-thread-head-fav {
    display: flex;
    flex: 0 0 auto;
    margin: 0;
}
body.theme-pd .pd-tact--head {
    flex: 0 0 auto;
    min-width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    padding: 0 calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-tact--head i {
    width: auto;
    font-size: var(--pd-icon-sm);
}
body.theme-pd .pd-tact--head:hover:not(:disabled) {
    background: var(--pd-color-surface-soft);
    opacity: 1;
}
body.theme-pd .pd-tact--head [data-tact-label],
body.theme-pd .pd-tact--head .pd-tact-count,
body.theme-pd .pd-thread-share--head .pd-tact-count {
    display: none;
}
body.theme-pd .pd-tact--fav.pd-tact--head.is-active {
    font-weight: var(--pd-fw-regular);
}

/* 收藏点亮后是黄色星星（不用主题蓝） */
body.theme-pd .pd-tact--fav.is-active,
body.theme-pd .pd-tact--fav.is-active i {
    color: var(--pd-color-warning);
}

/* 保存按钮保存中：文字隐藏（宽度不变），中间显示转圈 */
body.theme-pd .btn.is-saving {
    position: relative;
    -webkit-text-fill-color: transparent;
    pointer-events: none;
}
body.theme-pd .btn.is-saving::after {
    content: "";
    position: absolute;
    inset: 0;
    width: var(--pd-icon-sm);
    height: var(--pd-icon-sm);
    margin: auto;
    border: 2px solid var(--pd-color-surface);
    border-right-color: transparent;
    border-radius: var(--pd-radius-round);
    animation: pd-btn-saving-spin .7s linear infinite;
}
@keyframes pd-btn-saving-spin {
    to { transform: rotate(360deg); }
}

/* 成长等级徽章「Lv.37 河豚」：10 级一阶、一阶一种颜色（core/user.php 的 pd_group_species_badge_html），底色用文字色的 12% */
body.theme-pd .pd-level-badge {
    --pd-level-color: var(--pd-level-c1);
    display: inline-flex;
    align-items: center;
    min-height: var(--pd-badge-h);
    padding-inline: var(--pd-badge-px);
    color: var(--pd-level-color);
    background: color-mix(in srgb, var(--pd-level-color) 12%, transparent);
    border-radius: var(--pd-radius-pill);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    font-variant-numeric: tabular-nums;
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
}
body.theme-pd .pd-level-badge--b2 { --pd-level-color: var(--pd-level-c2); }
body.theme-pd .pd-level-badge--b3 { --pd-level-color: var(--pd-level-c3); }
body.theme-pd .pd-level-badge--b4 { --pd-level-color: var(--pd-level-c4); }
body.theme-pd .pd-level-badge--b5 { --pd-level-color: var(--pd-level-c5); }
body.theme-pd .pd-level-badge--b6 { --pd-level-color: var(--pd-level-c6); }
body.theme-pd .pd-level-badge--b7 { --pd-level-color: var(--pd-level-c7); }
body.theme-pd .pd-level-badge--b8 { --pd-level-color: var(--pd-level-c8); }
body.theme-pd .pd-level-badge--b9 { --pd-level-color: var(--pd-level-c9); }
body.theme-pd .pd-level-badge--b10 { --pd-level-color: var(--pd-level-c10); }

/* 回复输入框的引导文字：点进去或有内容时向上淡出（浮动提示），不是原生 placeholder */
.markdown-editor .editor-pane .editor-ph {
    position: absolute;
    top: 16px;
    left: 18px;
    right: 18px;
    z-index: 2;
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-tertiary);
    font-family: inherit;
    font-size: var(--pd-fs-sm);
    line-height: 1.5;
    pointer-events: none;
    transition: opacity .2s ease, transform .2s ease;
}
.markdown-editor .editor-pane .editor-ph small {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
}
.markdown-editor .editor-pane textarea:focus ~ .editor-ph,
.markdown-editor .editor-pane textarea:not(:placeholder-shown) ~ .editor-ph {
    opacity: 0;
    transform: translateY(calc(-1 * var(--pd-space-1)));
}
@media (prefers-reduced-motion: reduce) {
    .markdown-editor .editor-pane .editor-ph { transition: none; }
}

/* 回复框右下角的固定提醒：一直显示，不能选中、不能点，输入时也不会消失 */
.markdown-editor .editor-pane.has-rule textarea {
    padding-bottom: calc(var(--pd-space-4) + var(--pd-space-2));
}
.markdown-editor .editor-pane .editor-rule {
    position: absolute;
    right: calc(var(--pd-space-4) + var(--pd-space-1));
    bottom: var(--pd-space-1);
    z-index: 2;
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: 1.5;
    white-space: nowrap;
    pointer-events: none;
    user-select: none;
    -webkit-user-select: none;
}
.markdown-editor .editor-pane .editor-rule i {
    font-size: var(--pd-icon-sm);
}

/* 滚动条颜色会从 html 继承（scrollbar-color），输入框里不能继承页面的深色轨道 */
body.theme-pd textarea,
body.theme-pd .markdown-editor .editor-pane textarea {
    scrollbar-width: thin;
    scrollbar-color: var(--pd-color-border-strong) transparent !important;
}
/* 楼层里就地编辑回复 */
body.theme-pd .pd-inline-edit {
    margin: 0;
}
body.theme-pd .pd-inline-edit textarea {
    display: block;
    width: 100%;
    min-height: calc(var(--pd-space-5) * 5);
    padding: var(--pd-space-2) var(--pd-space-3);
    font-family: inherit;
    font-size: var(--pd-fs-sm);
    line-height: 1.7;
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    resize: vertical;
}
body.theme-pd .pd-inline-edit textarea:focus {
    outline: none;
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-inline-edit-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-1);
}
body.theme-pd .pd-inline-edit-count {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-tertiary);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-inline-edit-actions {
    display: inline-flex;
    gap: var(--pd-space-1);
}

/* 首页右栏：银行、商城两个入口，一行两个；每个入口竖排：图标、名称、一句说明，居中 */
body.theme-pd .pd-side-box.pd-side-services > .pd-side-services-grid {
    display: grid;
    flex: 1 1 auto;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: stretch;
    gap: var(--pd-space-1);
    margin: var(--pd-space-1);
}
body.theme-pd .pd-side-services-grid > :only-child {
    grid-column: 1 / -1;
}
body.theme-pd .pd-side-service {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    padding: var(--pd-space-1);
    text-align: center;
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-md);
    color: var(--pd-color-text);
    text-decoration: none;
    transition: background-color .15s ease, border-color .15s ease;
}
body.theme-pd .pd-side-service:hover {
    background: var(--pd-color-surface-soft);
    border-color: var(--pd-color-border);
}
body.theme-pd .pd-side-service:focus-visible {
    outline: 2px solid var(--pd-color-primary);
    outline-offset: 2px;
}
body.theme-pd .pd-side-service-ico {
    --pd-service-color: var(--pd-text-green);
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    background: color-mix(in srgb, var(--pd-service-color) 12%, transparent);
    /* 32px 方块 */
    border-radius: var(--pd-radius-md);
    color: var(--pd-service-color);
    font-size: var(--pd-icon-md);
}
body.theme-pd .pd-side-service--shop .pd-side-service-ico {
    --pd-service-color: var(--pd-text-orange);
}
body.theme-pd .pd-side-service-text {
    display: flex;
    flex-direction: column;
    align-items: center;
    max-width: 100%;
    min-width: 0;
}
body.theme-pd .pd-side-service-text b {
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.4;
    white-space: nowrap;
}
body.theme-pd .pd-side-service-text small {
    overflow: hidden;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-2xs);
    line-height: 1.4;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 首页右栏的三个站内入口：300 × 60 宣传图，完整显示 5:1 构图。 */
body.theme-pd .pd-side-box.pd-side-services--promos {
    padding: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
    overflow: visible;
}
body.theme-pd .pd-side-box.pd-side-services--promos > .pd-side-services-grid {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--pd-space-2);
    margin: 0;
}
body.theme-pd .pd-side-promo {
    display: block;
    min-width: 0;
    width: 100%;
    aspect-ratio: 5 / 1;
    overflow: hidden;
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius-side);
    background: var(--pd-color-surface);
    box-shadow: var(--pd-shadow-2);
}
body.theme-pd .pd-side-promo:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-side-promo img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* 挖坟提示：帖子很久没有新回复时，回复框先模糊、盖一层说明，点「我知道了，继续回复」才能写（core/necro.php） */
body.theme-pd #reply-form.is-necro-locked {
    position: relative;
}
body.theme-pd #reply-form.is-necro-locked > form {
    filter: blur(5px);
    pointer-events: none;
    user-select: none;
}
body.theme-pd .pd-necro-gate {
    position: absolute;
    inset: 0;
    z-index: 5;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-4);
    text-align: center;
}
body.theme-pd .pd-necro-gate p {
    max-width: calc(var(--pd-space-5) * 20);
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    line-height: 1.7;
}
body.theme-pd .pd-necro-gate b {
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-necro-gate .pd-necro-balance {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-necro-gate .btn {
    margin: 0;
    border-radius: var(--pd-radius-pill);
}

/* 编辑器工具栏「AI 助手」面板：每位 AI 一行（头像、名字 + @叫法、能做什么、示例与费用），点一下插入 @ */
.markdown-editor .editor-toolbar .editor-heading-dropdown.editor-assistant-panel {
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
    width: min(360px, calc(100vw - var(--pd-space-4)));
    min-width: 0;
    padding: var(--pd-space-1);
}
.markdown-editor .editor-assistant-panel[hidden] {
    display: none !important;
}
.markdown-editor .editor-assistant-head {
    display: flex;
    flex-direction: column;
    margin: 0;
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1) var(--pd-space-1);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    border-bottom: 1px solid var(--pd-color-divider);
}
.markdown-editor .editor-assistant-head span,
.markdown-editor .editor-assistant-foot {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}
.markdown-editor .editor-toolbar .editor-heading-dropdown button.editor-assistant-item {
    display: flex;
    align-items: flex-start;
    gap: var(--pd-space-2);
    height: auto;
    min-height: 0;
    padding: var(--pd-space-1);
    white-space: normal;
}
.markdown-editor .editor-assistant-item img {
    flex: none;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    border-radius: 50%;
    object-fit: cover;
}
.markdown-editor .editor-assistant-text {
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 4);
    min-width: 0;
    line-height: 1.5;
}
.markdown-editor .editor-assistant-name {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
}
.markdown-editor .editor-assistant-name code {
    padding: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-primary);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-radius-sm);
}
.markdown-editor .editor-assistant-does {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}
.markdown-editor .editor-assistant-eg {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-2xs);
    font-weight: var(--pd-fw-regular);
}
.markdown-editor .editor-assistant-foot {
    margin: 0;
    padding: var(--pd-space-1) var(--pd-space-1) calc(var(--pd-space-1) / 2);
    line-height: 1.5;
    border-top: 1px solid var(--pd-color-divider);
}
.markdown-editor .editor-assistant-foot a {
    color: var(--pd-color-primary);
}
/* 工具栏下拉面板：下面放不下时由 admin.js 的 placeDropdown 加 is-up 往上弹，并按可用高度设 max-height，超出的在面板里滚动 */
.markdown-editor .editor-toolbar .editor-heading-dropdown.is-up {
    top: auto;
    bottom: calc(100% + 6px);
}
.markdown-editor .editor-toolbar .editor-heading-dropdown {
    overflow-y: auto;
    overscroll-behavior: contain;
}

/* ===== 在线支付（迅虎 · 微信支付，2026-10-05）：钱包页「在线充值」、付款弹窗（assets/payment.js 动态生成）、付款后跳回来的结果条 ===== */
.pd-payment-recharge .fa-weixin,
.pd-payment-return .fa-weixin,
.pd-adv-submit .fa-weixin { color: inherit; }
.pd-payment-recharge .pd-wallet-section-head .fa-weixin { color: var(--pd-color-wechat); }
.pd-payment-form { display: grid; gap: var(--pd-space-3); margin-top: var(--pd-space-2); }
.pd-payment-amounts {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(calc(var(--pd-space-5) * 4), 1fr));
    gap: var(--pd-space-2);
}
.pd-payment-amount {
    position: relative;
    display: grid;
    align-content: center;
    gap: calc(var(--pd-space-1) / 2);
    min-height: calc(var(--pd-btn-h-lg) * 2);
    padding: var(--pd-space-2) var(--pd-space-3);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-card-radius);
    cursor: pointer;
}
.pd-payment-amount input[type="radio"] { position: absolute; opacity: 0; pointer-events: none; }
.pd-payment-amount b { color: var(--pd-color-text); font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); }
.pd-payment-amount span { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
.pd-payment-amount:hover { border-color: var(--pd-color-primary); }
.pd-payment-amount:has(input[type="radio"]:checked) { background: var(--pd-color-primary-soft); border-color: var(--pd-color-primary); }
.pd-payment-amount:has(input[type="radio"]:focus-visible) { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: var(--pd-tab-indicator); }
.pd-payment-custom {
    width: 100%;
    height: var(--pd-btn-h);
    padding: 0 var(--pd-btn-px-sm);
    color: var(--pd-color-text);
    font: inherit;
    font-size: var(--pd-fs-sm);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-input-radius);
}
.pd-payment-custom:focus { border-color: var(--pd-color-primary); outline: none; box-shadow: none; }
.pd-payment-submit-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pd-space-2) var(--pd-space-3); }
.pd-payment-submit { display: inline-flex; align-items: center; gap: var(--pd-space-1); height: var(--pd-btn-h-lg); }
.pd-payment-submit:disabled { cursor: progress; opacity: .6; }

.pd-payment-return {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-2);
    margin: 0;
    padding: var(--pd-space-2) var(--pd-space-3);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-card-radius);
}
.pd-adv > .pd-payment-return { margin-bottom: var(--pd-space-3); }
.pd-payment-return > i { color: var(--pd-color-primary); font-size: var(--pd-icon-md); }
.pd-payment-return > span { flex: 1 1 calc(var(--pd-space-5) * 6); min-width: 0; }
.pd-payment-return .btn { display: inline-flex; flex: none; align-items: center; gap: var(--pd-space-1); }
.pd-payment-return .btn[hidden] { display: none; }
.pd-payment-return[data-payment-state="paid"] { background: var(--pd-color-success-soft); }
.pd-payment-return[data-payment-state="paid"] > i { color: var(--pd-color-success); }
.pd-payment-return:is([data-payment-state="closed"], [data-payment-state="refunded"]) { background: var(--pd-color-warning-soft); }
.pd-payment-return:is([data-payment-state="closed"], [data-payment-state="refunded"]) > i { color: var(--pd-color-warning); }
.pd-adv-done .btn[data-payment-retry] { display: inline-flex; align-items: center; gap: var(--pd-space-1); }
.pd-adv-done .btn[data-payment-retry][hidden] { display: none; }

.pd-payment-dialog {
    width: min(var(--pd-payment-dialog-w), calc(100vw - var(--pd-space-4)));
    max-height: calc(100dvh - var(--pd-space-5));
    margin: auto;
    padding: 0;
    color: var(--pd-color-text);
    font-family: var(--pd-font-body);
    font-size: var(--pd-fs-sm);
    background: var(--pd-color-surface);
    border: 0;
    border-radius: var(--pd-modal-radius);
    box-shadow: var(--pd-shadow-2);
}
.pd-payment-dialog::backdrop { background: rgba(15, 17, 22, .55); }
.pd-payment-sheet { display: grid; gap: var(--pd-space-3); padding: var(--pd-space-4); text-align: center; }
.pd-payment-head { display: flex; align-items: center; justify-content: space-between; gap: var(--pd-space-2); text-align: left; }
.pd-payment-head h2 { display: flex; align-items: center; gap: var(--pd-space-1); margin: 0; color: var(--pd-color-text); font-size: var(--pd-fs-lg); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); }
.pd-payment-head h2 .fa-weixin { color: var(--pd-color-wechat); }
.pd-payment-close { display: inline-grid; place-items: center; flex: 0 0 auto; width: var(--pd-btn-h); height: var(--pd-btn-h); padding: 0; color: var(--pd-color-text-tertiary); font-size: var(--pd-icon-lg); background: transparent; border: 0; border-radius: var(--pd-btn-radius); cursor: pointer; }
.pd-payment-close:hover { color: var(--pd-color-text); background: var(--pd-color-surface-soft); }
.pd-payment-sum { display: grid; gap: calc(var(--pd-space-1) / 2); margin: 0; }
.pd-payment-sum strong { font-size: var(--pd-fs-display); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); }
.pd-payment-sum span { color: var(--pd-color-text-secondary); }
.pd-payment-qr-wrap { justify-self: center; padding: var(--pd-space-2); background: var(--pd-color-qr-bg); border: 1px solid var(--pd-color-border); border-radius: var(--pd-radius-md); }
.pd-payment-qr { display: block; width: var(--pd-payment-qr); height: var(--pd-payment-qr); }
.pd-payment-open { display: inline-flex; justify-self: center; align-items: center; gap: var(--pd-space-1); }
.pd-payment-qr-wrap[hidden], .pd-payment-open[hidden] { display: none; }
.pd-payment-status { display: flex; align-items: center; justify-content: center; gap: var(--pd-space-1); margin: 0; color: var(--pd-color-text-secondary); }
.pd-payment-status.is-paid { color: var(--pd-color-success); font-weight: var(--pd-fw-semibold); }
.pd-payment-status.is-closed { color: var(--pd-color-warning); }
.pd-payment-actions { display: flex; justify-content: center; }

/* USDT（TRC20）付款：弹窗里的网络、金额、收款地址（都能复制）和注意事项；投放页的付款方式选择（2026-10-05，core/payment-usdt.php） */
.pd-payment-head h2 .fa-coins,
.pd-adv-method .fa-coins { color: var(--pd-color-usdt); }
.pd-adv-method .fa-weixin { color: var(--pd-color-wechat); }
.pd-payment-usdt { display: grid; gap: var(--pd-space-1); text-align: left; }
.pd-payment-usdt[hidden] { display: none; }
.pd-payment-usdt-net { margin: 0; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); text-align: center; }
.pd-payment-usdt-row {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-1) var(--pd-space-2);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-md);
}
.pd-payment-usdt-label { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); white-space: nowrap; }
.pd-payment-usdt-row code {
    min-width: 0;
    color: var(--pd-color-text);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xs);
    overflow-wrap: anywhere;
    background: transparent;
}
.pd-payment-usdt-row .pd-payment-usdt-amount { font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); }
.pd-payment-copy {
    display: inline-grid;
    place-items: center;
    width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    padding: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-icon-md);
    background: transparent;
    border: 0;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
.pd-payment-copy:hover { color: var(--pd-color-primary); background: var(--pd-color-surface); }
.pd-payment-usdt-tips { display: grid; gap: calc(var(--pd-space-1) / 2); margin: 0; padding-left: var(--pd-space-3); color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }

body.theme-pd .pd-adv-methods {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(calc(var(--pd-space-5) * 6), 1fr));   /* 两张并排，窄屏自动叠成一列 */
    gap: var(--pd-space-1);
}
body.theme-pd .pd-adv-method {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-2);
}
body.theme-pd .pd-adv-method-name { display: inline-flex; align-items: center; gap: var(--pd-space-1); font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-adv-method-price { grid-column: 2; grid-row: 1 / span 2; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); white-space: nowrap; }
body.theme-pd .pd-adv-method-price b { color: var(--pd-color-text); font-size: var(--pd-fs-lg); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-adv-method-meta { grid-column: 1; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
.pd-adv-pay .pd-adv-note[hidden] { display: none; }

/* ===== 右栏标签卡（首页「帖子榜」热门 / 热评 / 足迹，「鱼塘近况」新来的鱼 / 活跃的鱼；切换逻辑在 assets/pages.js） =====
   标签等宽铺满卡片内宽，选中的那个用压在分隔线上的下划线表示（2026-10-05 重做，原来是靠左的一排小胶囊）：
   帖子榜的标签就是卡头（卡头不留上下内边距，下划线压在卡头底边的分隔线上）；鱼塘近况的标签在卡片中间，自带一条分隔线。
   面板叠在同一格里，不显示的只隐藏不移除：卡片高度按最高的面板定，切换标签时卡片不跳 */
body.theme-pd .pd-side-tabs {
    display: flex;
    flex: 1 1 auto;
    align-items: stretch;
    min-width: 0;
}
body.theme-pd .pd-side-box.pd-side-tabbed > .pd-side-head {
    padding-top: 0;
    padding-bottom: 0;
}
body.theme-pd .pd-side-tab {
    display: inline-flex;
    flex: 1 1 0;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    height: calc(var(--pd-btn-h-lg) + var(--pd-space-1));
    margin-bottom: -1px;
    padding: 0 var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
    background: transparent;
    border: 0;
    border-bottom: var(--pd-tab-indicator) solid transparent;
    border-radius: 0;
    box-shadow: none;
    cursor: pointer;
}
body.theme-pd .pd-side-tab[hidden] { display: none; }
body.theme-pd .pd-side-tab i { font-size: var(--pd-icon-xs); }
body.theme-pd .pd-side-tab small {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-side-tab:hover { color: var(--pd-color-text); }
body.theme-pd .pd-side-tab.is-active {
    color: var(--pd-color-primary);
    font-weight: var(--pd-fw-semibold);
    border-bottom-color: var(--pd-color-primary);
}
body.theme-pd .pd-side-tab:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-space-1) / -2);
}
body.theme-pd .pd-pulse-new .pd-side-tabs {
    margin-bottom: var(--pd-space-1);
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-pulse-new .pd-side-tab { height: var(--pd-btn-h-lg); }
body.theme-pd .pd-side-tabpanels {
    display: grid;
    flex: 1 1 auto;
    min-width: 0;
}
body.theme-pd .pd-side-tabpanel { grid-area: 1 / 1; min-width: 0; }
/* 满 5 条的面板（侧栏各榜单统一 5 条）：首页右栏取整（main.js）多出来的高度均分给各行，分隔线等距排到卡底；
   条数少的面板不拉伸（两三条拉开会很空），行从上往下排 */
body.theme-pd .pd-side-tabpanel.pd-side-rank { justify-content: flex-start; }
body.theme-pd .pd-side-tabpanel.pd-side-rank > li { flex: 0 0 auto; }
body.theme-pd .pd-side-tabpanel.pd-side-rank:has(> li:nth-child(5)) > li { flex: 1 1 auto; }
body.theme-pd .pd-side-tabpanel:not(.is-active) { visibility: hidden; }

/* ===== 鱼塘近况重构（首页右栏；版块页「本版概况」也用 .pd-side-pulse 的数字区，一起变） =====
   三个数字改成三块浅灰小卡（16px 数字 + 12px 说明），不再用竖线隔开；数字区和头像区之间用间距、不画横线；
   头像一行 5 个、两行（新来的鱼 / 活跃的鱼各取最近 10 个，index.php），头像 40px */
body.theme-pd .pd-side-pulse .pd-pulse-stats { gap: var(--pd-space-1); }
body.theme-pd .pd-side-pulse .pd-pulse-stats > div {
    padding: var(--pd-space-1) var(--pd-space-2);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-side-pulse .pd-pulse-stats > div + div { padding-left: var(--pd-space-2); border-left: 0; }
body.theme-pd .pd-side-pulse .pd-pulse-stats b { font-size: var(--pd-fs-md); }
body.theme-pd .pd-side-pulse .pd-pulse-stats span {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    margin-top: calc(var(--pd-space-1) / 4);
}
body.theme-pd .pd-side-pulse .pd-pulse-new { margin-top: var(--pd-space-2); padding-top: 0; border-top: 0; }
body.theme-pd .pd-side-pulse .pd-newuser-grid {
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: var(--pd-space-2) calc(var(--pd-space-1) / 2);
}
body.theme-pd .pd-side-pulse .pd-newuser { gap: calc(var(--pd-space-1) / 2); }
body.theme-pd .pd-side-pulse .pd-newuser img { width: var(--pd-side-avatar); height: var(--pd-side-avatar); }

/* ===== 余额就地更新（2026-10-05）：assets/main.js 的 pdApplyLiveBalance() 改了数字后闪一下 ===== */
[data-live-balance].is-bumped { border-radius: var(--pd-radius-sm); animation: pdLiveBalanceFlash 1.6s ease; }
@keyframes pdLiveBalanceFlash {
    0%, 30% { background-color: var(--pd-color-warning-soft); }
    100% { background-color: transparent; }
}
@media (prefers-reduced-motion: reduce) {
    [data-live-balance].is-bumped { animation: none; }
}
body.theme-pd .pd-netbank.is-masked [data-live-balance].is-bumped { animation: none; }   /* 银行页隐藏金额时不闪 */
[data-live-balance-note][hidden] { display: none; }

/* ===== 右栏顶部固定搜索框（首页、版块页；core/render.php 的 pd_side_search_html） =====
   全站唯一的搜索入口（顶栏搜索按钮、全屏搜索窗已去掉）。高度和下边距沿用原来这个位置的「发新帖」按钮，下面第一张卡仍和左侧第一张帖子卡顶边对齐 */
body.theme-pd .pd-side-search {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    height: var(--pd-btn-h);
    margin: 0 0 var(--pd-space-1);
    padding: 0 var(--pd-space-2);
    color: var(--pd-color-text-tertiary);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-btn-radius);
}
body.theme-pd .pd-side-search:focus-within { border-color: var(--pd-color-primary); }
body.theme-pd .pd-side-search i { flex: none; font-size: var(--pd-icon-sm); }
body.theme-pd .pd-side-search input {
    flex: 1 1 auto;
    min-width: 0;
    height: 100%;
    padding: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    outline: none;
}
body.theme-pd .pd-side-search input::placeholder { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-side-search input::-webkit-search-cancel-button { cursor: pointer; }
body.theme-pd .pd-side-search kbd {
    flex: none;
    padding: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-tertiary);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-sm);
}
body.theme-pd .pd-side-search:focus-within kbd { display: none; }
/* 首页会员的「发新帖」挪到欢迎卡下面：不需要原来顶部那段对齐用的下边距 */
body.theme-pd .pd-side-post-btn--below { margin-bottom: 0; }
/* 版块页：「发新帖」在所有宽度下都放在排序标签行右边；搜索框在版块头部（见文件末尾「版块专属右栏」） */
body.theme-pd .pd-forum-toolbar .pd-forum-post-inline { display: flex; flex: none; margin: 0; }
/* 菜单栏最右的头像格子（2026-10-05 起，站长定的）：登录用户的账户入口从横幅右上角挪到菜单栏最右，每个页面同一个位置；
   占一个正方形格子（边长 = 菜单项高），和最左边「首页」那一格对称。头像做成超椭圆（squircle），上下几乎占满、只留 2px，
   不压菜单栏的上边线，四个圆角露出菜单栏底色：白底头像也看得出是在菜单栏里面。游客没有这个格子，横幅里也不放登录 / 注册 */
.pd-navbar-account {
    display: flex;
    flex: 0 0 auto;
    align-self: stretch;
    align-items: center;
    margin-left: auto;
}
body.theme-pd .pd-account-menu--nav {
    --pd-squircle-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M0 50C0 10 10 0 50 0s50 10 50 50-10 50-50 50S0 90 0 50z'/%3E%3C/svg%3E");
    display: flex;
}
body.theme-pd .pd-account-menu--nav .pd-account-trigger {
    display: block;
    width: var(--pd-navbar-height);
    height: var(--pd-navbar-height);
    padding: calc(var(--pd-space-1) / 4);
    border-radius: 0;
    transition: background .15s ease;
}
body.theme-pd .pd-account-menu--nav .pd-account-trigger img {
    width: 100%;
    height: 100%;
    border-radius: 0;
    -webkit-mask: var(--pd-squircle-mask) center / 100% 100% no-repeat;
    mask: var(--pd-squircle-mask) center / 100% 100% no-repeat;
    transition: transform .2s cubic-bezier(.2, .8, .2, 1);
}
body.theme-pd .pd-account-menu--nav .pd-account-trigger:hover,
body.theme-pd .pd-account-menu--nav .pd-account-trigger[aria-expanded="true"] { background: rgba(0, 0, 0, .1); }
body.theme-pd .pd-topbar-hasbg .pd-account-menu--nav .pd-account-trigger:hover,
body.theme-pd .pd-topbar-hasbg .pd-account-menu--nav .pd-account-trigger[aria-expanded="true"] { background: rgba(255, 255, 255, .10); }
body.theme-pd .pd-account-menu--nav .pd-account-trigger:hover img { transform: scale(1.04); }
body.theme-pd .pd-account-menu--nav .pd-account-trigger[aria-expanded="true"] img { transform: scale(.96); }
body.theme-pd .pd-account-menu--nav .pd-account-trigger:focus-visible { outline-offset: calc(var(--pd-tab-indicator) * -1); }
/* 未读数放在超椭圆切掉的右上角里，不出格子 */
body.theme-pd .pd-account-menu--nav .pd-account-unread-badge {
    top: 0;
    right: 0;
    transform: none;
}
/* 手机：头像在汉堡按钮那一行的最右边；展开的菜单排在下面 */
@media (width < 640px) {
    .pd-topbar-responsive > .pd-navbar .pd-navbar-account { grid-area: 1 / 2; justify-self: end; }
    .pd-navbar .pd-navbar-account { order: 1; }
    .pd-navbar .pd-menu { order: 2; }
}
/* 账户下拉的交互（2026-10-05）：从头像下方往下展开（淡入 + 下滑 + 轻微放大，原点在右上角），里面的几组依次浮上来；
   收起时反向淡出（main.js 加 .is-closing，动画结束再真正隐藏）。悬浮的链接图标右移一点，个人信息行头像轻微放大 */
@keyframes pd-account-panel-in {
    from { opacity: 0; transform: translateY(calc(var(--pd-space-1) * -1)) scale(.97); }
    to { opacity: 1; transform: none; }
}
@keyframes pd-account-panel-out {
    from { opacity: 1; transform: none; }
    to { opacity: 0; transform: translateY(calc(var(--pd-space-1) / -2)) scale(.98); }
}
@keyframes pd-account-item-in {
    from { opacity: 0; transform: translateY(calc(var(--pd-space-1) / 2)); }
    to { opacity: 1; transform: none; }
}
body.theme-pd .pd-account-panel:not([hidden]) {
    transform-origin: top right;
    animation: pd-account-panel-in .2s cubic-bezier(.2, .8, .2, 1);
}
body.theme-pd .pd-account-panel.is-closing { animation: pd-account-panel-out .14s ease-in forwards; pointer-events: none; }
body.theme-pd .pd-account-panel:not([hidden]) :is(.pd-account-summary, .pd-account-grid, .pd-account-group, .pd-account-footer) {
    animation: pd-account-item-in .24s cubic-bezier(.2, .8, .2, 1) both;
}
body.theme-pd .pd-account-panel:not([hidden]) .pd-account-grid { animation-delay: .03s; }
body.theme-pd .pd-account-panel:not([hidden]) .pd-account-group { animation-delay: .06s; }
body.theme-pd .pd-account-panel:not([hidden]) .pd-account-footer { animation-delay: .09s; }
body.theme-pd .pd-account-panel.is-closing :is(.pd-account-summary, .pd-account-grid, .pd-account-group, .pd-account-footer) { animation: none; }
body.theme-pd .pd-account-panel :is(.pd-account-link, .pd-account-signout) { transition: color .12s ease, background .12s ease; }
.pd-account-panel :is(.pd-account-link, .pd-account-signout) i { transition: transform .15s ease, color .12s ease; }
.pd-account-panel :is(.pd-account-link, .pd-account-signout):hover i { transform: translateX(calc(var(--pd-space-1) / 4)); }
body.theme-pd .pd-account-summary { transition: background .12s ease; }
.pd-account-summary-avatar { transition: transform .2s cubic-bezier(.2, .8, .2, 1); }
.pd-account-summary:hover .pd-account-summary-avatar { transform: scale(1.06); }
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-account-panel:not([hidden]),
    body.theme-pd .pd-account-panel.is-closing,
    body.theme-pd .pd-account-panel:not([hidden]) :is(.pd-account-summary, .pd-account-grid, .pd-account-group, .pd-account-footer) { animation: none; }
    body.theme-pd .pd-account-menu--nav .pd-account-trigger img,
    .pd-account-panel :is(.pd-account-link, .pd-account-signout) i,
    .pd-account-tile-icon,
    .pd-account-summary-avatar { transition: none; transform: none; }
}
/* 账户下拉精简（2026-10-05）：常用六个入口是 3 × 2 图标格，管理入口一组，最后一行左「设置」右「退出登录」。
   不显示滚动条：展开时各组的上浮动画会让内容暂时多出几像素，出现一闪而过的滚动条；矮屏内容放不下时仍可滚动 */
body.theme-pd .pd-account-panel { scrollbar-width: none; }
body.theme-pd .pd-account-panel::-webkit-scrollbar { display: none; }
.pd-account-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 2);
}
.pd-account-links > .pd-account-group { border-top: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-account-tile {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: var(--pd-space-1) calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-tight);
    text-decoration: none;
    border-radius: var(--pd-btn-radius);
    transition: color .12s ease, background .12s ease;
}
.pd-account-tile-icon {
    position: relative;
    display: inline-grid;
    place-items: center;
    width: var(--pd-icon-lg);
    height: var(--pd-icon-lg);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-icon-md);
    transition: transform .15s ease, color .12s ease;
}
body.theme-pd .pd-account-tile:hover { color: var(--pd-color-primary); background: var(--pd-color-primary-soft); }
.pd-account-tile:hover .pd-account-tile-icon { color: inherit; transform: translateY(calc(var(--pd-space-1) / -4)); }
.pd-account-tile:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: calc(var(--pd-tab-indicator) * -1);
}
/* 图标格里的未读数：红底白字的小角标，压在图标右上角 */
body.theme-pd .pd-account-tile .pd-account-count {
    position: absolute;
    top: calc(var(--pd-space-1) * -1 / 2);
    left: calc(100% - var(--pd-space-1) / 2);
    min-width: var(--pd-space-3);
    margin: 0;
    padding: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-on-primary);
    background: var(--pd-color-error);
    font-size: var(--pd-fs-2xs);
    line-height: var(--pd-space-3);
}
.pd-account-footer {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 2);
    border-top: 1px solid var(--pd-color-divider);
}
.pd-account-footer .pd-account-logout { padding: 0; border-top: 0; }

/* W06 比例修饰版：统一实体操作按钮；尺寸与布局由各组件继续负责。 */
body.theme-pd :is(.btn,.pd-btn,.pd-social-btn,.pd-side-post-btn,.pd-promo-btn,.pd-checkin-btn,.pd-sidebar-card-btn,.pd-feed-empty-btn,.pd-scroll-top,.pd-new-topics,.pd-pay-card-btn,.pd-pay-close,.pd-payment-close,.pd-affix-btn,.pd-tt-icon-btn,.editor-dialog-close,.pd-chalkboard-ok,.pd-chalkboard-x,.pd-messages-hide-btn,.pd-btn-status,.pd-w06,.action-badge:where(:not(.action-badge-static,.pd-reply-menu-item))) {
    --pd-w06-fill:var(--pd-w06-blue);
    --pd-w06-glow-color:var(--pd-w06-glow-blue);
    --pd-w06-local-glow-alpha:var(--pd-w06-glow-alpha);
    --pd-w06-local-glow-width:var(--pd-w06-glow-width);
    --pd-w06-local-glow-height:var(--pd-w06-glow-height);
    --pd-w06-local-glow-y:var(--pd-w06-glow-y);
    --pd-w06-local-top-alpha:var(--pd-w06-top-alpha);
    --pd-w06-local-bottom-alpha:var(--pd-w06-bottom-alpha);
    --pd-w06-local-side-alpha:var(--pd-w06-side-alpha);
    --pd-w06-local-strip-height:var(--pd-w06-strip-height);
    --pd-w06-edge:color-mix(in srgb,var(--pd-w06-fill) 84%,var(--pd-w06-ink));
    --pd-w06-glow:color-mix(in srgb,var(--pd-w06-glow-color) var(--pd-w06-local-glow-alpha),transparent);
    --pd-w06-background:linear-gradient(transparent,#ffffff0c) center calc(100% - var(--pd-w06-depth)) / 72% var(--pd-w06-local-strip-height) no-repeat,radial-gradient(ellipse var(--pd-w06-local-glow-width) var(--pd-w06-local-glow-height) at 50% var(--pd-w06-local-glow-y),var(--pd-w06-glow),transparent 76%),linear-gradient(to bottom,color-mix(in srgb,var(--pd-w06-fill) 96%,#000),var(--pd-w06-fill) 60%,color-mix(in srgb,var(--pd-w06-fill) 88%,#000));
    --pd-w06-shadow:inset 0 var(--pd-w06-depth) 0 color-mix(in srgb,#fff var(--pd-w06-local-top-alpha),transparent),inset 0 calc(var(--pd-w06-depth) * -1) 0 color-mix(in srgb,var(--pd-w06-glow-color) var(--pd-w06-local-bottom-alpha),transparent),inset var(--pd-w06-depth) 0 0 color-mix(in srgb,#fff var(--pd-w06-local-side-alpha),transparent),inset calc(var(--pd-w06-depth) * -1) 0 0 color-mix(in srgb,#fff var(--pd-w06-local-side-alpha),transparent),0 var(--pd-w06-depth) 0 var(--pd-w06-edge),0 calc(var(--pd-space-1) / 4) calc(var(--pd-space-1) / 2) #1723331a;
    background:var(--pd-w06-background) !important;
    color:var(--pd-w06-on-fill) !important;
    border:calc(var(--pd-tab-indicator) / 2) solid var(--pd-w06-edge);
    border-radius:var(--pd-btn-radius);
    box-shadow:var(--pd-w06-shadow);
    text-shadow:0 var(--pd-w06-depth) var(--pd-w06-depth) #17233344;
    text-decoration:none;
    transition:filter .15s ease,translate .15s ease,box-shadow .15s ease;
}
body.theme-pd :is(.btn-light,.pd-btn-ghost,.pd-social-btn.is-outline,.pd-pay-card-btn:not(.is-primary),.pd-pay-close,.pd-payment-close,.pd-affix-btn,.editor-dialog-close,.pd-chalkboard-x,.action-badge-muted) { --pd-w06-fill:var(--pd-w06-neutral); --pd-w06-glow-color:color-mix(in srgb,var(--pd-w06-fill) 40%,#fff); }
body.theme-pd-dark { --pd-w06-neutral:var(--pd-w06-neutral-dark); }
body.theme-pd :is(.btn.btn-success,.pd-btn.pd-btn-success,.pd-social-btn.pd-btn-success,.pd-btn-status,[data-follow-btn]:is([data-state="following"],[data-state="mutual"])) { --pd-w06-fill:var(--pd-w06-green); --pd-w06-glow-color:color-mix(in srgb,var(--pd-w06-fill) 40%,#fff); }
body.theme-pd :is(.btn-danger,.pd-btn-danger,.action-badge-danger:where(:not(.pd-reply-menu-item)),.pd-messages-hide-btn,.pd-tt-icon-btn) { --pd-w06-fill:var(--pd-w06-red); --pd-w06-glow-color:color-mix(in srgb,var(--pd-w06-fill) 40%,#fff); }
body.theme-pd :is(.btn-small,.pd-btn-sm,.pd-social-btn,.action-badge:where(:not(.action-badge-static,.pd-reply-menu-item)),.pd-affix-btn,.pd-pay-card-btn,.pd-messages-hide-btn,.pd-tt-icon-btn,.pd-files .btn) {
    --pd-w06-local-glow-alpha:var(--pd-w06-glow-alpha-sm);
    --pd-w06-local-glow-width:var(--pd-w06-glow-width-sm);
    --pd-w06-local-glow-height:var(--pd-w06-glow-height-sm);
    --pd-w06-local-glow-y:var(--pd-w06-glow-y-sm);
    --pd-w06-local-top-alpha:var(--pd-w06-top-alpha-sm);
    --pd-w06-local-bottom-alpha:var(--pd-w06-bottom-alpha-sm);
    --pd-w06-local-side-alpha:var(--pd-w06-side-alpha-sm);
    --pd-w06-local-strip-height:var(--pd-w06-strip-height-sm);
}
body.theme-pd .pd-btn-status {
    --pd-w06-local-glow-alpha:var(--pd-w06-glow-alpha-xs);
    --pd-w06-local-glow-width:var(--pd-w06-glow-width-xs);
    --pd-w06-local-glow-height:var(--pd-w06-glow-height-xs);
    --pd-w06-local-glow-y:var(--pd-w06-glow-y-xs);
    --pd-w06-local-top-alpha:var(--pd-w06-top-alpha-xs);
    --pd-w06-local-bottom-alpha:var(--pd-w06-bottom-alpha-xs);
    --pd-w06-local-side-alpha:var(--pd-w06-side-alpha-xs);
    --pd-w06-local-strip-height:var(--pd-w06-strip-height-xs);
    display:inline-flex; align-items:center; height:var(--pd-w06-status-h); padding:0 var(--pd-btn-px-sm); font-size:var(--pd-btn-fs-sm); font-weight:var(--pd-fw-medium); vertical-align:middle;
}
body.theme-pd .btn.btn-small { height:var(--pd-btn-h-sm); min-height:var(--pd-btn-h-sm); padding-inline:var(--pd-btn-px-sm); font-size:var(--pd-btn-fs-sm); }
body.theme-pd .pd-scroll-top { border-radius:var(--pd-radius-round); }
body.theme-pd :is(.btn,.pd-btn,.pd-social-btn,.pd-side-post-btn,.pd-promo-btn,.pd-checkin-btn,.pd-sidebar-card-btn,.pd-feed-empty-btn,.pd-scroll-top,.pd-new-topics,.pd-pay-card-btn,.pd-pay-close,.pd-payment-close,.pd-affix-btn,.pd-tt-icon-btn,.editor-dialog-close,.pd-chalkboard-ok,.pd-chalkboard-x,.pd-messages-hide-btn,.pd-btn-status,.pd-w06,.action-badge:where(:not(.action-badge-static,.pd-reply-menu-item))):hover:not(:disabled):not([aria-disabled="true"]):not(.pd-btn-status) { background:var(--pd-w06-background) !important; color:var(--pd-w06-on-fill) !important; border-color:var(--pd-w06-edge); filter:brightness(1.08); translate:0 calc(var(--pd-w06-depth) * -1); text-decoration:none; }
body.theme-pd :is(.btn,.pd-btn,.pd-social-btn,.pd-side-post-btn,.pd-promo-btn,.pd-checkin-btn,.pd-sidebar-card-btn,.pd-feed-empty-btn,.pd-scroll-top,.pd-new-topics,.pd-pay-card-btn,.pd-pay-close,.pd-payment-close,.pd-affix-btn,.pd-tt-icon-btn,.editor-dialog-close,.pd-chalkboard-ok,.pd-chalkboard-x,.pd-messages-hide-btn,.pd-btn-status,.pd-w06,.action-badge:where(:not(.action-badge-static,.pd-reply-menu-item))):active:not(:disabled):not([aria-disabled="true"]):not(.pd-btn-status) { background:var(--pd-w06-background) !important; color:var(--pd-w06-on-fill) !important; translate:0 var(--pd-w06-depth); filter:brightness(.95); box-shadow:inset 0 var(--pd-w06-depth) var(--pd-w06-depth) color-mix(in srgb,var(--pd-w06-edge) 40%,transparent),inset 0 calc(var(--pd-w06-depth) * -1) 0 #ffffff26,0 var(--pd-w06-depth) 0 #17233340; }
body.theme-pd :is(.btn,.pd-btn,.pd-social-btn,.pd-side-post-btn,.pd-promo-btn,.pd-checkin-btn,.pd-sidebar-card-btn,.pd-feed-empty-btn,.pd-scroll-top,.pd-new-topics,.pd-pay-card-btn,.pd-pay-close,.pd-payment-close,.pd-affix-btn,.pd-tt-icon-btn,.editor-dialog-close,.pd-chalkboard-ok,.pd-chalkboard-x,.pd-messages-hide-btn,.pd-btn-status,.pd-w06,.action-badge:where(:not(.action-badge-static,.pd-reply-menu-item))):focus-visible { outline:var(--pd-tab-indicator) solid var(--pd-w06-blue); outline-offset:var(--pd-tab-indicator); }
body.theme-pd :is(.btn,.pd-btn,.pd-social-btn,.pd-side-post-btn,.pd-promo-btn,.pd-checkin-btn,.pd-sidebar-card-btn,.pd-feed-empty-btn,.pd-scroll-top,.pd-new-topics,.pd-pay-card-btn,.pd-pay-close,.pd-payment-close,.pd-affix-btn,.pd-tt-icon-btn,.editor-dialog-close,.pd-chalkboard-ok,.pd-chalkboard-x,.pd-messages-hide-btn,.pd-btn-status,.pd-w06,.action-badge:where(:not(.action-badge-static,.pd-reply-menu-item))):is(:disabled,[aria-disabled="true"]) { --pd-w06-fill:var(--pd-w06-neutral) !important; color:var(--pd-w06-on-fill) !important; background:var(--pd-w06-background) !important; opacity:.46; cursor:not-allowed; filter:none; translate:none; box-shadow:none; }
body.theme-pd-dark :is(.btn,.pd-btn,.pd-social-btn,.pd-side-post-btn,.pd-promo-btn,.pd-checkin-btn,.pd-sidebar-card-btn,.pd-feed-empty-btn,.pd-scroll-top,.pd-new-topics,.pd-pay-card-btn,.pd-pay-close,.pd-payment-close,.pd-affix-btn,.pd-tt-icon-btn,.editor-dialog-close,.pd-chalkboard-ok,.pd-chalkboard-x,.pd-messages-hide-btn,.pd-btn-status,.pd-w06,.action-badge:where(:not(.action-badge-static,.pd-reply-menu-item))):not(:disabled):not([aria-disabled="true"]) { color:var(--pd-w06-on-fill) !important; }
body.theme-pd .pd-side-post-btn:hover :is(i,.pd-side-post-text) { transform:none; }
body.theme-pd .pd-side-post-btn:active { transform:none; }
body.theme-pd .pd-affix-btn:hover { border-color:var(--pd-w06-edge); }
@media (prefers-reduced-motion:reduce) {
    body.theme-pd :is(.btn,.pd-btn,.pd-social-btn,.pd-side-post-btn,.pd-promo-btn,.pd-checkin-btn,.pd-sidebar-card-btn,.pd-feed-empty-btn,.pd-scroll-top,.pd-new-topics,.pd-pay-card-btn,.pd-pay-close,.pd-payment-close,.pd-affix-btn,.pd-tt-icon-btn,.editor-dialog-close,.pd-chalkboard-ok,.pd-chalkboard-x,.pd-messages-hide-btn,.pd-btn-status,.pd-w06,.action-badge:where(:not(.action-badge-static,.pd-reply-menu-item))) { transition:none; }
    body.theme-pd :is(.btn,.pd-btn,.pd-social-btn,.pd-side-post-btn,.pd-promo-btn,.pd-checkin-btn,.pd-sidebar-card-btn,.pd-feed-empty-btn,.pd-scroll-top,.pd-new-topics,.pd-pay-card-btn,.pd-pay-close,.pd-payment-close,.pd-affix-btn,.pd-tt-icon-btn,.editor-dialog-close,.pd-chalkboard-ok,.pd-chalkboard-x,.pd-messages-hide-btn,.pd-btn-status,.pd-w06,.action-badge:where(:not(.action-badge-static,.pd-reply-menu-item))):hover:not(:disabled):not([aria-disabled="true"]) { translate:none; }
}

/* 关闭按钮（×）：一律正方形、图标在正中（2026-10-05 站长定）。尺寸只改 --pd-close-size，宽高一起变；新加的关闭按钮带上 pd-close 类 */
body.theme-pd :is(.pd-close,.pd-chalkboard-x,.pd-pay-close,.pd-payment-close,.editor-dialog-close,.pd-lotto-live-x,.pd-lotto-live-pill .off,.pd-tt-icon-btn) {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    width: var(--pd-close-size, var(--pd-btn-h-sm));
    height: var(--pd-close-size, var(--pd-btn-h-sm));
    min-width: 0;
    min-height: 0;
    padding: 0;
    line-height: 1;
    border-radius: var(--pd-btn-radius);
}
body.theme-pd :is(.pd-pay-close,.pd-payment-close) { --pd-close-size: var(--pd-btn-h); }
body.theme-pd .pd-quote-chip .pd-close { --pd-close-size: var(--pd-space-4); }

/* 「初来乍到」黑板的「我知道了」：立体按钮换成粉笔黄底、黑板绿字，和标题图标、圈数字同色 */
body.theme-pd .pd-chalkboard-ok {
    --pd-w06-fill: var(--pd-chalkboard-accent);
    --pd-w06-glow-color: color-mix(in srgb, var(--pd-chalkboard-accent) 40%, #fff);
    --pd-w06-on-fill: var(--pd-chalkboard-bg);
    text-shadow: none;
}
/* 打开时焦点在面板本身（main.js），面板不画焦点框；用键盘切到按钮、链接时，焦点框用粉笔黄，不用全站的蓝色 */
body.theme-pd .pd-chalkboard:focus { outline: none; }
body.theme-pd .pd-chalkboard :is(.pd-chalkboard-ok,.pd-chalkboard-x,a):focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-chalkboard-accent); outline-offset: var(--pd-tab-indicator); }

/* ===== 版块专属右栏与版块搜索（2026-10-05 站长定，设计稿 design/forum-sidebars-v1；core/forum-sides.php、pages/forum.php） =====
   交易、推广、问答、周刊四个版块的右栏换成各自的内容；外观和全站右栏卡片一样，点缀色用版块自己的颜色
   （aside 上挂 pd-board-tone-N，--pd-board-icon-color 和首页版块卡片、版块头部图标同一个颜色）。
   搜索框挪到版块头部、版块名字右边，默认只搜这个版块，勾「全站」搜全部（右栏顶部的搜索框在手机上会掉到帖子列表下面）。 */
body.theme-pd .pd-forum-hero-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-3);
}
body.theme-pd .pd-forum-hero-top h1 { flex: none; }
body.theme-pd .pd-forum-hero-top .pd-side-search { flex: 0 1 calc(var(--pd-space-5) * 9); min-width: 0; margin: 0; }
body.theme-pd .pd-search-all {
    display: inline-flex;
    flex: none;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    white-space: nowrap;
    cursor: pointer;
}
body.theme-pd .pd-search-all input { margin: 0; accent-color: var(--pd-color-primary); }
body.theme-pd .pd-search-all:hover { color: var(--pd-color-text-secondary); }
@media (max-width: 640px) {
    body.theme-pd .pd-forum-hero-top { flex-wrap: wrap; }
    body.theme-pd .pd-forum-hero-top .pd-side-search { flex: 1 1 100%; }
}
/* 搜索页顶部的搜索框（版块里搜过来的带着版块范围） */
body.theme-pd .pd-search-page > .pd-side-search { max-width: calc(var(--pd-space-5) * 18); margin: 0 0 var(--pd-space-3); }

body.theme-pd .pd-fside .pd-card-heading-icon { color: var(--pd-board-icon-color); }
/* 每个版块的第一张卡（担保交易 / 认证商家 / 问答概况 / 本期周刊）：标题行铺一层版块色，一眼看出这是本版专属 */
body.theme-pd .pd-fside-lead > .pd-side-head { background: color-mix(in srgb, var(--pd-board-icon-color) 9%, var(--pd-color-surface)); }
@media (min-width: 761px) and (max-width: 1180px) {
    body.theme-pd .pd-fside > :is(.pd-fside-lead, .pd-fside-modbar) { grid-column: 1 / -1; }
}
body.theme-pd .pd-fside-money {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-fside-money img { width: var(--pd-icon-md); height: var(--pd-icon-md); }
body.theme-pd .pd-fside-stats { margin-top: var(--pd-space-2); }
body.theme-pd .pd-fside-stats.is-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
body.theme-pd .pd-fside-stats b.is-up { color: var(--pd-text-green); }
body.theme-pd .pd-fside-stats b .pd-fside-money { color: inherit; font-size: inherit; }
body.theme-pd .pd-fside-note,
body.theme-pd .pd-fside-lede {
    margin: var(--pd-space-2) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-fside-note .pd-fside-money { color: var(--pd-color-text); font-weight: var(--pd-fw-semibold); vertical-align: bottom; }
body.theme-pd .pd-fside-foot {
    margin: var(--pd-space-2) 0 0;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-fside-action {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-1);
    height: var(--pd-btn-h);
    margin-top: var(--pd-space-3);
    padding: 0 var(--pd-space-3);
    color: var(--pd-color-on-primary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-primary);
    border: 1px solid var(--pd-color-primary);
    border-radius: var(--pd-btn-radius);
    text-decoration: none;
}
body.theme-pd .pd-fside-action:hover { color: var(--pd-color-on-primary); background: var(--pd-color-primary-hover); border-color: var(--pd-color-primary-hover); text-decoration: none; }
body.theme-pd .pd-fside-action.is-quiet { color: var(--pd-color-text); background: var(--pd-color-surface); border-color: var(--pd-color-border); }
body.theme-pd .pd-fside-action.is-quiet:hover { color: var(--pd-color-primary); background: var(--pd-color-surface); border-color: var(--pd-color-primary); }
body.theme-pd .pd-fside-row { display: flex; align-items: center; gap: var(--pd-space-2); }
body.theme-pd .pd-fside-row .pd-fside-action { flex: 1 1 0; min-width: 0; }
body.theme-pd .pd-fside-row > .pd-side-link { flex: none; margin-top: var(--pd-space-3); }
body.theme-pd .pd-fside-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-3) 0 var(--pd-space-1);
    text-align: center;
}
body.theme-pd .pd-fside-empty i { color: var(--pd-color-text-tertiary); font-size: var(--pd-icon-xl); }
body.theme-pd .pd-fside-empty p { margin: 0; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); line-height: var(--pd-lh-normal); }

/* 排行（靠谱卖家）：名次 + 头像 + 名字 / 小字 + 右边的数 */
body.theme-pd .pd-fside-rank { margin: 0; padding: 0; list-style: none; }
body.theme-pd .pd-fside-rank li {
    display: grid;
    grid-template-columns: var(--pd-space-3) var(--pd-space-5) minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-1) 0;
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-fside-rank li:first-child { border-top: 0; }
body.theme-pd .pd-fside-rank img { width: var(--pd-space-5); height: var(--pd-space-5); object-fit: cover; }
body.theme-pd .pd-fside-no { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); text-align: center; font-variant-numeric: tabular-nums; }
body.theme-pd .pd-fside-no:is(.is-1, .is-2, .is-3) { color: var(--pd-board-icon-color); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-fside-who { display: flex; flex-direction: column; min-width: 0; }
body.theme-pd .pd-fside-who a {
    overflow: hidden;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    text-decoration: none;
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd .pd-fside-who a:hover { color: var(--pd-color-primary); }
body.theme-pd .pd-fside-who small { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-fside-val { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); text-align: right; white-space: nowrap; }
body.theme-pd .pd-fside-val b { display: block; color: var(--pd-color-text); font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); font-variant-numeric: tabular-nums; }

/* 版主：缩成一行 */
body.theme-pd .pd-side-box.pd-fside-modbar:not(.pd-side-checkin) {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1) var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-card-padding);
}
body.theme-pd .pd-side-box.pd-fside-modbar:not(.pd-side-checkin) > :not(.pd-side-head) { margin: 0; }
body.theme-pd .pd-fside-modlist { display: inline-flex; flex-wrap: wrap; gap: var(--pd-space-1) var(--pd-space-2); min-width: 0; }
body.theme-pd .pd-fside-mod { display: inline-flex; align-items: center; gap: calc(var(--pd-space-1) / 2); color: var(--pd-color-text); font-size: var(--pd-fs-sm); text-decoration: none; }
body.theme-pd .pd-fside-mod:hover { color: var(--pd-color-primary); }
body.theme-pd .pd-fside-mod img { width: var(--pd-icon-lg); height: var(--pd-icon-lg); object-fit: cover; }

/* 交易：担保交易三步、分类格 */
body.theme-pd .pd-fside-steps { margin: var(--pd-space-2) 0 0; padding: 0; list-style: none; counter-reset: pdfstep; }
body.theme-pd .pd-fside-steps li {
    display: grid;
    grid-template-columns: var(--pd-icon-xl) minmax(0, 1fr);
    column-gap: var(--pd-space-1);
    padding: calc(var(--pd-space-1) / 2) 0;
    counter-increment: pdfstep;
}
body.theme-pd .pd-fside-steps li::before {
    content: counter(pdfstep);
    display: flex;
    grid-row: 1 / 3;
    align-items: center;
    justify-content: center;
    width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    color: var(--pd-board-icon-color);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    background: color-mix(in srgb, var(--pd-board-icon-color) 12%, var(--pd-color-surface));
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-fside-steps b { color: var(--pd-color-text); font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-snug); }
body.theme-pd .pd-fside-steps span { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-fside-cats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pd-space-1); }
body.theme-pd .pd-fside-cats a {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    column-gap: calc(var(--pd-space-1) / 2);
    padding: var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    text-decoration: none;
}
body.theme-pd .pd-fside-cats a:hover { color: var(--pd-color-text); border-color: var(--pd-board-icon-color); text-decoration: none; }
body.theme-pd .pd-fside-cats i { color: var(--pd-board-icon-color); font-size: var(--pd-icon-sm); }
body.theme-pd .pd-fside-cats b {
    grid-column: 1 / 3;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-fside-cats small { color: var(--pd-text-green); font-size: var(--pd-fs-xs); }

/* 推广：认证商家墙。按类目筛不用脚本：一组单选，选中的类目以外的商家用 :has() 藏起来（类目键见 core/merchant.php 的 pd_merchant_scopes） */
body.theme-pd .pd-fside-chips { display: flex; flex-wrap: wrap; gap: calc(var(--pd-space-1) / 2); }
body.theme-pd .pd-fside-chips label { position: relative; cursor: pointer; }
body.theme-pd .pd-fside-chips input { position: absolute; opacity: 0; pointer-events: none; }
body.theme-pd .pd-fside-chips span {
    display: inline-flex;
    align-items: center;
    height: var(--pd-icon-xl);
    padding: 0 calc(var(--pd-space-1) * .75);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-pill);
}
body.theme-pd .pd-fside-chips label:hover span { color: var(--pd-color-text); }
body.theme-pd .pd-fside-chips input:checked + span {
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-semibold);
    background: color-mix(in srgb, var(--pd-board-icon-color) 12%, var(--pd-color-surface));
    border-color: var(--pd-board-icon-color);
}
body.theme-pd .pd-fside-chips input:focus-visible + span { outline: 2px solid var(--pd-color-primary); outline-offset: 1px; }
body.theme-pd .pd-fside-wall:has(.pd-fside-chips input[value="esim"]:checked) .pd-fside-merchants > a:not([data-scope~="esim"]),
body.theme-pd .pd-fside-wall:has(.pd-fside-chips input[value="vps"]:checked) .pd-fside-merchants > a:not([data-scope~="vps"]),
body.theme-pd .pd-fside-wall:has(.pd-fside-chips input[value="node"]:checked) .pd-fside-merchants > a:not([data-scope~="node"]),
body.theme-pd .pd-fside-wall:has(.pd-fside-chips input[value="domain"]:checked) .pd-fside-merchants > a:not([data-scope~="domain"]),
body.theme-pd .pd-fside-wall:has(.pd-fside-chips input[value="other"]:checked) .pd-fside-merchants > a:not([data-scope~="other"]) { display: none; }
body.theme-pd .pd-fside-merchants { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--pd-space-2) calc(var(--pd-space-1) / 2); margin-top: var(--pd-space-2); }
body.theme-pd .pd-fside-merchants a { display: flex; flex-direction: column; align-items: center; gap: calc(var(--pd-space-1) / 4); min-width: 0; text-decoration: none; }
body.theme-pd .pd-fside-merchants img { width: calc(var(--pd-icon-xl) * 2); height: calc(var(--pd-icon-xl) * 2); object-fit: cover; transition: transform .12s ease; }
body.theme-pd .pd-fside-merchants a:hover img { transform: translateY(-2px); }
body.theme-pd .pd-fside-merchants span { max-width: 100%; overflow: hidden; color: var(--pd-color-text); font-size: var(--pd-fs-xs); text-overflow: ellipsis; white-space: nowrap; }
body.theme-pd .pd-fside-merchants a:hover span { color: var(--pd-color-primary); }
body.theme-pd .pd-fside-merchants small { max-width: 100%; overflow: hidden; color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-2xs); text-overflow: ellipsis; white-space: nowrap; }
body.theme-pd .pd-fside-ticks { margin: var(--pd-space-1) 0 0; padding: 0; list-style: none; }
body.theme-pd .pd-fside-ticks li {
    position: relative;
    padding: calc(var(--pd-space-1) / 4) 0 calc(var(--pd-space-1) / 4) var(--pd-space-3);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-fside-ticks li::before {
    content: "";
    position: absolute;
    top: calc(var(--pd-space-1) / 4 + .75em - var(--pd-space-1) * .375);
    left: calc(var(--pd-space-1) / 2);
    width: calc(var(--pd-space-1) * .75);
    height: calc(var(--pd-space-1) * .75);
    background: var(--pd-board-icon-color);
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-fside-rules { margin: 0; padding: 0; list-style: none; }
body.theme-pd .pd-fside-rules li {
    display: grid;
    grid-template-columns: var(--pd-icon-md) minmax(0, 1fr);
    gap: var(--pd-space-1);
    padding: calc(var(--pd-space-1) / 2) 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-fside-rules i { padding-top: calc(var(--pd-space-1) / 4); color: var(--pd-board-icon-color); font-size: var(--pd-icon-sm); text-align: center; }
body.theme-pd .pd-fside-rules b { margin-right: calc(var(--pd-space-1) / 2); color: var(--pd-color-text); font-weight: var(--pd-fw-semibold); }

/* 问答 / 周刊：标题列表、悬赏榜、往期 */
body.theme-pd .pd-fside-qlist { margin: 0; padding: 0; list-style: none; }
body.theme-pd .pd-fside-qlist li {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    padding: calc(var(--pd-space-1) * .75) 0;
    border-top: 1px solid var(--pd-color-divider);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-fside-qlist li:first-child { border-top: 0; }
body.theme-pd .pd-fside-qlist a { flex: 1 1 auto; min-width: 0; overflow: hidden; color: var(--pd-color-text); text-decoration: none; text-overflow: ellipsis; white-space: nowrap; }
body.theme-pd .pd-fside-qlist a:hover { color: var(--pd-color-primary); }
body.theme-pd .pd-fside-qlist > li > span { display: inline-flex; flex: none; align-items: center; gap: calc(var(--pd-space-1) / 2); color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-fside-qlist em { font-style: normal; color: var(--pd-color-warning); }
body.theme-pd .pd-fside-qlist em img { width: var(--pd-icon-sm); height: var(--pd-icon-sm); }
body.theme-pd .pd-fside-bounty,
body.theme-pd .pd-fside-issues { margin: 0; padding: 0; list-style: none; }
body.theme-pd .pd-fside-bounty li,
body.theme-pd .pd-fside-issues li {
    display: grid;
    grid-template-columns: calc(var(--pd-space-5) * 2) minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--pd-space-1);
    padding: calc(var(--pd-space-1) * .75) 0;
    border-top: 1px solid var(--pd-color-divider);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-fside-bounty li:first-child,
body.theme-pd .pd-fside-issues li:first-child { border-top: 0; }
body.theme-pd .pd-fside-bounty b { color: var(--pd-color-warning); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-fside-issues b { color: var(--pd-board-icon-color); font-size: var(--pd-fs-xs); font-weight: var(--pd-fw-semibold); }
body.theme-pd :is(.pd-fside-bounty, .pd-fside-issues) a { min-width: 0; overflow: hidden; color: var(--pd-color-text); text-decoration: none; text-overflow: ellipsis; white-space: nowrap; }
body.theme-pd :is(.pd-fside-bounty, .pd-fside-issues) a:hover { color: var(--pd-color-primary); }
body.theme-pd :is(.pd-fside-bounty, .pd-fside-issues) span { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); white-space: nowrap; }

/* 周刊：本期卡、今日资讯的进度点、编辑名片 */
body.theme-pd :is(.pd-fside-issue, .pd-fside-soon) {
    display: flex;
    flex-direction: column;
    gap: calc(var(--pd-space-1) / 2);
    margin-top: var(--pd-space-1);
    padding: var(--pd-space-2);
    background: color-mix(in srgb, var(--pd-board-icon-color) 7%, var(--pd-color-surface));
    border-radius: var(--pd-radius-md);
    text-decoration: none;
}
body.theme-pd :is(.pd-fside-issue, .pd-fside-soon) b { color: var(--pd-color-text); font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-snug); }
body.theme-pd .pd-fside-issue:hover b { color: var(--pd-color-primary); }
body.theme-pd .pd-fside-soon small { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-fside-issue-no {
    align-self: flex-start;
    padding: 0 var(--pd-space-1);
    color: var(--pd-board-icon-color);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-normal);
    border: 1px solid currentColor;
    border-radius: var(--pd-radius-pill);
}
/* 周刊：墨墨整理好、等管理员审核的那一期（只有能进后台的人看得到），点了去后台「网鱼周刊」 */
body.theme-pd .pd-fside-review {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-1);
    padding: var(--pd-space-1) var(--pd-space-2);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    background: var(--pd-color-warning-soft);
    border-radius: var(--pd-radius-md);
    text-decoration: none;
}
body.theme-pd .pd-fside-review > i { flex: none; color: var(--pd-color-warning); }
body.theme-pd .pd-fside-review > span { flex: 1 1 auto; min-width: 0; }
body.theme-pd .pd-fside-review:hover { color: var(--pd-color-text); text-decoration: none; }
body.theme-pd .pd-fside-review:hover > span { text-decoration: underline; }
body.theme-pd .pd-fside-dots { display: flex; align-items: center; gap: calc(var(--pd-space-1) / 2); margin: calc(var(--pd-space-1) / 2) 0 var(--pd-space-1); }
body.theme-pd .pd-fside-dots i { width: var(--pd-space-1); height: var(--pd-space-1); background: var(--pd-color-border-strong); border-radius: var(--pd-radius-round); }
body.theme-pd .pd-fside-dots i.is-on { background: var(--pd-board-icon-color); }
body.theme-pd .pd-fside-dots span { margin-left: auto; color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-side-box.pd-fside-editor:not(.pd-side-checkin) {
    flex-direction: row;
    align-items: flex-start;
    gap: var(--pd-space-2);
    padding: var(--pd-card-padding);
}
body.theme-pd .pd-side-box.pd-fside-editor:not(.pd-side-checkin) > :not(.pd-side-head) { margin: 0; }
body.theme-pd .pd-fside-editor img { flex: none; width: calc(var(--pd-icon-xl) * 2); height: calc(var(--pd-icon-xl) * 2); object-fit: cover; }
body.theme-pd .pd-fside-editor a { color: var(--pd-color-role-ai); font-size: var(--pd-fs-sm); text-decoration: none; }
body.theme-pd .pd-fside-editor p { margin: calc(var(--pd-space-1) / 2) 0 0; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); line-height: var(--pd-lh-normal); }

/* ===== 域名 WHOIS 放大镜、sh.cd 体检结果卡片（2026-10-05，core/forum-tools.php、assets/pages.js 末尾） =====
   放大镜只在域名版块的正文里出现；浮窗贴在按钮下面（脚本定位），右栏查询框的结果用同一套列表样式 */
body.theme-pd .pd-whois-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: var(--pd-icon-md);
    height: var(--pd-icon-md);
    margin: 0 0 0 calc(var(--pd-space-1) / 2);
    padding: 0;
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-3xs);
    line-height: 1;
    vertical-align: text-bottom;
    background: var(--pd-color-primary-soft);
    border: 0;
    border-radius: var(--pd-radius-xs);
    cursor: pointer;
}
body.theme-pd .pd-whois-btn:hover,
body.theme-pd .pd-whois-btn[aria-expanded="true"] { color: var(--pd-color-on-primary); background: var(--pd-color-primary); }
body.theme-pd .pd-whois-btn:focus-visible { outline: 2px solid var(--pd-color-primary); outline-offset: 1px; }
body.theme-pd .pd-whois-pop {
    --pd-whois-pop-w: 360px;
    position: absolute;
    z-index: var(--pd-z-popover);
    width: min(var(--pd-whois-pop-w), calc(100vw - var(--pd-space-3) * 2));
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    box-shadow: var(--pd-shadow-2);
    outline: none;
}
body.theme-pd .pd-whois-pop-head {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-1) var(--pd-space-1) var(--pd-space-1) var(--pd-space-2);
    border-bottom: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-whois-pop-head > i { color: var(--pd-color-primary); font-size: var(--pd-icon-sm); }
body.theme-pd .pd-whois-pop-head > b { flex: 1 1 auto; font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-whois-pop-body { padding: var(--pd-space-2); }
body.theme-pd .pd-whois-list {
    display: grid;
    grid-template-columns: max-content minmax(0, 1fr);
    gap: var(--pd-space-1) var(--pd-space-2);
    margin: 0;
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-snug);
}
body.theme-pd .pd-whois-list dt { color: var(--pd-color-text-secondary); font-weight: var(--pd-fw-regular); }
body.theme-pd .pd-whois-list dd { min-width: 0; margin: 0; overflow-wrap: anywhere; }
body.theme-pd .pd-whois-list dd a { color: var(--pd-color-link); text-decoration: none; }
body.theme-pd .pd-whois-list dd a:hover { text-decoration: underline; }
body.theme-pd .pd-whois-list dd.is-soon { color: var(--pd-color-warning); }
body.theme-pd .pd-whois-list dd.is-expired { color: var(--pd-color-error); }
body.theme-pd .pd-whois-tags { display: flex; flex-wrap: wrap; gap: calc(var(--pd-space-1) / 2); }
body.theme-pd .pd-whois-tag {
    padding: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-whois-tag.is-ok { color: var(--pd-color-success); background: var(--pd-color-success-soft); }
body.theme-pd .pd-whois-dns { display: flex; flex-direction: column; font-family: var(--pd-font-mono); font-size: var(--pd-fs-xs); }
body.theme-pd :is(.pd-whois-msg, .pd-ftool-loading) { margin: 0; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); line-height: var(--pd-lh-normal); }
body.theme-pd .pd-whois-msg.is-error { color: var(--pd-color-error); }
body.theme-pd .pd-ftool-loading { display: flex; align-items: center; gap: var(--pd-space-1); }

/* 右栏：WHOIS 查询、sh.cd 结果查询、测试脚本 */
body.theme-pd .pd-ftool-form { display: flex; align-items: center; gap: var(--pd-space-1); }
body.theme-pd .pd-ftool-form input {
    flex: 1 1 auto;
    min-width: 0;
    height: var(--pd-input-h);
    margin: 0;
    padding: 0 var(--pd-space-1);
    font-size: var(--pd-fs-sm);
}
/* 查询按钮：和输入框一样高的蓝色正方形，只有放大镜（站长定）；不用 .btn，免得吃到 `form .btn` 的上外边距和按钮高度 */
body.theme-pd .pd-ftool-go {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: var(--pd-input-h);
    height: var(--pd-input-h);
    margin: 0;
    padding: 0;
    color: var(--pd-color-on-primary);
    font-size: var(--pd-icon-md);
    background: var(--pd-color-primary);
    border: 0;
    border-radius: var(--pd-btn-radius);
    cursor: pointer;
}
body.theme-pd .pd-ftool-go:hover { background: var(--pd-color-primary-hover); }
body.theme-pd .pd-ftool-go:active { background: var(--pd-color-primary-active); }
body.theme-pd .pd-ftool-go:focus-visible { outline: 2px solid var(--pd-color-primary); outline-offset: 2px; }
body.theme-pd-dark :is(.pd-ftool-go, .pd-whois-btn:hover, .pd-whois-btn[aria-expanded="true"]) { color: var(--pd-color-surface); }
body.theme-pd .pd-ftool-out:empty { display: none; }
body.theme-pd .pd-ftool-out { margin-top: var(--pd-space-2); }
body.theme-pd .pd-ftool-out .pd-shcd-card { margin: 0; }
body.theme-pd .pd-ftool-tip { margin-top: var(--pd-space-1); color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); line-height: var(--pd-lh-normal); }
body.theme-pd .pd-ftool-tip i { font-size: var(--pd-fs-3xs); }
body.theme-pd .pd-ftool-script-list { display: flex; flex-direction: column; gap: var(--pd-space-2); margin: 0; padding: 0; list-style: none; }
body.theme-pd .pd-ftool-script-list li { min-width: 0; }
body.theme-pd .pd-ftool-script-head { display: flex; align-items: center; justify-content: space-between; gap: var(--pd-space-1); }
body.theme-pd .pd-ftool-script-head b { font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-ftool-script-list li.is-main .pd-ftool-script-head b { color: var(--pd-color-primary); }
body.theme-pd .pd-ftool-script-desc { display: block; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); line-height: var(--pd-lh-normal); }
body.theme-pd .pd-ftool-script-list code {
    display: block;
    margin-top: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    overflow-x: auto;
    color: var(--pd-color-text);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    white-space: nowrap;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-ftool-copy {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    background: transparent;
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-xs);
    cursor: pointer;
}
body.theme-pd .pd-ftool-copy:hover { color: var(--pd-color-primary); border-color: var(--pd-color-primary); }
body.theme-pd .pd-ftool-copy.is-copied { color: var(--pd-color-success); border-color: var(--pd-color-success); }

/* sh.cd 体检结果卡片：正文里插在结果链接那一段下面，右栏查询框里也是它 */
body.theme-pd .pd-shcd-card {
    margin: var(--pd-space-2) 0;
    padding: var(--pd-space-2);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-snug);
}
body.theme-pd .pd-shcd-head { display: flex; flex-wrap: wrap; align-items: center; gap: calc(var(--pd-space-1) / 2) var(--pd-space-1); }
body.theme-pd .pd-shcd-head > i { color: var(--pd-color-primary); font-size: var(--pd-icon-sm); }
body.theme-pd .pd-shcd-head > b { font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-shcd-meta { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-shcd-more {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    margin-left: auto;
    color: var(--pd-color-link);
    font-size: var(--pd-fs-xs);
    text-decoration: none;
}
body.theme-pd .pd-shcd-more:hover { text-decoration: underline; }
body.theme-pd .pd-shcd-more i { font-size: var(--pd-fs-3xs); }
body.theme-pd .pd-md-body .pd-shcd-card p { margin: 0; }
body.theme-pd .pd-shcd-facts { margin: var(--pd-space-1) 0 0; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-shcd-groups {
    display: grid;
    grid-template-columns: max-content minmax(0, 1fr);
    gap: var(--pd-space-1) var(--pd-space-2);
    margin: var(--pd-space-2) 0 0;
    padding-top: var(--pd-space-2);
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-shcd-groups dt { color: var(--pd-color-text-secondary); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-shcd-groups dd { min-width: 0; margin: 0; }
body.theme-pd .pd-shcd-line { display: block; overflow-wrap: anywhere; }
body.theme-pd .pd-shcd-tag {
    margin-right: calc(var(--pd-space-1) / 2);
    padding: 0 calc(var(--pd-space-1) / 2);
    color: var(--pd-color-success);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    background: var(--pd-color-success-soft);
    border-radius: var(--pd-radius-xs);
}
body.theme-pd .pd-shcd-foot { margin: var(--pd-space-1) 0 0; color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-shcd-msg { margin: var(--pd-space-1) 0 0; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-shcd-card.is-loading .pd-ftool-loading { font-size: var(--pd-fs-xs); }

/* ===== 帖子页底部：游客的「登录后参与讨论」卡片（pages/thread.php，2026-10-05 重做） =====
   和上面的回复卡同一套外观（边框、无阴影、帖子页圆角），左图标 + 说明，右边注册 / 登录；手机上按钮排到下面占满一行 */
body.theme-pd.page-thread main.wrap > #reply-form.pd-reply-guest {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2) var(--pd-space-3);
    padding: var(--pd-space-3) var(--pd-space-4);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
}
body.theme-pd .pd-reply-guest-icon {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-md);
    background: var(--pd-color-primary-soft);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-reply-guest-text { flex: 1 1 auto; min-width: 0; }
body.theme-pd .pd-reply-guest-text h2 {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
}
body.theme-pd .pd-reply-guest-text p {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-reply-guest-actions { display: flex; flex: none; gap: var(--pd-space-1); }
body.theme-pd .pd-reply-guest-actions .btn { margin: 0; }
@media (max-width: 640px) {
    body.theme-pd.page-thread main.wrap > #reply-form.pd-reply-guest { flex-wrap: wrap; padding: var(--pd-space-3); }
    body.theme-pd .pd-reply-guest-text { flex-basis: calc(100% - var(--pd-space-5) - var(--pd-space-3)); }
    body.theme-pd .pd-reply-guest-actions { flex-basis: 100%; }
    body.theme-pd .pd-reply-guest-actions .btn { flex: 1 1 0; justify-content: center; }
}
/* 综合热度：和标题前的「荐 / 顶 / 精」同一套圆角方块（尺寸跟 --pd-thread-title-icon-size），白色火焰，
   等级用底色区分；方块是固定配色的图标，深浅主题都不变（和 assets/badges/ 下的 SVG 一样）。 */
:root {
    --pd-heat-bg-1: #e39a0b;
    --pd-heat-bg-2: #ea6c0a;
    --pd-heat-bg-3: #d93025;
    --pd-heat-fg: #ffffff;
}
.pd-thread-badge-hot[class*="pd-thread-heat-level-"] {
    flex: 0 0 auto;
    justify-content: center;
    width: var(--pd-thread-title-icon-size);
    height: var(--pd-thread-title-icon-size);
    min-height: var(--pd-thread-title-icon-size);
    padding: 0;
    border: 0;
    border-radius: calc(var(--pd-thread-title-icon-size) / 6);
    background: var(--pd-heat-bg-1);
    color: var(--pd-heat-fg);
}
.pd-thread-badge-hot .pd-thread-heat-flame {
    font-size: calc(var(--pd-thread-title-icon-size) * .62);
    line-height: 1;
}
.pd-thread-badge-hot.pd-thread-heat-level-2 { background: var(--pd-heat-bg-2); }
.pd-thread-badge-hot.pd-thread-heat-level-3 { background: var(--pd-heat-bg-3); }

/* 多个状态在窄屏上先换行，给标题保留阅读空间；网格随实际行数增高。 */
@media (max-width: 640px) {
    body.theme-pd .pd-thread-row:has(.pd-thread-badges) {
        grid-template-rows: auto calc(var(--pd-space-3) + var(--pd-space-2));
    }
    body.theme-pd .pd-thread-row:has(.pd-thread-badges) > .pd-thread-main > h2 {
        flex-wrap: wrap;
        align-content: flex-end;
        row-gap: calc(var(--pd-space-1) / 2);
        min-height: var(--pd-side-avatar);
        padding-top: var(--pd-space-1);
    }
    body.theme-pd .pd-thread-main h2 > .pd-thread-badges {
        max-width: 100%;
    }
    body.theme-pd .pd-thread-main h2:has(> .pd-thread-badges) > a {
        flex: 1 1 calc(var(--pd-list-title-size) * 8);
        min-width: min(100%, calc(var(--pd-list-title-size) * 8));
    }
    body.theme-pd .thread-title:has(> .pd-thread-badges) {
        white-space: normal;
        overflow-wrap: anywhere;
    }
    body.theme-pd .thread-title > .pd-thread-badges {
        max-width: 100%;
    }
}
/* 荣誉勋章的尺寸是图片显示协议；其余字号、间距、颜色和圆角引用全站设计令牌。 */
.pd-medal-icon {
    display: block;
    flex: none;
    object-fit: contain;
    max-width: 100%;
}

.pd-medals-equipped {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    flex: none;
    vertical-align: middle;
}

.pd-medals-page {
    display: grid;
    gap: var(--pd-space-4);
    padding: var(--pd-space-4);
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border-radius: var(--pd-card-radius);
}

.pd-medals-head h1 {
    margin: 0 0 var(--pd-space-1);
    font-size: var(--pd-h1-size);
    font-weight: var(--pd-h1-weight);
    line-height: var(--pd-h1-lh);
}

.pd-medals-head p,
.pd-medals-gallery-card p {
    margin: 0;
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}

.pd-medals-head p,
.pd-medals-muted {
    color: var(--pd-color-text-secondary);
}

.pd-medals-muted {
    margin: 0;
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}

.pd-medals-section {
    display: grid;
    gap: var(--pd-space-3);
    min-width: 0;
}

.pd-medals-section-head {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--pd-space-2);
}

.pd-medals-section-head h2,
.pd-profile-medals h2 {
    margin: 0;
    font-size: var(--pd-h2-size);
    font-weight: var(--pd-h2-weight);
    line-height: var(--pd-h2-lh);
}

.pd-medals-empty {
    margin: 0;
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text-secondary);
}

.pd-medals-collection,
.pd-medals-gallery {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--pd-ucard-width)), 1fr));
    gap: var(--pd-space-3);
}

.pd-medals-owned,
.pd-medals-gallery-title {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    min-width: 0;
}

.pd-medals-owned .pd-medal-icon,
.pd-medals-gallery-title .pd-medal-icon,
.pd-profile-medals-item .pd-medal-icon {
    width: 48px;
    height: 48px;
}

.pd-medals-owned h3,
.pd-medals-gallery-title h3 {
    margin: 0;
    font-size: var(--pd-h3-size);
    font-weight: var(--pd-h3-weight);
    line-height: var(--pd-h3-lh);
}

.pd-medals-owned,
.pd-medals-gallery-card {
    padding: var(--pd-card-padding);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    background: var(--pd-color-surface-subtle);
}

.pd-medals-gallery-card {
    display: grid;
    align-content: start;
    gap: var(--pd-space-2);
}

.pd-medals-gallery-card .pd-medals-criteria {
    display: grid;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}

.pd-medals-criteria > span {
    font-weight: var(--pd-fw-semibold);
    color: var(--pd-color-text);
}

.pd-medals-equip-form {
    display: grid;
    justify-items: start;
    gap: var(--pd-space-3);
}

.pd-medals-equip-form fieldset {
    min-width: 0;
    width: 100%;
    margin: 0;
    padding: var(--pd-card-padding);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}

.pd-medals-equip-form legend {
    padding: 0 var(--pd-space-1);
    font-size: var(--pd-h3-size);
    font-weight: var(--pd-h3-weight);
}

.pd-medals-slots {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-3);
    margin-top: var(--pd-space-3);
}

.pd-medals-slot {
    display: grid;
    gap: var(--pd-space-1);
    flex: 1 1 var(--pd-ucard-width);
    min-width: 0;
}

.pd-medals-slot label,
.pd-medals-slot select {
    font-size: var(--pd-input-fs);
}

.pd-medals-slot select {
    width: 100%;
    min-height: var(--pd-input-h);
    padding: 0 var(--pd-input-px);
    color: var(--pd-color-text);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-input-radius);
}

.pd-medals-slot select:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}

.pd-profile-medals-list {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-3);
    list-style: none;
    margin: 0;
    padding: 0;
}

.pd-profile-medals-item {
    display: grid;
    justify-items: center;
    gap: var(--pd-space-1);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}

@media (max-width: 600px) {
    .pd-medals-page {
        padding: var(--pd-card-padding-sm);
        gap: var(--pd-space-3);
    }
}

/* 身份图标紧随昵称，权限由颜色区分；成长鱼种仍单独展示。 */
body.theme-pd .pd-name-with-badges {
    display: inline-flex;
    align-items: center;
    flex-wrap: nowrap;
    gap: calc(var(--pd-space-1) / 2);
    max-width: 100%;
    min-width: 0;
    vertical-align: middle;
}
body.theme-pd .pd-name-with-badges > .pd-name-text {
    flex: 0 1 auto;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
body.theme-pd .pd-name-with-badges > :is(.pd-identity-badge, .pd-verified-badge, .pd-gender, .pd-op-badge) {
    flex: none;
    margin-left: 0;
}
body.theme-pd .pd-name-with-badges.pd-staff-name { overflow: visible; }
body.theme-pd .pd-identity-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-icon-sm);
    line-height: var(--pd-lh-tight);
    vertical-align: middle;
}
body.theme-pd .pd-identity-badge:focus-visible {
    outline: var(--pd-tab-indicator) solid currentColor;
    outline-offset: calc(var(--pd-space-1) / 4);
}
/* 前台只有两种管理身份（core/roles.php 的 pd_identity_public_role）：管理员金冠、版主银冠 */
body.theme-pd .pd-identity-badge--moderator { color: var(--pd-color-crown-moderator); }
body.theme-pd .pd-identity-badge--admin { color: var(--pd-color-crown-admin); }
body.theme-pd .pd-identity-badge--official { color: var(--pd-color-role-admin); }
body.theme-pd .pd-identity-badge--system { color: var(--pd-color-role-system); }
body.theme-pd .pd-identity-badge--ai { color: var(--pd-color-role-ai); }
body.theme-pd .pd-identity-icon {
    display: block;
    width: var(--pd-icon-sm);
    height: var(--pd-icon-sm);
    flex: none;
}
body.theme-pd .pd-identity-badge--disabled { color: var(--pd-color-error); }
/* 本人钱包：空间、字体、颜色与圆角全部沿用站点设计令牌。 */
.pd-wallet {
    display: grid;
    gap: var(--pd-space-4);
    min-width: 0;
    padding: var(--pd-space-4);
    background: var(--pd-color-surface);
    border-radius: var(--pd-card-radius);
    color: var(--pd-color-text);
}
.pd-wallet-head,
.pd-wallet-section-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--pd-space-3);
}
.pd-wallet h1,
.pd-wallet h2,
.pd-wallet p { margin: 0; }
.pd-wallet h1 {
    font-size: var(--pd-h1-size);
    font-weight: var(--pd-h1-weight);
    line-height: var(--pd-h1-lh);
}
.pd-wallet h2 {
    font-size: var(--pd-h2-size);
    font-weight: var(--pd-h2-weight);
    line-height: var(--pd-h2-lh);
}
.pd-wallet-head p {
    margin-top: var(--pd-space-1);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text-secondary);
}
.pd-wallet-link {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-link);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-wallet-link:hover { color: var(--pd-color-link-hover); }
.pd-wallet-metrics {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--pd-space-3);
}
.pd-wallet-metrics--3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
}
.pd-wallet-metric {
    display: grid;
    align-content: start;
    gap: var(--pd-space-2);
    min-width: 0;
    padding: var(--pd-card-padding);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    background: var(--pd-color-surface-subtle);
}
.pd-wallet-metric--balance {
    background: var(--pd-color-primary-soft);
    border-color: var(--pd-color-primary-muted);
}
.pd-wallet-label {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
.pd-wallet-number {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
    overflow-wrap: anywhere;
}
.pd-wallet-metric--balance .pd-wallet-number { color: var(--pd-color-primary); }
.pd-wallet-emblem {
    display: flex;
    align-items: center;
    min-height: calc(var(--pd-fs-xl) * var(--pd-lh-tight));
}
.pd-wallet-help {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-wallet-help.pd-wallet-link { color: var(--pd-color-link); }
.pd-wallet-tabs {
    display: flex;
    gap: var(--pd-tab-gap);
    border-bottom: 1px solid var(--pd-color-divider);
}
.pd-wallet-tabs a {
    display: inline-flex;
    align-items: center;
    min-height: var(--pd-tab-h-touch);
    padding: 0 var(--pd-tab-px);
    color: var(--pd-color-text-secondary);
    border-bottom: var(--pd-tab-indicator) solid transparent;
    font-size: var(--pd-tab-fs);
    font-weight: var(--pd-tab-weight);
}
.pd-wallet-tabs a.is-active {
    color: var(--pd-color-primary);
    border-bottom-color: var(--pd-color-primary);
}
.pd-wallet-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) var(--pd-sidebar-width);
    align-items: start;
    gap: var(--pd-space-4);
}
.pd-wallet-ledger,
.pd-wallet-sources {
    display: grid;
    gap: var(--pd-space-3);
    min-width: 0;
}
.pd-wallet-sources {
    padding: var(--pd-card-padding);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
.pd-wallet-summary {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-5);
}
.pd-wallet-summary > div {
    display: grid;
    gap: calc(var(--pd-space-1) / 2);
}
.pd-wallet-summary span {
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
.pd-wallet-summary b {
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
.pd-wallet-positive { color: var(--pd-color-success); }
.pd-wallet-negative { color: var(--pd-color-error); }
.pd-wallet-table-wrap { overflow-x: auto; }
.pd-wallet-table {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
.pd-wallet-table th,
.pd-wallet-table td {
    padding: var(--pd-space-2) var(--pd-space-1);
    text-align: left;
    border-bottom: 1px solid var(--pd-color-divider);
    vertical-align: top;
}
.pd-wallet-table th {
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
    color: var(--pd-color-text-secondary);
    white-space: nowrap;
}
.pd-wallet-table th:nth-last-child(-n+2),
.pd-wallet-delta,
.pd-wallet-balance {
    text-align: right;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}
.pd-wallet-time {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    min-width: calc(var(--pd-space-5) * 3);
}
.pd-wallet-delta { font-weight: var(--pd-fw-semibold); }
.pd-wallet-reason { display: block; }
.pd-wallet-note {
    display: block;
    margin-top: calc(var(--pd-space-1) / 2);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
    overflow-wrap: anywhere;
}
.pd-wallet-pagination {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: var(--pd-space-3);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
}
.pd-wallet-pagination a {
    display: inline-flex;
    align-items: center;
    min-height: var(--pd-btn-h-sm);
    padding: 0 var(--pd-btn-px-sm);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-btn-radius);
    color: var(--pd-color-link);
}
.pd-wallet-empty {
    padding: var(--pd-space-4) 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
.pd-wallet-source { display: grid; gap: var(--pd-space-1); }
.pd-wallet-source > div:first-child {
    display: flex;
    justify-content: space-between;
    gap: var(--pd-space-2);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-wallet-source b { font-weight: var(--pd-fw-medium); font-variant-numeric: tabular-nums; }
.pd-wallet-source-bar {
    height: calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-surface-soft);
    overflow: hidden;
}
.pd-wallet-source-bar > span {
    display: block;
    height: 100%;
    width: var(--pd-wallet-share, 0%);
    background: var(--pd-color-primary);
    border-radius: inherit;
}
@media (max-width: 1000px) {
    .pd-wallet-layout { grid-template-columns: minmax(0, 1fr); }
    .pd-wallet-sources { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .pd-wallet-sources h2,
    .pd-wallet-sources > .pd-wallet-help,
    .pd-wallet-sources > .pd-wallet-link,
    .pd-wallet-sources > .pd-wallet-empty { grid-column: 1 / -1; }
}
@media (max-width: 640px) {
    .pd-wallet { padding: var(--pd-card-padding); gap: var(--pd-space-3); }
    .pd-wallet-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pd-space-2); }
    .pd-wallet-metrics--3 { grid-template-columns: minmax(0, 1fr); }
    .pd-wallet-metric { padding: var(--pd-card-padding-sm); }
    .pd-wallet-sources { grid-template-columns: minmax(0, 1fr); }
}

/* 成员邀请使用同一套资产卡片、表格与分页。 */
.pd-invites .pd-btn-primary {
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
    border: 0;
}
.pd-invites .pd-btn-primary:hover:not(:disabled) { background: var(--pd-color-primary-hover); }
.pd-invites .pd-btn-primary:disabled { opacity: .5; cursor: not-allowed; }
.pd-invites .pd-btn-ghost {
    color: var(--pd-color-primary);
    background: var(--pd-color-surface-soft);
    border: 0;
}
.pd-invites .pd-btn-sm { height: var(--pd-btn-h-sm); }

.pd-invites { grid-template-columns: minmax(0, 1fr); }
.pd-invites > * { min-width: 0; }
.pd-invites .pd-info-block p { margin-bottom: var(--pd-space-2); }

/* 邀请记录有独立列布局，不继承钱包金额列的右对齐。 */
.pd-invites .pd-info-block {
    margin: 0;
    padding: var(--pd-card-padding);
    box-shadow: none;
}
.pd-invites .pd-invite-list-hint {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
.pd-invite-table {
    width: 100%;
    border-collapse: collapse;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
.pd-invite-table th,
.pd-invite-table td {
    padding: var(--pd-space-3) var(--pd-space-2);
    border-bottom: 1px solid var(--pd-color-divider);
    text-align: left;
    vertical-align: middle;
}
.pd-invite-table th {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
    white-space: nowrap;
}
.pd-invite-table :is(th, td):first-child { padding-left: 0; }
.pd-invite-table :is(th, td):last-child { padding-right: 0; }
.pd-invite-table tbody tr:last-child td { border-bottom: 0; }
.pd-invite-table .pd-invite-actions-cell { text-align: right; }
.pd-invite-actions-cell form { margin: 0; }
.pd-invite-actions-cell .pd-btn { justify-content: center; white-space: nowrap; }
.pd-invite-code {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    max-width: 100%;
    min-height: var(--pd-btn-h-sm);
    padding: 0;
    border: 0;
    border-radius: var(--pd-radius-xs);
    background: transparent;
    color: var(--pd-color-text);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-normal);
    text-align: left;
    cursor: pointer;
}
.pd-invite-code > span { min-width: 0; overflow-wrap: anywhere; }
.pd-invite-code > i { flex: none; color: var(--pd-color-text-tertiary); font-size: var(--pd-icon-sm); }
.pd-invite-code:hover,
.pd-invite-code:hover > i { color: var(--pd-color-primary); }
.pd-invite-code:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-color-primary); outline-offset: var(--pd-space-1); }
.pd-invite-code.is-inactive { color: var(--pd-color-text-secondary); overflow-wrap: anywhere; cursor: auto; }
.pd-invite-status { display: inline-flex; align-items: center; gap: var(--pd-space-1); white-space: nowrap; color: var(--pd-color-text-secondary); }
.pd-invite-status::before { content: ""; width: calc(var(--pd-space-1) / 2); height: calc(var(--pd-space-1) / 2); flex: none; border-radius: var(--pd-radius-round); background: currentColor; }
.pd-invite-status--available { color: var(--pd-text-green); }
.pd-invite-status--expired { color: var(--pd-text-yellow); }
.pd-invite-time { display: grid; gap: calc(var(--pd-space-1) / 2); white-space: nowrap; font-variant-numeric: tabular-nums; }
.pd-invite-time small { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
.pd-invite-user-cell { overflow-wrap: anywhere; }
.pd-invite-unused { color: var(--pd-color-text-tertiary); }
@media (max-width: 900px) {
    .pd-invite-table,
    .pd-invite-table tbody { display: block; }
    .pd-invite-table thead { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip-path: inset(50%); }
    .pd-invite-table tbody { display: grid; gap: var(--pd-space-3); }
    .pd-invite-table tr { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pd-space-3) var(--pd-space-2); padding: var(--pd-card-padding); border: 1px solid var(--pd-color-border); border-radius: var(--pd-card-radius); }
    .pd-invite-table tr > td { min-width: 0; padding: 0; border: 0; }
    .pd-invite-table td[data-label]::before { display: block; margin-bottom: var(--pd-space-1); content: attr(data-label); color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
    .pd-invite-table .pd-invite-code-cell { grid-column: 1 / -1; }
    .pd-invite-table .pd-invite-status-cell { grid-column: 1 / -1; }
    .pd-invite-table .pd-invite-status-cell::before { display: none; }
    .pd-invite-table .pd-invite-actions-cell { text-align: left; }
    .pd-invite-table .pd-invite-actions-cell::before { display: none; }
    .pd-invite-table .pd-invite-user-cell,
    .pd-invite-table .pd-invite-actions-cell { grid-column: 1 / -1; }
}

/* ===== 我的附件 /attachments（pages/attachments.php）：外框、标签、分页沿用钱包页；存储空间是一条胶囊进度条，文件一行一个 ===== */
.pd-files-quota {
    display: grid;
    gap: var(--pd-space-1);
    padding: var(--pd-card-padding);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    background: var(--pd-color-surface-subtle);
}
.pd-files-quota-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    font-variant-numeric: tabular-nums;
}
.pd-files-quota-head b {
    color: var(--pd-color-text);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
}
.pd-files-quota-percent { font-size: var(--pd-fs-xs); }
.pd-files-meter {
    --pd-files-meter-fill: var(--pd-color-primary);
    display: block;
    width: 100%;
    height: var(--pd-space-1);
    overflow: hidden;
    color: var(--pd-files-meter-fill);
    background: var(--pd-color-border);
    border: 0;
    border-radius: var(--pd-radius-pill);
    -webkit-appearance: none;
    appearance: none;
}
.pd-files-meter.is-warn { --pd-files-meter-fill: var(--pd-color-warning); }
.pd-files-meter.is-full { --pd-files-meter-fill: var(--pd-color-error); }
.pd-files-meter::-webkit-progress-bar { background: var(--pd-color-border); }
.pd-files-meter::-webkit-progress-value {
    background: var(--pd-files-meter-fill);
    border-radius: var(--pd-radius-pill);
}
.pd-files-meter::-moz-progress-bar {
    background: var(--pd-files-meter-fill);
    border-radius: var(--pd-radius-pill);
}
.pd-files-quota-note {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-files-tabs {
    overflow-x: auto;
    scrollbar-width: none;
}
.pd-files-tabs::-webkit-scrollbar { display: none; }
.pd-files-tabs a {
    gap: calc(var(--pd-space-1) / 2);
    white-space: nowrap;
}
.pd-files-tab-count {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    font-variant-numeric: tabular-nums;
}
.pd-files-tabs a.is-active .pd-files-tab-count { color: inherit; }
.pd-files-trash-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-files-trash-bar form { margin: 0; }
.pd-files-list {
    display: grid;
    margin: 0;
    padding: 0;
    list-style: none;
}
.pd-files-item {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--pd-space-3);
    padding: var(--pd-space-2) 0;
    border-bottom: 1px solid var(--pd-color-divider);
}
.pd-files-item:first-child { padding-top: 0; }
.pd-files-item:last-child { border-bottom: 0; }
.pd-files-thumb {
    display: grid;
    place-items: center;
    width: calc(var(--pd-space-5) + var(--pd-space-4));
    height: calc(var(--pd-space-5) + var(--pd-space-4));
    overflow: hidden;
    color: var(--pd-color-text-tertiary);
    background: var(--pd-color-surface-subtle);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
}
.pd-files-thumb img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.pd-files-thumb--icon { font-size: var(--pd-icon-xl); }
.pd-files-item.is-trashed .pd-files-thumb img { filter: grayscale(1); }
.pd-files-body {
    display: grid;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
}
.pd-files-name {
    overflow: hidden;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
    line-height: var(--pd-lh-normal);
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.theme-pd a.pd-files-name { color: var(--pd-color-text); }
body.theme-pd a.pd-files-name:hover { color: var(--pd-color-link-hover); }
.pd-files-item.is-trashed .pd-files-name { color: var(--pd-color-text-secondary); }
.pd-files-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    font-variant-numeric: tabular-nums;
}
.pd-files-kind {
    padding: 0 calc(var(--pd-space-1) / 2);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-xs);
}
.pd-files-note { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-files-ref,
.pd-files-refs > summary {
    color: var(--pd-color-success);
    cursor: pointer;
}
body.theme-pd .pd-files-ref:hover,
.pd-files-refs > summary:hover { color: var(--pd-color-success); text-decoration: underline; }
.pd-files-refs { position: relative; }
/* 被几处引用（不止一处时）点开看列表：文字后面一个小箭头，展开时翻过来 */
.pd-files-refs > summary {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    list-style: none;
}
.pd-files-refs > summary::-webkit-details-marker { display: none; }
.pd-files-refs > summary > i {
    font-size: var(--pd-icon-xs);
    transition: transform .15s ease;
}
.pd-files-refs[open] > summary > i { transform: rotate(180deg); }
@media (prefers-reduced-motion: reduce) {
    .pd-files-refs > summary > i { transition: none; }
}
.pd-files-refs > ul {
    position: absolute;
    z-index: 5;
    top: 100%;
    left: 0;
    display: grid;
    gap: calc(var(--pd-space-1) / 2);
    width: max-content;
    max-width: min(calc(var(--pd-space-5) * 10), 80vw);
    margin: calc(var(--pd-space-1) / 2) 0 0;
    padding: var(--pd-space-1) var(--pd-space-2);
    list-style: none;
    background: var(--pd-color-surface);
    border-radius: var(--pd-radius-md);
    box-shadow: var(--pd-shadow-2);
}
.pd-files-refs > ul a {
    color: var(--pd-color-link);
    overflow-wrap: anywhere;
}
.pd-files-refs > ul a:hover { color: var(--pd-color-link-hover); }
.pd-files-actions {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
}
.pd-files-actions form,
.pd-files-trash-bar form {
    display: flex;
    margin: 0;
}
/* 本页按钮一律小号（32px，和邀请页的小按钮一致）：全站 `button.btn` 会盖掉 .btn-small 的高度、内边距和字号，
   `form .btn` 还给表单里的按钮加了上外边距（按钮会比同一行的缩略图、文字低一截），这里一起盖掉 */
body.theme-pd .pd-files .btn {
    height: var(--pd-btn-h-sm);
    min-height: var(--pd-btn-h-sm);
    margin: 0;
    padding: 0 var(--pd-btn-px-sm);
    font-size: var(--pd-btn-fs);
    white-space: nowrap;
}
.pd-files .btn i { font-size: var(--pd-icon-sm); }
.pd-files-empty { text-align: center; }
/* 正文里被上传者删掉的图片（core/cdn.php 的 pd_img_rewrite_content_html）：不留裂图，显示一句说明 */
.pd-img-gone {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1);
    color: var(--pd-color-text-tertiary);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-sm);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
@media (max-width: 640px) {
    .pd-files-item {
        align-items: start;
        gap: var(--pd-space-1) var(--pd-space-2);
    }
    .pd-files-thumb {
        width: calc(var(--pd-space-5) + var(--pd-space-3));
        height: calc(var(--pd-space-5) + var(--pd-space-3));
    }
    /* 五个分类标签在手机上一行放下：去掉图标、收窄左右留白 */
    .pd-files-tabs a { padding: 0 var(--pd-space-1); }
    .pd-files-tabs a > i { display: none; }
    /* 回收站里有「恢复」「彻底删除」两个按钮，放不下就换到下一行 */
    .pd-files-item.is-trashed .pd-files-actions { grid-column: 2 / -1; }
}

/* ===== 鱼塘银行 /bank：一摞卡片，每张卡片只用边框；间距 8 / 12 / 16 / 24 ===== */
body.theme-pd .pd-bank {
    display: grid;
    gap: var(--pd-space-3);
    min-width: 0;
}
body.theme-pd .pd-bank-card {
    min-width: 0;
    padding: var(--pd-space-4);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
    color: var(--pd-color-text);
}
body.theme-pd .pd-bank-card h1,
body.theme-pd .pd-bank-card h2,
body.theme-pd .pd-bank-card p { margin: 0; }
body.theme-pd .pd-bank-card h1 {
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.25;
}
body.theme-pd .pd-bank-card h2 {
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.25;
}
body.theme-pd .pd-bank-card > h1 + *,
body.theme-pd .pd-bank-card > h2 + * {
    margin-top: var(--pd-space-2);
}
body.theme-pd .pd-bank-lead {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: 1.7;
}
body.theme-pd .pd-bank-stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(calc(var(--pd-space-5) * 4), 1fr));
    gap: var(--pd-space-3);
    margin: var(--pd-space-3) 0 0;
}
body.theme-pd .pd-bank-stats div { min-width: 0; }
body.theme-pd .pd-bank-stats dt {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-bank-stats dd {
    margin: calc(var(--pd-space-1) / 2) 0 0;
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    font-variant-numeric: tabular-nums;
    line-height: 1.25;
}
body.theme-pd .pd-bank-notice {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-3);
    padding: var(--pd-space-1) var(--pd-space-2);
    background: var(--pd-color-warning-soft);
    border-radius: var(--pd-radius-md);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-bank-notice i { color: var(--pd-color-warning); }
body.theme-pd .pd-bank-notice a { color: var(--pd-color-primary); }
body.theme-pd .pd-bank-rates {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(calc(var(--pd-space-5) * 4), 1fr));
    gap: var(--pd-space-2);
    margin: var(--pd-space-3) 0 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-bank-rates li {
    padding: var(--pd-space-2) var(--pd-space-3);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-bank-rates span {
    display: block;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-bank-rates b {
    display: block;
    margin-top: calc(var(--pd-space-1) / 2);
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    line-height: 1.25;
}
body.theme-pd .pd-bank-rates b.is-term { color: var(--pd-text-green); }
body.theme-pd .pd-bank-pair {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--pd-space-4);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-bank-form { min-width: 0; }
body.theme-pd .pd-bank-form > label {
    display: block;
    margin: 0 0 var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
}
body.theme-pd .pd-bank-terms + label { margin-top: var(--pd-space-3); }
body.theme-pd .pd-bank-row {
    display: flex;
    gap: var(--pd-space-1);
    align-items: stretch;
}
body.theme-pd .pd-bank-row input[type="text"] {
    flex: 1 1 auto;
    min-width: 0;
    font-family: var(--pd-font-mono);
}
body.theme-pd .pd-bank-row .btn {
    flex: none;
    min-width: calc(var(--pd-space-5) * 2);
    margin: 0;
}
body.theme-pd .pd-bank-form > .pd-bank-lead + .pd-bank-terms { margin-top: var(--pd-space-3); }
body.theme-pd .pd-bank-terms {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, calc(var(--pd-space-5) * 6)));
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-bank-term {
    display: block;
    margin: 0;
    cursor: pointer;
}
body.theme-pd .pd-bank-term input {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}
body.theme-pd .pd-bank-term > span {
    display: block;
    padding: var(--pd-space-2) var(--pd-space-3);
    background: var(--pd-color-surface-soft);
    border: 1px solid transparent;
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-bank-term b {
    display: block;
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-bank-term small {
    display: block;
    margin-top: calc(var(--pd-space-1) / 2);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-bank-term input:checked + span {
    background: var(--pd-color-surface);
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-bank-term input:focus-visible + span {
    outline: 2px solid var(--pd-color-primary);
    outline-offset: 2px;
}
body.theme-pd .pd-bank-term-item {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2) var(--pd-space-3);
    margin-top: var(--pd-space-3);
    padding: var(--pd-space-2) var(--pd-space-3);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-bank-term-main {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--pd-space-1);
    flex: 1 1 100%;
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-bank-term-main b {
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-bank-term-main span { color: var(--pd-color-text-secondary); }
body.theme-pd .pd-bank-badge {
    padding: 0 var(--pd-space-1);
    background: var(--pd-color-success-soft);
    border-radius: var(--pd-radius-pill);
    color: var(--pd-text-green);
    font-size: var(--pd-fs-xs);
    font-style: normal;
}
body.theme-pd .pd-bank-term-meta {
    display: flex;
    flex: 1 1 0;
    flex-wrap: wrap;
    gap: var(--pd-space-1) var(--pd-space-3);
    min-width: 0;
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-bank-term-meta b { color: var(--pd-color-text); font-family: var(--pd-font-mono); }
body.theme-pd .pd-bank-term-item form { margin: 0; }
body.theme-pd .pd-bank-table-wrap {
    margin-top: var(--pd-space-3);
    overflow-x: auto;
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-bank-table {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-bank-table th,
body.theme-pd .pd-bank-table td {
    padding: var(--pd-space-2) var(--pd-space-3);
    text-align: left;
    white-space: nowrap;
}
body.theme-pd .pd-bank-table td:nth-child(2) { white-space: normal; }
body.theme-pd .pd-bank-table thead th {
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-bank-table tbody tr + tr td { border-top: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-bank-table .is-num { text-align: right; font-family: var(--pd-font-mono); font-variant-numeric: tabular-nums; }
body.theme-pd .pd-bank-table .is-time { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-bank-table .is-plus { color: var(--pd-text-green); }
body.theme-pd .pd-bank-table .is-minus { color: var(--pd-text-red); }
body.theme-pd .pd-bank-pager {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-bank-pager a {
    min-width: var(--pd-space-4);
    padding: 0 var(--pd-space-1);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: calc(var(--pd-space-4) - 2px);
    text-align: center;
    text-decoration: none;
}
body.theme-pd .pd-bank-pager a.is-active {
    background: var(--pd-color-primary);
    border-color: var(--pd-color-primary);
    color: var(--pd-color-on-primary);
}
body.theme-pd .pd-bank-rules {
    margin: var(--pd-space-3) 0 0;
    padding-left: var(--pd-space-3);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: 1.8;
}
body.theme-pd .pd-bank-rules li + li { margin-top: var(--pd-space-1); }
body.theme-pd .pd-bank-empty {
    margin-top: var(--pd-space-2);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-sm);
}
@media (max-width: 720px) {
    body.theme-pd .pd-bank-pair { grid-template-columns: minmax(0, 1fr); }
    body.theme-pd .pd-bank-terms { grid-template-columns: minmax(0, 1fr); }
    body.theme-pd .pd-bank-card { padding: var(--pd-space-3); }
}

/* ===== 鱼塘银行：标题图标、银行卡面、转账 / 支付密码表单（2026-10-05）===== */
body.theme-pd .pd-bank-card h1,
body.theme-pd .pd-bank-card h2 {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
}
body.theme-pd .pd-bank-card h1 i,
body.theme-pd .pd-bank-card h2 i {
    flex: none;
    color: var(--pd-color-primary);
}
body.theme-pd .pd-bank-card h2 i {
    display: inline-grid;
    place-items: center;
    width: var(--pd-space-4);
    height: var(--pd-space-4);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-md);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-bank-hero {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: var(--pd-space-4);
    align-items: start;
}
body.theme-pd .pd-bank-hero:has(.pd-bank-cardface) {
    grid-template-columns: minmax(0, 1fr) minmax(0, calc(var(--pd-space-5) * 10));
}
body.theme-pd .pd-bank-hero-main { min-width: 0; }
/* 卡面：各卡种用 data-tier 区分，设计图到位后只改这里的背景；现在只有普通卡 */
body.theme-pd .pd-bank-cardface {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    aspect-ratio: 1.586;
    min-width: 0;
    padding: var(--pd-space-4);
    background: var(--pd-color-primary);
    border-radius: var(--pd-card-radius);
    color: var(--pd-color-on-primary);
    box-shadow: var(--pd-shadow-1);
}
body.theme-pd .pd-bank-cardface-top,
body.theme-pd .pd-bank-cardface-bottom {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-bank-cardface-top span {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-bank-cardface-top em {
    font-size: var(--pd-fs-xs);
    font-style: normal;
    opacity: .85;
}
body.theme-pd .pd-bank-cardno {
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    letter-spacing: .08em;
    user-select: all;
    overflow-wrap: anywhere;
}
body.theme-pd .pd-bank-cardface-bottom { opacity: .9; }
body.theme-pd .pd-bank-fields {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--pd-space-3) var(--pd-space-4);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-bank-fields > div { min-width: 0; }
body.theme-pd .pd-bank-fields label {
    display: block;
    margin: 0 0 var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
}
body.theme-pd .pd-bank-fields input { width: 100%; }
body.theme-pd .pd-bank-fields-action { display: flex; align-items: end; }
body.theme-pd .pd-bank-fields-action .btn { margin: 0; }
body.theme-pd .pd-bank-pin {
    flex: 0 0 calc(var(--pd-space-5) * 4);
    min-width: 0;
    font-family: var(--pd-font-mono);
    letter-spacing: .2em;
}
body.theme-pd .pd-bank-fold { margin-top: var(--pd-space-3); }
body.theme-pd .pd-bank-fold summary {
    cursor: pointer;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
}
body.theme-pd .pd-bank-fold summary:hover { color: var(--pd-color-primary); }
body.theme-pd .pd-bank-term-item .pd-bank-row { flex-wrap: nowrap; }
@media (max-width: 720px) {
    body.theme-pd .pd-bank-hero:has(.pd-bank-cardface) { grid-template-columns: minmax(0, 1fr); }
    body.theme-pd .pd-bank-fields { grid-template-columns: minmax(0, 1fr); }
    body.theme-pd .pd-bank-pin { flex-basis: calc(var(--pd-space-5) * 3); }
    body.theme-pd .pd-bank-row { flex-wrap: wrap; }
}

/* ===== 鱼塘商城 /shop：商品卡片网格（页面外框和卡片沿用 .pd-bank-card）===== */
body.theme-pd .pd-shop-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(calc(var(--pd-space-5) * 8), 1fr));
    gap: var(--pd-space-3);
    margin: var(--pd-space-3) 0 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-shop-item {
    display: flex;
    flex-direction: column;
    gap: var(--pd-space-1);
    min-width: 0;
    padding: var(--pd-space-3);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-divider);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-shop-item-image {
    flex: none;
    width: 100%;
    aspect-ratio: 16 / 9;
    margin-bottom: var(--pd-space-1);
    overflow: hidden;
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-sm);
}
body.theme-pd .pd-shop-item-image img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
body.theme-pd .pd-shop-item-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-shop-item-head b {
    min-width: 0;
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    overflow-wrap: anywhere;
}
body.theme-pd .pd-shop-kind {
    flex: none;
    padding: 0 var(--pd-space-1);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-pill);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-style: normal;
}
body.theme-pd .pd-shop-desc {
    flex: 1 1 auto;
    margin: 0;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: 1.6;
}
body.theme-pd .pd-shop-meta {
    display: flex;
    flex-wrap: wrap;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-shop-buy {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-1);
}
body.theme-pd .pd-shop-buy form { margin: 0; }
/* 人工处理的商品带备注框：价格单独一行，备注框和购买按钮占满下一行 */
body.theme-pd .pd-shop-buy:has(.pd-shop-note) { flex-wrap: wrap; }
body.theme-pd .pd-shop-buy form:has(.pd-shop-note) {
    display: flex;
    flex: 1 1 100%;
    gap: var(--pd-space-2);
}
body.theme-pd .pd-shop-note {
    flex: 1 1 auto;
    min-width: 0;
    height: var(--pd-btn-h-sm);
    padding: 0 var(--pd-input-px);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-shop-code {
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-sm);
    overflow-wrap: anywhere;
    cursor: copy;
}
body.theme-pd .pd-shop-price {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-shop-price b {
    color: var(--pd-color-text);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
}

/* 商城「我的道具」：一行一个道具，图标 + 数量和说明 + 去使用 */
body.theme-pd .pd-shop-props {
    display: grid;
    gap: var(--pd-space-2);
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-shop-props li {
    display: flex;
    align-items: center;
    gap: var(--pd-space-3);
    min-width: 0;
    padding: var(--pd-space-2) var(--pd-space-3);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-shop-prop-icon {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    color: var(--pd-color-primary);
    font-size: var(--pd-icon-lg);
    background: var(--pd-color-surface);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-shop-prop-text {
    display: grid;
    flex: 1 1 auto;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
}
body.theme-pd .pd-shop-prop-text b {
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-shop-prop-text span {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-shop-props .btn { flex: none; margin: 0; }
/* 选号商品没有配图时：用这一批里的第一个号码做一块号码牌 */
body.theme-pd .pd-shop-plate {
    display: flex;
    align-items: center;
    justify-content: center;
}
body.theme-pd .pd-shop-plate span {
    color: var(--pd-color-primary);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-display);
    font-weight: var(--pd-fw-semibold);
    letter-spacing: 0.2em;
}

/* 商城选号页 /shop/number/<等级>（pages/shop-number.php）：等级标签（带在售个数）、等级说明表、换号提醒、号码格子（号码下面写定级原因）、换号成功 */
body.theme-pd .pd-uid-tabs { margin-top: var(--pd-space-3); }
body.theme-pd .pd-uid-tabs small {
    margin-left: var(--pd-space-1);
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-uid-current { font-family: var(--pd-font-mono); }
body.theme-pd .pd-uid-current small {
    display: block;
    color: var(--pd-color-text-secondary);
    font-family: var(--pd-font-body);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
}
body.theme-pd .pd-uid-grades summary {
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-semibold);
    cursor: pointer;
}
body.theme-pd .pd-uid-grades .pd-bank-table tr.is-current td { background: var(--pd-color-primary-soft); }
body.theme-pd .pd-uid-example { font-family: var(--pd-font-mono); white-space: nowrap; }
body.theme-pd .pd-uid-warn {
    background: var(--pd-color-warning-soft);
    border-color: var(--pd-color-warning);
}
body.theme-pd .pd-uid-warn h2,
body.theme-pd .pd-uid-done h2 {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-uid-warn h2 i { color: var(--pd-color-warning); }
body.theme-pd .pd-uid-done h2 i { color: var(--pd-color-success); }
body.theme-pd .pd-uid-done-id {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-2) var(--pd-space-3);
    margin: var(--pd-space-3) 0;
}
body.theme-pd .pd-uid-done-id span { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-uid-done-id strong {
    color: var(--pd-color-primary);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-display);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
}
body.theme-pd .pd-uid-done-id .btn { margin: 0; }
body.theme-pd .pd-uid-filter {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    max-width: calc(var(--pd-space-5) * 8);
    margin-top: var(--pd-space-3);
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-uid-filter input {
    flex: 1 1 auto;
    min-width: 0;
    height: var(--pd-btn-h-sm);
    padding: 0 var(--pd-input-px);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-uid-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(calc(var(--pd-space-5) * 3), 1fr));
    gap: var(--pd-space-2);
    margin: var(--pd-space-3) 0 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-uid-grid li[hidden] { display: none; }
body.theme-pd .pd-uid-grid label {
    display: block;
    margin: 0;
    cursor: pointer;
}
body.theme-pd .pd-uid-grid input {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}
body.theme-pd .pd-uid-grid span {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: var(--pd-btn-h-lg);
    color: var(--pd-color-text);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    letter-spacing: 0.08em;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
}
body.theme-pd .pd-uid-grid span small {
    color: var(--pd-color-text-secondary);
    font-family: var(--pd-font-body);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    letter-spacing: 0;
}
body.theme-pd .pd-uid-grid input:checked + span small { color: var(--pd-color-on-primary); }
body.theme-pd .pd-uid-grid label:hover span { border-color: var(--pd-color-primary); }
body.theme-pd .pd-uid-grid input:focus-visible + span { box-shadow: var(--pd-focus-ring); }
body.theme-pd .pd-uid-grid input:checked + span {
    color: var(--pd-color-on-primary);
    background: var(--pd-color-primary);
    border-color: var(--pd-color-primary);
}
body.theme-pd .pd-uid-grid input:disabled + span { color: var(--pd-color-text-tertiary); cursor: not-allowed; }
body.theme-pd .pd-uid-submit {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: var(--pd-space-2) var(--pd-space-3);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-uid-submit .btn { margin: 0; }
body.theme-pd .pd-uid-picked { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-uid-block {
    color: var(--pd-color-error);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-uid-block a { color: var(--pd-color-link); }

/* 站务管理 /manage（pages/manage.php）：沿用钱包页的外壳、标签和表格，只补待办卡片和行内表单 */
.pd-manage-count {
    margin-left: var(--pd-space-1);
    padding: 0 var(--pd-space-1);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-error);
    color: var(--pd-color-on-primary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-manage-list {
    display: grid;
    gap: var(--pd-space-3);
    min-width: 0;
}
.pd-manage-item {
    display: grid;
    gap: var(--pd-space-1);
    padding: var(--pd-card-padding);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius);
}
.pd-manage-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
.pd-manage-kind {
    padding: 0 var(--pd-space-1);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-surface-subtle);
    color: var(--pd-color-text);
}
.pd-manage-target,
.pd-manage-summary {
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    overflow-wrap: anywhere;
}
.pd-manage-target a { display: inline; }
.pd-manage-summary { color: var(--pd-color-text-secondary); }
.pd-manage-form {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-2);
    margin: 0;
}
.pd-manage-item .pd-manage-form { margin-top: var(--pd-space-1); }
.pd-manage-check,
.pd-manage-field {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-regular);
}
.pd-manage-check input { width: auto; }
.pd-manage-form select,
.pd-manage-form input[type="text"] {
    width: auto;
    height: var(--pd-btn-h-sm);
    padding: 0 var(--pd-space-1);
    font-size: var(--pd-fs-sm);
}
.pd-manage-actions {
    display: inline-flex;
    gap: var(--pd-space-1);
    margin-left: auto;
}
.pd-manage-table .pd-invite-actions-cell .pd-manage-form { justify-content: flex-end; flex-wrap: nowrap; }
.pd-manage-excerpt { color: var(--pd-color-text); }
@media (max-width: 640px) {
    .pd-manage-actions { margin-left: 0; }
    .pd-manage-table .pd-invite-actions-cell .pd-manage-form { flex-wrap: wrap; }
}

/* ===== 咸鱼银行 · 个人网银（2026-10-05）：pages/bank.php + assets/bank.js =====
   卡面沿用 design/bank-cards/v2 的叠加层写法（卡上文字用容器宽度 cqi 缩放）；卡面四色（铂金卡见 design/bank-cards/v3）、卡背、磁条是卡片自己的配色，集中在 .pd-netbank 上。
   动画都能被 prefers-reduced-motion 关掉；金币飞入飞出、金额滚动、卡片倾斜由脚本加类名驱动。 */
body.theme-pd .pd-netbank {
    --pd-nb-ink-standard: #fffaf1;
    --pd-nb-ink-gold: #382303;
    --pd-nb-ink-platinum: #263944;
    --pd-nb-ink-black: #f9e2b3;
    --pd-nb-face-standard: #1f5fc4;
    --pd-nb-face-gold: #c99a3f;
    --pd-nb-face-platinum: #c9d1d6;
    --pd-nb-face-black: #17191c;
    --pd-nb-chip-face: #ead5a6;
    --pd-nb-chip-line: #806033;
    --pd-nb-tilt-x: 0deg;
    --pd-nb-tilt-y: 0deg;
    --pd-nb-ease: cubic-bezier(.2, .7, .2, 1);
    gap: var(--pd-space-3);
}
body.theme-pd .pd-nb-head,
body.theme-pd .pd-nb-overview,
body.theme-pd .pd-nb-desk {
    min-width: 0;
    padding: var(--pd-space-4);
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius-lg);
    color: var(--pd-color-text);
}

/* 顶部：行名、户名、安全状态 */
body.theme-pd .pd-nb-head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-3);
    padding-block: var(--pd-space-3);
}
body.theme-pd .pd-nb-brand { display: flex; align-items: center; gap: var(--pd-space-2); min-width: 0; }
body.theme-pd .pd-nb-brand img { flex: none; width: var(--pd-space-5); height: var(--pd-space-5); }
body.theme-pd .pd-nb-brand h1 { margin: 0; font-size: var(--pd-fs-lg); font-weight: var(--pd-fw-semibold); line-height: var(--pd-lh-tight); }
body.theme-pd .pd-nb-brand p { margin: 0; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-safety { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pd-space-1); margin: 0; padding: 0; list-style: none; }
body.theme-pd .pd-nb-safety li {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
body.theme-pd .pd-nb-safety li.is-on i { color: var(--pd-color-success); }
body.theme-pd .pd-nb-safety li.is-warn { background: var(--pd-color-warning-soft); }
body.theme-pd .pd-nb-safety li.is-warn i { color: var(--pd-color-warning); }
body.theme-pd .pd-nb-safety li:last-child { padding: 0; background: none; }
body.theme-pd .pd-nb-eye,
body.theme-pd .pd-nb-link {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-surface);
    color: var(--pd-color-text-secondary);
    font: inherit;
    font-size: var(--pd-fs-xs);
    cursor: pointer;
    transition: color .2s, border-color .2s;
}
body.theme-pd .pd-nb-eye:hover,
body.theme-pd .pd-nb-link:hover,
body.theme-pd .pd-nb-link.is-copied { color: var(--pd-color-primary); border-color: var(--pd-color-primary); }

/* 总览：左边银行卡，右边资产 */
body.theme-pd .pd-nb-overview {
    display: grid;
    grid-template-columns: minmax(0, 25rem) minmax(0, 1fr);
    gap: var(--pd-space-5);
    align-items: center;
}
body.theme-pd .pd-nb-cardslot { display: grid; gap: var(--pd-space-2); min-width: 0; }
body.theme-pd .pd-nb-cardtools { display: flex; justify-content: center; gap: var(--pd-space-1); }
body.theme-pd .pd-nb-card { perspective: 75rem; min-width: 0; }
body.theme-pd .pd-nb-card-inner {
    position: relative;
    aspect-ratio: 856 / 540;
    transform-style: preserve-3d;
    transform: rotateX(var(--pd-nb-tilt-x)) rotateY(var(--pd-nb-tilt-y));
    transition: transform .7s var(--pd-nb-ease);
}
body.theme-pd .pd-nb-card.is-tilting .pd-nb-card-inner { transition-duration: .12s; }
body.theme-pd .pd-nb-face {
    position: absolute;
    inset: 0;
    border-radius: var(--pd-radius-xl);
    box-shadow: var(--pd-shadow-2);
}
body.theme-pd .pd-nb-card.is-issued .pd-nb-card-inner { animation: pd-nb-issue .9s var(--pd-nb-ease) both; }
@keyframes pd-nb-issue {
    from { opacity: 0; transform: translateY(var(--pd-space-5)) rotateX(35deg) scale(.92); }
    to { opacity: 1; transform: none; }
}

/* 卡面（正面） */
body.theme-pd .pd-netbank .pd-bankcard {
    overflow: hidden;
    isolation: isolate;
    container-type: inline-size;
    color: var(--pd-nb-ink-standard);
    background: var(--pd-nb-face-standard);
    text-shadow: 0 1px 2px rgba(0, 28, 59, .32);
}
body.theme-pd .pd-netbank .pd-bankcard--gold { color: var(--pd-nb-ink-gold); background: var(--pd-nb-face-gold); text-shadow: 0 1px 1px rgba(255, 241, 192, .32); }
body.theme-pd .pd-netbank .pd-bankcard--platinum { color: var(--pd-nb-ink-platinum); background: var(--pd-nb-face-platinum); text-shadow: 0 1px 1px rgba(255, 255, 255, .44); }
body.theme-pd .pd-netbank .pd-bankcard--black { color: var(--pd-nb-ink-black); background: var(--pd-nb-face-black); text-shadow: 0 1px 2px rgba(0, 0, 0, .6); }
body.theme-pd .pd-netbank .pd-bankcard-art { position: absolute; z-index: -1; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
body.theme-pd .pd-netbank .pd-bankcard-chip { position: absolute; left: 7%; top: 36%; width: 12%; color: var(--pd-nb-chip-line); }
body.theme-pd .pd-netbank .pd-bankcard-chip svg { display: block; width: 100%; height: auto; }
body.theme-pd .pd-netbank .pd-bankcard-chip rect { fill: var(--pd-nb-chip-face); stroke: currentColor; stroke-width: 1; }
body.theme-pd .pd-netbank .pd-bankcard-chip path { fill: none; stroke: currentColor; stroke-width: 1; }
body.theme-pd .pd-netbank .pd-bankcard-contactless { position: absolute; left: 23%; top: 38%; width: 4.5%; height: auto; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; opacity: .85; }
body.theme-pd .pd-netbank .pd-bankcard-number { position: absolute; left: 7%; top: 62%; width: 86%; font-family: var(--pd-font-mono); font-size: 5.25cqi; font-weight: var(--pd-fw-medium); font-variant-numeric: tabular-nums; line-height: var(--pd-lh-tight); letter-spacing: .1cqi; white-space: pre; }
body.theme-pd .pd-netbank .pd-bankcard-holder { position: absolute; left: 7%; bottom: 9%; max-width: 64%; display: grid; gap: .8cqi; }
body.theme-pd .pd-netbank .pd-bankcard-holder > span { font-size: 2.4cqi; opacity: .82; line-height: var(--pd-lh-tight); }
body.theme-pd .pd-netbank .pd-bankcard-holder strong { font-size: 3.8cqi; font-weight: var(--pd-fw-medium); line-height: var(--pd-lh-tight); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
body.theme-pd .pd-netbank .pd-bankcard-tier { position: absolute; right: 7%; bottom: 9%; display: grid; gap: .8cqi; font-size: 3.8cqi; font-weight: var(--pd-fw-medium); text-align: right; line-height: var(--pd-lh-tight); }
body.theme-pd .pd-netbank .pd-bankcard-tier span { font-size: 2.4cqi; letter-spacing: .3cqi; }
/* 扫过卡面的高光：页面打开、存取成功时各扫一次 */
body.theme-pd .pd-nb-sheen {
    position: absolute;
    inset: 0;
    pointer-events: none;
    background: linear-gradient(105deg, transparent 38%, rgba(255, 255, 255, .38) 50%, transparent 62%);
    transform: translateX(-130%);
}
body.theme-pd .pd-nb-card.is-shine .pd-nb-sheen { animation: pd-nb-sheen 1.1s var(--pd-nb-ease); }
@keyframes pd-nb-sheen { to { transform: translateX(130%); } }
body.theme-pd .pd-nb-card.is-pulse .pd-nb-card-inner { animation: pd-nb-pulse .6s var(--pd-nb-ease); }
@keyframes pd-nb-pulse { 40% { transform: scale(1.035); } }

/* 还没开卡：虚线卡位 */
body.theme-pd .pd-nb-card.is-empty .pd-nb-face {
    position: relative;
    aspect-ratio: 856 / 540;
    display: grid;
    place-content: center;
    justify-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-4);
    text-align: center;
    border: 2px dashed var(--pd-color-border-strong);
    background: var(--pd-color-surface-soft);
    box-shadow: none;
}
body.theme-pd .pd-nb-card.is-empty img { width: calc(var(--pd-space-5) * 2); height: calc(var(--pd-space-5) * 2); animation: pd-nb-bob 3s ease-in-out infinite; }
body.theme-pd .pd-nb-card.is-empty b { font-size: var(--pd-fs-md); }
body.theme-pd .pd-nb-card.is-empty span { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
@keyframes pd-nb-bob { 50% { transform: translateY(calc(var(--pd-space-1) / -2)); } }

/* 资产 */
body.theme-pd .pd-nb-summary { display: grid; gap: var(--pd-space-3); min-width: 0; }
body.theme-pd .pd-nb-total { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--pd-space-1); }
body.theme-pd .pd-nb-total > span { flex: 1 0 100%; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-nb-total b { font-family: var(--pd-font-mono); font-size: var(--pd-fs-display); font-weight: var(--pd-fw-semibold); font-variant-numeric: tabular-nums; line-height: var(--pd-lh-tight); }
body.theme-pd .pd-nb-total small { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-nb-figures { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pd-space-2); margin: 0; }
body.theme-pd .pd-nb-figures div { min-width: 0; padding: var(--pd-space-2); border-radius: var(--pd-radius-md); background: var(--pd-color-surface-soft); transition: background-color .3s; }
body.theme-pd .pd-nb-figures dt { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-figures dd { margin: calc(var(--pd-space-1) / 2) 0 0; font-family: var(--pd-font-mono); font-size: var(--pd-fs-lg); font-weight: var(--pd-fw-semibold); font-variant-numeric: tabular-nums; }
body.theme-pd .pd-nb-figures div.is-hit,
body.theme-pd .pd-nb-wallet.is-hit { background: var(--pd-color-primary-soft); }
body.theme-pd .pd-nb-wallet {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-2);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    transition: background-color .3s;
}
body.theme-pd .pd-nb-wallet i { color: var(--pd-color-primary); }
body.theme-pd .pd-nb-wallet span { flex: 1 1 auto; min-width: 0; }
body.theme-pd .pd-nb-wallet b { color: var(--pd-color-text); font-family: var(--pd-font-mono); }
body.theme-pd .pd-nb-wallet a { color: var(--pd-color-link); }
body.theme-pd .pd-nb-actions { display: grid; grid-template-columns: repeat(auto-fit, minmax(calc(var(--pd-space-5) * 1.5), 1fr)); gap: calc(var(--pd-space-1) / 2); }
body.theme-pd .pd-nb-actions a {
    display: grid;
    justify-items: center;
    gap: calc(var(--pd-space-1) / 2);
    padding: var(--pd-space-2) var(--pd-space-1);
    border-radius: var(--pd-radius-md);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xs);
    text-decoration: none;
    transition: background-color .2s, transform .2s var(--pd-nb-ease);
}
body.theme-pd .pd-nb-actions a i {
    display: grid;
    place-items: center;
    width: var(--pd-space-5);
    height: var(--pd-space-5);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-primary-soft);
    color: var(--pd-color-primary);
    font-size: var(--pd-fs-sm);
}
body.theme-pd .pd-nb-actions a:hover { background: var(--pd-color-surface-soft); transform: translateY(calc(var(--pd-space-1) / -4)); }

/* 业务办理：分页 + 表单 */
body.theme-pd .pd-nb-desk { display: grid; gap: var(--pd-space-4); }
body.theme-pd .pd-nb-tabs {
    display: flex;
    gap: calc(var(--pd-space-1) / 2);
    overflow-x: auto;
    padding: calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-tab-group-radius);
    background: var(--pd-color-surface-soft);
    scrollbar-width: none;
}
body.theme-pd .pd-nb-tabs button {
    flex: 1 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    height: var(--pd-tab-h);
    padding: 0 var(--pd-tab-px);
    border: 0;
    border-radius: var(--pd-tab-radius);
    background: none;
    color: var(--pd-color-text-secondary);
    font: inherit;
    font-size: var(--pd-tab-fs);
    font-weight: var(--pd-tab-weight);
    cursor: pointer;
    transition: color .2s, background-color .2s, box-shadow .2s;
}
body.theme-pd .pd-nb-tabs button[aria-selected="true"] { background: var(--pd-color-surface); color: var(--pd-color-primary); box-shadow: var(--pd-shadow-1); }
body.theme-pd .pd-nb-panel { min-width: 0; }
body.theme-pd .pd-nb-panel.is-entering { animation: pd-nb-in .35s var(--pd-nb-ease); }
@keyframes pd-nb-in { from { opacity: 0; transform: translateY(var(--pd-space-1)); } }
body.theme-pd .pd-nb-form { display: grid; gap: var(--pd-space-3); margin: 0; min-width: 0; }
body.theme-pd .pd-nb-form > .pd-nb-field { max-width: calc(var(--pd-space-5) * 15); }
body.theme-pd .pd-nb-lead { margin: 0; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-nb-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pd-space-3); }
body.theme-pd .pd-nb-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
body.theme-pd .pd-nb-field { display: grid; align-content: start; gap: calc(var(--pd-space-1) / 2); min-width: 0; }
body.theme-pd .pd-nb-field > label { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-field > input { width: 100%; height: var(--pd-input-h); padding: 0 var(--pd-input-px); }
body.theme-pd .pd-nb-amount {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    height: var(--pd-btn-h-lg);
    padding: 0 var(--pd-input-px);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-input-radius);
    background: var(--pd-color-surface);
}
body.theme-pd .pd-nb-amount:focus-within { border-color: var(--pd-color-primary); }
body.theme-pd .pd-nb-amount i { flex: none; color: var(--pd-color-warning); }
body.theme-pd .pd-nb-amount input {
    flex: 1 1 auto;
    min-width: 0;
    height: 100%;
    padding: 0;
    border: 0;
    background: none;
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-lg);
    font-variant-numeric: tabular-nums;
    outline: none;
    box-shadow: none;
}
body.theme-pd .pd-nb-amount span { flex: none; color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); white-space: nowrap; }
body.theme-pd .pd-nb-chips { display: flex; flex-wrap: wrap; gap: calc(var(--pd-space-1) / 2); }
body.theme-pd .pd-nb-chips:empty { display: none; }
body.theme-pd .pd-nb-chips button {
    padding: calc(var(--pd-space-1) / 4) var(--pd-space-2);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-surface);
    color: var(--pd-color-text-secondary);
    font: inherit;
    font-size: var(--pd-fs-xs);
    cursor: pointer;
}
body.theme-pd .pd-nb-chips button:hover:not(:disabled) { color: var(--pd-color-primary); border-color: var(--pd-color-primary); }
body.theme-pd .pd-nb-chips button:disabled { opacity: .45; cursor: not-allowed; }

/* 支付密码六格框：脚本加 is-enhanced 后，透明输入框盖在格子上 */
body.theme-pd .pd-nb-pin { position: relative; min-width: 0; }
body.theme-pd .pd-nb-pin > input { width: 100%; height: var(--pd-input-h); padding: 0 var(--pd-input-px); }
body.theme-pd .pd-nb-pin-cells { display: none; }
body.theme-pd .pd-nb-pin.is-enhanced > input {
    position: absolute;
    inset: 0;
    z-index: 1;
    height: 100%;
    opacity: 0;
    color: transparent;
    caret-color: transparent;
    cursor: pointer;
}
body.theme-pd .pd-nb-pin.is-enhanced .pd-nb-pin-cells { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: calc(var(--pd-space-1) / 2); max-width: calc(var(--pd-space-5) * 9); }
body.theme-pd .pd-nb-pin-cells i {
    position: relative;
    height: var(--pd-btn-h-lg);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-radius-sm);
    background: var(--pd-color-surface);
    transition: border-color .15s;
}
body.theme-pd .pd-nb-pin-cells i.is-filled::after {
    content: "";
    position: absolute;
    inset: 50% auto auto 50%;
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-text);
    transform: translate(-50%, -50%);
    animation: pd-nb-dot .18s var(--pd-nb-ease);
}
@keyframes pd-nb-dot { from { transform: translate(-50%, -50%) scale(0); } }
body.theme-pd .pd-nb-pin.is-focus .pd-nb-pin-cells i.is-current { border-color: var(--pd-color-primary); }
body.theme-pd .pd-nb-pin.is-done .pd-nb-pin-cells i { border-color: var(--pd-color-success); }
body.theme-pd .pd-nb-pin.is-shake .pd-nb-pin-cells { animation: pd-nb-shake .45s; }
body.theme-pd .pd-nb-pin.is-shake .pd-nb-pin-cells i { border-color: var(--pd-color-error); }
@keyframes pd-nb-shake { 20%, 60% { transform: translateX(calc(var(--pd-space-1) / -1)); } 40%, 80% { transform: translateX(var(--pd-space-1)); } }

/* 资金流向小图：钱包 → 活期 */
body.theme-pd .pd-nb-flow { display: flex; align-items: center; gap: var(--pd-space-2); color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-flow span { display: inline-flex; align-items: center; gap: calc(var(--pd-space-1) / 2); padding: calc(var(--pd-space-1) / 2) var(--pd-space-2); border-radius: var(--pd-radius-pill); background: var(--pd-color-surface-soft); color: var(--pd-color-text-secondary); }
body.theme-pd .pd-nb-flow > i { color: var(--pd-color-primary); animation: pd-nb-nudge 1.6s ease-in-out infinite; }
@keyframes pd-nb-nudge { 50% { transform: translateX(calc(var(--pd-space-1) / 2)); } }
body.theme-pd .pd-nb-submit { display: flex; gap: var(--pd-space-2); }
body.theme-pd .pd-nb-submit .btn { min-width: calc(var(--pd-space-5) * 4); }
body.theme-pd .pd-nb-inline { display: flex; flex-wrap: wrap; align-items: end; gap: var(--pd-space-2); }
body.theme-pd .pd-nb-inline .pd-nb-field { flex: 1 1 calc(var(--pd-space-5) * 8); }
body.theme-pd .pd-nb-secure { display: grid; gap: var(--pd-space-1); margin: 0 0 var(--pd-space-3); padding: 0; list-style: none; }
body.theme-pd .pd-nb-secure li { display: flex; flex-wrap: wrap; align-items: center; gap: var(--pd-space-1); padding: var(--pd-space-2); border-radius: var(--pd-radius-md); background: var(--pd-color-surface-soft); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-nb-secure li i { color: var(--pd-color-primary); }
body.theme-pd .pd-nb-secure li span { flex: 1 1 auto; }
body.theme-pd .pd-nb-secure li em { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); font-style: normal; }

/* 我的定期 */
body.theme-pd .pd-nb-termlist { display: grid; grid-template-columns: repeat(auto-fill, minmax(calc(var(--pd-space-5) * 9), 1fr)); gap: var(--pd-space-3); }
body.theme-pd .pd-nb-term { display: grid; gap: var(--pd-space-2); min-width: 0; padding: var(--pd-space-3); border: 1px solid var(--pd-color-border); border-radius: var(--pd-radius-lg); }
body.theme-pd .pd-nb-term header { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--pd-space-1); }
body.theme-pd .pd-nb-term header b { font-family: var(--pd-font-mono); font-size: var(--pd-fs-xl); }
body.theme-pd .pd-nb-term header > span { flex: 1 1 auto; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-progress { height: var(--pd-space-1); overflow: hidden; border-radius: var(--pd-radius-pill); background: var(--pd-color-surface-soft); }
body.theme-pd .pd-nb-progress span { display: block; width: var(--pd-nb-progress); height: 100%; border-radius: inherit; background: var(--pd-color-primary); animation: pd-nb-grow 1s var(--pd-nb-ease); transform-origin: left; }
@keyframes pd-nb-grow { from { transform: scaleX(0); } }
body.theme-pd .pd-nb-term dl { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--pd-space-1); margin: 0; }
body.theme-pd .pd-nb-term dt { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-term dd { margin: 0; font-size: var(--pd-fs-sm); font-variant-numeric: tabular-nums; }
body.theme-pd .pd-nb-term form { margin: 0; }

/* 交易明细 */
body.theme-pd .pd-nb-ledger { display: grid; margin: 0; padding: 0; list-style: none; }
body.theme-pd .pd-nb-ledger li { display: flex; align-items: center; gap: var(--pd-space-2); padding: var(--pd-space-2) 0; }
body.theme-pd .pd-nb-ledger li + li { border-top: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-nb-ledger li:first-child.is-new { animation: pd-nb-row 1.4s var(--pd-nb-ease); }
@keyframes pd-nb-row { from { background: var(--pd-color-primary-soft); } }
body.theme-pd .pd-nb-ledger-icon { flex: none; display: grid; place-items: center; width: var(--pd-space-5); height: var(--pd-space-5); border-radius: var(--pd-radius-round); background: var(--pd-color-surface-soft); color: var(--pd-color-text-secondary); }
body.theme-pd .pd-nb-ledger li.is-plus .pd-nb-ledger-icon { background: var(--pd-color-success-soft); color: var(--pd-color-success); }
body.theme-pd .pd-nb-ledger-main { display: grid; flex: 1 1 auto; min-width: 0; }
body.theme-pd .pd-nb-ledger-main b { overflow: hidden; font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-medium); white-space: nowrap; text-overflow: ellipsis; }
body.theme-pd .pd-nb-ledger-main span { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-ledger-amount { display: grid; justify-items: end; flex: none; }
body.theme-pd .pd-nb-ledger-amount b { font-family: var(--pd-font-mono); font-size: var(--pd-fs-md); font-variant-numeric: tabular-nums; }
body.theme-pd .pd-nb-ledger li.is-plus .pd-nb-ledger-amount b { color: var(--pd-color-success); }
body.theme-pd .pd-nb-ledger-amount > span { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-ledger-amount span i { font-style: normal; }
body.theme-pd .pd-nb-rules { margin-top: var(--pd-space-3); }

/* 隐藏金额：数字显示成星号（原文字透明占位） */
body.theme-pd .pd-netbank.is-masked [data-amount] { position: relative; display: inline-block; min-width: 4ch; color: transparent; }
body.theme-pd .pd-netbank.is-masked [data-amount]::after { content: "****"; position: absolute; inset: 0; color: var(--pd-color-text-secondary); text-align: inherit; }

/* 存取时飞过的小鱼金币 */
body.theme-pd .pd-nb-coin { position: fixed; z-index: var(--pd-z-popover); width: var(--pd-space-5); height: var(--pd-space-5); pointer-events: none; will-change: transform, opacity; }

@media (max-width: 900px) {
    body.theme-pd .pd-nb-overview { grid-template-columns: minmax(0, 1fr); gap: var(--pd-space-4); }
    body.theme-pd .pd-nb-cardslot { justify-self: center; width: 100%; max-width: 25rem; }
    body.theme-pd .pd-nb-grid--3 { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
    body.theme-pd .pd-nb-head,
    body.theme-pd .pd-nb-overview,
    body.theme-pd .pd-nb-desk { padding: var(--pd-space-3); }
    body.theme-pd .pd-nb-grid { grid-template-columns: minmax(0, 1fr); }
    body.theme-pd .pd-nb-total b { font-size: var(--pd-fs-xl); }
    body.theme-pd .pd-nb-figures dd { font-size: var(--pd-fs-md); }
    body.theme-pd .pd-nb-tabs button span { display: none; }
    body.theme-pd .pd-nb-tabs button[aria-selected="true"] span { display: inline; }
    body.theme-pd .pd-nb-submit .btn { flex: 1 1 auto; }
}
@media (prefers-reduced-motion: reduce) {
    body.theme-pd .pd-netbank *,
    body.theme-pd .pd-netbank *::after { animation: none !important; transition: none !important; }
}
/* 金币：金额可包含十分之一枚，对应仍保留在钱包里的零散鱼丸。 */
body.theme-pd .pd-fishcoin-amount {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    vertical-align: middle;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-fishcoin-icon {
    display: inline-block;
    width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    object-fit: contain;
    flex: none;
    vertical-align: middle;
}
body.theme-pd .pd-wallet-help .pd-fishcoin-icon,
body.theme-pd .pd-bank-table .pd-fishcoin-icon,
body.theme-pd .pd-nb-ledger .pd-fishcoin-icon {
    width: var(--pd-icon-md);
    height: var(--pd-icon-md);
}
body.theme-pd .pd-netbank.is-masked [data-amount] .pd-fishcoin-amount { visibility: hidden; }
body.theme-pd .pd-wallet-exchange {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--pd-space-5) * 8)), 1fr));
    gap: var(--pd-space-4);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-wallet-exchange form { display: grid; gap: var(--pd-space-2); }
body.theme-pd .pd-wallet-exchange label { font-size: var(--pd-fs-sm); color: var(--pd-color-text-secondary); }
body.theme-pd .pd-wallet-exchange button { justify-self: start; }

/* ===== 咸鱼银行 · 金卡 / 黑卡升级（2026-10-05）：pages/bank.php 的「升级」分页 + assets/bank.js 的换卡动画 ===== */
body.theme-pd .pd-nb-upgrade { display: grid; gap: var(--pd-space-3); min-width: 0; }
body.theme-pd .pd-nb-upgrade-head { display: flex; align-items: center; gap: var(--pd-space-3); min-width: 0; }
body.theme-pd .pd-nb-upgrade-art { flex: none; width: calc(var(--pd-space-5) * 5); height: auto; border-radius: var(--pd-radius-md); box-shadow: var(--pd-shadow-1); }
body.theme-pd .pd-nb-upgrade-head h3 { margin: 0; font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-nb-upgrade-head p { margin: calc(var(--pd-space-1) / 2) 0 0; color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-conds { display: grid; gap: var(--pd-space-2); margin: 0; padding: 0; list-style: none; }
body.theme-pd .pd-nb-conds li { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: calc(var(--pd-space-1) / 2) var(--pd-space-2); }
body.theme-pd .pd-nb-conds li > i { color: var(--pd-color-text-tertiary); }
body.theme-pd .pd-nb-conds li.is-met > i { color: var(--pd-color-success); }
body.theme-pd .pd-nb-conds li > span { font-size: var(--pd-fs-sm); }
body.theme-pd .pd-nb-conds li > b { font-family: var(--pd-font-mono); font-size: var(--pd-fs-sm); font-variant-numeric: tabular-nums; }
body.theme-pd .pd-nb-conds li > .pd-nb-progress { grid-column: 2 / -1; }
body.theme-pd .pd-nb-conds li.is-met .pd-nb-progress span { background: var(--pd-color-success); }
body.theme-pd .pd-nb-conds li > em { grid-column: 2 / -1; color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); font-style: normal; }
body.theme-pd .pd-nb-note { margin: 0; color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-nb-warn { display: flex; gap: var(--pd-space-1); margin: 0; padding: var(--pd-space-2); border-radius: var(--pd-radius-md); background: var(--pd-color-warning-soft); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-nb-warn i { color: var(--pd-color-warning); }
body.theme-pd .pd-nb-link .pd-nb-dot { width: var(--pd-space-1); height: var(--pd-space-1); border-radius: var(--pd-radius-round); background: var(--pd-color-success); }
body.theme-pd a.pd-nb-link { text-decoration: none; }

/* 换卡动画：新卡面侧立转回正面、卡号逐位滚动、卡种字样弹一下 */
body.theme-pd .pd-nb-card.is-upgrading .pd-nb-card-inner { animation: pd-nb-upgrade .85s var(--pd-nb-ease) both; }
@keyframes pd-nb-upgrade {
    from { transform: rotateY(90deg) scale(.94); opacity: .4; }
    to { transform: none; opacity: 1; }
}
body.theme-pd .pd-netbank .pd-bankcard-tier.is-pop { animation: pd-nb-pop .45s var(--pd-nb-ease); }
@keyframes pd-nb-pop { 50% { transform: scale(1.12); } }

/* ===== 担保交易（2026-10-05）：pages/escrow.php 和交易版块 / 交易帖里的提示（core/trade.php 的 pd_trade_hint_html） ===== */
body.theme-pd .pd-escrow h3 { margin: 0 0 var(--pd-space-1); font-size: var(--pd-h3-size); font-weight: var(--pd-h3-weight); line-height: var(--pd-h3-lh); }
body.theme-pd .pd-escrow-status {
    display: inline-flex;
    align-items: center;
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    border-radius: var(--pd-radius-pill);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
    white-space: nowrap;
    color: var(--pd-color-text-secondary);
    background: var(--pd-color-surface-soft);
}
body.theme-pd .pd-escrow-status--wait { color: var(--pd-color-warning); background: var(--pd-color-warning-soft); }
body.theme-pd .pd-escrow-status--active { color: var(--pd-color-primary); background: var(--pd-color-primary-soft); }
body.theme-pd .pd-escrow-status--alert { color: var(--pd-color-error); background: var(--pd-color-error-soft); }
body.theme-pd .pd-escrow-status--done { color: var(--pd-color-success); background: var(--pd-color-success-soft); }
body.theme-pd .pd-escrow-uid { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); font-variant-numeric: tabular-nums; }
body.theme-pd .pd-escrow-steps {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--pd-space-5) * 5)), 1fr));
    gap: var(--pd-space-2);
    margin: 0;
    padding: 0;
    list-style: none;
}
body.theme-pd .pd-escrow-steps li {
    display: flex;
    align-items: center;
    gap: var(--pd-space-2);
    min-width: 0;
    padding: var(--pd-space-2) var(--pd-space-3);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-snug);
}
body.theme-pd .pd-escrow-steps li > span {
    display: inline-flex;
    flex: none;
    align-items: center;
    justify-content: center;
    width: var(--pd-icon-xl);
    height: var(--pd-icon-xl);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-surface);
    color: var(--pd-color-text-secondary);
    font-weight: var(--pd-fw-semibold);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-escrow-steps li.is-current { color: var(--pd-color-primary); background: var(--pd-color-primary-soft); font-weight: var(--pd-fw-semibold); }
body.theme-pd .pd-escrow-steps li.is-current > span { background: var(--pd-color-primary); color: var(--pd-color-on-primary); }
body.theme-pd .pd-escrow-steps li.is-done > span { background: var(--pd-color-success); color: var(--pd-color-on-primary); }
body.theme-pd .pd-escrow-order { display: grid; gap: var(--pd-space-3); }
body.theme-pd .pd-escrow-facts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--pd-space-5) * 10)), 1fr));
    gap: var(--pd-space-2) var(--pd-space-4);
    margin: 0;
}
body.theme-pd .pd-escrow-facts > div { display: grid; gap: calc(var(--pd-space-1) / 2); min-width: 0; }
body.theme-pd .pd-escrow-facts dt { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
body.theme-pd .pd-escrow-facts dd { margin: 0; font-size: var(--pd-fs-sm); line-height: var(--pd-lh-normal); overflow-wrap: anywhere; }
body.theme-pd .pd-escrow-no { font-family: var(--pd-font-mono); font-variant-numeric: tabular-nums; }
body.theme-pd .pd-escrow-block {
    padding: var(--pd-space-3);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface-soft);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    overflow-wrap: anywhere;
}
body.theme-pd .pd-escrow-block p + p { margin-top: var(--pd-space-1); }
body.theme-pd .pd-escrow-block--private h3 { color: var(--pd-color-primary); }
body.theme-pd .pd-escrow-block--alert { background: var(--pd-color-error-soft); }
body.theme-pd .pd-escrow-note,
body.theme-pd .pd-escrow-hint {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-space-3);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-primary-soft);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-escrow-note > i,
body.theme-pd .pd-escrow-hint > i { flex: none; color: var(--pd-color-primary); }
body.theme-pd .pd-escrow-hint { margin: var(--pd-space-3) 0; }
body.theme-pd .pd-escrow-actions {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--pd-space-5) * 10)), 1fr));
    gap: var(--pd-space-3);
    align-items: start;
}
body.theme-pd .pd-escrow-action { display: grid; gap: var(--pd-space-2); min-width: 0; }
body.theme-pd .pd-escrow-action label,
body.theme-pd .pd-escrow-create label { margin: 0; font-size: var(--pd-fs-sm); }
body.theme-pd .pd-escrow-action button { justify-self: start; }
body.theme-pd .pd-escrow-create { display: grid; gap: var(--pd-space-2); }
body.theme-pd .pd-escrow-create button { justify-self: start; }
body.theme-pd .pd-escrow-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--pd-space-5) * 8)), 1fr));
    gap: var(--pd-space-2) var(--pd-space-3);
}
body.theme-pd .pd-escrow-grid > div { display: grid; gap: var(--pd-space-2); }
body.theme-pd .pd-escrow-log { display: grid; gap: var(--pd-space-1); margin: 0; padding: 0; list-style: none; }
body.theme-pd .pd-escrow-log li { display: flex; flex-wrap: wrap; gap: 0 var(--pd-space-2); }
body.theme-pd .pd-escrow-log time { color: var(--pd-color-text-tertiary); font-variant-numeric: tabular-nums; }
body.theme-pd .pd-escrow-rules {
    display: grid;
    gap: var(--pd-space-1);
    margin: var(--pd-space-2) 0 0;
    padding-left: var(--pd-space-4);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-escrow-table td { vertical-align: middle; }

/* 号码拍卖 /shop/auction（pages/auction.php）：大号码、开拍表单、出价行。卡片、统计、表格沿用上面的银行 / 商城样式 */
body.theme-pd .pd-auction-actions { display: flex; flex-wrap: wrap; gap: var(--pd-space-2); margin-top: var(--pd-space-3); }
body.theme-pd .pd-auction-actions .btn { margin: 0; }
body.theme-pd .pd-auction-item .pd-shop-plate { text-decoration: none; }
body.theme-pd .pd-auction-number {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--pd-space-2) var(--pd-space-3);
    margin: var(--pd-space-2) 0;
}
body.theme-pd .pd-auction-number strong {
    color: var(--pd-color-primary);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-display);
    font-weight: var(--pd-fw-semibold);
    letter-spacing: 0.1em;
    line-height: var(--pd-lh-tight);
}
body.theme-pd .pd-auction-number span { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-auction-form,
body.theme-pd .pd-auction-source {
    display: grid;
    gap: var(--pd-space-3);
    margin: var(--pd-space-3) 0 0;
    padding: 0;
    border: 0;
}
body.theme-pd .pd-auction-source legend {
    margin-bottom: var(--pd-space-2);
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-auction-source label { display: flex; align-items: center; gap: var(--pd-space-2); margin: 0; }
body.theme-pd .pd-auction-field { display: grid; gap: var(--pd-space-1); margin: 0; }
body.theme-pd .pd-auction-field span { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-sm); }
body.theme-pd .pd-auction-field input,
body.theme-pd .pd-auction-field select,
body.theme-pd .pd-auction-source select { max-width: calc(var(--pd-space-5) * 10); }
body.theme-pd .pd-auction-bid {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--pd-space-2) var(--pd-space-3);
    margin-top: var(--pd-space-3);
}
body.theme-pd .pd-auction-bid .btn { margin: 0; }
/* 头像库与选号控件，沿用全站设计令牌。 */
/* 个人设置「头像」卡片：左侧预览，右侧来源（一组分段按钮）与当前来源的操作。 */
body.theme-pd .pd-avatar-card .pd-avatar-layout {
    display: grid;
    grid-template-columns: calc(var(--pd-space-5) * 3) minmax(0, 1fr);
    align-items: start;
    gap: var(--pd-space-4);
    margin: 0;
    padding: var(--pd-space-3) var(--pd-space-4);
    min-width: 0;
}
body.theme-pd .pd-avatar-card .profile-avatar-preview {
    margin: 0;
    min-width: 0;
}
body.theme-pd .pd-avatar-card .profile-avatar-preview img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 1;
    object-fit: cover;
    border-radius: var(--pd-radius-round);
}
body.theme-pd .pd-avatar-card .pd-avatar-content {
    display: grid;
    gap: var(--pd-space-2);
    min-width: 0;
}
body.theme-pd .pd-avatar-card .pd-avatar-source-tabs {
    display: inline-flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-self: start;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    margin: 0;
    padding: calc(var(--pd-space-1) / 2);
    background: var(--pd-color-surface-soft);
    border-radius: var(--pd-tab-group-radius);
}
body.theme-pd .pd-avatar-card .pd-avatar-source-tabs .profile-avatar-radio {
    position: relative;
    display: inline-flex;
    min-width: 0;
    margin: 0;
    font-weight: var(--pd-tab-weight);
}
/* 原生单选框继续负责键盘与读屏，视觉反馈交给相邻标签。 */
body.theme-pd .pd-avatar-card .pd-avatar-source-tabs input {
    position: absolute;
    width: var(--pd-tab-indicator);
    height: var(--pd-tab-indicator);
    padding: 0;
    margin: 0;
    border: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}
body.theme-pd .pd-avatar-card .pd-avatar-source-tabs .profile-avatar-radio > span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: calc(var(--pd-space-1) / 2);
    min-height: var(--pd-tab-h);
    padding: calc(var(--pd-space-1) / 2) var(--pd-tab-px);
    border: 0;
    border-radius: var(--pd-tab-radius);
    background: transparent;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-regular);
    line-height: var(--pd-lh-tight);
    white-space: nowrap;
}
body.theme-pd .pd-avatar-card .pd-avatar-source-tabs .profile-avatar-radio:hover > input:not(:checked):not(:disabled) + span {
    color: var(--pd-color-text);
}
body.theme-pd .pd-avatar-card .pd-avatar-source-tabs input:checked + span {
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    font-weight: var(--pd-fw-semibold);
    box-shadow: var(--pd-shadow-1);
}
body.theme-pd .pd-avatar-card .pd-avatar-source-tabs input:focus-visible + span {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-avatar-card .pd-avatar-source-tabs input:disabled + span {
    color: var(--pd-color-text-tertiary);
    cursor: not-allowed;
}
body.theme-pd .pd-avatar-card .pd-avatar-source-panel {
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: transparent;
}
body.theme-pd .pd-avatar-card .pd-avatar-actions {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    min-width: 0;
    margin: 0;
}
body.theme-pd .pd-avatar-card .pd-avatar-actions > label {
    display: inline-block;
    margin: 0;
    font-size: var(--pd-fs-xs);
    font-weight: var(--pd-fw-medium);
    white-space: nowrap;
}
body.theme-pd .pd-avatar-card .pd-avatar-actions .btn {
    margin: 0;
    max-width: 100%;
}
body.theme-pd .pd-avatar-card .pd-avatar-actions input[type="text"] {
    width: calc(var(--pd-space-5) * 3);
    max-width: 100%;
    min-width: 0;
    height: var(--pd-btn-h-sm);
    padding: 0 var(--pd-input-px);
    font-family: var(--pd-font-mono);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-avatar-card .pd-preset-avatars {
    display: inline-flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    min-width: 0;
    margin: 0;
}
body.theme-pd .pd-avatar-card .pd-preset-avatar {
    display: block;
    margin: 0;
}
body.theme-pd .pd-avatar-card .pd-preset-avatar img {
    width: var(--pd-side-icon-art);
    height: var(--pd-side-icon-art);
    border-width: var(--pd-tab-indicator);
}
body.theme-pd .pd-avatar-card .pd-preset-avatar input:focus-visible + img {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
body.theme-pd .pd-avatar-card .pd-avatar-upload-status {
    flex: 1 1 0;
    min-width: 0;
    overflow-wrap: anywhere;
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
}
body.theme-pd .pd-avatar-card .pd-avatar-source-panel .pd-avatar-upload-status.is-error,
body.theme-pd .pd-avatar-card .pd-avatar-source-panel .pd-library-status.is-error {
    color: var(--pd-color-error);
}
body.theme-pd .pd-avatar-card .pd-avatar-source-panel .muted,
body.theme-pd .pd-avatar-card .pd-avatar-save-hint {
    margin: var(--pd-space-1) 0 0;
    overflow-wrap: anywhere;
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-normal);
    color: var(--pd-color-text-secondary);
}
body.theme-pd .pd-avatar-card .pd-avatar-save-hint {
    margin: 0;
}
body.theme-pd .pd-avatar-card .pd-avatar-actions .muted,
body.theme-pd .pd-avatar-card .pd-avatar-source-panel > .muted:first-child {
    margin: 0;
}
@media (max-width: 640px) {
    body.theme-pd .pd-avatar-card .pd-avatar-layout {
        grid-template-columns: minmax(0, 1fr);
        gap: var(--pd-space-2);
        padding: var(--pd-space-3);
    }
    body.theme-pd .pd-avatar-card .profile-avatar-preview { width: calc(var(--pd-space-5) * 3); }
    body.theme-pd .pd-avatar-card .pd-avatar-source-tabs {
        gap: calc(var(--pd-space-1) / 2);
    }
    body.theme-pd .pd-avatar-card .pd-avatar-source-tabs .profile-avatar-radio > span {
        min-height: var(--pd-tab-h-touch);
        padding-inline: var(--pd-space-1);
        font-size: var(--pd-fs-xs);
    }
}
.pd-library-controls,
.pd-library-picker {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--pd-space-2);
    margin-bottom: var(--pd-space-2);
}
.pd-library-controls input,
.pd-library-picker input {
    width: calc(var(--pd-side-art) * 1.5);
    max-width: 100%;
}
.pd-library-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(var(--pd-side-art), 1fr));
    gap: var(--pd-space-2);
    margin-top: var(--pd-space-4);
}
.pd-library-avatar {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-2);
    border-radius: var(--pd-card-radius);
    color: var(--pd-color-text);
    background: var(--pd-color-surface-subtle);
    text-decoration: none;
}
.pd-library-avatar:hover,
.pd-library-avatar.is-selected {
    background: var(--pd-color-primary-soft);
    color: var(--pd-color-link);
    text-decoration: none;
}
.pd-library-avatar:focus-visible {
    outline: var(--pd-tab-indicator) solid var(--pd-color-primary);
    outline-offset: var(--pd-tab-indicator);
}
.pd-library-avatar img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 1;
    object-fit: cover;
    border-radius: var(--pd-radius-round);
}
.pd-library-number {
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-medium);
    font-variant-numeric: tabular-nums;
}
.pd-library-status { color: var(--pd-color-text-secondary); }
.pd-library-status.is-error { color: var(--pd-color-error); }

.pd-library-dialog {
    width: calc(100% - var(--pd-space-5));
    max-width: calc(var(--pd-side-art) * 9);
    /* 异步分页会暂时清空网格，外框高度不能由当前图片数量决定。 */
    height: min(calc(100dvh - var(--pd-space-5)), calc(var(--pd-side-art) * 7.5));
    max-height: calc(100dvh - var(--pd-space-5));
    margin: auto;
    padding: 0;
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-modal-radius);
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    font-family: var(--pd-font-body);
    font-size: var(--pd-fs-sm);
    box-shadow: var(--pd-shadow-2);
}
.pd-library-dialog:not([open]) { display: none; }
.pd-library-dialog[open] { display: flex; flex-direction: column; }
.pd-library-dialog::backdrop { background: rgba(15, 17, 22, .55); }
.pd-library-dialog-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-3);
    padding: var(--pd-space-3) var(--pd-space-4);
    flex-shrink: 0;
}
.pd-library-dialog-head h2 {
    margin: 0;
    font-size: var(--pd-h2-size);
    font-weight: var(--pd-h2-weight);
    line-height: var(--pd-h2-lh);
}
.pd-library-dialog > .pd-library-controls {
    padding: 0 var(--pd-space-4);
    flex-shrink: 0;
}
.pd-library-dialog > .pd-library-status {
    padding: 0 var(--pd-space-4);
    margin: 0 0 var(--pd-space-2);
    min-height: calc(var(--pd-fs-sm) * var(--pd-lh-normal) * 2);
    line-height: var(--pd-lh-normal);
    flex-shrink: 0;
}
.pd-library-dialog-scroll {
    flex: 1 1 0;
    overflow-y: auto;
    min-height: 0;
    padding: var(--pd-space-2) var(--pd-space-4);
    overscroll-behavior: contain;
    scrollbar-gutter: stable;
    /* 弹窗轨道跟随表面色，避免继承页面滚动条的固定深色轨道。 */
    scrollbar-width: thin;
    scrollbar-color: var(--pd-color-text-tertiary) var(--pd-color-surface-subtle);
}
.pd-library-dialog-scroll::-webkit-scrollbar {
    width: var(--pd-space-1);
}
.pd-library-dialog-scroll::-webkit-scrollbar-track {
    background: var(--pd-color-surface-subtle);
}
.pd-library-dialog-scroll::-webkit-scrollbar-thumb {
    background: var(--pd-color-text-tertiary);
    border: var(--pd-tab-indicator) solid var(--pd-color-surface-subtle);
    border-radius: var(--pd-radius-pill);
}
.pd-library-dialog-scroll::-webkit-scrollbar-thumb:hover {
    background: var(--pd-color-text-secondary);
}
.pd-library-dialog .pd-library-grid { margin-top: 0; }
.pd-library-dialog .pd-library-grid.is-filtered {
    grid-template-columns: minmax(0, calc(var(--pd-side-art) * 1.5));
}
.pd-library-dialog .pd-library-avatar {
    border: 0;
    cursor: pointer;
    font: inherit;
    text-align: center;
}
.pd-library-dialog .pd-library-avatar.is-selected {
    box-shadow: inset 0 0 0 var(--pd-tab-indicator) var(--pd-color-primary);
}
.pd-library-dialog-pagination {
    display: flex;
    flex-shrink: 0;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-space-4);
}
.pd-library-dialog-foot {
    display: flex;
    flex-shrink: 0;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--pd-space-2);
    padding: var(--pd-space-3) var(--pd-space-4);
    border-top: 1px solid var(--pd-color-divider);
}
body.pd-library-dialog-open { overflow: hidden; }
/* ===== 咸鱼彩票 · 排列五：pages/lottery.php + assets/lottery.js（2026-10-05 改版，设计稿 design/lottery-redesign-v1 方案 A）=====
   和全站同一套卡片（白底 + 边框 + 二级阴影、标题行通栏带分隔线、右栏 300px）；只有顶部「开奖舞台」用彩票的奶油色，和首页右栏彩票卡、横幅同一套暖色。
   号码球统一红色（开奖号码 / 命中位），自己选的号是奶油底描边；主按钮用彩票橙，全页只有红、橙、金三种彩票色（令牌 --pd-lotto-* 在 main.css）。
   字号、间距、圆角都引用 main.css 的令牌；尺寸类的模块令牌（号码球直径等）在下面「整页开奖画面」一节的 :root 里。 */
.pd-lotto {
    display: grid;
    gap: var(--pd-space-4);
    min-width: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
}
.pd-lotto :is(h1, h2, h3, p, dl, dd, ul, ol) { margin: 0; }
.pd-lotto :is(h1, h2, h3) { color: inherit; }
.pd-lotto :is(ul, ol) { padding: 0; list-style: none; }
.pd-lotto [hidden] { display: none !important; }
body.theme-pd .pd-lotto a { color: var(--pd-lotto-accent); text-decoration: none; }
body.theme-pd .pd-lotto a:hover { color: var(--pd-lotto-accent-hover); }
.pd-lotto code {
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xs);
    word-break: break-all;
}
.pd-lotto-num { font-family: var(--pd-font-mono); font-variant-numeric: tabular-nums; }
.pd-lotto-muted { color: var(--pd-color-text-secondary); }
.pd-lotto-tiny { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
.pd-lotto-tiny a { white-space: nowrap; }

/* 骨架：舞台通栏，下面左主右侧（和首页一样 300px 右栏） */
.pd-lotto-body {
    display: grid;
    grid-template-columns: minmax(0, 1fr) var(--pd-sidebar-width);
    gap: var(--pd-space-4);
    align-items: start;
}
.pd-lotto-main,
.pd-lotto-side {
    display: grid;
    gap: var(--pd-space-4);
    min-width: 0;
    align-content: start;
}
.pd-lotto-side { gap: var(--pd-home-card-gap); }

/* 卡片：和右栏 .pd-side-box 同一套外观，标题行通栏带分隔线 */
.pd-lotto-card {
    min-width: 0;
    background: var(--pd-color-surface);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-card-radius-thread);
    box-shadow: var(--pd-shadow-2);
    scroll-margin-top: var(--pd-space-5);
}
.pd-lotto-side .pd-lotto-card { border-radius: var(--pd-card-radius-side); }
.pd-lotto-card-head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-1) var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-card-padding);
    border-bottom: 1px solid var(--pd-color-divider);
}
.pd-lotto-card-head h2 {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    font-size: var(--pd-h3-size);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-snug);
}
.pd-lotto-card-head h2 i { color: var(--pd-lotto-accent); font-size: var(--pd-icon-md); }
.pd-lotto-card-head small,
.pd-lotto-card-head > a { font-size: var(--pd-fs-xs); }
.pd-lotto-card-head small { color: var(--pd-color-text-secondary); font-weight: var(--pd-fw-regular); }
.pd-lotto-card-head small b { color: var(--pd-color-text); font-weight: var(--pd-fw-semibold); }
.pd-lotto-card-body {
    display: grid;
    gap: var(--pd-space-3);
    padding: var(--pd-card-padding);
}
.pd-lotto-card-foot {
    padding: var(--pd-space-1) var(--pd-card-padding) var(--pd-space-2);
    border-top: 1px solid var(--pd-color-divider);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
.pd-lotto-card-head + .pd-lotto-card-foot { border-top: 0; padding-top: var(--pd-space-2); }

/* 号码球：开奖号码红色；自己的号码奶油底描边，和开奖号码同一位的变红 */
.pd-lotto-balls {
    display: inline-flex;
    gap: calc(var(--pd-space-1) / 2);
    vertical-align: middle;
}
.pd-lotto-balls--lg { gap: var(--pd-space-1); }
.pd-lotto-ball {
    display: inline-grid;
    place-items: center;
    width: var(--pd-lotto-ball);
    height: var(--pd-lotto-ball);
    border-radius: var(--pd-radius-round);
    background: var(--pd-lotto-red);
    color: var(--pd-lotto-on-red);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    line-height: 1;
}
.pd-lotto-balls--lg .pd-lotto-ball { width: var(--pd-lotto-ball-lg); height: var(--pd-lotto-ball-lg); font-size: var(--pd-fs-xl); }
.pd-lotto-balls--sm .pd-lotto-ball { width: var(--pd-lotto-ball-sm); height: var(--pd-lotto-ball-sm); font-size: var(--pd-fs-xs); }
.pd-lotto-ball.is-pick {
    background: var(--pd-lotto-cream);
    color: var(--pd-lotto-ink);
    box-shadow: inset 0 0 0 1px var(--pd-lotto-cream-line);
}
.pd-lotto-ball.is-pick.is-hit { background: var(--pd-lotto-red); color: var(--pd-lotto-on-red); box-shadow: none; }
.pd-lotto-ball.is-unknown { background: var(--pd-lotto-cream-strong); color: var(--pd-lotto-ink-muted); }

/* 奖级徽章：特等金色，一二三等红色，没中 / 待开奖灰色 */
.pd-lotto-tier {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: var(--pd-badge-h);
    padding: 0 var(--pd-badge-px);
    border-radius: var(--pd-badge-radius);
    background: var(--pd-lotto-red-soft);
    color: var(--pd-lotto-red);
    font-size: var(--pd-badge-fs);
    font-weight: var(--pd-badge-weight);
    white-space: nowrap;
}
.pd-lotto-tier--0 { background: var(--pd-lotto-gold); color: var(--pd-lotto-on-gold); }
.pd-lotto-tier--none { background: var(--pd-color-surface-soft); color: var(--pd-color-text-secondary); }
.pd-lotto-prize { color: var(--pd-color-success); font-weight: var(--pd-fw-semibold); font-variant-numeric: tabular-nums; }

/* ===== 开奖舞台：奖池 / 倒计时 / 上期号码三段 ===== */
.pd-lotto-stage {
    display: grid;
    grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) minmax(0, 1.1fr);
    border: 1px solid var(--pd-lotto-cream-line);
    border-radius: var(--pd-card-radius-thread);
    background: var(--pd-lotto-cream);
    color: var(--pd-lotto-ink);
    box-shadow: var(--pd-shadow-2);
    overflow: hidden;
}
.pd-lotto-stage--detail { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.pd-lotto-stage > * {
    display: grid;
    align-content: center;
    gap: var(--pd-space-2);
    min-width: 0;
    padding: var(--pd-space-4);
}
.pd-lotto-stage > * + * { border-left: 1px dashed var(--pd-lotto-cream-line); }
.pd-lotto-stage-label {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
    color: var(--pd-lotto-ink-muted);
    font-size: var(--pd-fs-xs);
}
.pd-lotto-stage-title {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1);
}
.pd-lotto-stage-title h1 {
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
}
.pd-lotto-back {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    font-size: var(--pd-fs-xs);
}
.pd-lotto-pill {
    display: inline-flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    height: var(--pd-badge-h);
    padding: 0 var(--pd-badge-px);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-success-soft);
    color: var(--pd-color-success);
    font-size: var(--pd-badge-fs);
    font-weight: var(--pd-badge-weight);
    white-space: nowrap;
}
.pd-lotto-pill--closed { background: var(--pd-lotto-accent-soft); color: var(--pd-lotto-accent); }
.pd-lotto-pill--done { background: var(--pd-color-surface-soft); color: var(--pd-color-text-secondary); }
body.theme-pd-dark .pd-lotto-stage .pd-lotto-pill { background: var(--pd-lotto-cream-strong); }
.pd-lotto-jackpot {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    font-size: var(--pd-fs-display);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
.pd-lotto-jackpot img { width: var(--pd-icon-xl); height: var(--pd-icon-xl); }
.pd-lotto-jackpot small { color: var(--pd-lotto-ink-muted); font-size: var(--pd-fs-sm); font-weight: var(--pd-fw-regular); }
.pd-lotto-facts-line {
    display: flex;
    flex-wrap: wrap;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    color: var(--pd-lotto-ink-muted);
    font-size: var(--pd-fs-xs);
}
.pd-lotto-facts-line li + li::before {
    content: "·";
    margin-right: var(--pd-space-2);
}
/* 倒计时三格（和首页右栏彩票卡同一种） */
.pd-lotto-stage-clock { justify-items: center; text-align: center; }
.pd-lotto-tiles {
    display: flex;
    align-items: center;
    gap: var(--pd-space-1);
    font-family: var(--pd-font-mono);
    font-variant-numeric: tabular-nums;
}
.pd-lotto-tiles b {
    min-width: calc(var(--pd-space-5) + var(--pd-space-3));
    padding: var(--pd-space-1) 0;
    border: 1px solid var(--pd-lotto-cream-line);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface);
    color: var(--pd-lotto-ink);
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    text-align: center;
}
body.theme-pd-dark .pd-lotto-tiles b { background: var(--pd-lotto-cream-strong); }
.pd-lotto-tiles i { color: var(--pd-lotto-ink-muted); font-size: var(--pd-fs-lg); font-style: normal; font-weight: var(--pd-fw-semibold); }
.pd-lotto-stage-clock[data-phase="closed"] .pd-lotto-tiles b { color: var(--pd-lotto-accent); }
.pd-lotto-stage-last { justify-items: start; }
.pd-lotto-stage-last-head {
    display: flex;
    justify-content: space-between;
    gap: var(--pd-space-2);
    width: 100%;
    font-size: var(--pd-fs-xs);
}
.pd-lotto-stage-last-head span { color: var(--pd-lotto-ink-muted); }
.pd-lotto-winline {
    display: flex;
    flex-wrap: wrap;
    gap: calc(var(--pd-space-1) / 2) var(--pd-space-2);
    color: var(--pd-lotto-ink-muted);
    font-size: var(--pd-fs-xs);
}
.pd-lotto-winline b { color: var(--pd-lotto-ink); font-weight: var(--pd-fw-semibold); }

/* ===== 下注 ===== */
.pd-lotto-buy-form { display: grid; gap: var(--pd-space-3); }
/* 选号方式：两个单选做成分段按钮；选了「机选」时 :has() 收起滚轮（脚本也会把五个输入框停用） */
.pd-lotto-seg {
    display: inline-flex;
    justify-self: start;
    gap: calc(var(--pd-space-1) / 2);
    padding: calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-tab-group-radius);
    background: var(--pd-color-surface-soft);
}
.pd-lotto-seg label { position: relative; display: block; }
.pd-lotto-seg input {
    position: absolute;
    inset: 0;
    margin: 0;
    opacity: 0;
    cursor: pointer;
}
.pd-lotto-seg span {
    display: flex;
    align-items: center;
    height: var(--pd-tab-h);
    padding: 0 var(--pd-tab-px);
    border-radius: var(--pd-tab-radius);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-tab-fs);
    font-weight: var(--pd-tab-weight);
}
.pd-lotto-seg input:checked + span {
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    box-shadow: var(--pd-shadow-1);
}
.pd-lotto-seg input:focus-visible + span { box-shadow: 0 0 0 2px var(--pd-lotto-accent); }
.pd-lotto-buy-form:has(input[value="buy_auto"]:checked) :is(.pd-lotto-wheels, .pd-lotto-dice) { display: none; }
.pd-lotto-buy-form:not(:has(input[value="buy_auto"]:checked)) .pd-lotto-auto-note { display: none; }
.pd-lotto-buy-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: var(--pd-space-4);
    align-items: start;
}
.pd-lotto-field-label {
    display: flex;
    justify-content: space-between;
    gap: var(--pd-space-1);
    margin-bottom: var(--pd-space-1);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
}
.pd-lotto-dice {
    padding: 0;
    border: 0;
    background: none;
    color: var(--pd-lotto-accent);
    font: inherit;
    cursor: pointer;
}
.pd-lotto-dice:hover { color: var(--pd-lotto-accent-hover); }
/* 五个滚轮：上下箭头 + 一位数字（可以直接打字，打完自动跳下一位；上下方向键加减） */
.pd-lotto-wheels { display: flex; gap: var(--pd-space-1); }
.pd-lotto-wheel {
    display: grid;
    justify-items: center;
    gap: calc(var(--pd-space-1) / 2);
}
.pd-lotto-wheel button {
    display: grid;
    place-items: center;
    width: calc(var(--pd-space-5) + var(--pd-space-3));
    height: var(--pd-space-4);
    border: 0;
    border-radius: var(--pd-radius-sm);
    background: none;
    color: var(--pd-color-text-tertiary);
    cursor: pointer;
}
.pd-lotto-wheel button:hover { background: var(--pd-color-surface-soft); color: var(--pd-color-text); }
.pd-lotto .pd-lotto-wheel input {
    width: calc(var(--pd-space-5) + var(--pd-space-3));
    height: calc(var(--pd-space-5) + var(--pd-space-3));
    padding: 0;
    border: 1px solid var(--pd-lotto-cream-line);
    border-radius: var(--pd-radius-round);
    background: var(--pd-lotto-cream);
    color: var(--pd-lotto-ink);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    text-align: center;
    caret-color: transparent;
}
.pd-lotto .pd-lotto-wheel input::placeholder { color: var(--pd-lotto-ink-muted); opacity: .5; }
.pd-lotto .pd-lotto-wheel input:focus { outline: none; border-color: var(--pd-lotto-accent); box-shadow: 0 0 0 2px var(--pd-lotto-accent-soft); }
.pd-lotto-wheel input.is-rolled { animation: pd-lotto-roll .35s ease-out; }
@keyframes pd-lotto-roll {
    0% { transform: translateY(-30%); opacity: .2; }
    100% { transform: none; opacity: 1; }
}
.pd-lotto-auto-note {
    display: grid;
    place-items: center;
    align-content: center;
    gap: var(--pd-space-1);
    min-height: calc(var(--pd-space-5) * 3);
    padding: var(--pd-space-2);
    border: 1px dashed var(--pd-lotto-cream-line);
    border-radius: var(--pd-radius-md);
    background: var(--pd-lotto-cream);
    color: var(--pd-lotto-ink-muted);
    text-align: center;
}
.pd-lotto-auto-note i { color: var(--pd-lotto-accent); font-size: var(--pd-icon-xl); }
/* 注数：减 / 输入 / 加 + 常用档位 */
.pd-lotto-stepper {
    display: inline-flex;
    align-items: stretch;
    height: var(--pd-btn-h-lg);
    border: 1px solid var(--pd-color-border-strong);
    border-radius: var(--pd-input-radius);
    overflow: hidden;
}
.pd-lotto-stepper button {
    width: var(--pd-btn-h-lg);
    border: 0;
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text);
    cursor: pointer;
}
.pd-lotto-stepper button:hover { background: var(--pd-color-border); }
.pd-lotto .pd-lotto-stepper input {
    width: calc(var(--pd-space-5) * 2);
    height: auto;
    padding: 0;
    border: 0;
    border-inline: 1px solid var(--pd-color-border-strong);
    border-radius: 0;
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    text-align: center;
    -moz-appearance: textfield;
    appearance: textfield;
}
.pd-lotto .pd-lotto-stepper input::-webkit-inner-spin-button,
.pd-lotto .pd-lotto-stepper input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
.pd-lotto-chips {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin-top: var(--pd-space-1);
}
.pd-lotto-chips button {
    height: var(--pd-btn-h-sm);
    padding: 0 var(--pd-btn-px-sm);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-surface);
    color: var(--pd-color-text-secondary);
    font: inherit;
    font-size: var(--pd-fs-xs);
    cursor: pointer;
}
.pd-lotto-chips button:hover,
.pd-lotto-chips button[aria-pressed="true"] { border-color: var(--pd-lotto-accent); color: var(--pd-lotto-accent); }
.pd-lotto-total {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-space-3);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface-subtle);
}
.pd-lotto-total-sum { display: grid; gap: calc(var(--pd-space-1) / 2); }
.pd-lotto-total-sum b {
    font-size: var(--pd-fs-lg);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
.pd-lotto-closed-note {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-3);
    border-radius: var(--pd-radius-md);
    background: var(--pd-lotto-cream);
    color: var(--pd-lotto-ink);
}
.pd-lotto-closed-note > span { flex: 1 1 auto; min-width: 0; }
.pd-lotto-closed-note > i { color: var(--pd-lotto-accent); font-size: var(--pd-icon-lg); }
.pd-lotto-block {
    display: flex;
    align-items: baseline;
    gap: var(--pd-space-1);
    padding: var(--pd-space-2);
    border-radius: var(--pd-radius-sm);
    background: var(--pd-color-warning-soft);
    color: var(--pd-color-text);
}
.pd-lotto-block i { color: var(--pd-color-warning); }
/* 我这期的号码 */
.pd-lotto-mine {
    display: flex;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
}
.pd-lotto-mine li {
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    padding: calc(var(--pd-space-1) / 2) var(--pd-space-1) calc(var(--pd-space-1) / 2) calc(var(--pd-space-1) / 2);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-pill);
    font-size: var(--pd-fs-xs);
}
.pd-lotto-mine li span { color: var(--pd-color-text-secondary); }
.pd-lotto-more-tickets { margin-top: var(--pd-space-1); }
.pd-lotto-more-tickets summary {
    display: inline-block;
    margin-bottom: var(--pd-space-1);
    color: var(--pd-lotto-accent);
    font-size: var(--pd-fs-xs);
    cursor: pointer;
}
.pd-lotto-more-tickets[open] summary { color: var(--pd-color-text-secondary); }

/* ===== 我的奖金（大奖选领奖方式） ===== */
.pd-lotto-claim { display: grid; gap: var(--pd-space-2); }
.pd-lotto-claim + .pd-lotto-claim { padding-top: var(--pd-space-3); border-top: 1px solid var(--pd-color-divider); }
.pd-lotto-claim-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--pd-space-1); }
.pd-lotto-claim-options { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--pd-space-2); }
.pd-lotto-claim-options form { display: grid; min-width: 0; margin: 0; }
.pd-lotto .pd-lotto-claim-option {
    display: grid;
    align-content: start;
    gap: calc(var(--pd-space-1) / 2);
    min-width: 0;
    padding: var(--pd-space-2) var(--pd-space-3);
    border: 1px solid var(--pd-color-border);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface);
    color: var(--pd-color-text);
    font: inherit;
    text-align: left;
    cursor: pointer;
}
.pd-lotto .pd-lotto-claim-option:hover { border-color: var(--pd-lotto-accent); background: var(--pd-lotto-accent-soft); }
.pd-lotto .pd-lotto-claim-option:focus-visible { outline: var(--pd-tab-indicator) solid var(--pd-lotto-accent); outline-offset: var(--pd-tab-indicator); }
.pd-lotto .pd-lotto-claim-option:disabled { cursor: wait; opacity: .6; }
.pd-lotto-claim-option strong { font-weight: var(--pd-fw-semibold); }
.pd-lotto-claim-option b { color: var(--pd-lotto-accent); font-size: var(--pd-fs-md); font-variant-numeric: tabular-nums; }
.pd-lotto-claim-option span,
.pd-lotto-claim-option small { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); line-height: var(--pd-lh-snug); }

/* ===== 历史开奖（行列表，手机上两行） ===== */
.pd-lotto-history li {
    display: grid;
    grid-template-columns: minmax(0, 7em) auto minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-card-padding);
}
.pd-lotto-history li + li { border-top: 1px solid var(--pd-color-divider); }
body.theme-pd .pd-lotto .pd-lotto-history-code { display: grid; color: var(--pd-color-text); line-height: var(--pd-lh-snug); }
body.theme-pd .pd-lotto .pd-lotto-history-code:hover b { color: var(--pd-lotto-accent); }
.pd-lotto-history-code b { font-weight: var(--pd-fw-semibold); }
.pd-lotto-history-code span { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-xs); }
.pd-lotto-history-wins { display: flex; flex-wrap: wrap; gap: calc(var(--pd-space-1) / 2); }
.pd-lotto-history-wins span {
    padding: 0 calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-badge-radius);
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-2xs);
    white-space: nowrap;
}
.pd-lotto-history-wins span.is-hot { background: var(--pd-lotto-gold); color: var(--pd-lotto-on-gold); font-weight: var(--pd-fw-semibold); }
.pd-lotto-history-pool { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); text-align: right; white-space: nowrap; }
.pd-lotto-history-pool b { color: var(--pd-color-text); font-weight: var(--pd-fw-semibold); }

/* ===== 奖级（右栏预估 / 详情页中奖情况） ===== */
.pd-lotto-prizes li {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--pd-space-1) var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-card-padding);
}
.pd-lotto-prizes li + li { border-top: 1px solid var(--pd-color-divider); }
.pd-lotto-prizes .pd-lotto-tier { min-width: calc(var(--pd-space-5) + var(--pd-space-2)); }
.pd-lotto-match { display: inline-flex; gap: calc(var(--pd-space-1) / 2); }
.pd-lotto-match i {
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    border-radius: var(--pd-radius-round);
    background: var(--pd-color-border-strong);
}
.pd-lotto-match i.on { background: var(--pd-lotto-red); }
.pd-lotto-prize-cond { display: grid; gap: calc(var(--pd-space-1) / 2); min-width: 0; }
.pd-lotto-prize-cond span + span { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-2xs); }
.pd-lotto-prize-amt { display: grid; justify-items: end; text-align: right; }
.pd-lotto-prize-amt b { font-weight: var(--pd-fw-semibold); font-variant-numeric: tabular-nums; white-space: nowrap; }
.pd-lotto-prize-amt span { color: var(--pd-color-text-tertiary); font-size: var(--pd-fs-2xs); }
/* 键值（详情页的销售 / 奖池、开奖凭据） */
.pd-lotto-kv {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(10em, 1fr));
    gap: var(--pd-space-1) var(--pd-space-3);
    padding: var(--pd-space-2) var(--pd-card-padding);
    border-top: 1px solid var(--pd-color-divider);
}
.pd-lotto-kv > div { display: grid; gap: calc(var(--pd-space-1) / 2); min-width: 0; }
.pd-lotto-kv dt { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
.pd-lotto-kv dd { min-width: 0; font-variant-numeric: tabular-nums; }
.pd-lotto-kv--stack { grid-template-columns: minmax(0, 1fr); padding: 0; border-top: 0; }
/* 我的战绩 */
.pd-lotto-statgrid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--pd-space-1);
}
.pd-lotto-statgrid > div {
    display: grid;
    gap: calc(var(--pd-space-1) / 2);
    padding: var(--pd-space-1);
    border-radius: var(--pd-radius-sm);
    background: var(--pd-color-surface-subtle);
    text-align: center;
}
.pd-lotto-statgrid dt { color: var(--pd-color-text-secondary); font-size: var(--pd-fs-2xs); }
.pd-lotto-statgrid dd { font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); font-variant-numeric: tabular-nums; }
.pd-lotto-record li {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto auto auto;
    align-items: center;
    gap: var(--pd-space-1);
    padding: var(--pd-space-1) 0;
    font-size: var(--pd-fs-xs);
}
.pd-lotto-record li + li { border-top: 1px solid var(--pd-color-divider); }
.pd-lotto-record b { min-width: calc(var(--pd-space-5) + var(--pd-space-2)); text-align: right; }
.pd-lotto-fair { gap: var(--pd-space-1); color: var(--pd-color-text-secondary); font-size: var(--pd-fs-xs); }
.pd-lotto-fair b { color: var(--pd-color-text); }
/* 注单列表（详情页） */
.pd-lotto-ticket-list li {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1) var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-card-padding);
}
.pd-lotto-ticket-list li + li { border-top: 1px solid var(--pd-color-divider); }
.pd-lotto-ticket-no { color: var(--pd-color-text-tertiary); font-family: var(--pd-font-mono); font-size: var(--pd-fs-xs); }
.pd-lotto-ticket-buyer { min-width: calc(var(--pd-space-5) * 3); }
body.theme-pd .pd-lotto .pd-lotto-ticket-buyer a { color: var(--pd-color-text); }
.pd-lotto-pager {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: var(--pd-space-3);
    padding: var(--pd-space-2);
    border-top: 1px solid var(--pd-color-divider);
    font-size: var(--pd-fs-xs);
}
.pd-lotto-proof { gap: var(--pd-space-2); }
.pd-lotto-verify { display: grid; gap: var(--pd-space-2); justify-items: start; }
.pd-lotto-verify-out {
    display: grid;
    gap: var(--pd-space-1);
    width: 100%;
    padding: var(--pd-space-2);
    border-radius: var(--pd-radius-sm);
    background: var(--pd-color-surface-subtle);
}
.pd-lotto-verify-line {
    display: block;
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
    word-break: break-all;
}
.pd-lotto-verify-line i { margin-right: calc(var(--pd-space-1) / 2); }
.pd-lotto-verify-line.is-ok { color: var(--pd-color-success); }
.pd-lotto-verify-line.is-bad { color: var(--pd-color-error); }

/* ===== 完整规则（折叠） ===== */
.pd-lotto-faq details + details { border-top: 1px solid var(--pd-color-divider); }
.pd-lotto-faq summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    padding: var(--pd-space-2) var(--pd-card-padding);
    font-weight: var(--pd-fw-semibold);
    cursor: pointer;
    list-style: none;
}
.pd-lotto-faq summary::-webkit-details-marker { display: none; }
.pd-lotto-faq summary::after {
    content: "";
    flex: 0 0 auto;
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    border-right: 2px solid var(--pd-color-text-tertiary);
    border-bottom: 2px solid var(--pd-color-text-tertiary);
    transform: rotate(45deg);
    transition: transform .2s;
}
.pd-lotto-faq details[open] summary::after { transform: rotate(-135deg); }
.pd-lotto-faq-body {
    display: grid;
    gap: var(--pd-space-2);
    padding: 0 var(--pd-card-padding) var(--pd-space-3);
    color: var(--pd-color-text-secondary);
}
.pd-lotto-faq-body ul { display: grid; gap: var(--pd-space-1); }
.pd-lotto-faq-body li { position: relative; padding-left: var(--pd-space-3); }
.pd-lotto-faq-body li::before {
    content: "";
    position: absolute;
    top: calc(var(--pd-space-1) + 1px);
    left: calc(var(--pd-space-1) / 2);
    width: calc(var(--pd-space-1) / 2);
    height: calc(var(--pd-space-1) / 2);
    border-radius: var(--pd-radius-round);
    background: var(--pd-lotto-accent);
}
.pd-lotto-table { width: 100%; border-collapse: collapse; font-size: var(--pd-fs-xs); }
.pd-lotto-table :is(th, td) { padding: var(--pd-space-1); border-bottom: 1px solid var(--pd-color-divider); text-align: left; }
.pd-lotto-table thead th { color: var(--pd-color-text-secondary); font-weight: var(--pd-fw-medium); }
.pd-lotto-table tbody th { color: var(--pd-color-text); font-weight: var(--pd-fw-semibold); }
.pd-lotto-table td { color: var(--pd-color-text); }

/* ===== 窄屏 ===== */
@media (max-width: 1180px) {
    .pd-lotto-body { grid-template-columns: minmax(0, 1fr); }
    .pd-lotto-side { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
    .pd-lotto-stage { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
    .pd-lotto-stage > .pd-lotto-stage-last { grid-column: 1 / -1; border-left: 0; border-top: 1px dashed var(--pd-lotto-cream-line); }
    .pd-lotto-stage--detail > .pd-lotto-stage-last { grid-column: auto; border-top: 0; border-left: 1px dashed var(--pd-lotto-cream-line); }
    .pd-lotto-buy-grid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
    .pd-lotto { gap: var(--pd-space-3); }
    .pd-lotto-stage,
    .pd-lotto-stage--detail { grid-template-columns: minmax(0, 1fr); }
    .pd-lotto-stage > * { padding: var(--pd-space-3); }
    .pd-lotto-stage > * + *,
    .pd-lotto-stage--detail > .pd-lotto-stage-last { border-left: 0; border-top: 1px dashed var(--pd-lotto-cream-line); }
    .pd-lotto-stage-clock { justify-items: start; text-align: left; }
    .pd-lotto-side { grid-template-columns: minmax(0, 1fr); }
    .pd-lotto-claim-options { grid-template-columns: minmax(0, 1fr); }
    .pd-lotto-claim-progress { grid-template-columns: minmax(0, 1fr); gap: var(--pd-space-1); }
    .pd-lotto-history li { grid-template-columns: minmax(0, 1fr) auto; }
    .pd-lotto-history .pd-lotto-balls { grid-column: 2; grid-row: 1; }
    .pd-lotto-history-wins { grid-column: 1; }
    .pd-lotto-history-pool { grid-column: 2; }
}
@media (prefers-reduced-motion: reduce) {
    .pd-lotto-wheel input.is-rolled { animation: none; }
    .pd-lotto-faq summary::after { transition: none; }
}

/* 首页右栏服务卡片里的「咸鱼彩票」入口（index.php，银行、商城下面）：独占一行，图标在左、文字左对齐 */
body.theme-pd .pd-side-services-grid > .pd-side-service--lotto {
    grid-column: 1 / -1;
    flex-direction: row;
    justify-content: flex-start;
    gap: var(--pd-space-2);
    text-align: left;
}
body.theme-pd .pd-side-service--lotto .pd-side-service-ico { --pd-service-color: var(--pd-text-red); }
body.theme-pd .pd-side-service--lotto .pd-side-service-text { align-items: flex-start; }

/* 首页右栏「彩票开奖倒计时」卡片（index.php，外壳是 .pd-side-box）：时、分、秒三格大数字，下面一行说明；底部当前奖池和上期号码。
   开奖中（data-lotto-phase="drawing"）数字变灰。号码球沿用上面的 .pd-lotto-ball，直径变量在这里重新给一份。 */
body.theme-pd .pd-side-lotto {
    --pd-lotto-ball-sm: var(--pd-space-4);
    display: flex;
    flex-direction: column;
}
/* 窄屏右栏是两列网格，卡片会被同一行的邻居拉高：倒计时在多出来的高度里垂直居中，奖池贴底 */
body.theme-pd .pd-side-lotto-clock {
    display: grid;
    flex: 1 1 auto;
    align-content: center;
    justify-items: center;
    gap: var(--pd-space-1);
}
body.theme-pd .pd-side-lotto-digits {
    display: flex;
    align-items: center;
    gap: calc(var(--pd-space-1) / 2);
    font-family: var(--pd-font-mono);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-side-lotto-digits b {
    min-width: calc(var(--pd-space-5) + var(--pd-space-2));
    padding: var(--pd-space-1) 0;
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface-soft);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    text-align: center;
}
body.theme-pd .pd-side-lotto-digits i {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-lg);
    font-style: normal;
    font-weight: var(--pd-fw-semibold);
}
body.theme-pd .pd-side-lotto-clock[data-lotto-phase="drawing"] .pd-side-lotto-digits b {
    color: var(--pd-color-text-tertiary);
}
body.theme-pd .pd-side-lotto-state {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-snug);
    text-align: center;
}
body.theme-pd .pd-side-lotto-meta {
    display: grid;
    gap: var(--pd-space-1);
    margin: var(--pd-space-2) 0 0;
    padding-top: var(--pd-space-2);
    border-top: 1px solid var(--pd-color-divider);
}
body.theme-pd .pd-side-lotto-meta > div {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    min-width: 0;
}
body.theme-pd .pd-side-lotto-meta dt {
    color: var(--pd-color-text-secondary);
    font-size: var(--pd-fs-xs);
    white-space: nowrap;
}
body.theme-pd .pd-side-lotto-meta dd {
    margin: 0;
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
    font-weight: var(--pd-fw-semibold);
    font-variant-numeric: tabular-nums;
}
body.theme-pd .pd-side-lotto-prev {
    color: var(--pd-color-text-tertiary);
    font-size: var(--pd-fs-xs);
    line-height: var(--pd-lh-snug);
    text-align: center;
}
body.theme-pd .pd-side-lotto-prev[hidden] { display: none; }

/* 我的奖金的分期进度条、钱包页顶部那行提示 .pd-lotto-wallet-notice（pages/wallet.php） */
.pd-lotto-claim-progress {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--pd-space-2);
    font-size: var(--pd-fs-xs);
    color: var(--pd-color-text-secondary);
    font-variant-numeric: tabular-nums;
}
.pd-lotto-claim-progress progress {
    width: 100%;
    height: var(--pd-space-1);
    border: 0;
    border-radius: var(--pd-radius-pill);
    background: var(--pd-color-surface-soft);
    -webkit-appearance: none;
    appearance: none;
}
.pd-lotto-claim-progress progress::-webkit-progress-bar { background: var(--pd-color-surface-soft); border-radius: var(--pd-radius-pill); }
.pd-lotto-claim-progress progress::-webkit-progress-value { background: var(--pd-color-success); border-radius: var(--pd-radius-pill); }
.pd-lotto-claim-progress progress::-moz-progress-bar { background: var(--pd-color-success); border-radius: var(--pd-radius-pill); }
.pd-lotto-wallet-notice {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: var(--pd-space-1);
    margin: 0;
    padding: var(--pd-space-2) var(--pd-space-3);
    border-radius: var(--pd-card-radius);
    background: var(--pd-color-warning-soft);
    color: var(--pd-color-text);
    font-size: var(--pd-fs-sm);
}
.pd-lotto-wallet-notice i { color: var(--pd-text-red); }
.pd-lotto-wallet-notice a { margin-left: auto; color: var(--pd-color-link); white-space: nowrap; }

/* ===== 整页开奖画面 + 彩票页顶部开奖提示条（assets/lottery.js「整页开奖画面」一节）=====
   开奖前 60 秒在首页和彩票页弹出：圆环倒计时 → 摇号 → 五个球依次停下 → 本期中奖情况，中奖时撒彩纸和金币。
   彩票的暖色和首页右栏彩票卡、横幅同一套：奶油底、棕字、橙色按钮，号码球红色，特等奖金色（颜色令牌 --pd-lotto-* 在 main.css 的 :root 和深色块里）。 */
:root {
    --pd-lotto-ball: var(--pd-space-5);
    --pd-lotto-ball-sm: var(--pd-space-4);
    --pd-lotto-ball-lg: calc(var(--pd-space-5) + var(--pd-space-3));
    --pd-lotto-ball-xl: calc(var(--pd-space-5) * 2);
    --pd-lotto-live-w: 520px;
    --pd-lotto-ring: 168px;
    --pd-lotto-countdown-fs: calc(var(--pd-fs-display) * 2);
}
html.pd-lotto-live-open { overflow: hidden; }

/* 按钮：彩票的主按钮用彩票橙 */
.pd-lotto-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--pd-btn-gap);
    height: var(--pd-btn-h);
    padding: 0 var(--pd-btn-px);
    border: 1px solid transparent;
    border-radius: var(--pd-btn-radius);
    background: var(--pd-lotto-accent);
    color: var(--pd-lotto-on-accent);
    font: inherit;
    font-size: var(--pd-btn-fs);
    font-weight: var(--pd-btn-weight);
    white-space: nowrap;
    text-decoration: none;
    cursor: pointer;
}
a.pd-lotto-btn,
a.pd-lotto-btn:hover,
body.theme-pd a.pd-lotto-btn,
body.theme-pd .pd-lotto a.pd-lotto-btn,
body.theme-pd a.pd-lotto-btn:hover,
body.theme-pd .pd-lotto a.pd-lotto-btn:hover { color: var(--pd-lotto-on-accent); text-decoration: none; }
.pd-lotto-btn:hover { background: var(--pd-lotto-accent-hover); }
.pd-lotto-btn--sm { height: var(--pd-btn-h-sm); padding: 0 var(--pd-btn-px-sm); font-size: var(--pd-btn-fs-sm); }
.pd-lotto-btn--ghost {
    background: var(--pd-color-surface);
    border-color: var(--pd-lotto-cream-line);
    color: var(--pd-lotto-ink);
}
.pd-lotto-btn--ghost:hover { background: var(--pd-lotto-cream-strong); }
.pd-lotto-btn--lg { height: var(--pd-btn-h-lg); padding: 0 var(--pd-btn-px-lg); }
.pd-lotto-btn:disabled { opacity: .5; cursor: not-allowed; }
.pd-lotto-btn.is-saving { opacity: .7; cursor: wait; }

/* 彩票页顶部提示条 */
.pd-lotto-strip {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--pd-space-1) var(--pd-space-2);
    min-height: var(--pd-btn-h-lg);
    padding: var(--pd-space-1) var(--pd-space-3);
    border: 1px solid var(--pd-lotto-cream-line);
    border-radius: var(--pd-radius-md);
    background: var(--pd-lotto-accent-soft);
    color: var(--pd-lotto-ink);
}
.pd-lotto-strip [hidden] { display: none !important; }
.pd-lotto-strip-text { flex: 1 1 auto; min-width: 0; }
.pd-lotto-strip-text b { font-weight: var(--pd-fw-semibold); }
.pd-lotto-strip-clock {
    font-family: var(--pd-font-mono);
    font-size: var(--pd-fs-md);
    font-weight: var(--pd-fw-semibold);
    font-variant-numeric: tabular-nums;
}
.pd-lotto-strip > i { color: var(--pd-lotto-on-gold); }
.pd-lotto-strip .pd-lotto-ball,
.pd-lotto-strip .pd-lotto-balls--sm .pd-lotto-ball { background: var(--pd-lotto-red); color: var(--pd-lotto-on-red); }
.pd-lotto-dot {
    position: relative;
    flex: 0 0 auto;
    width: var(--pd-space-1);
    height: var(--pd-space-1);
    border-radius: var(--pd-radius-round);
    background: var(--pd-lotto-accent);
}
.pd-lotto-dot::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background: inherit;
    animation: pd-lotto-ping 1.6s ease-out infinite;
}
.pd-lotto-strip[data-phase="final"],
.pd-lotto-strip[data-phase="drawing"] { background: var(--pd-lotto-red-soft); border-color: var(--pd-lotto-red); }
.pd-lotto-strip[data-phase="final"] .pd-lotto-dot,
.pd-lotto-strip[data-phase="drawing"] .pd-lotto-dot { background: var(--pd-lotto-red); }
.pd-lotto-strip[data-phase="final"] .pd-lotto-strip-clock { color: var(--pd-lotto-red); }
.pd-lotto-strip[data-phase="result"] { background: var(--pd-lotto-gold-soft); border-color: var(--pd-lotto-gold); }
.pd-lotto-strip[data-phase="result"] .pd-lotto-dot { display: none; }
@keyframes pd-lotto-ping {
    0% { transform: scale(1); opacity: .7; }
    100% { transform: scale(3); opacity: 0; }
}

/* 整页开奖画面 */
.pd-lotto-live {
    position: fixed;
    inset: 0;
    z-index: calc(var(--pd-z-popover) + 10);
    display: grid;
    place-items: center;
    padding: var(--pd-space-3);
    background: var(--pd-lotto-backdrop);
    color: var(--pd-lotto-ink);
    font-size: var(--pd-fs-sm);
    line-height: var(--pd-lh-normal);
    animation: pd-lotto-fade .3s ease-out;
}
.pd-lotto-live[hidden],
.pd-lotto-live [hidden] { display: none !important; }
.pd-lotto-live :is(h2, p, dl, dd, ul) { margin: 0; }
.pd-lotto-live h2 { color: inherit; }
.pd-lotto-live ul { padding: 0; list-style: none; }
.pd-lotto-live canvas {
    position: fixed;
    inset: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
}
.pd-lotto-live-panel {
    position: relative;
    display: grid;
    gap: var(--pd-space-3);
    width: min(100%, var(--pd-lotto-live-w));
    max-height: calc(100vh - var(--pd-space-4));
    overflow: auto;
    padding: var(--pd-space-4);
    border: 1px solid var(--pd-lotto-cream-line);
    border-radius: var(--pd-modal-radius);
    background: var(--pd-lotto-cream);
    box-shadow: var(--pd-shadow-2);
    text-align: center;
    outline: none;
    animation: pd-lotto-rise .4s cubic-bezier(.2, .9, .3, 1.2);
}
.pd-lotto-live-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--pd-space-2);
    color: var(--pd-lotto-ink-muted);
    font-size: var(--pd-fs-xs);
}
.pd-lotto-live-top span { display: inline-flex; align-items: center; gap: var(--pd-space-1); }
.pd-lotto-live-top i { color: var(--pd-lotto-accent); }
.pd-lotto-live-x {
    display: grid;
    place-items: center;
    width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    border: 0;
    border-radius: var(--pd-radius-round);
    background: none;
    color: var(--pd-lotto-ink-muted);
    cursor: pointer;
}
.pd-lotto-live-x:hover { background: var(--pd-lotto-cream-strong); color: var(--pd-lotto-ink); }
.pd-lotto-live-title {
    font-size: var(--pd-fs-xl);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
}
.pd-lotto-live-sub { color: var(--pd-lotto-ink-muted); }
.pd-lotto-ring {
    position: relative;
    justify-self: center;
    width: var(--pd-lotto-ring);
    height: var(--pd-lotto-ring);
}
.pd-lotto-ring svg { width: 100%; height: 100%; transform: rotate(-90deg); }
.pd-lotto-ring circle { fill: none; stroke-width: 8; }
.pd-lotto-ring .track { stroke: var(--pd-lotto-cream-line); }
.pd-lotto-ring .bar {
    stroke: var(--pd-lotto-accent);
    stroke-linecap: round;
    transition: stroke-dashoffset 1s linear, stroke .3s;
}
.pd-lotto-ring-num {
    position: absolute;
    inset: 0;
    display: grid;
    place-content: center;
    line-height: 1;
}
.pd-lotto-ring-num b {
    font-family: var(--pd-font-mono);
    font-size: var(--pd-lotto-countdown-fs);
    font-weight: var(--pd-fw-semibold);
    font-variant-numeric: tabular-nums;
}
.pd-lotto-ring-num span { margin-top: var(--pd-space-1); color: var(--pd-lotto-ink-muted); font-size: var(--pd-fs-xs); }
.pd-lotto-ring.is-urgent .bar { stroke: var(--pd-lotto-red); }
.pd-lotto-ring.is-urgent .pd-lotto-ring-num b { color: var(--pd-lotto-red); }
.pd-lotto-ring.is-tick .pd-lotto-ring-num b { animation: pd-lotto-tick .5s ease-out; }
@keyframes pd-lotto-tick {
    0% { transform: scale(1.35); }
    100% { transform: none; }
}
.pd-lotto-live .pd-lotto-ball { background: var(--pd-lotto-red); color: var(--pd-lotto-on-red); }
.pd-lotto-live .pd-lotto-ball.is-pick { background: var(--pd-lotto-cream); color: var(--pd-lotto-ink); box-shadow: inset 0 0 0 1px var(--pd-lotto-cream-line); }
.pd-lotto-live .pd-lotto-ball.is-pick.is-hit { background: var(--pd-lotto-red); color: var(--pd-lotto-on-red); box-shadow: none; }
.pd-lotto-live .pd-lotto-ball.is-unknown { background: var(--pd-lotto-cream-strong); color: var(--pd-lotto-ink-muted); }
.pd-lotto-live-balls {
    display: flex;
    justify-content: center;
    gap: var(--pd-space-1);
}
.pd-lotto-live-balls .pd-lotto-ball {
    width: var(--pd-lotto-ball-xl);
    height: var(--pd-lotto-ball-xl);
    font-size: var(--pd-fs-display);
}
.pd-lotto-live-balls .pd-lotto-ball.is-unknown { animation: pd-lotto-bob 1.6s ease-in-out infinite; }
.pd-lotto-live-balls .pd-lotto-ball.is-unknown:nth-child(2) { animation-delay: .15s; }
.pd-lotto-live-balls .pd-lotto-ball.is-unknown:nth-child(3) { animation-delay: .3s; }
.pd-lotto-live-balls .pd-lotto-ball.is-unknown:nth-child(4) { animation-delay: .45s; }
.pd-lotto-live-balls .pd-lotto-ball.is-unknown:nth-child(5) { animation-delay: .6s; }
.pd-lotto-live-balls .pd-lotto-ball.is-spin { animation: pd-lotto-shake .25s linear infinite; }
.pd-lotto-live-balls .pd-lotto-ball.is-done { animation: pd-lotto-pop .5s cubic-bezier(.2, .9, .3, 1.4); }
@keyframes pd-lotto-bob {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-15%); }
}
@keyframes pd-lotto-shake {
    0%, 100% { transform: translateY(0) rotate(0); }
    25% { transform: translateY(-6%) rotate(-6deg); }
    75% { transform: translateY(6%) rotate(6deg); }
}
@keyframes pd-lotto-pop {
    0% { transform: scale(1.5); }
    100% { transform: none; }
}
.pd-lotto-live-stats {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--pd-space-1);
}
.pd-lotto-live-stats > div {
    display: grid;
    gap: calc(var(--pd-space-1) / 2);
    padding: var(--pd-space-1);
    border-radius: var(--pd-radius-md);
    background: var(--pd-color-surface);
}
body.theme-pd-dark .pd-lotto-live-stats > div { background: var(--pd-lotto-cream-strong); }
.pd-lotto-live-stats dt { color: var(--pd-lotto-ink-muted); font-size: var(--pd-fs-2xs); }
.pd-lotto-live-stats dd { font-size: var(--pd-fs-md); font-weight: var(--pd-fw-semibold); font-variant-numeric: tabular-nums; }
.pd-lotto-live-foot {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: var(--pd-space-2);
}
.pd-lotto-live-note { color: var(--pd-lotto-ink-muted); font-size: var(--pd-fs-xs); }
.pd-lotto-spinner {
    display: inline-block;
    width: var(--pd-icon-md);
    height: var(--pd-icon-md);
    border: 2px solid var(--pd-lotto-cream-line);
    border-top-color: var(--pd-lotto-accent);
    border-radius: var(--pd-radius-round);
    vertical-align: middle;
    animation: pd-lotto-spin .8s linear infinite;
}
@keyframes pd-lotto-spin { to { transform: rotate(360deg); } }
.pd-lotto-live-result { display: grid; gap: var(--pd-space-3); animation: pd-lotto-fade .4s ease-out; }
.pd-lotto-win {
    display: grid;
    gap: var(--pd-space-1);
    padding: var(--pd-space-3);
    border: 1px solid var(--pd-lotto-gold);
    border-radius: var(--pd-radius-lg);
    background: var(--pd-lotto-gold-soft);
}
.pd-lotto-win-icon { color: var(--pd-lotto-gold); font-size: var(--pd-fs-display); line-height: 1; }
.pd-lotto-win-title { font-size: var(--pd-fs-lg); font-weight: var(--pd-fw-semibold); }
.pd-lotto-win-amount {
    color: var(--pd-lotto-on-gold);
    font-size: var(--pd-fs-display);
    font-weight: var(--pd-fw-semibold);
    line-height: var(--pd-lh-tight);
    font-variant-numeric: tabular-nums;
}
body.theme-pd-dark .pd-lotto-win-amount { color: var(--pd-lotto-gold); }
.pd-lotto-win-list { display: grid; gap: var(--pd-space-1); justify-items: center; }
.pd-lotto-win-list li { display: inline-flex; align-items: center; gap: var(--pd-space-1); }
.pd-lotto-live .pd-lotto-tier { background: var(--pd-lotto-red-soft); color: var(--pd-lotto-red); }
.pd-lotto-live .pd-lotto-tier--0 { background: var(--pd-lotto-gold); color: var(--pd-lotto-on-gold); }
.pd-lotto-live-tiers { display: grid; text-align: left; }
.pd-lotto-live-tiers li {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--pd-space-2);
    padding: var(--pd-space-1) 0;
}
.pd-lotto-live-tiers li + li { border-top: 1px dashed var(--pd-lotto-cream-line); }
.pd-lotto-live-tiers .pd-lotto-tier { justify-content: center; min-width: calc(var(--pd-space-5) + var(--pd-space-2)); }
.pd-lotto-live-tiers b { font-variant-numeric: tabular-nums; }
.pd-lotto-live-sum { color: var(--pd-lotto-ink-muted); font-size: var(--pd-fs-xs); }
.pd-lotto-live-sum b { color: var(--pd-lotto-ink); }
/* 收起后的小胶囊（屏幕底部居中） */
.pd-lotto-live-pill {
    position: fixed;
    left: 50%;
    bottom: var(--pd-space-4);
    z-index: calc(var(--pd-z-popover) + 9);
    display: inline-flex;
    align-items: center;
    gap: var(--pd-space-1);
    height: var(--pd-btn-h-lg);
    padding: 0 var(--pd-space-1) 0 var(--pd-space-3);
    border: 1px solid var(--pd-lotto-cream-line);
    border-radius: var(--pd-radius-pill);
    background: var(--pd-lotto-cream);
    color: var(--pd-lotto-ink);
    box-shadow: var(--pd-shadow-2);
    transform: translateX(-50%);
    font-size: var(--pd-fs-sm);
    animation: pd-lotto-fade .3s ease-out;
}
.pd-lotto-live-pill[hidden] { display: none; }
.pd-lotto-live-pill button {
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    cursor: pointer;
}
.pd-lotto-live-pill .open { display: inline-flex; align-items: center; gap: var(--pd-space-1); font-weight: var(--pd-fw-semibold); }
.pd-lotto-live-pill .open i { color: var(--pd-lotto-accent); }
.pd-lotto-live-pill .open b { font-family: var(--pd-font-mono); font-variant-numeric: tabular-nums; color: var(--pd-lotto-red); }
.pd-lotto-live-pill .off {
    display: grid;
    place-items: center;
    width: var(--pd-btn-h-sm);
    height: var(--pd-btn-h-sm);
    border-radius: var(--pd-radius-round);
    color: var(--pd-lotto-ink-muted);
}
.pd-lotto-live-pill .off:hover { background: var(--pd-lotto-cream-strong); }
@keyframes pd-lotto-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes pd-lotto-rise {
    from { opacity: 0; transform: translateY(var(--pd-space-4)) scale(.96); }
    to { opacity: 1; transform: none; }
}
@media (max-width: 640px) {
    .pd-lotto-live { align-items: end; padding: 0; }
    .pd-lotto-live-panel {
        width: 100%;
        max-height: 92vh;
        padding: var(--pd-space-3);
        border-radius: var(--pd-modal-radius) var(--pd-modal-radius) 0 0;
    }
    .pd-lotto-live-balls .pd-lotto-ball {
        width: calc(var(--pd-space-5) + var(--pd-space-3));
        height: calc(var(--pd-space-5) + var(--pd-space-3));
        font-size: var(--pd-fs-xl);
    }
    .pd-lotto-live-pill { bottom: var(--pd-space-3); }
}
@media (prefers-reduced-motion: reduce) {
    .pd-lotto-dot::after,
    .pd-lotto-live,
    .pd-lotto-live-panel,
    .pd-lotto-live-result,
    .pd-lotto-live-pill,
    .pd-lotto-ring.is-tick .pd-lotto-ring-num b,
    .pd-lotto-live-balls .pd-lotto-ball { animation: none !important; }
    .pd-lotto-ring .bar { transition: none; }
}
