藤原の小站2edit icon

作者:
藤原
Fork(复制)
下载
嵌入
设置
BUG反馈
index.html
style.css
index.js
现在支持上传本地图片了!
            
            <!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="description" content="一个热衷于分享资源/教程/生活的站长的站点">
    <meta name="keywords" content="tengyuanyy,tengyuanyy主页,个人导航页,藤原导航,藤原主页,藤原杂谈">
    <link rel="icon" href="./static/img/favicon.ico">

    <!-- 字体引入 -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">

    <!-- 使用Font Awesome图标 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">

    <style>
        :root {
            --primary-color: #000000;
            --secondary-color: #333333;
            --dark-color: #000000;
            --light-color: #ffffff;
            --gray-color: #666666;
            --light-gray: #f0f0f0;
            --transition: all 0.3s ease;
            --border-radius: 8px;
            --box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
            --box-shadow-hover: 0 8px 20px rgba(0, 0, 0, 0.15);
            --comic-border: 3px solid #000;
            --comic-bg: #fff;
            --comic-accent: #ff4d4d;
            --sidebar-width: 280px;
        }
        
        /* 黑夜模式变量 */
        body.dark-mode {
            --primary-color: #ffffff;
            --secondary-color: #cccccc;
            --dark-color: #121212;
            --light-color: #1e1e1e;
            --gray-color: #999999;
            --light-gray: #2a2a2a;
            --comic-bg: #1e1e1e;
            --comic-border: 3px solid #444;
            --comic-accent: #ff6b6b;
        }
        
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: 'Noto Sans SC', sans-serif;
            background-color: var(--light-color);
            color: var(--primary-color);
            line-height: 1.6;
            overflow-x: hidden;
            min-height: 100vh;
            position: relative;
            transition: background-color 0.3s ease, color 0.3s ease;
        }
        
        /* 漫画风格的页面边框 */
        body::before {
            content: "";
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            border: var(--comic-border);
            pointer-events: none;
            z-index: 1000;
        }
        
        /* 漫画风格的装饰性斜线 */
        body::after {
            content: "";
            position: fixed;
            top: 0;
            right: 0;
            width: 100px;
            height: 100px;
            background: linear-gradient(45deg, transparent 45%, var(--comic-accent) 45%, var(--comic-accent) 55%, transparent 55%);
            z-index: 999;
        }
        
        a {
            text-decoration: none;
            color: inherit;
            transition: var(--transition);
        }
        
        img {
            max-width: 100%;
            height: auto;
            display: block;
        }
        
        /* 简约漫画卡片效果 */
        .comic-card {
            background: var(--comic-bg);
            border-radius: var(--border-radius);
            border: var(--comic-border);
            box-shadow: var(--box-shadow);
            position: relative;
            overflow: hidden;
            transition: var(--transition);
        }
        
        .comic-card:hover {
            transform: translateY(-5px);
            box-shadow: var(--box-shadow-hover);
        }
        
        /* 漫画对话框效果 */
        .speech-bubble {
            position: relative;
            background: var(--comic-bg);
            border-radius: var(--border-radius);
            border: var(--comic-border);
            padding: 1.5rem;
            margin: 1rem 0;
        }
        
        .speech-bubble::after {
            content: '';
            position: absolute;
            bottom: -10px;
            left: 20px;
            width: 20px;
            height: 20px;
            background: var(--comic-bg);
            border-right: var(--comic-border);
            border-bottom: var(--comic-border);
            transform: rotate(45deg);
            z-index: -1;
        }
        
        /* 头部样式 */
        .header {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            background: var(--comic-bg);
            border-bottom: var(--comic-border);
            z-index: 100;
            padding: 1rem 2rem;
        }
        
        .header-container {
            display: flex;
            justify-content: space-between;
            align-items: center;
            max-width: 1400px;
            margin: 0 auto;
        }
        
        .logo {
            font-size: 1.5rem;
            font-weight: 700;
            letter-spacing: 1px;
            position: relative;
        }
        
        .logo::after {
            content: '';
            position: absolute;
            bottom: -5px;
            left: 0;
            width: 100%;
            height: 3px;
            background: var(--comic-accent);
        }
        
        .nav {
            display: flex;
            gap: 2rem;
        }
        
        .nav-item {
            position: relative;
            padding: 0.5rem 0;
            font-weight: 500;
            color: var(--gray-color);
            text-transform: uppercase;
            letter-spacing: 1px;
        }
        
        .nav-item:hover, .nav-item.active {
            color: var(--primary-color);
        }
        
        .nav-item::after {
            content: '';
            position: absolute;
            bottom: 0;
            left: 0;
            width: 0;
            height: 2px;
            background-color: var(--comic-accent);
            transition: var(--transition);
        }
        
        .nav-item:hover::after, .nav-item.active::after {
            width: 100%;
        }
        
        /* 英雄区域 */
        .hero {
            min-height: 100vh;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            text-align: center;
            padding: 8rem 2rem 4rem;
            position: relative;
            overflow: hidden;
        }
        
        .hero::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: url('https://api.yilx.net/img/pc') center/cover no-repeat;
            opacity: 0.1;
            z-index: -1;
        }
        
        .avatar {
            width: 150px;
            height: 150px;
            border-radius: 50%;
            object-fit: cover;
            border: 4px solid var(--comic-bg);
            box-shadow: var(--box-shadow);
            margin-bottom: 2rem;
            border: var(--comic-border);
        }
        
        .site-title {
            font-size: 3rem;
            font-weight: 700;
            margin-bottom: 1rem;
            color: var(--dark-color);
            position: relative;
            display: inline-block;
        }
        
        .site-title::after {
            content: '';
            position: absolute;
            bottom: -10px;
            left: 0;
            width: 100%;
            height: 4px;
            background: var(--comic-accent);
        }
        
        .motto {
            font-size: 1.2rem;
            color: var(--gray-color);
            margin-bottom: 2rem;
            font-weight: 500;
            max-width: 600px;
            line-height: 1.8;
        }
        
        /* 主要内容区域 - 三栏布局 */
        .main-container {
            display: flex;
            max-width: 1400px;
            margin: 0 auto;
            padding: 2rem;
            gap: 2rem;
        }
        
        .left-sidebar {
            width: var(--sidebar-width);
            flex-shrink: 0;
        }
        
        .main-content {
            flex: 1;
            min-width: 0;
        }
        
        .right-sidebar {
            width: var(--sidebar-width);
            flex-shrink: 0;
        }
        
        /* 卡片通用样式 */
        .card {
            background: var(--comic-bg);
            border-radius: var(--border-radius);
            border: var(--comic-border);
            padding: 1.5rem;
            transition: var(--transition);
            margin-bottom: 1.5rem;
            position: relative;
        }
        
        .card-title {
            font-size: 1.3rem;
            font-weight: 600;
            margin-bottom: 1.5rem;
            display: flex;
            align-items: center;
            gap: 0.5rem;
        }
        
        .card-title i {
            color: var(--comic-accent);
        }
        
        /* 竖向轮播图样式 */
        .vertical-carousel {
            position: relative;
            border-radius: var(--border-radius);
            overflow: hidden;
            height: 400px;
            border: var(--comic-border);
        }
        
        .vertical-slides {
            height: 100%;
            display: flex;
            flex-direction: column;
            transition: transform 0.5s ease;
        }
        
        .vertical-slide {
            height: 100%;
            width: 100%;
            flex-shrink: 0;
        }
        
        .vertical-blog-card {
            display: block;
            height: 100%;
            position: relative;
        }
        
        .vertical-blog-card img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        
        .vertical-text-content {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            background: linear-gradient(transparent, rgba(0, 0, 0, 0.7));
            color: white;
            padding: 1.5rem;
        }
        
        .vertical-text-slide {
            display: none;
        }
        
        .vertical-text-slide.active {
            display: block;
        }
        
        .date {
            font-size: 0.9rem;
            opacity: 0.8;
            margin-bottom: 0.5rem;
        }
        
        .excerpt {
            font-size: 0.95rem;
            margin-bottom: 0.5rem;
        }
        
        .title {
            font-size: 1.5rem;
            font-weight: 600;
            margin-bottom: 1rem;
        }
        
        .button {
            display: inline-block;
            padding: 0.5rem 1.5rem;
            background-color: var(--comic-accent);
            color: white;
            border-radius: 50px;
            font-size: 0.9rem;
            font-weight: 500;
            transition: var(--transition);
            border: var(--comic-border);
        }
        
        .button:hover {
            background-color: var(--dark-color);
            transform: translateY(-2px);
        }
        
        .vertical-dots {
            position: absolute;
            right: 1rem;
            top: 50%;
            transform: translateY(-50%);
            display: flex;
            flex-direction: column;
            gap: 0.5rem;
            z-index: 10;
        }
        
        .vertical-dot {
            width: 12px;
            height: 12px;
            border-radius: 50%;
            background-color: rgba(255, 255, 255, 0.5);
            border: 2px solid #000;
            cursor: pointer;
            transition: var(--transition);
        }
        
        .vertical-dot.active {
            background-color: var(--comic-accent);
            transform: scale(1.2);
        }
        
        /* 音乐播放器 */
        .music-player-container {
            background: var(--comic-bg);
            border-radius: var(--border-radius);
            border: var(--comic-border);
            padding: 1rem;
            transition: var(--transition);
            width: 100%;
        }
        
        .music-player {
            display: flex;
            align-items: center;
            gap: 1rem;
        }
        
        .cover {
            width: 80px;
            height: 80px;
            border-radius: var(--border-radius);
            overflow: hidden;
            flex-shrink: 0;
            border: var(--comic-border);
        }
        
        .cover img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        
        .music-info {
            flex-grow: 1;
            text-align: left;
        }
        
        .music-title {
            font-size: 1.1rem;
            font-weight: 600;
            margin-bottom: 0.25rem;
        }
        
        .music-artist {
            font-size: 0.9rem;
            color: var(--gray-color);
            margin-bottom: 0.75rem;
        }
        
        .progress-container {
            width: 100%;
            height: 4px;
            background-color: var(--light-gray);
            border-radius: 2px;
            margin-bottom: 0.75rem;
            cursor: pointer;
        }
        
        .progress {
            height: 100%;
            background: var(--comic-accent);
            border-radius: 2px;
            width: 0%;
            transition: width 0.1s linear;
        }
        
        .time-info {
            display: flex;
            justify-content: space-between;
            font-size: 0.8rem;
            color: var(--gray-color);
        }
        
        .controls {
            display: flex;
            align-items: center;
            gap: 0.5rem;
        }
        
        .play-pause-btn {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background: var(--comic-accent);
            color: white;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            transition: var(--transition);
        }
        
        .play-pause-btn:hover {
            transform: scale(1.1);
        }
        
        .control-btn {
            width: 30px;
            height: 30px;
            border-radius: 50%;
            background-color: var(--light-gray);
            color: var(--dark-color);
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            transition: var(--transition);
        }
        
        .control-btn:hover {
            background-color: var(--comic-accent);
            color: white;
        }
        
        .pause-icon {
            display: none;
        }
        
        .playing .play-icon {
            display: none;
        }
        
        .playing .pause-icon {
            display: block;
        }
        
        /* 个人空间卡片 */
        .space-card {
            background: var(--comic-bg);
            border-radius: var(--border-radius);
            border: var(--comic-border);
            transition: var(--transition);
            display: flex;
            align-items: stretch;
            height: 100%;
            position: relative;
            overflow: hidden;
            width: 100%;
        }
        
        .space-card:hover {
            transform: translateY(-5px);
        }
        
        .space-content {
            flex: 1;
            padding: 1.5rem;
            display: flex;
            flex-direction: column;
            justify-content: center;
        }
        
        .space-title {
            font-size: 1.3rem;
            font-weight: 600;
            margin-bottom: 0.5rem;
        }
        
        .space-desc {
            font-size: 0.9rem;
            color: var(--gray-color);
            margin-bottom: 1rem;
        }
        
        .space-button {
            display: inline-flex;
            align-items: center;
            gap: 0.5rem;
            padding: 0.5rem 1.25rem;
            background: var(--comic-accent);
            color: white;
            border-radius: 50px;
            font-size: 0.9rem;
            font-weight: 500;
            transition: var(--transition);
            width: fit-content;
            border: var(--comic-border);
        }
        
        .space-button:hover {
            background: var(--dark-color);
            transform: translateY(-2px);
        }
        
        .space-image {
            width: 40%;
            position: relative;
            overflow: hidden;
        }
        
        .space-image img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            transition: var(--transition);
        }
        
        .space-card:hover .space-image img {
            transform: scale(1.05);
        }
        
        /* API列表 */
        .api-list {
            max-width: 1200px;
            margin: 0 auto;
            padding: 0 2rem 4rem;
        }
        
        .api-cards {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(48%, 1fr));
            gap: 1.5rem;
        }
        
        .api-card {
            position: relative;
            border-radius: var(--border-radius);
            overflow: hidden;
            height: 180px;
            transition: var(--transition);
            border: var(--comic-border);
            width: 100%;
        }
        
        .api-card img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            transition: var(--transition);
        }
        
        .api-card:hover {
            transform: translateY(-5px);
        }
        
        .api-card:hover img {
            transform: scale(1.05);
        }
        
        .overlay {
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            background: linear-gradient(transparent, rgba(0, 0, 0, 0.8));
            color: white;
            padding: 1.5rem;
        }
        
        .overlay h3 {
            font-size: 1.2rem;
            font-weight: 600;
            margin-bottom: 0.5rem;
        }
        
        .overlay p {
            font-size: 0.9rem;
            opacity: 0.9;
            margin-bottom: 0.5rem;
        }
        
        /* 页脚 */
        .footer {
            background-color: var(--dark-color);
            color: white;
            padding: 3rem 2rem;
            text-align: center;
            border-top: var(--comic-border);
        }
        
        .footer-container {
            max-width: 1200px;
            margin: 0 auto;
        }
        
        .footer-text {
            font-size: 1rem;
            margin-bottom: 1rem;
            opacity: 0.8;
        }
        
        .icp {
            font-size: 0.9rem;
            opacity: 0.6;
        }
        
        .icp a {
            color: white;
            margin-left: 0.5rem;
            transition: var(--transition);
        }
        
        .icp a:hover {
            opacity: 1;
            text-decoration: underline;
        }
        
        /* 浮动按钮 */
        .float-button {
            position: fixed;
            right: 2rem;
            bottom: 2rem;
            display: flex;
            flex-direction: column;
            gap: 0.75rem;
            z-index: 999;
        }
        
        .upward {
            width: 48px;
            height: 48px;
            border-radius: 50%;
            background-color: var(--comic-accent);
            color: white;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            transition: var(--transition);
            border: var(--comic-border);
        }
        
        .upward:hover {
            background-color: var(--dark-color);
            transform: translateY(-3px);
        }
        
        /* 右侧边栏 */
        .right .card {
            background: var(--comic-bg);
            border-radius: var(--border-radius);
            border: var(--comic-border);
            transition: var(--transition);
            overflow: hidden;
            position: relative;
        }
        
        .right .card:hover {
            transform: translateY(-5px);
        }
        
        .right .card::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            height: 4px;
            background: var(--comic-accent);
        }
        
        .right .card-title {
            display: flex;
            align-items: center;
            gap: 0.75rem;
            font-size: 1.1rem;
            font-weight: 600;
            margin-bottom: 1.25rem;
        }
        
        .right .content {
            font-size: 0.95rem;
            color: var(--dark-color);
            line-height: 1.7;
        }
        
        .right .content div {
            margin-bottom: 0.75rem;
            padding-bottom: 0.75rem;
            border-bottom: 1px dashed rgba(0, 0, 0, 0.2);
        }
        
        .right .content div:last-child {
            margin-bottom: 0;
            padding-bottom: 0;
            border-bottom: none;
        }
        
        .right .content strong {
            color: var(--comic-accent);
        }
        
        .right .content a {
            color: var(--comic-accent);
            text-decoration: none;
            transition: var(--transition);
            font-weight: 500;
        }
        
        .right .content a:hover {
            color: var(--dark-color);
            text-decoration: underline;
        }
        
        /* 个人资料卡片 */
        .profile-card {
            text-align: center;
            padding: 2.5rem 1.5rem 1.5rem;
            position: relative;
            background: var(--comic-bg);
            border-radius: var(--border-radius);
            border: var(--comic-border);
            transition: var(--transition);
            overflow: hidden;
            margin-bottom: 1.5rem;
        }
        
        .profile-card::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            height: 4px;
            background: var(--comic-accent);
        }
        
        .profile-avatar {
            width: 100px;
            height: 100px;
            border-radius: 50%;
            border: 3px solid white;
            object-fit: cover;
            margin: -30px auto 1rem;
            position: relative;
            background-color: #f5f5f5;
            z-index: 2;
            border: var(--comic-border);
        }
        
        .profile-name {
            font-size: 1.4rem;
            font-weight: 600;
            margin-bottom: 0.5rem;
        }
        
        .profile-bio {
            font-size: 0.9rem;
            color: var(--gray-color);
            margin-bottom: 1.5rem;
        }
        
        .profile-stats {
            display: flex;
            justify-content: space-around;
            margin-bottom: 1.5rem;
            padding: 0.75rem 0;
            background: rgba(0, 0, 0, 0.05);
            border-radius: var(--border-radius);
        }
        
        .stat-item {
            text-align: center;
            padding: 0 0.5rem;
        }
        
        .stat-number {
            font-size: 1.1rem;
            font-weight: 600;
            color: var(--comic-accent);
        }
        
        .stat-label {
            font-size: 0.75rem;
            color: var(--gray-color);
            text-transform: uppercase;
            letter-spacing: 0.5px;
        }
        
        .goto {
            display: block;
            width: 100%;
            padding: 0.75rem;
            background: var(--comic-accent);
            color: white;
            text-align: center;
            border-radius: 50px;
            font-weight: 500;
            margin-bottom: 1.5rem;
            transition: var(--transition);
            font-size: 0.9rem;
            border: var(--comic-border);
        }
        
        .goto:hover {
            background: var(--dark-color);
            transform: translateY(-2px);
        }
        
        .contact-me {
            display: flex;
            justify-content: center;
            gap: 1rem;
        }
        
        .image-box {
            width: 36px;
            height: 36px;
            border-radius: 50%;
            background-color: rgba(0, 0, 0, 0.1);
            display: flex;
            align-items: center;
            justify-content: center;
            transition: var(--transition);
            border: var(--comic-border);
        }
        
        .image-box:hover {
            background-color: var(--comic-accent);
            color: white;
            transform: translateY(-2px);
        }
        
        /* 赞赏码样式 */
        .donate-box {
            text-align: center;
            padding: 1rem 0;
        }
        
        .donate-title {
            font-size: 1rem;
            color: var(--dark-color);
            margin-bottom: 1rem;
            font-weight: 500;
        }
        
        .donate-image {
            width: 180px;
            height: 180px;
            margin: 0 auto;
            border-radius: var(--border-radius);
            overflow: hidden;
            border: var(--comic-border);
        }
        
        .donate-image img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        
        .donate-desc {
            font-size: 0.8rem;
            color: var(--gray-color);
            margin-top: 0.5rem;
        }
        
        /* 响应式调整 */
        @media (max-width: 1200px) {
            .main-container {
                flex-direction: column;
            }
            
            .left-sidebar, .right-sidebar {
                width: 100%;
            }
            
            .left-sidebar {
                order: 2;
            }
            
            .main-content {
                order: 1;
            }
            
            .right-sidebar {
                order: 3;
            }
        }
        
        @media (max-width: 768px) {
            .header {
                padding: 1rem;
            }
            
            .nav {
                display: none;
            }
            
            .hero {
                padding: 5rem 1rem 3rem;
            }
            
            .site-title {
                font-size: 2rem;
            }
            
            .api-cards {
                grid-template-columns: 1fr;
            }
            
            .space-card {
                flex-direction: column;
                height: auto;
            }
            
            .space-image {
                width: 100%;
                height: 150px;
            }
            
            .music-player {
                flex-direction: column;
                text-align: center;
            }
            
            .music-info {
                text-align: center;
            }
            
            .controls {
                justify-content: center;
            }
            
            .float-button {
                right: 1rem;
                bottom: 1rem;
            }
            
            .profile-avatar {
                width: 80px;
                height: 80px;
                margin: -30px auto 1rem;
            }
            
            .donate-image {
                width: 150px;
                height: 150px;
            }
        }
    
        /* 媒体行布局 */
        .media-row {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 1.5rem;
            margin-bottom: 1.5rem;
        }
        
        @media (max-width: 768px) {
            .media-row {
                grid-template-columns: 1fr;
            }
        }
        
        /* 漫画风格的装饰元素 */
        .comic-dot {
            position: absolute;
            width: 10px;
            height: 10px;
            background: var(--comic-accent);
            border-radius: 50%;
            border: 2px solid #000;
        }
        
        /* 加载动画 */
        @keyframes comicPulse {
            0% { transform: scale(1); }
            50% { transform: scale(1.1); }
            100% { transform: scale(1); }
        }
        
        .loading {
            animation: comicPulse 1.5s infinite;
            text-align: center;
            padding: 2rem;
        }
        
        /* 主题切换按钮 */
        .theme-toggle {
            position: fixed;
            right: 2rem;
            top: 1.5rem;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background-color: var(--comic-accent);
            color: white;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            z-index: 1001;
            border: var(--comic-border);
            transition: var(--transition);
        }
        
        .theme-toggle:hover {
            transform: scale(1.1);
        }
        
        .theme-toggle i {
            font-size: 1.2rem;
        }

        /* 基础重置 */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            overflow: hidden;
        }

        /* 修改加载动画样式 */
        .tengyuan-loading {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(255, 255, 255, 0.98);
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            z-index: 9999;
            opacity: 1;
            transition: opacity 0.5s ease-out;
            pointer-events: none;
        }

        .tengyuan-loading.hidden {
            opacity: 0;
        }

        /* 确保主内容在加载时不可见 */
        body.loading {
            overflow: hidden;
            height: 100vh;
        }

        body.loading .header,
        body.loading .hero,
        body.loading .main-container,
        body.loading .footer {
            visibility: hidden;
        }

        body.loaded {
            overflow: auto;
        }

        body.loaded .header,
        body.loaded .hero,
        body.loaded .main-container,
        body.loaded .footer {
            visibility: visible;
        }

        @keyframes fadeIn {
            to { opacity: 1; }
        }

        /* 头像容器 */
        .tengyuan-avatar-container {
            position: relative;
            width: 120px;
            height: 120px;
            margin-bottom: 30px;
            animation: float 3s ease-in-out infinite;
        }

        @keyframes float {
            0%, 100% { transform: translateY(0); }
            50% { transform: translateY(-6px); }
        }

        /* 头像 */
        .tengyuan-avatar {
            width: 100px;
            height: 100px;
            border-radius: 50%;
            object-fit: cover;
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            z-index: 3;
            border: 2px solid rgba(255, 255, 255, 0.9);
            box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
            transition: all 0.3s ease;
        }

        /* 进度环 */
        .tengyuan-progress-ring {
            position: absolute;
            width: 100%;
            height: 100%;
            top: 0;
            left: 0;
            z-index: 2;
        }

        .tengyuan-progress-circle {
            fill: transparent;
            stroke: #6B7280;
            stroke-width: 3;
            stroke-dasharray: 326.725;
            stroke-dashoffset: 326.725;
            stroke-linecap: round;
            transform-origin: 50% 50%;
            transform: rotate(-90deg);
            animation: progress-rotate 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
        }

        @keyframes progress-rotate {
            0% {
                stroke-dashoffset: 326.725;
                transform: rotate(-90deg);
            }
            50% {
                stroke-dashoffset: 0;
                transform: rotate(270deg);
            }
            100% {
                stroke-dashoffset: -326.725;
                transform: rotate(630deg);
            }
        }

        /* 季节文字 */
        .tengyuan-quote {
            font-family: 'Inter', 'Noto Sans SC', sans-serif;
            font-size: 1.1rem;
            color: #475569;
            text-align: center;
            margin-top: 24px;
            line-height: 1.6;
            opacity: 0;
            animation: textAppear 1.2s ease-out 0.5s forwards;
            position: relative;
            max-width: 80%;
        }

        /* 季节飘落元素 */
        .season-element {
            position: absolute;
            z-index: 1;
            opacity: 0;
            animation: falling linear infinite;
            pointer-events: none;
            will-change: transform;
        }

        @keyframes falling {
            0% {
                transform: translate(var(--start-x), -10vh) rotate(0deg);
                opacity: 0;
            }
            10% {
                opacity: var(--element-opacity);
            }
            90% {
                opacity: var(--element-opacity);
            }
            100% {
                transform: translate(calc(var(--start-x) + var(--random-x)), 110vh) rotate(360deg);
                opacity: 0;
            }
        }

        /* 季节指示器 - 修改为左下方位置 */
        .season-indicator {
            position: absolute;
            bottom: -12px;
            left: 50%;
            transform: translateX(-50%);
            background: #F8FAFC;
            padding: 4px 12px;
            border-radius: 16px;
            font-size: 0.85rem;
            color: #64748B;
            font-weight: 500;
            z-index: 4;
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
            white-space: nowrap;
            min-width: 36px;
            text-align: center;
        }

        /* 响应式设计 */
        @media (max-width: 768px) {
            .tengyuan-avatar-container {
                width: 100px;
                height: 100px;
            }
            .tengyuan-avatar {
                width: 80px;
                height: 80px;
            }
            .tengyuan-quote {
                font-size: 1rem;
            }
            .season-indicator {
                font-size: 0.75rem;
                padding: 3px 10px;
                bottom: -10px;
            }
        }


