/*
Theme Name: MyVipon 站外学堂
Theme URI: https://www.myvipon.cn/academy
Description: 亚马逊站外推广平台 MyVipon 的「站外学堂」频道独立主题。含频道主页、一级/二级栏目页、文章详情页，支持 B站视频、Mega Menu、SEO TDK。
Author: WorkBuddy AI
Version: 1.0.9
License: GPL-2.0-or-later
Text Domain: mvp-academy
*/

/* ----------------------------------------------------------
 * v1.0.9 — 封面不再自动补默认图（避免运营误以为出 bug）
 *         反馈：「默认不应该有封面，用户要设置了就要展示出来，但是不设置不能给一张图片」。
 *         * mvp_article_cover_url() 改为「设置了才显示」：只有
 *           (1) 后台上传的特色图片，或 (2) 该文章专属封面 covers/<ID>.svg
 *           （仅由 seed-content.php 导入时为「这篇具体文章」生成）才返回封面，
 *           其余一律返回空字符串。
 *         * 移除全部自动兜底：covers/_tpl/topic-<slug>.svg（按子栏目）、
 *           covers/_tpl/channel-<slug>.svg / cover-<channel>.png（按频道）、
 *           cover-video.png（视频）、cover-default.png（终极默认）——
 *           这些文件仍保留在主题里，仅作 seed-content.php 复制用的母版，不再被前台展示。
 *         * 模板侧适配空封面：single-academy_article.php 在无封面时不渲染 <img>；
 *           首页大卡 / 行缩略图在无封面时改挂中性品牌渐变占位，不再出现空 url() / 破图。
 *         * 后台「特色图片」说明文案同步改为「不设置则不显示封面（不会自动补图）」。
 *         * 影响面：手动新建且未传特色图的文章 → 全站均无封面（符合预期）；
 *           已导入的 120 篇因有 covers/<ID>.svg 专属封面，保持不变。
 * ---------------------------------------------------------- */

/* ----------------------------------------------------------
 * v1.0.8 — Logo 与 favicon 换成主站（www.myvipon.cn）官方素材
 *         反馈：「logo图标和网页 fav ico要改下，使用 vipon 的图标」。
 *         * 页头原本是「CSS 画的圆角方块 + VIPON 文字」，现换成主站官方横版 logo
 *           （/uploads/20211220/7f481eb75122de314d69e0c987d7fa78.png，202x38 RGBA）。
 *           显示高度取 30px 而非原尺寸 38px —— 高清屏缩放比约 1.6x 更锐利，视觉重量也和
 *           15px 导航文字更协调。
 *         * 页脚是深蓝底，深色字版 logo 看不见 → 由 gen_brand_assets.py 把 logo 里的
 *           深灰字像素刷成纯白、**保留品牌青色 V 标**，生成 logo-vipon-white.png。
 *         * favicon：主站的 /assets/img/favicon.ico 其实是个 89x73 的**非正方形 PNG**
 *           （只有 V 标），直接用会被浏览器压扁 → 补成正方形画布后导出
 *           favicon-32.png / favicon-180.png(apple-touch-icon) / favicon.ico(16/32/48 多尺寸)。
 *           通过 wp_head 输出，且 **has_site_icon() 为真时不输出**（不覆盖后台「站点图标」设置）。
 *         * 顺手清理：删掉 v1.0.7 新增的 mvp_parent_site_url()，改用 inc/mega-menu.php 里
 *           早就存在的 mvp_main_site_url()（两个函数功能完全重复）。
 * ---------------------------------------------------------- */

