<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>落云宗 - 凡人修仙传主题站</title>
    <meta name="keywords" content="凡人修仙传,韩立,洛云宗">
    <meta name="description" content="洛云宗是云梦三宗的领头羊，宗内太上长老韩立是元婴期高手">
    <link rel="stylesheet" href="https://unpkg.com/layui@2.8.18/dist/css/layui.css">
    <link rel="stylesheet" href="//at.alicdn.com/t/c/font_5189253_iwr3uriraug.css">
    <link rel="stylesheet" href="assets/addons/cms/css/fanren.css">
    <link rel="stylesheet" href="assets/addons/cms/fonts/zt/FZZHAOMFXSJF--GBK1-0-embed.css">
    <link rel="stylesheet" href="assets/addons/cms/fonts/zt2/hanyi.css">
    <style>
        body {
            background-color: #f8f9fa;
        }
        .index-banner {
            position: relative;
            width: 100%;
            overflow: hidden;
        }
        .index-banner img {
            width: 100%;
            display: block;
        }
        .fr-qiuqian,
        .fr-qiuqian img {
            position: relative;
            margin: 0 auto;
            text-align: center;
            z-index: 10;
            cursor: pointer;
        }
        .index-content {
            max-width: 1400px;
            margin: -700px auto 0;
            padding: 0;
            position: relative;
            z-index: 10;
        }
        .guodu {
            width: 100%;
            height: 100px;
            background: linear-gradient(#f8f9fa, #e3eff8);
        }
        .fr-footer {
            position: relative;
        }
        .footer-content {
            width: 100%;
            max-width: 1400px;
            height: 100%;
            margin: 0 auto;
            display: flex;
            justify-content: space-between;
            flex-direction: column;
        }
        .fr-footer-quote {
            width: 100%;
            text-align: center;
            font-size: 60px;
        }
        .fr-footer-copyright p {
            color: unset;
        }
        .qiuqian-modal {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0,0,0,0.7);
            z-index: 9999;
            justify-content: center;
            align-items: center;
        }
        .qiuqian-content {
            background: linear-gradient(135deg, #fff9e6 0%, #fff5d6 100%);
            padding: 40px;
            border-radius: 15px;
            max-width: 500px;
            max-height: 80vh;
            overflow-y: auto;
            box-shadow: 0 10px 40px rgba(0,0,0,0.3);
            border: 2px solid #d4af37;
            position: relative;
        }
        .qiuqian-close {
            position: absolute;
            top: 15px;
            right: 20px;
            font-size: 28px;
            cursor: pointer;
            color: #666;
            transition: color 0.3s;
        }
        .qiuqian-close:hover {
            color: #d4af37;
        }
        .qiuqian-title {
            text-align: center;
            font-size: 28px;
            color: #8b4513;
            margin-bottom: 20px;
            font-weight: bold;
        }
        .qiuqian-level {
            text-align: center;
            font-size: 60px;
            color: rgba(30, 54, 233,1);
            margin-bottom: 15px;
            font-family: '汉仪粗篆繁',sans-serif;
        }
        .qiuqian-poem {
            text-align: center;
            font-size: 18px;
            color: #555;
            line-height: 2;
            margin-bottom: 20px;
            padding: 15px;
            background: rgba(212, 175, 55, 0.1);
            border-radius: 8px;
        }
        .qiuqian-explanation {
            text-align: left;
            font-size: 16px;
            color: #666;
            line-height: 1.8;
            margin-bottom: 20px;
        }
        .qiuqian-btn {
            display: block;
            width: 100%;
            padding: 12px;
            background: linear-gradient(135deg, #d4af37 0%, #c9a227 100%);
            color: white;
            border: none;
            border-radius: 8px;
            font-size: 18px;
            cursor: pointer;
            transition: all 0.3s;
            text-align: center;
        }
        .qiuqian-btn:hover {
            background: linear-gradient(135deg, #c9a227 0%, #b8951d 100%);
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(212, 175, 55, 0.4);
        }
    </style>
</head>
<body>
    <!-- 顶部导航 -->
    <header class="fr-header" id="fr-header">
        <div class="layui-container">
            <div class="fr-header-inner">
                <!-- Logo -->
                <div class="fr-logo">
                    <a href="index.html" title="落云宗">
                        <i class="iconfont icon-logo web_logo"></i>
                    </a>
                </div>
                
                <!-- 导航菜单 -->
                <nav class="fr-nav">
                    <ul class="layui-nav" id="nav-menu">
                        <li class="layui-nav-item fr-nav-active">
                            <a href="index.html">
                                <i class="iconfont icon-fr-home"></i>
                                <span class="fr-nav-text">首页</span>
                            </a>
                        </li>
                        <!-- 动态栏目将通过JS渲染 -->
                    </ul>
                </nav>
            </div>
        </div>
    </header>
    <script>
    window.addEventListener('DOMContentLoaded', function() {
        var header = document.getElementById('fr-header');
        
        if (!header) {
            console.error('Header未找到');
            return;
        }
        
        var scrollThreshold = 100;
        
        function handleScroll() {
            var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
            
            if (scrollTop > scrollThreshold) {
                header.classList.add('fr-header-scrolled');
            } else {
                header.classList.remove('fr-header-scrolled');
            }
        }
        
        window.addEventListener('scroll', handleScroll);
        handleScroll();
    });
    </script>

    <!-- 顶部背景图区域 -->
    <div class="index-banner relative" style="position: relative; width: 100%; min-height: 500px; overflow: hidden;">
        <img id="banner-img" src="assets/addons/cms/images/bg.webp" style="width: 100%; height: auto; display: block; min-height: 500px; object-fit: cover;">
        <div class="absolute bottom-0 left-0 w-full h-3/5 bg-gradient-to-t from-gray-50 to-transparent" style="position: absolute; bottom: 0; left: 0; width: 100%; height: 60%; background: linear-gradient(to top, rgba(248,249,250,0.95), transparent);"></div>
        <!-- Banner切换按钮（测试用） -->
        <div class="banner-switch-btn" style="position:absolute;top:50%;left:10px;transform:translateY(-50%);z-index:200;">
            <button onclick="switchBanner()" style="padding:5px 10px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer;">切换Banner</button>
            <span id="banner-label" style="display:block;margin-top:5px;color:#fff;font-size:14px;text-align:center;">上午</span>
        </div>
        <!-- 今日修行卡片 -->
        <div class="fr-daily-card">
            <img src="assets/addons/cms/images/flag.webp" alt="" id="daily-card-img" style="cursor:pointer;">
        </div>
    </div>

    <!-- Activities弹窗 -->
    <div id="activities-modal" style="display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);z-index:9999;justify-content:center;align-items:center;">
        <div style="background:#fff;padding:30px;border-radius:10px;max-width:600px;max-height:80vh;overflow-y:auto;">
            <h3 style="margin-bottom:15px;">今日活动</h3>
            <div id="activities-content"></div>
            <button onclick="closeActivitiesModal()" style="margin-top:20px;padding:8px 20px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer;">关闭</button>
        </div>
    </div>

    <!-- 求签弹窗 -->
    <div id="qiuqian-modal" class="qiuqian-modal">
        <div class="qiuqian-content">
            <span class="qiuqian-close" onclick="closeQiuqianModal()">&times;</span>
            <div class="qiuqian-title">求签结果</div>
            <div class="qiuqian-level" id="qiuqian-level"></div>
            <div class="qiuqian-poem" id="qiuqian-poem"></div>
            <div class="qiuqian-explanation" id="qiuqian-explanation"></div>
            <button class="qiuqian-btn" onclick="drawQiuqian()">再次求签</button>
        </div>
    </div>

    <script>
    var currentIndex = 0;
    var banners = [
        'assets/addons/cms/images/bg.webp'
    ];
    var labels = ['凌晨', '上午', '中午', '下午', '晚上', '深夜'];

    // 根据当前时间自动选择 banner
    function getTimeBasedBannerIndex() {
        const hour = new Date().getHours();
        
        // 时间段定义：
        // 凌晨 (0-5) → 0
        // 上午 (6-11) → 1  
        // 中午 (12) → 2
        // 下午 (13-17) → 3
        // 晚上 (18-21) → 4
        // 深夜 (22-23) → 5
        
        if (hour >= 0 && hour < 6) {
            return 0; // 凌晨
        } else if (hour >= 6 && hour < 12) {
            return 1; // 上午
        } else if (hour === 12) {
            return 2; // 中午
        } else if (hour >= 13 && hour < 18) {
            return 3; // 下午
        } else if (hour >= 18 && hour < 22) {
            return 4; // 晚上
        } else {
            return 5; // 深夜 (22-23)
        }
    }

    async function loadBanner() {
        try {
            const response = await fetch('json/banner.json');
            const bannerData = await response.json();
            
            console.log('Banner 数据:', bannerData);
            
            if (bannerData && bannerData.length > 0) {
                banners = bannerData.map(item => {
                    let url = '';
                    if (typeof item === 'string') {
                        url = item;
                    } else if (item && item.url) {
                        url = item.url;
                    }
                    
                    // JSON 中已经是相对路径，直接使用
                    return url || 'assets/addons/cms/images/bg.webp';
                });
            }
            
            console.log('处理后的 Banner 路径:', banners);
            
            // 根据当前时间自动选择 banner
            currentIndex = getTimeBasedBannerIndex();
            console.log('当前时间:', new Date().getHours() + '点', '选择 Banner 索引:', currentIndex, '时间段:', labels[currentIndex]);
            
            // 设置 banner
            const bannerImg = document.getElementById('banner-img');
            if (bannerImg) {
                if (banners.length > 0) {
                    // 确保索引不超出范围
                    const safeIndex = Math.min(currentIndex, banners.length - 1);
                    bannerImg.src = banners[safeIndex];
                    console.log('设置 Banner 图片:', banners[safeIndex]);
                    document.getElementById('banner-label').textContent = labels[currentIndex];
                }
            } else {
                console.error('Banner 图片元素未找到');
            }
        } catch (error) {
            console.error('加载 Banner 失败:', error);
        }
    }

    function switchBanner() {
        currentIndex = (currentIndex + 1) % banners.length;
        if (banners.length === 0) {
            document.getElementById('banner-img').src = 'assets/addons/cms/images/bg.webp';
        } else {
            document.getElementById('banner-img').src = banners[currentIndex];
        }
        document.getElementById('banner-label').textContent = labels[currentIndex % labels.length];
    }

    // 双击显示activities
    document.getElementById('daily-card-img').addEventListener('dblclick', async function() {
        var modal = document.getElementById('activities-modal');
        var content = document.getElementById('activities-content');
        
        try {
            const response = await fetch('json/activities.json');
            const activitiesData = await response.json();
            
            var html = '';
            if (activitiesData.image) {
                html += '<a href="' + activitiesData.image + '" target="_blank"><img src="' + activitiesData.image + '" style="max-width:100%;display:block;margin:0 auto;cursor:pointer;" alt="今日活动"></a><p style="text-align:center;margin-top:10px;color:#666;">点击图片查看原图</p>';
            }
            if (activitiesData.desc) {
                html += '<div style="margin-top:20px;padding:15px;background:#f5f5f5;border-radius:5px;">' + activitiesData.desc + '</div>';
            }
            if (!activitiesData.image && !activitiesData.desc) {
                html = '<p>暂无活动内容</p>';
            }
            content.innerHTML = html;
        } catch (error) {
            console.error('加载 activities 失败:', error);
            content.innerHTML = '<p>暂无活动内容</p>';
        }
        
        modal.style.display = 'flex';
    });

    function closeActivitiesModal() {
        document.getElementById('activities-modal').style.display = 'none';
    }

    // 求签功能
    const qiuqianData = [
        { level: '上上大吉', probability: 5, poems: ['紫气东来福运长，贵人相助事业昌。\n前程似锦无限好，金银满库喜洋洋。'], explanations: ['此签为上上大吉之兆，预示着你近期运势极佳'] },
        { level: '上吉', probability: 8, poems: ['春风得意马蹄疾，一日看尽长安花。\n前程似锦无限好，功成名就乐无涯。'], explanations: ['此签为上吉之兆，预示着你近期运势很好'] },
        { level: '大吉', probability: 12, poems: ['日出东方照四方，前程似锦福运长。\n事业有成财源广，家庭和睦乐安康。'], explanations: ['此签为大吉之兆，预示着你近期运势很好'] },
        { level: '中吉', probability: 15, poems: ['春风送暖入屠苏，事业有成福满屋。\n财源广进达四海，家庭和睦乐幸福。'], explanations: ['此签为中吉之兆，预示着你近期运势不错'] },
        { level: '中', probability: 15, poems: ['平平淡淡才是真，稳扎稳打事业兴。\n财运平平无大起，家庭和睦乐天伦。'], explanations: ['此签为中平之兆，预示着你近期运势平稳'] },
        { level: '中上', probability: 12, poems: ['春风送暖入屠苏，事业有成福满屋。\n财源广进达四海，家庭和睦乐幸福。'], explanations: ['此签为中上之兆，预示着你近期运势不错'] },
        { level: '中下', probability: 10, poems: ['风雨兼程路难行，事业坎坷财运平。\n虽有贵人相助意，还需自己努力拼。'], explanations: ['此签为中下之兆，预示着你近期运势一般'] },
        { level: '凶', probability: 8, poems: ['风雨交加路难行，事业坎坷财运平。\n虽有贵人相助意，还需自己努力拼。'], explanations: ['此签为凶兆，预示着你近期运势不佳'] },
        { level: '中凶', probability: 5, poems: ['风雨交加路难行，事业坎坷财运平。\n虽有贵人相助意，还需自己努力拼。'], explanations: ['此签为中凶之兆，预示着你近期运势不佳'] },
        { level: '大凶', probability: 2, poems: ['风雨交加路难行，事业坎坷财运平。\n虽有贵人相助意，还需自己努力拼。'], explanations: ['此签为大凶之兆，预示着你近期运势非常不佳'] }
    ];

    function drawQiuqian() {
        const random = Math.random() * 100;
        let cumulative = 0;
        let selectedLevel = null;

        for (let i = 0; i < qiuqianData.length; i++) {
            cumulative += qiuqianData[i].probability;
            if (random < cumulative) {
                selectedLevel = qiuqianData[i];
                break;
            }
        }

        if (!selectedLevel) selectedLevel = qiuqianData[qiuqianData.length - 1];

        const randomPoemIndex = Math.floor(Math.random() * selectedLevel.poems.length);
        const levelElement = document.getElementById('qiuqian-level');
        const upperLevels = ['上上大吉', '上吉', '大吉'];
        const middleLevels = ['中吉', '中', '中上'];
        
        if (upperLevels.includes(selectedLevel.level)) {
            levelElement.style.color = '#dc2626';
        } else if (middleLevels.includes(selectedLevel.level)) {
            levelElement.style.color = '#ea580c';
        } else {
            levelElement.style.color = '#374151';
        }
        
        levelElement.textContent = selectedLevel.level;
        document.getElementById('qiuqian-poem').innerHTML = selectedLevel.poems[randomPoemIndex].replace(/\n/g, '<br>');
        document.getElementById('qiuqian-explanation').textContent = selectedLevel.explanations[randomPoemIndex];
        document.getElementById('qiuqian-modal').style.display = 'flex';
    }

    function closeQiuqianModal() {
        document.getElementById('qiuqian-modal').style.display = 'none';
    }

    document.getElementById('qiuqian-modal').addEventListener('click', function(e) {
        if (e.target === this) closeQiuqianModal();
    });

    document.addEventListener('DOMContentLoaded', function() {
        const qiuqianImg = document.querySelector('.fr-qiuqian img');
        if (qiuqianImg) qiuqianImg.addEventListener('click', drawQiuqian);
    });

    document.getElementById('activities-modal').addEventListener('click', function(e) {
        if (e.target === this) closeActivitiesModal();
    });
    </script>

    <!-- 内容区域 -->
    <div class="index-content">
        <!-- 功能卡片区 -->
        <div class="fr-features-area">
            <div class="fr-feature-grid" id="feature-grid">
                <!-- 通过JS渲染栏目卡片 -->
            </div>
        </div>

        <!-- 倒计时模块 -->
        <div class="fr-countdown-section">
            <div class="fr-countdown-bg"></div>
            <div class="fr-countdown-content">
                <div class="fr-countdown-left">
                    <div class="fr-countdown-title">距凡人修仙传复播还有：</div>
                    <div class="fr-countdown-timer">
                        <div class="fr-countdown-item">
                            <span class="fr-countdown-num" id="countdown-days">00</span>
                            <span class="fr-countdown-label">天</span>
                        </div>
                        <div class="fr-countdown-item">
                            <span class="fr-countdown-num" id="countdown-hours">00</span>
                            <span class="fr-countdown-label">时</span>
                        </div>
                        <div class="fr-countdown-item">
                            <span class="fr-countdown-num" id="countdown-mins">00</span>
                            <span class="fr-countdown-label">分</span>
                        </div>
                        <div class="fr-countdown-item">
                            <span class="fr-countdown-num" id="countdown-secs">00</span>
                            <span class="fr-countdown-label">秒</span>
                        </div>
                    </div>
                </div>
                <div class="fr-countdown-right">
                    <img src="assets/addons/cms/images/sundial.webp" alt="日晷" class="fr-countdown-image">
                </div>
            </div>
        </div>

        <!-- 内容区域 -->
        <div class="fr-content-area">
            <!-- 宗门公告 -->
            <div class="fr-panel">
                <div class="fr-panel-inner">
                    <div class="fr-panel-header">
                        <h3 class="zt">宗门公告</h3>
                        <a href="list.html?catid=7" class="fr-panel-more">更多</a>
                    </div>
                    <div class="fr-panel-body" id="news-panel">
                        <!-- 通过JS渲染新闻列表 -->
                    </div>
                </div>
                <div class="fr-news-watermark"></div>
            </div>

            <!-- 修行日历 -->
            <div class="fr-panel">
                <div class="fr-panel-inner">
                    <div class="fr-panel-header">
                        <h3 class="zt">修行日历</h3>
                        <a href="#" class="fr-panel-more">更多</a>
                    </div>
                    <div class="fr-panel-body">
                        <div style="text-align: center">
                        <p class="fr-calendar-date zt" id="lunar-date"></p>
                        <span class="fr-calendar-week" id="week-day"></span>
                        </div>
                        <div class="fr-qiuqian">
                            <img src="assets/addons/cms/images/qian.png" alt="">
                            <p>点击签筒求签</p>
                        </div>
                    </div>
                </div>
                <div class="fr-calendar-watermark"></div>
            </div>
        </div>
    </div>

    <!-- 背景过渡区域 -->
    <div class="guodu"></div>
    <div class="fr-footer fr-home">
        <div class="footer-content">
            <div class="fr-footer-quote zt">
                <p>修仙之路，贵在坚持。心无杂念，方能问道长生。</p>
                <p class="fr-quote-source zt">——《凡人修仙传》</p>
            </div>
            <div class="fr-footer-copyright">
                <p>© 2026 落云宗 版权所有</p>
            </div>
        </div>
    </div>

    <script>
    // 加载栏目数据
    async function loadCategories() {
        try {
            const response = await fetch('json/category.json');
            const categories = await response.json();
            
            // 筛选一级栏目并按 listorder 从大到小排序
            const topCategories = categories
                .filter(cat => cat.parentid === 0)
                .sort((a, b) => (b.listorder || 0) - (a.listorder || 0));
            
            // 获取当前页面的 catid
            const urlParams = new URLSearchParams(window.location.search);
            const currentCatId = parseInt(urlParams.get('catid'));
            
            // 渲染导航菜单
            const navMenu = document.getElementById('nav-menu');
            let navHtml = '<li class="layui-nav-item fr-nav-active"><a href="index.html"><i class="iconfont icon-fr-home"></i><span class="fr-nav-text">首页</span></a></li>';
            
            topCategories.forEach(cat => {
                // 判断是否有子栏目
                const hasChildren = categories.some(c => c.parentid === cat.id);
                
                // 确定链接
                let href;
                if (hasChildren) {
                    href = `category.html?catid=${cat.id}`;
                } else {
                    if (cat.type === 1) {
                        href = `page_${cat.catdir}.html`;
                    } else {
                        href = `list.html?catid=${cat.id}`;
                    }
                }
                
                // 获取图标（从 JSON 获取，去掉 URL 前缀）
                let icon = cat.icon || 'icon-file';
                if (icon.includes('icon-fr-')) {
                    icon = icon.split('icon-fr-').pop();
                    icon = 'icon-fr-' + icon;
                } else if (!icon.startsWith('icon-')) {
                    icon = 'icon-file';
                }
                
                // 判断是否高亮
                const isActive = currentCatId === cat.id ? 'fr-nav-active' : '';
                
                navHtml += `<li class="layui-nav-item ${isActive}">
                    <a href="${href}">
                       <i class="iconfont ${icon}"></i>
                        <span class="fr-nav-text">${cat.catname}</span>
                    </a>
                </li>`;
            });
            
            navMenu.innerHTML = navHtml;
            
            // 渲染功能卡片（只显示一级栏目）
            const featureGrid = document.getElementById('feature-grid');
            let featureHtml = '';
            
            topCategories.forEach(cat => {
                // 判断是否有子栏目
                const hasChildren = categories.some(c => c.parentid === cat.id);
                
                // 确定链接
                let href;
                if (hasChildren) {
                    href = `category.html?catid=${cat.id}`;
                } else {
                    if (cat.type === 1) {
                        href = `page_${cat.catdir}.html`;
                    } else {
                        href = `list.html?catid=${cat.id}`;
                    }
                }
                
                // 获取图标
                let icon = cat.icon || 'icon-file';
                if (icon.includes('icon-fr-')) {
                    icon = icon.split('icon-fr-').pop();
                    icon = 'icon-fr-' + icon;
                } else if (!icon.startsWith('icon-')) {
                    icon = 'icon-file';
                }
                
                const descArr = cat.description ? cat.description.split('|') : [];
                let descHtml = descArr.map(d => `<span>${d}</span>`).join('');
                
                featureHtml += `<a href="${href}" class="fr-feature-card">
                    <div class="fr-feature-icon">
                        <i class="iconfont ${icon}"></i>
                    </div>
                    <div class="fr-feature-title">${cat.catname}</div>
                    <div class="fr-feature-desc">${descHtml}</div>
                    <div class="fr-feature-arrow">
                        <span class="fr-arrow-icon">→</span>
                    </div>
                </a>`;
            });
            
            featureGrid.innerHTML = featureHtml;
            
        } catch (error) {
            console.error('加载栏目失败:', error);
        }
    }
    
    // 加载新闻列表
    async function loadNews() {
        try {
            const response = await fetch('json/list_7.json');
            const newsData = await response.json();
            
            const newsPanel = document.getElementById('news-panel');
            
            if (newsData && newsData.length > 0) {
                // 分离置顶文章和普通文章（flag=1 表示置顶）
                const topArticles = newsData.filter(item => item.flag && item.flag === '1');
                const normalArticles = newsData.filter(item => !item.flag || item.flag !== '1');
                
                // 优先选择置顶文章作为大图展示，没有置顶则选第一条
                const featuredArticle = topArticles.length > 0 ? topArticles[0] : newsData[0];
                
                let html = '<div class="fr-news-first">';
                
                // 置顶/精选新闻（带图片）
                html += `<a href="show.html?id=${featuredArticle.id}&catid=${featuredArticle.catid}" class="fr-news-first-link">
                    <div class="fr-news-first-thumb">
                        ${featuredArticle.thumb ? `<img src="${featuredArticle.thumb}" alt="${featuredArticle.title}">` : '<div class="fr-news-placeholder">暂无图片</div>'}
                    </div>
                    <div class="fr-news-first-content">
                        <h4 class="fr-news-first-title">${featuredArticle.title}</h4>
                        <p class="fr-news-first-desc">${featuredArticle.description || ''}</p>
                    </div>
                </a>`;
                html += '</div>';
                
                // 其他新闻列表（排除已展示的文章）
                html += '<ul class="fr-news-list">';
                
                // 先显示其他置顶文章（如果有的话）
                const otherTopArticles = topArticles.slice(1);
                otherTopArticles.forEach(item => {
                    const date = new Date(item.publish_time).toLocaleDateString('zh-CN', {month: '2-digit', day: '2-digit'}).replace('/', '-');
                    html += `<li>
                        <a href="show.html?id=${item.id}&catid=${item.catid}" class="fr-news-title">${item.title}</a>
                        <span class="fr-news-date">${date}</span>
                    </li>`;
                });
                
                // 再显示普通文章（排除已展示的）
                normalArticles.forEach(item => {
                    if (item.id !== featuredArticle.id) {
                        const date = new Date(item.publish_time).toLocaleDateString('zh-CN', {month: '2-digit', day: '2-digit'}).replace('/', '-');
                        html += `<li>
                            <a href="show.html?id=${item.id}&catid=${item.catid}" class="fr-news-title">${item.title}</a>
                            <span class="fr-news-date">${date}</span>
                        </li>`;
                    }
                });
                
                html += '</ul>';
                
                newsPanel.innerHTML = html;
            } else {
                newsPanel.innerHTML = '<div class="fr-news-empty">暂无公告信息</div>';
            }
            
        } catch (error) {
            console.error('加载新闻失败:', error);
            document.getElementById('news-panel').innerHTML = '<div class="fr-news-empty">暂无公告信息</div>';
        }
    }
    
    // 农历日期计算 - 将常量移到外部
    const lunarInfo = [
        0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,
        0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,
        0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,
        0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,
        0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,
        0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,
        0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,
        0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,
        0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,
        0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,
        0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,
        0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,
        0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,
        0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,
        0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0
    ];
    const lunarMonth = ['正', '二', '三', '四', '五', '六', '七', '八', '九', '十', '冬', '腊'];
    const dayChars = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'];

    function LunarDate(y, m, d) {
        let i, leap = 0, temp = 0;
        let offset = (Date.UTC(y, m - 1, d) - Date.UTC(1900, 0, 31)) / 86400000;

        for (i = 1900; i < 2101 && offset > 0; i++) {
            temp = LunarYearDays(i);
            offset -= temp;
        }
        if (offset < 0) { offset += temp; i--; }

        const lunarYear = i;
        leap = leapMonth(i);
        let isLeap = false;

        for (i = 1; i < 13 && offset > 0; i++) {
            if (leap > 0 && i == (leap + 1) && isLeap == false) {
                --i; isLeap = true; temp = leapDays(lunarYear);
            } else {
                temp = MonthDays(lunarYear, i);
            }
            if (isLeap == true && i == (leap + 1)) isLeap = false;
            offset -= temp;
        }

        if (offset == 0 && leap > 0 && i == leap + 1) {
            if (isLeap) { isLeap = false; } else { isLeap = true; --i; }
        }
        if (offset < 0) { offset += temp; --i; }

        const lunarMonthNum = i;
        const lunarDayNum = offset + 1;
        let dayStr = '';

        if (lunarDayNum <= 10) {
            if (lunarDayNum == 1) dayStr = '初一';
            else if (lunarDayNum == 10) dayStr = '初十';
            else dayStr = '初' + dayChars[lunarDayNum];
        } else if (lunarDayNum < 20) {
            dayStr = '十' + dayChars[lunarDayNum - 10];
        } else if (lunarDayNum == 20) {
            dayStr = '二十';
        } else if (lunarDayNum < 30) {
            dayStr = '廿' + dayChars[lunarDayNum - 20];
        } else {
            dayStr = '卅';
        }

        return { monthName: lunarMonth[lunarMonthNum - 1], dayStr: dayStr };
    }

    function LunarYearDays(y) {
        let i, sum = 348;
        for (i = 0x8000; i > 0x8; i >>= 1) sum += (lunarInfo[y - 1900] & i) ? 1 : 0;
        return (sum + leapDays(y));
    }

    function leapMonth(y) { return (lunarInfo[y - 1900] & 0xf); }

    function leapDays(y) {
        if (leapMonth(y)) return ((lunarInfo[y - 1900] & 0x10000) ? 30 : 29);
        else return 0;
    }

    function MonthDays(y, m) {
        return ((lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29);
    }

    function updateCalendar() {
        const now = new Date();
        const lunar = LunarDate(now.getFullYear(), now.getMonth() + 1, now.getDate());
        const weekDays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
        
        document.getElementById('lunar-date').textContent = lunar.monthName + '月' + lunar.dayStr;
        document.getElementById('week-day').textContent = weekDays[now.getDay()];
    }

    function updateCountdown() {
        const targetDate = new Date('2026-06-13T11:00:00');
        const now = new Date();
        const diff = targetDate.getTime() - now.getTime();

        if (diff <= 0) {
            document.getElementById('countdown-days').textContent = '00';
            document.getElementById('countdown-hours').textContent = '00';
            document.getElementById('countdown-mins').textContent = '00';
            document.getElementById('countdown-secs').textContent = '00';
            return;
        }

        const days = Math.floor(diff / (1000 * 60 * 60 * 24));
        const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
        const mins = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
        const secs = Math.floor((diff % (1000 * 60)) / 1000);

        document.getElementById('countdown-days').textContent = days.toString().padStart(2, '0');
        document.getElementById('countdown-hours').textContent = hours.toString().padStart(2, '0');
        document.getElementById('countdown-mins').textContent = mins.toString().padStart(2, '0');
        document.getElementById('countdown-secs').textContent = secs.toString().padStart(2, '0');
    }

    document.addEventListener('DOMContentLoaded', function () {
        loadBanner();
        loadCategories();
        loadNews();
        updateCountdown();
        setInterval(updateCountdown, 1000);
        updateCalendar();
    });
    </script>
</body>
</html>