/* FPS监控漫画风格 */
.comic-fps {
    position: fixed;
    left: 10px;
    bottom: 10px;
    display: flex;
    align-items: center;
    z-index: 999;
    user-select: none;
    font-family: 'Noto Sans SC', sans-serif;
}

.fps-bubble {
    position: relative;
    background: var(--comic-bg);
    border: var(--comic-border);
    border-radius: var(--border-radius);
    padding: 8px 15px;
    box-shadow: var(--box-shadow);
    display: flex;
    align-items: center;
    gap: 8px;
}

.fps-character {
    font-size: 1.2rem;
    transform: translateY(2px);
    opacity: 0.9;
    margin-left: 5px;
}

.fps-value {
    font-weight: bold;
    font-size: 1.1rem;
    margin-right: 5px;
    color: var(--comic-accent);
}

.fps-status {
    font-size: 0.9rem;
}

.fps-character {
    font-size: 1.5rem;
    transform: translateY(2px);
    opacity: 0.9;
}

/* FPS状态颜色 */
.comic-fps.excellent {
    --comic-accent: #2ecc71;
}
.comic-fps.good {
    --comic-accent: #f1c40f;
}
.comic-fps.normal {
    --comic-accent: #e67e22;
}
.comic-fps.low {
    --comic-accent: #e74c3c;
}
.comic-fps.critical {
    --comic-accent: #c0392b;
    animation: shake 0.5s infinite;
}