/* ----------------------------------------------------------
 * v1.0.7 — 修死链：首页 Banner 三张图 + 页脚三栏链接点了没反应
 *         反馈：「红框标注的文章点击没反应」（线上首页 Banner 行）。
 *         * 根因：后台「频道设置 → Banner 图对应文章」留空时，
 *           front-page.php 会输出 href="#" —— 看着像可点的卡片，点了毫无反应。
 *           （线上该选项一直是空的，所以三张 Banner 全是死链。）
 *         * 修法：新增 mvp_resolve_banner_article()，Banner 不再允许出现 "#"。
 *           解析顺序：后台选定 → 对应子栏目最新一篇 → 全站最新一篇；
 *           一篇都没有时才渲染成 <div>（不做假链接）。
 *           兜底的子栏目按设计稿意图映射：主图→站外定义、小图1→Deal站、小图2→新品期打法。
 *           即：不配置也能点，配置了就按配置来。
 *         * 顺带修页脚：产品/导航/联系三栏原本 11 个链接全是 href="#"，
 *           现全部指向 MyVipon 主站真实页面（promotion/clear/new_product/feedback/
 *           article/about/affiliates，均已验证 200）；「客服中心」改为触发
 *           企业微信咨询弹窗。新增 mvp_parent_site_url() 统一生成主站绝对地址。
 *         * MVP_THEME_VERSION 之前停在 1.0.5（资源缓存版本号没跟着升），本次一并到 1.0.7。
 * ---------------------------------------------------------- */

/* ----------------------------------------------------------
 * v1.0.6 — 文章封面升级为「主题插画」（解决封面看着像空图片）
 *         反馈：v1.0.3~1.0.5 的封面是「渐变底 + 一个细线图标」，
 *         图标只占画面约 20%，且 6 个频道用红/绿/紫/橙等彩虹色，
 *         观感像占位块、也偏离站点主色。
 *         * 重写生成器 gen_covers_v3.py，120 张 + 27 张规范图全部重做：
 *           - 配色收敛到品牌青蓝家族（hue 160~224），6 个频道只做小幅偏移；
 *           - 每个二级子栏目一张专属场景插画（包裹发散/咬合齿轮/折扣吊牌+购物车/
 *             手机气泡/火箭/漏斗/仪表盘/放大镜/阶梯…），占画面约 50%；
 *           - 每篇再叠加由 (ID+标题) 派生的次级装饰元素（10 选 2）、渐变角度、
 *             斜向色带、色相 ±15、插画缩放位移，同栏目内也不再雷同；
 *           - 左上角栏目徽标 + 右下角「站外学堂」水印，读起来是设计过的主题图。
 *         * 安全区约束：文章封面会出现在 16:9 与 96x64(3:2) 两种容器，
 *           所有文字/图形限制在 x∈[70,730]、y∈[56,400]，避免被 object-fit:cover 裁掉。
 *         * 输出契约不变（covers/<ID>.svg + covers/_tpl/topic-*.svg、channel-*.svg），
 *           deploy/seed-content.php 无需改动。
 *         * 后台可改：文章编辑页的「特色图片」优先级最高，传了就以它为准，
 *           且列表卡片 / 首页大卡 / 文章头图三处会一起换。原取图尺寸是 medium(300px)，
 *           而头图列宽约 670px、2x 屏需 ~1340px → 改用 large(1024) 避免发虚；
 *           并在「特色图片」框下方加了一行取图规则说明（admin_post_thumbnail_html）。
 * ---------------------------------------------------------- */

/* ----------------------------------------------------------
 * v1.0.3 — 120 篇文章各配一张独立封面，解决「所有文章共用同一张图」的单调问题。
 *         * 新增 assets/images/covers/{文章ID}.svg（120 张，共约 312KB）
 *           由 gen_covers.py 生成：频道决定配色，每篇的色相 / 8 种图形母题 /
 *           渐变角度 / 装饰元素位置均由 (文章ID + 标题) 的哈希派生，互不重复。
 *         * 新增 mvp_article_cover_url( $post_id ) 统一封面回退链：
 *           特色图 → 独立封面 SVG → 视频封面 → 频道封面 → 默认封面
 *         * card-article.php / single-academy_article.php / front-page.php
 *           三处封面逻辑全部改为调用该 helper。
 * ---------------------------------------------------------- */

/* ----------------------------------------------------------
 * v1.0.4 — 性能与可访问性优化（验收 9.8/10）
 *         * 首页三张 Banner（main / mini-1 / mini-2）由 PNG 转 WebP，
 *           体积 4738KB → 355KB，首页总传输字节 ~4.9MB → ~0.6MB。
 *         * <html lang> 强制为 zh-CN（原随 WP 安装语言为 en-US），
 *           修正可访问性与 SEO 语言标记。
 *         * 交付包剔除未引用的占位大图 cover-*-big.png。
 * ---------------------------------------------------------- */

