/*
Theme Name: 学长毕设笔记
Theme URI: http://blog.leyuncloud.cn
Author: 学长毕设笔记
Description: 毕设源码商城 + 技术文章。经典主题，零外部依赖（不用 Elementor / Spectra / Astra Pro）。
  按 prototype-source-code-store-v1.html 的视觉规范实现，但所有数字都来自真实数据库统计，不写死。
Version: 1.0.0
Requires at least: 6.2
Tested up to: 7.1.3
Requires PHP: 8.1
License: GPL v2 or later
Text Domain: sc-store
Tags: e-commerce, blog, custom-menu, custom-logo, featured-images
*/

/* ═══════════════════════════════════════════════════════════════
 * 为什么自己写而不是套现成商城主题
 *
 *   1. 规模不匹配：Marketplace / Shopster 这类主题假设你有几十个商品、
 *      多级分类、优惠券、会员等级。装上去首页要么空，要么全是占位假数据。
 *   2. 依赖链重：几乎全部要 Elementor 或 Spectra 区块，容器里跑不起来，
 *      而且 EDD 组件样式和它们对不齐。
 *   3. 数据要真：原型里 1280+源码 / 98%好评 是假的。本主题所有统计
 *      全部走 wp_count_posts() / term_count() 实时算，一个假数都没有。
 *
 *   代价是要自己维护模板文件，收益是完全可控 + 零依赖。
 * ═══════════════════════════════════════════════════════════════ */

if (!defined('ABSPATH')) exit;

define('SC_STORE_VERSION', '1.0.0');

/* ── 主题支持 ────────────────────────────────────────────── */
add_action('after_setup_theme', 'sc_store_setup');
function sc_store_setup() {
    add_theme_support('title-tag');
    add_theme_support('post-thumbnails');
    add_theme_support('automatic-feed-links');
    add_theme_support('custom-logo', array(
        'height' => 64, 'width' => 240, 'flex-width' => true, 'flex-height' => true,
    ));
    add_theme_support('html5', array('search-form', 'comment-form', 'comment-list',
                                     'gallery', 'caption', 'style', 'script'));
    register_nav_menus(array(
        'primary' => '主导航',
        'topbar'  => '顶部信息条',
        'footer1' => '页脚-源码分类',
        'footer2' => '页脚-技术文章',
        'footer3' => '页脚-帮助支持',
        'footer4' => '页脚-关于我们',
    ));

    // 商品（EDD download）缩略图尺寸
    add_image_size('sc-product', 600, 400, true);
    add_image_size('sc-card',    600, 400, true);
    add_image_size('sc-article', 400, 260, true);
}
add_action('after_setup_theme', 'sc_store_content_width', 0);
function sc_store_content_width() { $GLOBALS['content_width'] = 1200; }

/* ── 前台资源 ────────────────────────────────────────────── */
add_action('wp_enqueue_scripts', 'sc_store_assets');
function sc_store_assets() {
    wp_enqueue_style('sc-store', get_stylesheet_uri(),
                     array(), SC_STORE_VERSION);
    wp_enqueue_script('sc-store', get_template_directory_uri() . '/assets/store.js',
                      array(), SC_STORE_VERSION, true);
}


/* ═══════════════════════════════════════════════════════════════
 * sc-store 样式
 *
 * 视觉规范来自 prototype-source-code-store-v1.html，
 * 但所有数字（商品数、文章数）都走 PHP 实时统计，CSS 里没有假数据。
 *
 * ⛔ 字体策略：不引 Google Fonts（国内会被墙 + 一套中文字体 6MB+）。
 *    用系统字体栈，中文用系统中易雅黑/苹方，代码用系统等宽。
 * ═══════════════════════════════════════════════════════════════ */