@keyframes shake {
    0%, 100% { transform: translateX(0); }
    25% { transform: translateX(-3px); }
    75% { transform: translateX(3px); }
}
        /* 新增的日历小部件样式 */
        .calendar-widget {
            padding: 1rem;
        }
        
        .calendar-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 1rem;
        }
        
        .calendar-title {
            font-weight: 600;
            font-size: 1.1rem;
        }
        
        .calendar-nav {
            display: flex;
            gap: 0.5rem;
        }
        
        .calendar-nav-btn {
            width: 30px;
            height: 30px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            background: var(--light-gray);
            transition: var(--transition);
        }
        
        .calendar-nav-btn:hover {
            background: var(--comic-accent);
            color: white;
        }
        
        .calendar-weekdays {
            display: grid;
            grid-template-columns: repeat(7, 1fr);
            text-align: center;
            margin-bottom: 0.5rem;
            font-size: 0.8rem;
            color: var(--gray-color);
        }
        
        .calendar-days {
            display: grid;
            grid-template-columns: repeat(7, 1fr);
            gap: 0.3rem;
        }
        
        .calendar-day {
            aspect-ratio: 1;
            display: flex;
            align-items: center;
            justify-content: center;
            border-radius: 50%;
            cursor: pointer;
            transition: var(--transition);
            font-size: 0.85rem;
        }
        
        .calendar-day:hover {
            background: var(--comic-accent);
            color: white;
        }
        
        .calendar-day.today {
            background: var(--comic-accent);
            color: white;
            font-weight: bold;
        }
        
        .calendar-day.other-month {
            opacity: 0.4;
        }
        
        /* 天气小部件 */
        .weather-widget {
            padding: 1rem;
        }
        
        .weather-current {
            display: flex;
            align-items: center;
            margin-bottom: 1rem;
        }
        
        .weather-icon {
            font-size: 2.5rem;
            margin-right: 1rem;
        }
        
        .weather-temp {
            font-size: 2rem;
            font-weight: 600;
        }
        
        .weather-desc {
            font-size: 0.9rem;
            color: var(--gray-color);
        }
        
        .weather-forecast {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 0.5rem;
        }
        
        .weather-day {
            text-align: center;
            padding: 0.5rem;
            border-radius: var(--border-radius);
            background: rgba(0, 0, 0, 0.05);
        }
        
        .weather-day-icon {
            font-size: 1.5rem;
            margin: 0.3rem 0;
        }
        
        .weather-day-temp {
            font-weight: 500;
        }
        
        /* 新增的搜索框样式 */
        .search-box {
            position: relative;
            margin-bottom: 1.5rem;
        }
        
        .search-input {
            width: 100%;
            padding: 0.8rem 1rem 0.8rem 3rem;
            border-radius: 50px;
            border: var(--comic-border);
            background: var(--comic-bg);
            font-family: inherit;
            font-size: 0.95rem;
            transition: var(--transition);
        }
        
        .search-input:focus {
            outline: none;
            box-shadow: 0 0 0 3px rgba(255, 77, 77, 0.3);
        }
        
        .search-icon {
            position: absolute;
            left: 1rem;
            top: 50%;
            transform: translateY(-50%);
            color: var(--gray-color);
        }
        
        /* 新增的标签云样式 */
        .tag-cloud {
            display: flex;
            flex-wrap: wrap;
            gap: 0.5rem;
        }
        
        .tag {
            display: inline-block;
            padding: 0.3rem 0.8rem;
            background: var(--light-gray);
            border-radius: 50px;
            font-size: 0.8rem;
            transition: var(--transition);
        }
        
        .tag:hover {
            background: var(--comic-accent);
            color: white;
        }
        
        /* 新增的访客统计图表容器 */
        .stats-chart {
            height: 200px;
            margin-top: 1rem;
            position: relative;
        }
        
        /* 新增的待办事项样式 */
        .todo-list {
            list-style: none;
        }
        
        .todo-item {
            display: flex;
            align-items: center;
            padding: 0.5rem 0;
            border-bottom: 1px dashed rgba(0, 0, 0, 0.1);
        }
        
        .todo-checkbox {
            margin-right: 0.8rem;
            accent-color: var(--comic-accent);
        }
        
        .todo-text {
            flex: 1;
        }
        
        .todo-text.completed {
            text-decoration: line-through;
            opacity: 0.7;
        }
        
        .todo-delete {
            color: var(--gray-color);
            cursor: pointer;
            transition: var(--transition);
        }
        
        .todo-delete:hover {
            color: var(--comic-accent);
        }
        
        .todo-add {
            display: flex;
            margin-top: 0.5rem;
        }
        
        .todo-input {
            flex: 1;
            padding: 0.5rem;
            border: var(--comic-border);
            border-radius: var(--border-radius) 0 0 var(--border-radius);
            background: var(--comic-bg);
        }
        
        .todo-submit {
            padding: 0.5rem 1rem;
            background: var(--comic-accent);
            color: white;
            border: none;
            border-radius: 0 var(--border-radius) var(--border-radius) 0;
            cursor: pointer;
            transition: var(--transition);
        }
        
        .todo-submit:hover {
            background: var(--dark-color);
        }
    </style>