/* ----------------------------------------------------------
 * v1.0.5 — 修复首页侧栏「二级子栏目」不显示
 *         * front-page.php 原用 get_terms(['parent'=>$ch->term_id]) 取子栏目，
 *           但子栏目与一级栏目的归属存于 term meta `parent_channel`，
 *           WP 原生 parent 字段恒为 0，导致侧栏下拉子导航始终为空。
 *         * 改为复用既有 helper mvp_get_topics_by_channel($channel_slug)，
 *           与 seed-data.php / mega-menu.php 保持一致，子栏目导航恢复正常。
 *         * 同步修正本地预览与交付主题 dev/serve 目录不一致的问题
 *           （此前本地服务器跑的是旧副本，源码改动未生效）。
 * ---------------------------------------------------------- */

/* ----------------------------------------------------------
 * v1.0.2 — 1) 全局「立即咨询」企业微信二维码弹窗组件化
 *         （footer.php 渲染 #mvpConsultModal，assets/js/consult.js
 *          拦截所有 .mvp-consult-btn，点击/遮罩/Esc 都能开关）。
 *         2) 首页 banner 接真实文章：后台「频道设置」中可为主 banner 与 2 张小图各选 1 篇文章，
 *         选择后 banner 点击跳对应文章详情、标题自动同步成该文章标题。
 *         3) 一级栏目页底部、二级栏目页右栏、文章页右栏统一加「站外推广服务 / 立即咨询」卡片。
 *         4) 二级栏目页升级为「左导航 + 主内容 + 右栏」三列布局。
 * ---------------------------------------------------------- */

/* =========================================================
 * 设计变量（站外学堂视觉规范 · 对齐 1920px SVG 设计稿令牌）
 * 提取自 academy.txt：品牌主色 #00BFBF、页脚深青蓝 #1F2430、
 * 分隔线 #EEEEEE、页面背景白、文字 #333/#666/#999
 * ========================================================= */
:root {
	--mvp-primary: #00cfcf;       /* 品牌主色（Hero 色带 #00D0D0） */
	--mvp-primary-dark: #00b0b0;
	--mvp-primary-btn: #00BFBF;   /* 注册按钮 / 品牌主色（设计稿 #00BFBF） */
	--mvp-primary-soft: #e6fafa;  /* 浅青蓝底 */
	--mvp-navy: #1F2430;          /* 页脚深青蓝（设计稿 #1F2430，已对齐 academy.txt） */
	--mvp-navy-2: #0a1f1f;
	--mvp-bg: #ffffff;            /* 页面背景（设计稿白底，对齐 academy.txt 双层 1920×2176 white） */
	--mvp-bg-soft: #f5f7fa;       /* 分组卡片底色（推荐文章 / 文章行 / 子模块） */
	--mvp-card: #ffffff;
	--mvp-text: #333333;
	--mvp-text-2: #666666;
	--mvp-text-3: #999999;        /* 三级文字色（设计稿 #999999） */
	--mvp-line: #EEEEEE;          /* 分隔线 / 卡片描边（设计稿 #EEEEEE） */
	--mvp-line-2: #D2D3D5;        /* 次级分隔线（设计稿 #D2D3D5） */
	--mvp-radius: 10px;
	--mvp-shadow: 0 2px 10px rgba(16, 36, 62, 0.06);
	--mvp-shadow-hover: 0 6px 20px rgba(0, 150, 150, 0.14);
	--mvp-max: 1280px;
}

* { box-sizing: border-box; }

body {
	margin: 0;
	font-family: "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
	color: var(--mvp-text);
	background: var(--mvp-bg);
	font-size: 14px;
	line-height: 1.7;
}

a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
ul { margin: 0; padding: 0; list-style: none; }

.mvp-container {
	max-width: var(--mvp-max);
	margin: 0 auto;
	padding: 0 16px;
}

.mvp-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 36px;
	padding: 0 18px;
	background: var(--mvp-primary-btn);
	color: #fff;
	border-radius: 4px;
	font-size: 13px;
	font-weight: 600;
	transition: background .2s;
}
.mvp-btn:hover { background: var(--mvp-primary-dark); }