:root {
    /* 主色 */
    --sc-primary:       #2563EB;
    --sc-primary-hover: #1D4ED8;
    --sc-primary-light: #EFF6FF;
    --sc-gradient:      linear-gradient(135deg, #2563EB, #7C3AED);

    /* 中性色 */
    --sc-bg:            #F8FAFC;
    --sc-card-bg:       #FFFFFF;
    --sc-text:          #1E293B;
    --sc-text-2:        #64748B;
    --sc-text-3:        #94A3B8;
    --sc-border:        #E2E8F0;

    /* 语义色 */
    --sc-success:       #22C55E;
    --sc-warning:       #F59E0B;
    --sc-danger:        #EF4444;

    /* 间距 */
    --sc-xs: 4px;  --sc-sm: 8px;  --sc-md: 12px;
    --sc-lg: 16px; --sc-xl: 24px; --sc-xxl: 40px;

    /* 圆角 */
    --sc-r-sm: 6px; --sc-r-md: 8px; --sc-r-lg: 12px; --sc-r-xl: 16px;
    --sc-r-full: 999px;

    --sc-container: 1360px;
    --sc-shadow:     0 1px 3px rgba(0,0,0,.05);
    --sc-shadow-lg:  0 12px 32px rgba(0,0,0,.08);
}

*, *::before, *::after { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
    margin: 0;
    font-family: "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB",
                 "Source Han Sans SC", "Noto Sans CJK SC", -apple-system,
                 BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
    font-size: 16px;
    line-height: 1.75;
    color: var(--sc-text);
    background: var(--sc-bg);
    -webkit-font-smoothing: antialiased;
}

a { color: var(--sc-primary); text-decoration: none; transition: color .2s; }
a:hover { color: var(--sc-primary-hover); }
img { max-width: 100%; height: auto; }

h1,h2,h3,h4 { font-weight: 700; line-height: 1.3; letter-spacing: -.5px; margin: 0 0 var(--sc-lg); }
h1 { font-size: 36px; } h2 { font-size: 28px; } h3 { font-size: 22px; } h4 { font-size: 18px; }

code, pre, .sc-price { font-family: "JetBrains Mono", "SF Mono", Consolas, "Liberation Mono", Menlo, monospace; }

.sc-icon { flex-shrink: 0; vertical-align: middle; }

.sc-container { max-width: var(--sc-container); margin: 0 auto; padding: 0 var(--sc-xl); }

/* ═══ 顶部信息条 ══════════════════════════════════════ */
.sc-topbar {
    background: var(--sc-text); color: var(--sc-text-3);
    font-size: 12px; padding: 6px 0;
}
.sc-topbar__inner { display: flex; justify-content: space-between; align-items: center; }
/* ⛔ 必须是 flex + list-style:none：
      sc_menu() 输出的是 <li>（块级元素），不给 flex 容器就会竖排。
      margin/padding 清零是为了消掉浏览器默认的 ul 缩进。 */
.sc-topbar__links {
    display: flex;
    align-items: center;
    list-style: none;
    margin: 0;
    padding: 0;
}
.sc-topbar__links li { margin: 0; }
.sc-topbar__links a { color: var(--sc-text-3); margin-left: var(--sc-lg); }
.sc-topbar__links a:hover { color: #fff; }

/* ═══ 头部 ══════════════════════════════════════════════ */
.sc-header {
    background: var(--sc-card-bg); border-bottom: 1px solid var(--sc-border);
    position: sticky; top: 0; z-index: 100; box-shadow: var(--sc-shadow);
}
.sc-header__inner {
    display: flex; align-items: center; justify-content: space-between;
    height: 64px; max-width: var(--sc-container); margin: 0 auto; padding: 0 var(--sc-xl);
}
.sc-logo { display: flex; align-items: center; gap: 10px; font-size: 20px; font-weight: 700; color: var(--sc-text); }
.sc-logo__icon {
    width: 36px; height: 36px; border-radius: var(--sc-r-md);
    background: var(--sc-gradient); color: #fff;
    display: flex; align-items: center; justify-content: center;
}
.sc-logo:hover { color: var(--sc-text); }

.sc-nav { display: flex; gap: 4px; list-style: none; margin: 0; padding: 0; }
.sc-nav a {
    display: flex; align-items: center; gap: var(--sc-sm);
    padding: var(--sc-sm) var(--sc-lg); border-radius: var(--sc-r-sm);
    color: var(--sc-text-2); font-size: 15px; font-weight: 500;
}
/* ⛔ is-current 是本主题 fallback 菜单自己打的标记。
      current-menu-item / current_page_item 是 WordPress 给
      **真实注册菜单** 打的 —— 导航走 fallback 数组时这两个 class 不会出现，
      所以 /downloads/ 这类 archive 页必须靠 .is-current 才高亮。 */
.sc-nav a:hover,
.sc-nav .is-current > a,
.sc-nav .current-menu-item > a,
.sc-nav .current_page_item > a {
    color: var(--sc-primary);
    background: var(--sc-primary-light);
}
/* 选中态加一条底部指示线，视觉上更明确 */
.sc-nav .is-current > a,
.sc-nav .current-menu-item > a,
.sc-nav .current_page_item > a { position: relative; }
.sc-nav .is-current > a::after,
.sc-nav .current-menu-item > a::after,
.sc-nav .current_page_item > a::after {
    content: '';
    position: absolute;
    left: var(--sc-lg);
    right: var(--sc-lg);
    bottom: -2px;
    height: 2px;
    background: var(--sc-primary);
    border-radius: var(--sc-r-full);
}
.sc-nav .sc-badge {
    background: var(--sc-danger); color: #fff; font-size: 10px;
    padding: 1px 5px; border-radius: var(--sc-r-full); font-weight: 600;
}

.sc-header__actions { display: flex; align-items: center; gap: var(--sc-md); }
.sc-search {
    display: flex; align-items: center; gap: var(--sc-sm);
    background: var(--sc-bg); border: 1px solid var(--sc-border);
    border-radius: var(--sc-r-full); padding: 6px var(--sc-lg); color: var(--sc-text-3);
}
.sc-search:focus-within { border-color: var(--sc-primary); }
.sc-search input { border: none; outline: none; background: transparent; font-size: 14px; width: 170px; color: var(--sc-text); }

.sc-cart {
    position: relative; width: 40px; height: 40px; border-radius: 50%;
    border: none; background: var(--sc-bg); color: var(--sc-text-2);
    display: flex; align-items: center; justify-content: center;
}
.sc-cart:hover { background: var(--sc-primary-light); }
.sc-cart__count {
    position: absolute; top: 2px; right: 2px; background: var(--sc-danger); color: #fff;
    font-size: 10px; font-weight: 700; min-width: 18px; height: 18px; padding: 0 4px;
    border-radius: 50%; display: flex; align-items: center; justify-content: center;
    border: 2px solid var(--sc-card-bg);
}

.sc-login {
    padding: var(--sc-sm) var(--sc-xl); border: none; border-radius: var(--sc-r-full);
    background: var(--sc-primary); color: #fff; font-size: 14px; font-weight: 500;
}
.sc-login:hover { background: var(--sc-primary-hover); color: #fff; }

.sc-burger { display: none; background: none; border: none; color: var(--sc-text-2); padding: var(--sc-sm); }

/* ═══ Hero ══════════════════════════════════════════════ */
.sc-hero { background: var(--sc-gradient); color: #fff; padding: 60px 0; position: relative; overflow: hidden; }
.sc-hero::before {
    content: ''; position: absolute; top: -50%; right: -10%;
    width: 500px; height: 500px; border-radius: 50%; background: rgba(255,255,255,.08);
}
.sc-hero::after {
    content: ''; position: absolute; bottom: -30%; left: 10%;
    width: 300px; height: 300px; border-radius: 50%; background: rgba(255,255,255,.05);
}
.sc-hero__inner {
    max-width: var(--sc-container); margin: 0 auto; padding: 0 var(--sc-xl);
    display: flex; align-items: center; justify-content: space-between; position: relative; z-index: 1;
}
.sc-hero__content { max-width: 640px; }
.sc-hero__badge {
    display: inline-flex; align-items: center; gap: 6px;
    background: rgba(255,255,255,.15); padding: 6px var(--sc-lg);
    border-radius: var(--sc-r-full); font-size: 13px; margin-bottom: var(--sc-xl);
}
.sc-hero h1 { font-size: 40px; color: #fff; margin-bottom: var(--sc-lg); }
.sc-hero p { font-size: 17px; color: rgba(255,255,255,.8); line-height: 1.7; margin-bottom: var(--sc-xl); }
.sc-hero__actions { display: flex; gap: var(--sc-md); flex-wrap: wrap; }
.sc-btn { padding: 14px var(--sc-xxl); border-radius: var(--sc-r-md); font-size: 16px; font-weight: 600; display: inline-flex; align-items: center; gap: var(--sc-sm); }
.sc-btn--primary { background: #fff; color: var(--sc-primary); }
.sc-btn--primary:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(0,0,0,.2); color: var(--sc-primary); }
.sc-btn--ghost { border: 2px solid rgba(255,255,255,.3); color: #fff; }
.sc-btn--ghost:hover { border-color: rgba(255,255,255,.6); background: rgba(255,255,255,.1); color: #fff; }

.sc-hero__stats { display: flex; gap: var(--sc-xxl); margin-top: var(--sc-xxl); flex-wrap: wrap; }
.sc-hero__stat-value { font-size: 28px; font-weight: 700; font-family: "JetBrains Mono", monospace; }
.sc-hero__stat-label { font-size: 13px; color: rgba(255,255,255,.7); margin-top: var(--sc-xs); }

/* ═══ 分类 chips ══════════════════════════════════════ */
.sc-categories { padding: var(--sc-xxl) var(--sc-xl) 0; max-width: var(--sc-container); margin: 0 auto; }
.sc-chips { display: flex; gap: var(--sc-md); overflow-x: auto; padding-bottom: var(--sc-xs); }
.sc-chip {
    display: flex; align-items: center; gap: var(--sc-sm);
    padding: 10px var(--sc-xl); border-radius: var(--sc-r-full);
    background: var(--sc-card-bg); border: 1px solid var(--sc-border);
    font-size: 14px; color: var(--sc-text-2); white-space: nowrap;
}
.sc-chip:hover, .sc-chip.is-active { border-color: var(--sc-primary); color: var(--sc-primary); background: var(--sc-primary-light); }
.sc-chip__count { font-size: 12px; background: rgba(0,0,0,.06); padding: 2px var(--sc-sm); border-radius: 10px; }

/* ═══ 区块 ══════════════════════════════════════════════ */
.sc-section { padding: var(--sc-xxl); max-width: var(--sc-container); margin: 0 auto; }
.sc-section__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--sc-xl); flex-wrap: wrap; gap: var(--sc-md); }
.sc-section__title { display: flex; align-items: center; gap: 10px; font-size: 22px; font-weight: 700; margin: 0; }
.sc-section__icon { width: 32px; height: 32px; border-radius: var(--sc-r-sm); background: var(--sc-primary-light); color: var(--sc-primary); display: flex; align-items: center; justify-content: center; }
.sc-section__more { display: flex; align-items: center; gap: var(--sc-xs); color: var(--sc-text-3); font-size: 14px; }
.sc-section__more:hover { color: var(--sc-primary); }

/* ═══ 商品网格 ══════════════════════════════════════════ */
.sc-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--sc-xl); }
.sc-grid--3 { grid-template-columns: repeat(3, 1fr); }

.sc-card {
    background: var(--sc-card-bg); border: 1px solid var(--sc-border);
    border-radius: var(--sc-r-lg); overflow: hidden;
    transition: transform .2s, box-shadow .2s; display: flex; flex-direction: column;
}
.sc-card:hover { transform: translateY(-4px); box-shadow: var(--sc-shadow-lg); }
.sc-card__media { display: block; position: relative; aspect-ratio: 3/2; background: var(--sc-bg); }
.sc-card__media img { width: 100%; height: 100%; object-fit: cover; }
.sc-thumb--fallback { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: rgba(255,255,255,.6); }
.sc-thumb--fallback .sc-icon { width: 48px; height: 48px; }
.sc-tag {
    position: absolute; top: 12px; left: 12px; padding: 3px 10px;
    border-radius: var(--sc-r-sm); font-size: 11px; font-weight: 600; color: #fff;
}
.sc-tag--hot { background: var(--sc-danger); }
.sc-tag--new { background: var(--sc-success); }

.sc-card__body { padding: var(--sc-lg); display: flex; flex-direction: column; flex: 1; }
.sc-card__title {
    font-size: 15px; font-weight: 600; line-height: 1.4; margin: 0 0 var(--sc-sm);
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.sc-card__title a { color: var(--sc-text); }
.sc-card__title a:hover { color: var(--sc-primary); }
.sc-card__meta { display: flex; gap: var(--sc-lg); font-size: 12px; color: var(--sc-text-3); margin-bottom: var(--sc-md); }
.sc-card__meta span { display: flex; align-items: center; gap: 3px; }
.sc-card__foot { display: flex; align-items: center; justify-content: space-between; margin-top: auto; }
.sc-price { font-size: 20px; font-weight: 700; color: var(--sc-danger); }
.sc-price__unit { font-size: 13px; font-weight: 500; }
.sc-add-cart {
    width: 36px; height: 36px; border-radius: 50%; background: var(--sc-primary);
    color: #fff; display: flex; align-items: center; justify-content: center;
}
.sc-add-cart:hover { background: var(--sc-primary-hover); transform: scale(1.1); }

/* ═══ 信任条 ════════════════════════════════════════════ */
.sc-trust {
    background: var(--sc-card-bg); border-top: 1px solid var(--sc-border);
    border-bottom: 1px solid var(--sc-border); padding: var(--sc-xl) var(--sc-xl);
    margin: var(--sc-xl) 0;
}
.sc-trust__inner { max-width: var(--sc-container); margin: 0 auto; display: flex; justify-content: space-around; align-items: center; flex-wrap: wrap; gap: var(--sc-xl); }
.sc-trust__item { display: flex; align-items: center; gap: var(--sc-md); }
.sc-trust__icon { width: 44px; height: 44px; border-radius: 50%; background: var(--sc-primary-light); color: var(--sc-primary); display: flex; align-items: center; justify-content: center; }
.sc-trust__text { font-size: 14px; font-weight: 600; }
.sc-trust__desc { font-size: 12px; color: var(--sc-text-3); margin-top: 2px; }

/* ═══ 文章列表 + 侧栏 ═══════════════════════════════════ */
.sc-articles { display: grid; grid-template-columns: 1fr 340px; gap: var(--sc-xl); }
.sc-article-list { display: flex; flex-direction: column; gap: var(--sc-lg); }
.sc-article {
    display: flex; gap: var(--sc-xl); padding: var(--sc-xl);
    background: var(--sc-card-bg); border: 1px solid var(--sc-border); border-radius: var(--sc-r-lg);
    transition: box-shadow .2s;
}
.sc-article:hover { box-shadow: 0 4px 16px rgba(0,0,0,.06); }
.sc-article__thumb { width: 200px; min-height: 130px; border-radius: var(--sc-r-md); overflow: hidden; background: var(--sc-bg); flex-shrink: 0; display: flex; align-items: center; justify-content: center; }
.sc-article__thumb img { width: 100%; height: 100%; object-fit: cover; }
.sc-article__body { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.sc-article__cat {
    display: inline-flex; align-items: center; gap: 4px; font-size: 12px;
    color: var(--sc-primary); background: var(--sc-primary-light);
    padding: 3px 10px; border-radius: var(--sc-r-sm); width: fit-content; margin-bottom: var(--sc-sm);
}
.sc-article__title { font-size: 17px; font-weight: 600; line-height: 1.4; margin: 0 0 var(--sc-sm); }
.sc-article__title a { color: var(--sc-text); }
.sc-article__title a:hover { color: var(--sc-primary); }
.sc-article__excerpt {
    font-size: 14px; color: var(--sc-text-2); margin-bottom: var(--sc-md);
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.sc-article__meta { display: flex; gap: var(--sc-lg); font-size: 13px; color: var(--sc-text-3); margin-top: auto; }
.sc-article__meta span { display: flex; align-items: center; gap: 4px; }

.sc-sidebar { display: flex; flex-direction: column; gap: var(--sc-xl); }
.sc-side-card { background: var(--sc-card-bg); border: 1px solid var(--sc-border); border-radius: var(--sc-r-lg); padding: var(--sc-xl); }
.sc-side-title { font-size: 15px; font-weight: 600; margin-bottom: var(--sc-lg); display: flex; align-items: center; gap: var(--sc-sm); }
.sc-side-title .sc-icon { color: var(--sc-primary); }
.sc-hot-list { list-style: none; margin: 0; padding: 0; }
.sc-hot-list li { display: flex; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--sc-border); }
.sc-hot-list li:last-child { border-bottom: none; }
.sc-hot-rank { width: 22px; height: 22px; border-radius: var(--sc-r-sm); background: var(--sc-bg); color: var(--sc-text-3); font-size: 12px; font-weight: 700; display: flex; align-items: center; justify-content: center; font-family: "JetBrains Mono", monospace; flex-shrink: 0; }
.sc-hot-list li:nth-child(1) .sc-hot-rank { background: var(--sc-danger); color: #fff; }
.sc-hot-list li:nth-child(2) .sc-hot-rank { background: #F97316; color: #fff; }
.sc-hot-list li:nth-child(3) .sc-hot-rank { background: var(--sc-warning); color: #fff; }
.sc-hot-title { font-size: 14px; line-height: 1.5; color: var(--sc-text); }

.sc-tags { display: flex; flex-wrap: wrap; gap: var(--sc-sm); }
.sc-tag-item { padding: 5px var(--sc-md); border-radius: var(--sc-r-sm); font-size: 13px; color: var(--sc-text-2); background: var(--sc-bg); }
.sc-tag-item:hover, .sc-tag-item:hover { background: var(--sc-primary-light); color: var(--sc-primary); }

/* ═══ 空状态 ════════════════════════════════════════════ */
.sc-empty { text-align: center; padding: var(--sc-xxl) var(--sc-xl); color: var(--sc-text-3); }
.sc-empty .sc-icon { width: 48px; height: 48px; margin-bottom: var(--sc-md); }

/* ═══ 页脚 ══════════════════════════════════════════════ */
.sc-footer { background: var(--sc-text); color: var(--sc-text-3); padding: 48px var(--sc-xl) var(--sc-xl); margin-top: var(--sc-xxl); }
.sc-footer__inner { max-width: var(--sc-container); margin: 0 auto; }
.sc-footer__grid { display: grid; grid-template-columns: 1.5fr 1fr 1fr 1fr 1fr; gap: var(--sc-xxl); margin-bottom: var(--sc-xxl); }
.sc-footer__brand p { font-size: 14px; line-height: 1.7; margin-top: var(--sc-md); }
.sc-footer .sc-logo { color: #fff; }
.sc-footer__col h4 { font-size: 14px; color: #fff; margin-bottom: var(--sc-lg); }
.sc-footer__col ul { list-style: none; margin: 0; padding: 0; }
.sc-footer__col li { margin-bottom: 10px; }
.sc-footer__col a { color: var(--sc-text-3); font-size: 14px; }
.sc-footer__col a:hover { color: #fff; }
.sc-footer__bottom { border-top: 1px solid rgba(255,255,255,.1); padding-top: var(--sc-xl); display: flex; justify-content: space-between; font-size: 13px; flex-wrap: wrap; gap: var(--sc-sm); }

/* ═══ 分页 ══════════════════════════════════════════════ */
.sc-pagination { display: flex; justify-content: center; gap: var(--sc-sm); margin: var(--sc-xxl) 0; flex-wrap: wrap; }
.sc-pagination .page-numbers {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 40px; height: 40px; padding: 0 var(--sc-md);
    background: var(--sc-card-bg); border: 1px solid var(--sc-border);
    border-radius: var(--sc-r-sm); color: var(--sc-text-2);
}
.sc-pagination .page-numbers:hover { border-color: var(--sc-primary); color: var(--sc-primary); }
.sc-pagination .page-numbers.current { background: var(--sc-primary); border-color: var(--sc-primary); color: #fff; }

/* ═══ 单页/文章排版 ════════════════════════════════════ */
.sc-page { max-width: var(--sc-container); margin: 0 auto; padding: var(--sc-xxl) var(--sc-xl); }
.sc-page__inner { max-width: 860px; margin: 0 auto; }
.sc-entry { background: var(--sc-card-bg); border: 1px solid var(--sc-border); border-radius: var(--sc-r-lg); padding: var(--sc-xxl); }
.sc-entry h2 { font-size: 24px; margin-top: var(--sc-xl); }
.sc-entry h3 { font-size: 20px; margin-top: var(--sc-xl); }
.sc-entry p { margin: 0 0 20px; }
.sc-entry ul, .sc-entry ol { padding-left: 24px; margin-bottom: 20px; }
.sc-entry li { margin-bottom: var(--sc-sm); }
.sc-entry img { border-radius: var(--sc-r-md); margin: var(--sc-lg) 0; }
.sc-entry pre {
    background: var(--sc-text); color: #E2E8F0; padding: var(--sc-lg);
    border-radius: var(--sc-r-md); overflow-x: auto; font-size: 14px; line-height: 1.6;
}
.sc-entry code { background: var(--sc-primary-light); color: var(--sc-primary-hover); padding: 2px 6px; border-radius: 4px; font-size: .9em; }
.sc-entry pre code { background: none; color: inherit; padding: 0; }
.sc-entry blockquote {
    border-left: 3px solid var(--sc-primary); margin: var(--sc-lg) 0;
    padding: var(--sc-md) var(--sc-lg); background: var(--sc-primary-light); border-radius: 0 var(--sc-r-sm) var(--sc-r-sm) 0;
}
.sc-entry table { width: 100%; border-collapse: collapse; margin: var(--sc-lg) 0; font-size: 14px; }
.sc-entry th, .sc-entry td { border: 1px solid var(--sc-border); padding: var(--sc-md); text-align: left; }
.sc-entry th { background: var(--sc-bg); font-weight: 600; }

/* ═══ 商品页 ════════════════════════════════════════════ */
.sc-single-download { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sc-xxl); }
.sc-download__media { border-radius: var(--sc-r-lg); overflow: hidden; border: 1px solid var(--sc-border); }
.sc-download__title { font-size: 28px; margin-bottom: var(--sc-md); }
.sc-download__price { font-size: 32px; font-weight: 700; color: var(--sc-danger); font-family: "JetBrains Mono", monospace; margin-bottom: var(--sc-lg); }
.sc-buy-box { background: var(--sc-card-bg); border: 1px solid var(--sc-border); border-radius: var(--sc-r-lg); padding: var(--sc-xl); margin-top: var(--sc-xl); }
.sc-buy-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: var(--sc-sm);
    width: 100%; min-height: 48px; padding: var(--sc-md) var(--sc-xl);
    background: var(--sc-primary); color: #fff; border: none; border-radius: var(--sc-r-md);
    font-size: 16px; font-weight: 600; cursor: pointer;
}
.sc-buy-btn:hover { background: var(--sc-primary-hover); }

/* ═══ 响应式 ════════════════════════════════════════════ */
@media (max-width: 1200px) {
    .sc-grid { grid-template-columns: repeat(3, 1fr); }
    .sc-footer__grid { grid-template-columns: 1fr 1fr 1fr; }
}
@media (max-width: 1024px) {
    .sc-articles { grid-template-columns: 1fr; }
    .sc-hero__inner { flex-direction: column; text-align: center; }
    .sc-hero__actions, .sc-hero__stats { justify-content: center; }
    .sc-single-download { grid-template-columns: 1fr; }
    .sc-nav { display: none; }
    .sc-burger { display: block; }
    .sc-search input { width: 120px; }
}
@media (max-width: 640px) {
    .sc-grid, .sc-grid--3 { grid-template-columns: 1fr; }
    .sc-section, .sc-categories { padding-left: var(--sc-lg); padding-right: var(--sc-lg); }
    .sc-hero { padding: var(--sc-xxl) 0; }
    .sc-hero h1 { font-size: 28px; }
    .sc-footer__grid { grid-template-columns: 1fr 1fr; gap: var(--sc-xl); }
    .sc-article { flex-direction: column; }
    .sc-article__thumb { width: 100%; }
    .sc-entry { padding: var(--sc-lg); }
    .sc-search { display: none; }
    .sc-btn { padding: 12px var(--sc-xl); font-size: 15px; }
}

@media (prefers-reduced-motion: reduce) {
    * { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}

/* ═══════════════════════════════════════════════════════════════
 * EDD 组件适配
 *
 * ⛔ 我们把 EDD 自带样式关掉了（inc/store.php 里
 *    add_filter('edd_use_theme_styles', '__return_false')），
 *    所以所有 EDD 组件必须在这里自己画一遍，
 *    否则按钮会变成浏览器默认样式。
 *
 * ⛔ 不用 .edd-sl 之类内部类名做布局锚点 —— EDD 改版会变。
 *    只用稳定的语义类：.edd_button / .edd-price / .edd-cart 等。
 * ═══════════════════════════════════════════════════════════════ */

/* ── 按钮 ─────────────────────────────────────────────── */
.sc-main .edd_button,
.sc-main .edd-submit,
.sc-main .edd-add-to-cart {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 48px;
    padding: 12px 24px;
    background: var(--sc-primary);
    color: #fff !important;
    border: none;
    border-radius: var(--sc-r-md);
    font-size: 16px;
    font-weight: 600;
    cursor: pointer;
    text-decoration: none;
    transition: background .2s, transform .2s, box-shadow .2s;
}
.sc-main .edd_button:hover,
.sc-main .edd-submit:hover,
.sc-main .edd-add-to-cart:hover {
    background: var(--sc-primary-hover);
    transform: translateY(-1px);
    box-shadow: 0 8px 24px rgba(37,99,235,.25);
    color: #fff !important;
}
.sc-main .edd_processing .edd-button-label { opacity: .7; }
.sc-main .edd-add-to-cart.edd-loading { pointer-events: none; }

/* EDD 的按钮组在商品详情里要占满宽度 */
.sc-buy-box .edd_button,
.sc-buy-box .edd-add-to-cart,
.sc-buy-box .edd_purchase_form .edd-add-to-cart { width: 100%; }

/* ── 价格 ─────────────────────────────────────────────── */
.sc-main .edd_price,
.sc-buy-box .edd_price,
.sc-download__price {
    font-family: "JetBrains Mono", "SF Mono", Consolas, monospace;
    font-weight: 700;
    color: var(--sc-danger);
}

/* ── 购物车 / 结算 / 账户 页 ──────────────────────────── */
.sc-main .edd-cart, .sc-main .edd_checkout_form, .sc-main .edd_purchase_form,
.sc-main .edd-account, .sc-main .edd-downloads-list, .sc-main .edd-receipt {
    background: var(--sc-card-bg);
    border: 1px solid var(--sc-border);
    border-radius: var(--sc-r-lg);
    padding: 28px;
}

.sc-main .edd-cart table,
.sc-main .edd_checkout_form table,
.sc-main .edd_account_table table {
    width: 100%;
    border-collapse: collapse;
    margin-bottom: 20px;
    font-size: 14px;
}
.sc-main .edd-cart th, .sc-main .edd-cart td,
.sc-main .edd_checkout_form th, .sc-main .edd_checkout_form td,
.sc-main .edd_account_table th, .sc-main .edd_account_table td {
    border-bottom: 1px solid var(--sc-border);
    padding: 12px;
    text-align: left;
}
.sc-main .edd-cart th, .sc-main .edd_checkout_form th,
.sc-main .edd_account_table th {
    background: var(--sc-bg);
    font-weight: 600;
}

/* ── 表单控件 ─────────────────────────────────────────── */
.sc-main .edd_checkout_form input[type="text"],
.sc-main .edd_checkout_form input[type="email"],
.sc-main .edd_checkout_form input[type="tel"],
.sc-main .edd_checkout_form input[type="password"],
.sc-main .edd_checkout_form select,
.sc-main .edd_checkout_form textarea,
.sc-main .edd-cart input[type="text"],
.sc-main .edd-cart input[type="email"],
.sc-main .edd-cart input[type="tel"],
.sc-main .edd-cart select,
.sc-main .edd-cart textarea {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--sc-border);
    border-radius: var(--sc-r-sm);
    font-size: 15px;
    background: #fff;
    color: var(--sc-text);
    box-sizing: border-box;
}
.sc-main .edd_checkout_form input:focus,
.sc-main .edd_cart input:focus,
.sc-main .edd_checkout_form select:focus {
    outline: none;
    border-color: var(--sc-primary);
    box-shadow: 0 0 0 3px rgba(37,99,235,.1);
}
.sc-main .edd_checkout_form label,
.sc-main .edd-cart label {
    display: block;
    margin-bottom: 6px;
    font-size: 14px;
    font-weight: 500;
}

/* ── 订单完成 / 提示条 ────────────────────────────────── */
.sc-main .edd_notices .edd_success,
.sc-main .edd-message,
.sc-main .edd_downloads_list .edd_download_item {
    background: #F0FDF4;
    border: 1px solid #BBF7D0;
    border-radius: var(--sc-r-md);
    padding: 14px 18px;
    margin-bottom: 16px;
}
.sc-main .edd_error,
.sc-main .edd_notices .edd_error {
    background: #FEF2F2;
    border: 1px solid #FECACA;
    border-radius: var(--sc-r-md);
    padding: 14px 18px;
    color: #991B1B;
}

/* ── 支付方式图标 ─────────────────────────────────────── */
.sc-main .edd-gateway-list { list-style: none; margin: 0 0 20px; padding: 0; }
.sc-main .edd-gateway-list li {
    background: #fff;
    border: 1px solid var(--sc-border);
    border-radius: var(--sc-r-md);
    padding: 14px 16px;
    margin-bottom: 10px;
}
.sc-main .edd-gateway-list li label { display: inline-flex; align-items: center; gap: 8px; margin: 0; cursor: pointer; }

/* ── 商品列表页 EDD 遗留样式（archive-download 里可能带）─── */
.sc-main .edd_downloads_list,
.sc-main .edd_download_item { border: none; padding: 0; background: none; }
.sc-main .edd_download_item h3 { margin-bottom: 8px; }
.sc-main .edd_download_item .edd_price { font-size: 22px; }

/* ── 分页 ─────────────────────────────────────────────── */
.sc-main .edd-pagination { margin: 24px 0; }
.sc-main .edd-pagination .page-numbers {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 40px; height: 40px; padding: 0 12px; margin: 0 4px;
    background: var(--sc-card-bg); border: 1px solid var(--sc-border);
    border-radius: var(--sc-r-sm); color: var(--sc-text-2);
}
.sc-main .edd-pagination .page-numbers.current { background: var(--sc-primary); border-color: var(--sc-primary); color: #fff; }

/* ── 移动端 ───────────────────────────────────────────── */
@media (max-width: 640px) {
    .sc-main .edd-cart, .sc-main .edd_checkout_form,
    .sc-main .edd_purchase_form, .sc-main .edd-account { padding: 16px; }
    .sc-main .edd_cart table thead { display: none; }
    .sc-main .edd-cart td { display: block; border: none; padding: 6px 0; }
    .sc-main .edd-cart td::before {
        content: attr(data-label) "：";
        font-weight: 600; color: var(--sc-text-3);
    }
    .sc-main .edd_button, .sc-main .edd-add-to-cart { width: 100%; }
}

/* ═══ 搜索结果里的商品标记 ══════════════════════════════
 * ⛔ 搜索结果里文章和商品混在一起，
 *    不加区分用户会以为商品是文章。 */
.sc-article__cat--dl {
    background: rgba(16, 185, 129, 0.12);
    color: #059669;
}
.sc-article__price {
    font-family: 'JetBrains Mono', ui-monospace, monospace;
    font-weight: 700;
    font-size: 15px;
    color: #dc2626;
}
.sc-article__meta > span {
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

/* ═══ 商品详情页购买区 ═══════════════════════════════════
 * ⛔ EDD 的 edd_get_purchase_link() 输出的是**完整购买表单**，
 *   不是链接。它自带 .edd-add-to-cart 按钮和 nonce，
 *   主题只负责让这个表单在 sc-buy-box 里排版正常。
 * ⛔ 之前这里写 printf('<a href="%s">') 是错的 ——
 *   把 1860 字符的表单塞进了 href。 */
.sc-buy-box {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
}
.sc-buy-box form {
    margin: 0;
}
/* EDD 按钮套用主题主色 */
.sc-buy-box .edd-add-to-cart,
.sc-buy-box .edd-buy-now {
    background: var(--sc-primary);
    border: 1px solid var(--sc-primary);
    color: #fff;
    font-size: 16px;
    font-weight: 600;
    padding: 12px 28px;
    border-radius: var(--sc-r-md);
    cursor: pointer;
    transition: background .18s ease;
}
.sc-buy-box .edd-add-to-cart:hover,
.sc-buy-box .edd-buy-now:hover {
    background: var(--sc-primary-hover);
    border-color: var(--sc-primary-hover);
}
.sc-buy-box .edd-add-to-cart.loading {
    opacity: .7;
    cursor: wait;
}
.sc-buy-btn--ghost {
    background: var(--sc-card-bg);
    border: 1px solid var(--sc-border);
    color: var(--sc-text);
    padding: 12px 24px;
    border-radius: var(--sc-r-md);
    text-decoration: none;
    font-size: 15px;
    font-weight: 500;
}
.sc-buy-btn--ghost:hover {
    border-color: var(--sc-primary);
    color: var(--sc-primary);
}
.sc-buy-disabled {
    display: inline-flex;
    align-items: center;
    padding: 12px 24px;
    border-radius: var(--sc-r-md);
    background: var(--sc-bg);
    border: 1px dashed var(--sc-border);
    color: var(--sc-text-3);
    font-size: 15px;
}

/* ═══ 页头品牌图 ═════════════════════════════════════════
 * ⛔ 32px 是刻意定的：导航栏高度有限，
 *   再大就会把「源码商城/文章/关于/联系方式」挤到换行。
 *   logo-96.png 是 96px 源图，这里按 CSS 缩到 32px 显示。 */
.sc-logo__img {
    width: 32px;
    height: 32px;
    border-radius: 50%;      /* ⛔ 圆形，和头像一致 */
    object-fit: cover;
    flex-shrink: 0;
    border: 1px solid var(--sc-border);
}
.sc-logo {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}
.sc-logo__text {
    white-space: nowrap;
    font-weight: 700;
}
/* ⛔ 小屏隐藏文字只留图（图标 + 文字太挤） */
@media (max-width: 640px) {
    .sc-logo__text { display: none; }
    .sc-logo__img { width: 30px; height: 30px; }
}