</head>
<body class="loading">
    <!-- 加载动画 -->
    <div class="tengyuan-loading">
        <div id="season-elements-container"></div>
        <div class="tengyuan-avatar-container">
            <img class="tengyuan-avatar" src="https://a.520gexing.com/uploads/allimg/2019032616/3mltnpfys55.jpg" alt="头像">
            <div class="season-indicator" id="seasonIndicator"></div>
            <svg class="tengyuan-progress-ring" viewBox="0 0 120 120">
                <circle class="tengyuan-progress-circle" cx="60" cy="60" r="52.5"></circle>
            </svg>
        </div>
        <div class="tengyuan-quote">
            风穿过四季的门,
            <br>每一片飘落都是时间的信。
        </div>
    </div>

    <!-- 头部导航 -->
    <header class="header comic-card">
        <div class="header-container">
            <div class="logo">藤原の小站</div>
            <nav class="nav">
                <a href="#" class="nav-item active">首页</a>
                <a href="#" class="nav-item">博客</a>
                <a href="#" class="nav-item">项目</a>
                <a href="#" class="nav-item">关于</a>
            </nav>
        </div>
    </header>

    <!-- 主题切换按钮 -->
    <div class="theme-toggle" id="themeToggle">
        <i class="fas fa-moon"></i>
    </div>

    <!-- 英雄区域 -->
    <section class="hero">
        <img class="avatar" src="https://a.520gexing.com/uploads/allimg/2019032616/3mltnpfys55.jpg" alt="藤原的头像">
        <h1 class="site-title">藤原の小站</h1>
        <p class="motto">风带来故事的种子,时间使之发芽。</p>
        <div class="speech-bubble">
            欢迎来到我的个人空间,这里记录着我的学习、生活和创作的点滴。
        </div>
    </section>

    <!-- 主要内容 - 三栏布局 -->
    <div class="main-container">
        <!-- 左侧边栏 -->
        <aside class="left-sidebar">
            <!-- 搜索框 -->
            <div class="card comic-card">
                <div class="search-box">
                    <i class="fas fa-search search-icon"></i>
                    <input type="text" class="search-input" placeholder="搜索内容...">
                </div>
            </div>
            
            <!-- 个人资料卡片 -->
            <div class="profile-card comic-card">
                <img class="profile-avatar" src="https://a.520gexing.com/uploads/allimg/2019032616/3mltnpfys55.jpg" alt="藤原的头像">
                <h2 class="profile-name">藤原</h2>
                <p class="profile-bio">风带来故事的种子,时间使之发芽。</p>
                <div class="profile-stats">
                    <div class="stat-item">
                        <div class="stat-number">4</div>
                        <div class="stat-label">网站</div>
                    </div>
                    <div class="stat-item">
                        <div class="stat-number">2</div>
                        <div class="stat-label">项目</div>
                    </div>
                    <div class="stat-item">
                        <div class="stat-number">2</div>
                        <div class="stat-label">分类</div>
                    </div>
                </div>
                <a href="https://blog.tengyuan.icu/" class="goto">前往博客</a>
                <div class="contact-me">
                    <a class="image-box" href="https://github.com/tengyuan1101" target="_blank">
                        <i class="fab fa-github"></i>
                    </a>
                    <a class="image-box" href="https://www.zhihu.com/people/c829052124f7ba5840ed206f13691a6b" target="_blank">
                        <i class="fab fa-zhihu"></i>
                    </a>
                    <a class="image-box" href="mailto:2083737075@qq.com" target="_blank">
                        <i class="fas fa-envelope"></i>
                    </a>
                </div>
            </div>

            <!-- 日历小部件 -->
            <div class="card comic-card">
                <div class="card-title">
                    <i class="far fa-calendar-alt"></i> 日历
                </div>
                <div class="calendar-widget">
                    <div class="calendar-header">
                        <div class="calendar-title" id="calendarMonth">2025年5月</div>
                        <div class="calendar-nav">
                            <div class="calendar-nav-btn" id="calendarPrev">
                                <i class="fas fa-chevron-left"></i>
                            </div>
                            <div class="calendar-nav-btn" id="calendarNext">
                                <i class="fas fa-chevron-right"></i>
                            </div>
                        </div>
                    </div>
                    <div class="calendar-weekdays">
                        <div>日</div>
                        <div>一</div>
                        <div>二</div>
                        <div>三</div>
                        <div>四</div>
                        <div>五</div>
                        <div>六</div>
                    </div>
                    <div class="calendar-days" id="calendarDays">
                        <!-- 日历日期将通过JS动态生成 -->
                    </div>
                </div>
            </div>

            <!-- 标签云 -->
            <div class="card comic-card">
                <div class="card-title">
                    <i class="fas fa-tags"></i> 热门标签
                </div>
                <div class="tag-cloud">
                    <a href="#" class="tag">前端</a>
                    <a href="#" class="tag">JavaScript</a>
                    <a href="#" class="tag">CSS</a>
                    <a href="#" class="tag">HTML</a>
                    <a href="#" class="tag">设计</a>
                    <a href="#" class="tag">动漫</a>
                    <a href="#" class="tag">游戏</a>
                    <a href="#" class="tag">音乐</a>
                    <a href="#" class="tag">摄影</a>
                    <a href="#" class="tag">旅行</a>
                </div>
            </div>
        </aside>

        <!-- 主内容区 -->
        <main class="main-content">
            <!-- 竖向轮播图卡片 -->
            <div class="card comic-card">
                <div class="vertical-carousel">
                    <div class="vertical-slides">
                        <div class="vertical-slide">
                            <a href="https://blog.tengyuan.icu" class="vertical-blog-card" target="_blank">
                                <img class="lazy" data-original="https://yilx.net/static/img/lxbg.jpeg" alt="MC开服教程" src="https://api.yilx.net/image/lunbotu/6.jpg">
                                <div class="vertical-text-content">
                                    <div class="vertical-text-slide active">
                                        <p class="date">2025-04-21</p>
                                        <h2 class="title">标题1</h2>
                                        <p class="excerpt">描述</p>
                                    </div>
                                </div>
                            </a>
                        </div>
                        <div class="vertical-slide">
                            <a href="https://blog.tengyuan.icu" class="vertical-blog-card" target="_blank">
                                <img class="lazy" data-original="https://yilx.net/static/img/lxbg.jpeg" alt="使用/give获取特殊nbt物品" src="https://yilx.net/static/img/lxbg.jpeg">
                                <div class="vertical-text-content">
                                    <div class="vertical-text-slide">
                                        <p class="date">2025-4-18</p>
                                        <h2 class="title">标题2</h2>
                                        <p class="excerpt">描述</p>
                                    </div>
                                </div>
                            </a>
                        </div>
                        <div class="vertical-slide">
                            <a href="https://blog.tengyuan.icu" class="vertical-blog-card" target="_blank">
                                <img class="lazy" data-original="https://yilx.net/static/img/lxbg.jpeg" alt="标题3" src="http://localhost/static/img/tx.jpg">
                                <div class="vertical-text-content">
                                    <div class="vertical-text-slide">
                                        <p class="date">2025-5-1</p>
                                        <h2 class="title">标题3</h2>
                                        <p class="excerpt">描述</p>
                                    </div>
                                </div>
                            </a>
                        </div>
                    </div>
                    <div class="vertical-dots">
                        <button class="vertical-dot active"></button>
                        <button class="vertical-dot"></button>
                        <button class="vertical-dot"></button>
                    </div>
                </div>
            </div>

            <!-- 音乐播放器和个人空间并排 -->
            <div class="media-row">
                <!-- 音乐播放器 -->
                <div class="music-player-container comic-card">
                    <audio id="myAudio" src="https://api.yilx.net/music/Hyper-energetic-ACG"></audio>
                    <div class="music-player">
                        <div class="cover">
                            <img class="lazy" data-original="https://api.yilx.net/img/pm" alt="专辑封面" src="https://api.yilx.net/img/pm">
                        </div>
                        <div class="music-info">
                            <h3 class="music-title">随机音乐</h3>
                            <p class="music-artist">藤原的音乐推荐</p>
                            <div class="progress-container">
                                <div class="progress" id="progress"></div>
                            </div>
                            <div class="time-info">
                                <span id="current-time">0:00</span>
                                <span id="duration">0:00</span>
                            </div>
                            <div class="controls">
                                <button class="control-btn" id="prev-btn">
                                    <i class="fas fa-step-backward"></i>
                                </button>
                                <button class="play-pause-btn" id="play-btn">
                                    <span class="play-icon">
                                        <i class="fas fa-play"></i>
                                    </span>
                                    <span class="pause-icon">
                                        <i class="fas fa-pause"></i>
                                    </span>
                                </button>
                                <button class="control-btn" id="next-btn">
                                    <i class="fas fa-step-forward"></i>
                                </button>
                            </div>
                        </div>
                    </div>
                </div>

                <!-- 个人空间卡片 -->
                <a href="https://b23.tv/pDBTVlx" class="space-card comic-card" target="_blank">
                    <div class="space-content">
                        <h3 class="space-title">个人空间</h3>
                        <p class="space-desc">藤原的个人空间</p>
                        <span class="space-button">
                            前往空间
                            <i class="fas fa-arrow-right"></i>
                        </span>
                    </div>
                    <div class="space-image">
                        <img src="https://a.520gexing.com/uploads/allimg/2019032616/3mltnpfys55.jpg" alt="藤原的个人空间">
                    </div>
                </a>
            </div>

            <!-- 待办事项 -->
            <div class="card comic-card">
                <div class="card-title">
                    <i class="fas fa-tasks"></i> 待办事项
                </div>
                <ul class="todo-list" id="todoList">
                    <li class="todo-item">
                        <input type="checkbox" class="todo-checkbox" checked>
                        <span class="todo-text completed">完成首页设计</span>
                        <i class="fas fa-trash todo-delete"></i>
                    </li>
                    <li class="todo-item">
                        <input type="checkbox" class="todo-checkbox">
                        <span class="todo-text">添加音乐播放器</span>
                        <i class="fas fa-trash todo-delete"></i>
                    </li>
                    <li class="todo-item">
                        <input type="checkbox" class="todo-checkbox">
                        <span class="todo-text">优化移动端体验</span>
                        <i class="fas fa-trash todo-delete"></i>
                    </li>
                </ul>
                <div class="todo-add">
                    <input type="text" class="todo-input" placeholder="添加新任务...">
                    <button class="todo-submit">添加</button>
                </div>
            </div>

            <!-- API列表 -->
            <div class="api-list">
                <h2 class="card-title"><i class="fas fa-link"></i> 我的项目</h2>
                <div class="api-cards">
                    <a class="api-card comic-card" target="_blank" href="http://blog.tengyuan.icu">
                        <img class="lazy" data-original="https://api.yilx.net/img/pc" alt="" src="http://api.yilx.net/upload/1742118988976.jpg">
                        <div class="overlay">
                            <h3>博客</h3>
                            <p>记录摆烂日常</p>
                            <p>site</p>
                        </div>
                    </a>
                    <a class="api-card comic-card" target="_blank" href="https://api.yilx.net">
                        <img class="lazy" data-original="https://api.yilx.net/img/pc" alt="" src="https://api.yilx.net/img/pc">
                        <div class="overlay">
                            <h3>API站</h3>
                            <p>api站点/图床/统计</p>
                            <p>site</p>
                        </div>
                    </a>
                    <a class="api-card comic-card" target="_blank" href="http://wp.tengyuan.icu">
                        <img class="lazy" data-original="https://camo.githubusercontent.com/01f699b5dd28e3fd101d0381f0c7471ed5a08210713d7663f0ad493d966be453/68747470733a2f2f666173746c792e6a7364656c6976722e6e65742f67682f7661737473612f46696c65436f6465426f784056312e362f7374617469632f62616e6e6572732f696d675f312e706e67" alt="" src="http://api.yilx.net/upload/1742130278110.jpg">
                        <div class="overlay">
                            <h3>网盘</h3>
                            <p>开箱即用的文件快传系统</p>
                            <p>site</p>
                        </div>
                    </a>
                    <a class="api-card comic-card" target="_blank" href="http://game.tengyuan.icu">
                        <img class="lazy" data-original="http://static.1heron.com/douyou8/ad/174409477289445.jpg" alt="" src="http://api.yilx.net/upload/1743067883203.jpg">
                        <div class="overlay">
                            <h3>TENGYUANの游戏小站</h3>
                            <p>游戏盛宴,一键解锁</p>
                            <p>project</p>
                        </div>
                    </a>
                    <a class="api-card comic-card" target="_blank" href="http://tengyuan.icu">
                        <img class="lazy" data-original="https://api.yilx.net/img/pc" alt="" src="https://api.yilx.net/upload/1741001197606.jpg">
                        <div class="overlay">
                            <h3>TENGYUAN</h3>
                            <p>TENGYUAN</p>
                            <p>project</p>
                        </div>
                    </a>
                    <a class="api-card comic-card" target="_blank" href="https://tengyuan.icu">
                        <img class="lazy" data-original="https://api.yilx.net/img/pc" alt="" src="http://api.yilx.net/upload/1741769788550.jpg">
                        <div class="overlay">
                            <h3>TENGYUAN1</h3>
                            <p>TENGYUAN1</p>
                            <p>project</p>
                        </div>
                    </a>
                </div>
            </div>
        </main>

        <!-- 右侧边栏 -->
        <aside class="right-sidebar">
            <!-- 天气小部件 -->
            <div class="card comic-card">
                <div class="card-title">
                    <i class="fas fa-cloud-sun"></i> 天气
                </div>
                <div class="weather-widget">
                    <div class="weather-current">
                        <div class="weather-icon">
                            <i class="fas fa-sun"></i>
                        </div>
                        <div>
                            <div class="weather-temp">25°C</div>
                            <div class="weather-desc">晴朗</div>
                        </div>
                    </div>
                    <div class="weather-forecast">
                        <div class="weather-day">
                            <div>明天</div>
                            <div class="weather-day-icon">
                                <i class="fas fa-cloud-sun"></i>
                            </div>
                            <div class="weather-day-temp">23°C</div>
                        </div>
                        <div class="weather-day">
                            <div>后天</div>
                            <div class="weather-day-icon">
                                <i class="fas fa-cloud-rain"></i>
                            </div>
                            <div class="weather-day-temp">20°C</div>
                        </div>
                        <div class="weather-day">
                            <div>周日</div>
                            <div class="weather-day-icon">
                                <i class="fas fa-sun"></i>
                            </div>
                            <div class="weather-day-temp">26°C</div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- 公告栏 -->
            <div class="card comic-card">
                <div class="card-title">
                    <i class="fas fa-bullhorn"></i> 公告栏
                </div>
                <div class="content">
                    <center>
                        <b>--- 主域名 ---
                            <br>
                            <a target="_blank" rel="noopener" href="https://tengyuan.icu" title="此线路部署于腾讯云服务器" class="anno_content">
                                <font color="#000000">tengyuan.icu</font>
                            </a>&nbsp;|&nbsp;<a target="_blank" rel="noopener" href="https://tengyuan.tech" title="此线路部署于雨云服务器" class="anno_content">
                                <font color="#000000">tengyuan.tech</font>
                            </a>
                            <br>--- 备用域名 ---
                            <br>
                            <a target="_blank" rel="noopener" href="暂无" title="暂无" class="anno_content">
                                <font color="#000000">暂无</font>
                            </a>
                            <br>
                            <a target="_blank" rel="noopener" href="暂无" title="暂无" class="anno_content">
                                <font color="#000000">暂无</font>
                            </a>
                            <br>--- 网站安卓APP ---
                            <br>🍧<a target="_blank" rel="noopener" href="暂无下载链接" title="点这里可以下载网站的安卓APP" class="anno_content">
                                <font color="#000000">点此下载</font>
                            </a>🍧
                        </b>
                    </center>
                </div>
            </div>

            <!-- 赞赏码板块 -->
            <div class="card comic-card">
                <div class="card-title">
                    <i class="fas fa-heart"></i> 支持我们
                </div>
                <div class="donate-box">
                    <div class="donate-title">感谢您的支持</div>
                    <div class="donate-image">
                        <img src="https://bicool-user-assets--small-file.oss-rg-china-mainland.aliyuncs.com/b3ae0df4a91e6b70286a23e34cf7f61b.jpg" alt="赞赏码">
                    </div>
                    <div class="donate-desc">扫描二维码支持我们</div>
                </div>
            </div>

            <!-- 访客统计 -->
            <div class="card comic-card">
                <div class="card-title">
                    <i class="fas fa-chart-line"></i> 访客统计
                </div>
                <div class="content">
                    <div>本站总访客量:<strong>3253</strong>次</div>
                    <div>今日访客量:<strong>221</strong>次</div>
                    <div>项目/网站总数:<strong>6</strong></div>
                    <div>已经有<strong>22</strong>位小伙伴入驻本站啦!</div>
                </div>
                <div class="stats-chart">
                    <!-- 这里可以放置图表,实际项目中可以使用Chart.js等库 -->
                    <canvas id="visitorChart"></canvas>
                </div>
            </div>

            <!-- 最新评论 -->
            <div class="card comic-card">
                <div class="card-title">
                    <i class="fas fa-comments"></i> 最新评论
                </div>
                <div class="content">
                    <div>
                        <strong>张三</strong>: 网站设计很棒!
                        <br><small>2025-05-07</small>
                    </div>
                    <div>
                        <strong>李四</strong>: 音乐播放器很好用
                        <br><small>2025-05-06</small>
                    </div>
                    <div>
                        <strong>王五</strong>: 期待更多内容
                        <br><small>2025-05-05</small>
                    </div>
                </div>
            </div>
        </aside>
    </div>

    <!-- 页脚 -->
    <footer class="footer">
        <div class="footer-container">
            <p class="footer-text">© 2025 藤原の小站 - 保留所有权利</p>
            <p class="icp">
                ICP备案号:
                <a href="https://beian.miit.gov.cn/" target="_blank">待备案</a>
            </p>
        </div>
    </footer>

    <!-- 浮动按钮 -->
    <div class="float-button">
        <div class="upward" style="display: none;">
            <i class="fas fa-arrow-up"></i>
        </div>
    </div>

    <!-- FPS显示 -->
<div id="fpsDisplay" class="comic-fps">
    <div class="fps-bubble">
        <span class="fps-value">60</span>
        <span class="fps-status">超流畅!</span>
        <span class="fps-character">ヽ(•̀ω•́ )ゝ✧</span>
    </div>
</div>
      
    <script>
        // 音乐播放器控制
        const audio = document.getElementById('myAudio');
        const playPauseBtn = document.getElementById('play-btn');
        const prevBtn = document.getElementById('prev-btn');
        const nextBtn = document.getElementById('next-btn');
        const progress = document.getElementById('progress');
        const currentTimeEl = document.getElementById('current-time');
        const durationEl = document.getElementById('duration');
        
        // 更新进度条
        audio.addEventListener('timeupdate', () => {
            const { currentTime, duration } = audio;
            const progressPercent = (currentTime / duration) * 100;
            progress.style.width = `${progressPercent}%`;
            
            // 格式化时间显示
            const formatTime = (time) => {
                const minutes = Math.floor(time / 60);
                const seconds = Math.floor(time % 60);
                return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
            };
            
            currentTimeEl.textContent = formatTime(currentTime);
            if (duration) {
                durationEl.textContent = formatTime(duration);
            }
        });
        
        // 点击进度条跳转
        const progressContainer = document.querySelector('.progress-container');
        progressContainer.addEventListener('click', (e) => {
            const width = progressContainer.clientWidth;
            const clickX = e.offsetX;
            const duration = audio.duration;
            audio.currentTime = (clickX / width) * duration;
        });
        
        playPauseBtn.addEventListener('click', () => {
            if (audio.paused) {
                audio.play();
                playPauseBtn.classList.add('playing');
            } else {
                audio.pause();
                playPauseBtn.classList.remove('playing');
            }
        });
        
        // 上一首/下一首按钮
        prevBtn.addEventListener('click', () => {
            // 这里可以添加切换歌曲的逻辑
            alert('切换到上一首歌曲');
        });
        
        nextBtn.addEventListener('click', () => {
            // 这里可以添加切换歌曲的逻辑
            alert('切换到下一首歌曲');
        });
        
        // 歌曲结束时自动播放下一首
        audio.addEventListener('ended', () => {
            // 这里可以添加自动播放下一首的逻辑
            alert('歌曲播放结束,可以在这里添加自动播放下一首的逻辑');
        });
        
        // 返回顶部按钮
        const upwardBtn = document.querySelector('.upward');
        
        upwardBtn.addEventListener('click', () => {
            window.scrollTo({
                top: 0,
                behavior: 'smooth'
            });
        });
        
        window.addEventListener('scroll', () => {
            if (window.scrollY > 300) {
                upwardBtn.style.display = 'flex';
            } else {
                upwardBtn.style.display = 'none';
            }
        });
        
        // 图片懒加载
        document.addEventListener('DOMContentLoaded', function() {
            const lazyImages = [].slice.call(document.querySelectorAll('img.lazy'));
            
            if ('IntersectionObserver' in window) {
                let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
                    entries.forEach(function(entry) {
                        if (entry.isIntersecting) {
                            let lazyImage = entry.target;
                            lazyImage.src = lazyImage.dataset.original;
                            lazyImage.classList.remove('lazy');
                            lazyImageObserver.unobserve(lazyImage);
                        }
                    });
                });
                
                lazyImages.forEach(function(lazyImage) {
                    lazyImageObserver.observe(lazyImage);
                });
            } else {
                // 不支持IntersectionObserver的备用方案
                lazyImages.forEach(function(lazyImage) {
                    lazyImage.src = lazyImage.dataset.original;
                    lazyImage.classList.remove('lazy');
                });
            }
        });
        
        // 竖向轮播图控制
        let currentVerticalSlide = 0;
        const verticalSlides = document.querySelectorAll('.vertical-slide');
        const verticalTextSlides = document.querySelectorAll('.vertical-text-slide');
        const verticalDots = document.querySelectorAll('.vertical-dot');
        const verticalSlidesContainer = document.querySelector('.vertical-slides');
        
        function showVerticalSlide(n) {
            currentVerticalSlide = (n + verticalSlides.length) % verticalSlides.length;
            
            // 更新轮播图位置
            verticalSlidesContainer.style.transform = `translateY(-${currentVerticalSlide * 100}%)`;
            
            // 更新文本和指示点状态
            verticalTextSlides.forEach((slide, index) => {
                if(index === currentVerticalSlide) {
                    slide.classList.add('active');
                } else {
                    slide.classList.remove('active');
                }
            });
            
            verticalDots.forEach((dot, index) => {
                if(index === currentVerticalSlide) {
                    dot.classList.add('active');
                } else {
                    dot.classList.remove('active');
                }
            });
        }
        
        verticalDots.forEach((dot, index) => {
            dot.addEventListener('click', () => {
                showVerticalSlide(index);
            });
        });
        
        // 自动轮播
        let slideInterval = setInterval(() => {
            showVerticalSlide(currentVerticalSlide + 1);
        }, 5000);
        
        // 鼠标悬停时暂停轮播
        const verticalCarousel = document.querySelector('.vertical-carousel');
        verticalCarousel.addEventListener('mouseenter', () => {
            clearInterval(slideInterval);
        });
        
        verticalCarousel.addEventListener('mouseleave', () => {
            slideInterval = setInterval(() => {
                showVerticalSlide(currentVerticalSlide + 1);
            }, 5000);
        });
        
        showVerticalSlide(0);
        
        // 添加一些随机的漫画风格装饰点
        function addComicDots() {
            const colors = ['#ff4d4d', '#4dff4d', '#4d4dff', '#ffff4d'];
            
            for (let i = 0; i < 10; i++) {
                const dot = document.createElement('div');
                dot.className = 'comic-dot';
                dot.style.background = colors[Math.floor(Math.random() * colors.length)];
                dot.style.left = `${Math.random() * 100}%`;
                dot.style.top = `${Math.random() * 100}%`;
                dot.style.width = `${5 + Math.random() * 10}px`;
                dot.style.height = dot.style.width;
                document.body.appendChild(dot);
            }
        }
        
        // 页面加载完成后添加装饰点
        window.addEventListener('load', addComicDots);
        
        // 主题切换功能
        const themeToggle = document.getElementById('themeToggle');
        const body = document.body;
        
        // 检查本地存储中的主题设置
        const currentTheme = localStorage.getItem('theme') || 'light';
        if (currentTheme === 'dark') {
            body.classList.add('dark-mode');
            themeToggle.innerHTML = '<i class="fas fa-sun"></i>';
        }
        
        // 切换主题
        themeToggle.addEventListener('click', () => {
            body.classList.toggle('dark-mode');
            
            if (body.classList.contains('dark-mode')) {
                localStorage.setItem('theme', 'dark');
                themeToggle.innerHTML = '<i class="fas fa-sun"></i>';
            } else {
                localStorage.setItem('theme', 'light');
                themeToggle.innerHTML = '<i class="fas fa-moon"></i>';
            }
        });

        // 修改加载逻辑
        document.addEventListener('DOMContentLoaded', function() {
            // 创建季节元素
            createSeasonElements();
            
            // 预加载重要图片
            const preloadImages = [
                'https://a.520gexing.com/uploads/allimg/2019032616/3mltnpfys55.jpg',
                'https://api.yilx.net/image/lunbotu/6.jpg',
                'https://api.yilx.net/img/pm'
            ];
            
            let loadedImages = 0;
            
            function imageLoaded() {
                loadedImages++;
                if (loadedImages === preloadImages.length) {
                    completeLoading();
                }
            }
            
            preloadImages.forEach(src => {
                const img = new Image();
                img.src = src;
                img.onload = imageLoaded;
                img.onerror = imageLoaded; // 即使出错也继续
            });
            
            // 设置超时保证无论如何都会完成加载
            setTimeout(completeLoading, 3000);
        });
        
        function completeLoading() {
            // 移除loading类,显示内容
            document.body.classList.remove('loading');
            document.body.classList.add('loaded');
            
            // 淡出加载动画
            const loadingElement = document.querySelector('.tengyuan-loading');
            loadingElement.classList.add('hidden');
            
            // 动画结束后移除元素
            loadingElement.addEventListener('transitionend', function() {
                loadingElement.remove();
            });
        }

        // 季节SVG元素定义
        const seasonSVGs = {
            spring: [
                // 粉色樱花
                `<svg viewBox="0 0 100 100" width="30" height="30">
                    <path d="M50 20 Q60 0 70 20 T90 30 Q100 40 80 50 T70 70 Q60 90 50 70 T30 50 Q10 40 20 30 T30 20 Q40 0 50 20" 
                          fill="#FF9FF3"/>
                </svg>`,
                // 黄色小花
                `<svg viewBox="0 0 100 100" width="30" height="30">
                    <circle cx="50" cy="50" r="20" fill="#FECA57"/>
                    <circle cx="50" cy="30" r="8" fill="#FF9F43"/>
                    <circle cx="65" cy="40" r="8" fill="#FF9F43"/>
                    <circle cx="70" cy="60" r="8" fill="#FF9F43"/>
                    <circle cx="60" cy="75" r="8" fill="#FF9F43"/>
                    <circle cx="40" cy="75" r="8" fill="#FF9F43"/>
                    <circle cx="30" cy="60" r="8" fill="#FF9F43"/>
                    <circle cx="35" cy="40" r="8" fill="#FF9F43"/>
                </svg>`
            ],
            summer: [
                // 绿色树叶1
                `<svg viewBox="0 0 100 100" width="35" height="35">
                    <path d="M50 10 Q80 30 50 70 Q20 30 50 10" 
                          fill="#1DD1A1" stroke="#10AC84" stroke-width="2"/>
                </svg>`,
                // 绿色树叶2
                `<svg viewBox="0 0 100 100" width="35" height="35">
                    <path d="M50 10 L70 40 L50 70 L30 40 Z" 
                          fill="#1DD1A1" stroke="#10AC84" stroke-width="2"/>
                </svg>`
            ],
            autumn: [
                // 红色枫叶1
                `<svg viewBox="0 0 100 100" width="32" height="32">
                    <path d="M50 10 Q70 20 60 40 Q80 30 70 50 Q60 70 50 60 Q40 70 30 50 Q20 30 40 40 Q30 20 50 10" 
                          fill="#FF6B6B" stroke="#EE5253" stroke-width="2"/>
                </svg>`,
                // 红色枫叶2
                `<svg viewBox="0 0 100 100" width="32" height="32">
                    <path d="M50 10 L60 30 L80 10 L70 40 L90 50 L70 60 L80 90 L60 70 L50 90 L40 70 L20 90 L30 60 L10 50 L30 40 L20 10 L40 30 Z" 
                          fill="#FF6B6B" stroke="#EE5253" stroke-width="2"/>
                </svg>`
            ],
            winter: [
                // 白色雪花1
                `<svg viewBox="0 0 100 100" width="28" height="28">
                    <path d="M50 10 L60 30 L80 30 L65 45 L75 65 L50 55 L25 65 L35 45 L20 30 L40 30 Z" 
                          fill="#C8D6E5" stroke="#FFFFFF" stroke-width="2"/>
                </svg>`,
                // 白色雪花2
                `<svg viewBox="0 0 100 100" width="28" height="28">
                    <path d="M50 10 L60 25 L75 15 L65 35 L90 35 L70 50 L90 65 L65 65 L75 85 L60 75 L50 90 L40 75 L25 85 L35 65 L10 65 L30 50 L10 35 L35 35 L25 15 L40 25 Z" 
                          fill="#FFFFFF" stroke="#C8D6E5" stroke-width="1"/>
                </svg>`
            ]
        };

        function createSeasonElements() {
            const container = document.getElementById('season-elements-container');
            const now = new Date();
            const month = now.getMonth() + 1;
            let season, elementCount, elementOpacity;

            // 季节判定
            if (month >= 3 && month <= 5) { // 春 (3-5月)
                season = "spring";
                elementCount = 12;
                elementOpacity = 0.6;
            } else if (month >= 6 && month <= 8) { // 夏 (6-8月)
                season = "summer";
                elementCount = 10;
                elementOpacity = 0.7;
            } else if (month >= 9 && month <= 11) { // 秋 (9-11月)
                season = "autumn";
                elementCount = 15;
                elementOpacity = 0.65;
            } else { // 冬 (12-2月)
                season = "winter";
                elementCount = 18;
                elementOpacity = 0.75;
            }

            // 设置季节标识
            const seasonNames = {spring: "春", summer: "夏", autumn: "秋", winter: "冬"};
            document.getElementById('seasonIndicator').textContent = seasonNames[season];

            // 创建飘落元素
            for (let i = 0; i < elementCount; i++) {
                const element = document.createElement('div');
                element.className = 'season-element';
                
                // 随机选择当前季节的SVG
                const svgIndex = Math.floor(Math.random() * seasonSVGs[season].length);
                element.innerHTML = seasonSVGs[season][svgIndex];
                
                // 设置随机位置和动画参数
                const startX = Math.random() * 100;
                const randomX = (Math.random() * 30) - 15; // -15px 到 15px 之间的随机偏移
                
                element.style.left = `${startX}vw`;
                element.style.setProperty('--start-x', `${(Math.random() * 15) - 7.5}px`);
                element.style.setProperty('--random-x', `${randomX}px`);
                element.style.setProperty('--element-opacity', elementOpacity);
                element.style.animationDuration = `${(Math.random() * 6) + 6}s`; // 6-12秒
                element.style.animationDelay = `${Math.random() * 3}s`; // 0-3秒延迟
                
                container.appendChild(element);
            }
        }

        // 页面加载完成后执行
        window.addEventListener('load', function() {
            createSeasonElements();

            // 2秒后移除加载动画
            setTimeout(() => {
                const loadingElement = document.querySelector('.tengyuan-loading');
                loadingElement.style.animation = 'fadeIn 0.4s ease-out reverse forwards';

                setTimeout(() => {
                    loadingElement.remove();
                }, 400);
            }, 2000);
        });

 // 更新FPS监控代码
(function() {
    const fpsDisplay = document.getElementById('fpsDisplay');
    const fpsValue = fpsDisplay.querySelector('.fps-value');
    const fpsStatus = fpsDisplay.querySelector('.fps-status');
    const fpsCharacter = fpsDisplay.querySelector('.fps-character');
    
    let lastTime = performance.now();
    let frameCount = 0;
    let animationFrameId;
    let lastFps = 60;

    // 角色表情集合
    const characters = {
        excellent: ["ヽ(•̀ω•́ )ゝ✧", "(๑•̀ㅂ•́)و✧", "٩(◕‿◕。)۶"],
        good: ["( ̄ω ̄)", "(`・ω・´)", "( ̄︶ ̄)↗"],
        normal: ["(´・_・`)", "( ˘・_・˘ )", "(;一_一)"],
        low: ["(╥﹏╥)", "(´;ω;`)", "(>_<)"],
        critical: ["(゚Д゚≡゚Д゚)", "(╯°□°)╯︵ ┻━┻", "Σ(°△°|||)︴"]
    };

    function updateFPS() {
        const now = performance.now();
        frameCount++;
        
        if (now - lastTime >= 1000) {
            const fps = Math.round(frameCount * 1000 / (now - lastTime));
            lastFps = fps;
            
            // 状态分类
            let status = '', statusClass = '', character = '';
            if (fps >= 55) {
                status = '超流畅!';
                statusClass = 'excellent';
                character = characters.excellent[Math.floor(Math.random() * characters.excellent.length)];
            } else if (fps >= 45) {
                status = '流畅~';
                statusClass = 'good';
                character = characters.good[Math.floor(Math.random() * characters.good.length)];
            } else if (fps >= 30) {
                status = '一般般';
                statusClass = 'normal';
                character = characters.normal[Math.floor(Math.random() * characters.normal.length)];
            } else if (fps >= 15) {
                status = '卡卡哒';
                statusClass = 'low';
                character = characters.low[Math.floor(Math.random() * characters.low.length)];
            } else {
                status = '要崩溃!';
                statusClass = 'critical';
                character = characters.critical[Math.floor(Math.random() * characters.critical.length)];
            }
            
            // 更新显示
            fpsValue.textContent = fps;
            fpsStatus.textContent = status;
            fpsCharacter.textContent = character;
            
            // 更新状态类
            fpsDisplay.className = 'comic-fps ' + statusClass;
            
            frameCount = 0;
            lastTime = now;
        }
        
        animationFrameId = requestAnimationFrame(updateFPS);
    }

    // 心跳动画
    setInterval(() => {
        if (lastFps >= 30) {
            fpsCharacter.style.transform = 'translateY(0px)';
            setTimeout(() => {
                fpsCharacter.style.transform = 'translateY(2px)';
            }, 100);
        }
    }, 3000);

    updateFPS();
    
    document.addEventListener('visibilitychange', () => {
        if (document.hidden) {
            cancelAnimationFrame(animationFrameId);
        } else {
            lastTime = performance.now();
            frameCount = 0;
            updateFPS();
        }
    });
})();

        // 日历功能
        function renderCalendar(year, month) {
            const calendarDays = document.getElementById('calendarDays');
            const calendarMonth = document.getElementById('calendarMonth');
            
            // 设置月份标题
            const monthNames = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"];
            calendarMonth.textContent = `${year}年 ${monthNames[month]}`;
            
            // 获取当月第一天和最后一天
            const firstDay = new Date(year, month, 1);
            const lastDay = new Date(year, month + 1, 0);
            
            // 获取当月天数
            const daysInMonth = lastDay.getDate();
            
            // 获取当月第一天是星期几 (0-6, 0是星期日)
            const firstDayOfWeek = firstDay.getDay();
            
            // 获取上个月最后几天
            const prevMonthLastDay = new Date(year, month, 0).getDate();
            
            // 清空日历
            calendarDays.innerHTML = '';
            
            // 添加上个月的几天
            for (let i = firstDayOfWeek - 1; i >= 0; i--) {
                const dayElement = document.createElement('div');
                dayElement.className = 'calendar-day other-month';
                dayElement.textContent = prevMonthLastDay - i;
                calendarDays.appendChild(dayElement);
            }
            
            // 添加当月天数
            const today = new Date();
            for (let i = 1; i <= daysInMonth; i++) {
                const dayElement = document.createElement('div');
                dayElement.className = 'calendar-day';
                dayElement.textContent = i;
                
                // 标记今天
                if (year === today.getFullYear() && month === today.getMonth() && i === today.getDate()) {
                    dayElement.classList.add('today');
                }
                
                calendarDays.appendChild(dayElement);
            }
            
            // 添加下个月的前几天
            const nextMonthDays = 42 - (firstDayOfWeek + daysInMonth); // 6行x7天=42格
            for (let i = 1; i <= nextMonthDays; i++) {
                const dayElement = document.createElement('div');
                dayElement.className = 'calendar-day other-month';
                dayElement.textContent = i;
                calendarDays.appendChild(dayElement);
            }
        }
        
        // 初始化日历
        let currentDate = new Date();
        let currentYear = currentDate.getFullYear();
        let currentMonth = currentDate.getMonth();
        
        renderCalendar(currentYear, currentMonth);
        
        // 日历导航按钮
        document.getElementById('calendarPrev').addEventListener('click', () => {
            currentMonth--;
            if (currentMonth < 0) {
                currentMonth = 11;
                currentYear--;
            }
            renderCalendar(currentYear, currentMonth);
        });
        
        document.getElementById('calendarNext').addEventListener('click', () => {
            currentMonth++;
            if (currentMonth > 11) {
                currentMonth = 0;
                currentYear++;
            }
            renderCalendar(currentYear, currentMonth);
        });

      
        // 待办事项功能
        const todoList = document.getElementById('todoList');
        const todoInput = document.querySelector('.todo-input');
        const todoSubmit = document.querySelector('.todo-submit');
        
        // 添加新任务
        function addTodoItem(text, completed = false) {
            const li = document.createElement('li');
            li.className = 'todo-item';
            
            li.innerHTML = `
                <input type="checkbox" class="todo-checkbox" ${completed ? 'checked' : ''}>
                <span class="todo-text ${completed ? 'completed' : ''}">${text}</span>
                <i class="fas fa-trash todo-delete"></i>
            `;
            
            // 添加事件监听器
            const checkbox = li.querySelector('.todo-checkbox');
            const deleteBtn = li.querySelector('.todo-delete');
            
            checkbox.addEventListener('change', function() {
                const textElement = this.nextElementSibling;
                textElement.classList.toggle('completed', this.checked);
                saveTodos();
            });
            
            deleteBtn.addEventListener('click', function() {
                li.remove();
                saveTodos();
            });
            
            todoList.appendChild(li);
        }
        
        // 保存待办事项到本地存储
        function saveTodos() {
            const todos = [];
            document.querySelectorAll('.todo-item').forEach(item => {
                todos.push({
                    text: item.querySelector('.todo-text').textContent,
                    completed: item.querySelector('.todo-checkbox').checked
                });
            });
            localStorage.setItem('todos', JSON.stringify(todos));
        }
        
        // 从本地存储加载待办事项
        function loadTodos() {
            const todos = JSON.parse(localStorage.getItem('todos')) || [];
            todos.forEach(todo => {
                addTodoItem(todo.text, todo.completed);
            });
        }
        
        // 添加新任务
        todoSubmit.addEventListener('click', function() {
            const text = todoInput.value.trim();
            if (text) {
                addTodoItem(text);
                todoInput.value = '';
                saveTodos();
            }
        });
        
        // 按Enter键添加任务
        todoInput.addEventListener('keypress', function(e) {
            if (e.key === 'Enter') {
                todoSubmit.click();
            }
        });
        
        // 初始化加载待办事项
        loadTodos();

        // 模拟访客统计图表
        function initVisitorChart() {
            const canvas = document.getElementById('visitorChart');
            if (!canvas) return;
            
            const ctx = canvas.getContext('2d');
            canvas.width = canvas.parentElement.offsetWidth;
            canvas.height = canvas.parentElement.offsetHeight;
            
            // 模拟数据
            const labels = ['1日', '5日', '10日', '15日', '20日', '25日', '30日'];
            const data = [50, 120, 80, 150, 200, 180, 220];
            
            // 绘制图表
            ctx.fillStyle = 'rgba(255, 77, 77, 0.2)';
            ctx.strokeStyle = 'rgba(255, 77, 77, 1)';
            ctx.lineWidth = 2;
            
            const maxValue = Math.max(...data);
            const scaleY = canvas.height / maxValue;
            const stepX = canvas.width / (labels.length - 1);
            
            ctx.beginPath();
            ctx.moveTo(0, canvas.height - data[0] * scaleY);
            
            for (let i = 1; i < data.length; i++) {
                const x = i * stepX;
                const y = canvas.height - data[i] * scaleY;
                ctx.lineTo(x, y);
            }
            
            ctx.stroke();
            
            // 填充区域
            ctx.lineTo(canvas.width, canvas.height);
            ctx.lineTo(0, canvas.height);
            ctx.closePath();
            ctx.fill();
            
            // 绘制数据点
            ctx.fillStyle = 'rgba(255, 77, 77, 1)';
            for (let i = 0; i < data.length; i++) {
                const x = i * stepX;
                const y = canvas.height - data[i] * scaleY;
                ctx.beginPath();
                ctx.arc(x, y, 4, 0, Math.PI * 2);
                ctx.fill();
            }
        }
        
        // 初始化图表
        window.addEventListener('load', initVisitorChart);
        window.addEventListener('resize', initVisitorChart);
    </script>
</body>
</html>
        
预览
控制台