<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://about-server.tomnook.top/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TomNook</id>
	<title>About-Server - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="http://about-server.tomnook.top/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TomNook"/>
	<link rel="alternate" type="text/html" href="http://about-server.tomnook.top/index.php?title=%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/TomNook"/>
	<updated>2026-06-26T09:26:26Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://about-server.tomnook.top/index.php?title=1&amp;diff=2</id>
		<title>1</title>
		<link rel="alternate" type="text/html" href="http://about-server.tomnook.top/index.php?title=1&amp;diff=2"/>
		<updated>2026-04-27T15:57:54Z</updated>

		<summary type="html">&lt;p&gt;TomNook：​创建页面，内容为“&amp;lt;!DOCTYPE html&amp;gt; &amp;lt;html lang=&amp;quot;zh-CN&amp;quot;&amp;gt; &amp;lt;head&amp;gt;     &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;     &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;     &amp;lt;title&amp;gt;服务器详情&amp;lt;/title&amp;gt;     &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css&amp;quot;&amp;gt;     &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&amp;amp;display=swap&amp;quot;&amp;gt;     &amp;lt;script src=&amp;quot;https://html2canvas.hertzen.com/dist/htm…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;zh-CN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;服务器详情&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&amp;amp;display=swap&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://html2canvas.hertzen.com/dist/html2canvas.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;style&amp;gt;&lt;br /&gt;
        /* ========== 以下样式与原文件完全一致，无任何修改 ========== */&lt;br /&gt;
        * {&lt;br /&gt;
            margin: 0;&lt;br /&gt;
            padding: 0;&lt;br /&gt;
            box-sizing: border-box;&lt;br /&gt;
            font-family: &#039;Noto Sans SC&#039;, &#039;Segoe UI&#039;, &#039;Microsoft YaHei&#039;, sans-serif;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        body {&lt;br /&gt;
            background: linear-gradient(135deg, #0f1a3d, #1c2e50);&lt;br /&gt;
            color: #333;&lt;br /&gt;
            min-height: 100vh;&lt;br /&gt;
            padding: 20px;&lt;br /&gt;
            display: flex;&lt;br /&gt;
            flex-direction: column;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .container {&lt;br /&gt;
            width: 100%;&lt;br /&gt;
            max-width: 1200px;&lt;br /&gt;
            background: white;&lt;br /&gt;
            border-radius: 20px;&lt;br /&gt;
            box-shadow: 0 15px 40px rgba(0, 0, 0, 0.5);&lt;br /&gt;
            overflow: hidden;&lt;br /&gt;
            margin: 20px 0;&lt;br /&gt;
            position: relative;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        header {&lt;br /&gt;
            background: linear-gradient(90deg, #1a5e1f, #2e7d32);&lt;br /&gt;
            color: white;&lt;br /&gt;
            padding: 30px 40px;&lt;br /&gt;
            text-align: center;&lt;br /&gt;
            position: relative;&lt;br /&gt;
            overflow: hidden;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        header::before {&lt;br /&gt;
            content: &amp;quot;&amp;quot;;&lt;br /&gt;
            position: absolute;&lt;br /&gt;
            top: -50%;&lt;br /&gt;
            left: -50%;&lt;br /&gt;
            width: 200%;&lt;br /&gt;
            height: 200%;&lt;br /&gt;
            background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);&lt;br /&gt;
            transform: rotate(30deg);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        h1 {&lt;br /&gt;
            font-size: 2.8rem;&lt;br /&gt;
            margin-bottom: 10px;&lt;br /&gt;
            letter-spacing: 1px;&lt;br /&gt;
            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);&lt;br /&gt;
            position: relative;&lt;br /&gt;
            font-weight: 700;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .subtitle {&lt;br /&gt;
            font-size: 1.2rem;&lt;br /&gt;
            opacity: 0.9;&lt;br /&gt;
            margin-top: 10px;&lt;br /&gt;
            position: relative;&lt;br /&gt;
            font-weight: 400;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .content {&lt;br /&gt;
            padding: 30px 40px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .controls {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            justify-content: space-between;&lt;br /&gt;
            margin-bottom: 20px;&lt;br /&gt;
            padding: 15px 20px;&lt;br /&gt;
            background: #f8f9fa;&lt;br /&gt;
            border-radius: 15px;&lt;br /&gt;
            box-shadow: 0 4px 12px rgba(0,0,0,0.05);&lt;br /&gt;
            flex-wrap: wrap;&lt;br /&gt;
            gap: 15px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .controls-right {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            gap: 15px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-id {&lt;br /&gt;
            position: absolute;&lt;br /&gt;
            top: 50%;&lt;br /&gt;
            transform: translateY(-10px);&lt;br /&gt;
            left: 10px;&lt;br /&gt;
            background: #2e7d32;&lt;br /&gt;
            color: white;&lt;br /&gt;
            width: 30px;&lt;br /&gt;
            height: 30px;&lt;br /&gt;
            border-radius: 50%;&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            justify-content: center;&lt;br /&gt;
            font-weight: bold;&lt;br /&gt;
            font-size: 0.9rem;&lt;br /&gt;
            z-index: 1;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.closed .server-id {&lt;br /&gt;
            background: #e74c3c;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.today-closed .server-id {&lt;br /&gt;
            background: #f39c12;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.upcoming .server-id {&lt;br /&gt;
            background: #9b59b6;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-controls {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            gap: 15px;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            flex-wrap: wrap;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-label {&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
            color: #555;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-select {&lt;br /&gt;
            padding: 10px 20px;&lt;br /&gt;
            border-radius: 50px;&lt;br /&gt;
            border: 2px solid #e0e0e0;&lt;br /&gt;
            background: white;&lt;br /&gt;
            font-size: 1rem;&lt;br /&gt;
            cursor: pointer;&lt;br /&gt;
            outline: none;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
            min-width: 180px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-select:focus {&lt;br /&gt;
            border-color: #2e7d32;&lt;br /&gt;
            box-shadow: 0 0 0 3px rgba(46, 125, 50, 0.2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .download-all-btn {&lt;br /&gt;
            background: linear-gradient(90deg, #3498db, #2980b9);&lt;br /&gt;
            color: white;&lt;br /&gt;
            border: none;&lt;br /&gt;
            padding: 12px 30px;&lt;br /&gt;
            font-size: 1.1rem;&lt;br /&gt;
            border-radius: 50px;&lt;br /&gt;
            cursor: pointer;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            gap: 10px;&lt;br /&gt;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .download-all-btn:hover {&lt;br /&gt;
            transform: translateY(-3px);&lt;br /&gt;
            box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3);&lt;br /&gt;
            background: linear-gradient(90deg, #2980b9, #2573a7);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card {&lt;br /&gt;
            background: white;&lt;br /&gt;
            border-radius: 15px;&lt;br /&gt;
            box-shadow: 0 5px 20px rgba(0, 0, 0, 0.08);&lt;br /&gt;
            padding: 25px;&lt;br /&gt;
            margin-bottom: 30px;&lt;br /&gt;
            border-left: 5px solid #2e7d32;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
            position: relative;&lt;br /&gt;
            overflow: hidden;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.closed {&lt;br /&gt;
            border-left: 5px solid #e74c3c;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.today-closed {&lt;br /&gt;
            border-left: 5px solid #f39c12;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.upcoming {&lt;br /&gt;
            border-left: 5px solid #9b59b6;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card:hover {&lt;br /&gt;
            transform: translateY(-5px);&lt;br /&gt;
            box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card::before {&lt;br /&gt;
            content: &#039;&#039;;&lt;br /&gt;
            position: absolute;&lt;br /&gt;
            top: 0;&lt;br /&gt;
            left: 0;&lt;br /&gt;
            width: 100%;&lt;br /&gt;
            height: 5px;&lt;br /&gt;
            background: linear-gradient(90deg, #2e7d32, #1a5e1f);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.closed::before {&lt;br /&gt;
            background: linear-gradient(90deg, #e74c3c, #c0392b);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.today-closed::before {&lt;br /&gt;
            background: linear-gradient(90deg, #f39c12, #e67e22);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.upcoming::before {&lt;br /&gt;
            background: linear-gradient(90deg, #9b59b6, #8e44ad);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-title {&lt;br /&gt;
            color: #2e7d32;&lt;br /&gt;
            font-size: 1.8rem;&lt;br /&gt;
            margin-bottom: 15px;&lt;br /&gt;
            display: flex;&lt;br /&gt;
            justify-content: space-between;&lt;br /&gt;
            align-items: flex-start;&lt;br /&gt;
            position: relative;&lt;br /&gt;
            font-weight: 600;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        .server-title-content {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: flex-start;&lt;br /&gt;
            gap: 15px;&lt;br /&gt;
            flex: 1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        .server-name-container {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            flex-direction: row;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            gap: 8px;&lt;br /&gt;
            flex-wrap: wrap;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        .chinese-name {&lt;br /&gt;
            display: block;&lt;br /&gt;
            font-size: 1.8rem;&lt;br /&gt;
            color: inherit;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        .english-name {&lt;br /&gt;
            display: block;&lt;br /&gt;
            font-size: 1.1rem;&lt;br /&gt;
            color: #7f8c8d;&lt;br /&gt;
            font-weight: 400;&lt;br /&gt;
            margin-top: 1px;&lt;br /&gt;
            line-height: 0;&lt;br /&gt;
            width: 100%;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        .server-card.closed .server-title {&lt;br /&gt;
            color: #e74c3c;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.today-closed .server-title {&lt;br /&gt;
            color: #f39c12;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.upcoming .server-title {&lt;br /&gt;
            color: #9b59b6;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-title i {&lt;br /&gt;
            background: #e8f5e9;&lt;br /&gt;
            width: 50px;&lt;br /&gt;
            height: 50px;&lt;br /&gt;
            border-radius: 50%;&lt;br /&gt;
            display: flex !important;&lt;br /&gt;
            align-items: center !important;&lt;br /&gt;
            justify-content: center !important;&lt;br /&gt;
            font-size: 1.3rem;&lt;br /&gt;
            line-height: 1 !important;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.closed .server-title i {&lt;br /&gt;
            background: #ffebee;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.today-closed .server-title i {&lt;br /&gt;
            background: #fef5e7;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.upcoming .server-title i {&lt;br /&gt;
            background: #f5e9ff;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-info {&lt;br /&gt;
            display: grid;&lt;br /&gt;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));&lt;br /&gt;
            gap: 20px;&lt;br /&gt;
            margin-bottom: 20px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .info-item {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            flex-direction: column;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .info-label {&lt;br /&gt;
            font-weight: 600;&lt;br /&gt;
            color: #7f8c8d;&lt;br /&gt;
            font-size: 0.95rem;&lt;br /&gt;
            margin-bottom: 5px;&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            gap: 8px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .info-value {&lt;br /&gt;
            font-size: 1.15rem;&lt;br /&gt;
            color: #2c3e50;&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
            word-break: break-all;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .ip-address {&lt;br /&gt;
            font-family: monospace;&lt;br /&gt;
            background: #f8f9fa;&lt;br /&gt;
            padding: 10px 15px;&lt;br /&gt;
            border-radius: 8px;&lt;br /&gt;
            border: 1px solid #e0e0e0;&lt;br /&gt;
            color: #2e7d32;&lt;br /&gt;
            font-weight: 600;&lt;br /&gt;
            font-size: 1.1rem;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.closed .ip-address {&lt;br /&gt;
            color: #e74c3c;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.today-closed .ip-address {&lt;br /&gt;
            color: #f39c12;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-card.upcoming .ip-address {&lt;br /&gt;
            color: #9b59b6;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .description {&lt;br /&gt;
            background: #f8f9fa;&lt;br /&gt;
            border-left: 3px solid #3498db;&lt;br /&gt;
            padding: 18px;&lt;br /&gt;
            border-radius: 0 12px 12px 0;&lt;br /&gt;
            margin: 25px 0 15px;&lt;br /&gt;
            font-size: 1.1rem;&lt;br /&gt;
            line-height: 1.7;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .server-status {&lt;br /&gt;
            position: absolute;&lt;br /&gt;
            top: 25px;&lt;br /&gt;
            right: 25px;&lt;br /&gt;
            padding: 8px 20px;&lt;br /&gt;
            border-radius: 30px;&lt;br /&gt;
            font-weight: bold;&lt;br /&gt;
            font-size: 0.95rem;&lt;br /&gt;
            text-transform: uppercase;&lt;br /&gt;
            letter-spacing: 1px;&lt;br /&gt;
            box-shadow: 0 3px 8px rgba(0,0,0,0.1);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .status-open {&lt;br /&gt;
            background: #e8f5e9;&lt;br /&gt;
            color: #2e7d32;&lt;br /&gt;
            border: 1px solid #a5d6a7;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .status-closed {&lt;br /&gt;
            background: #ffebee;&lt;br /&gt;
            color: #e74c3c;&lt;br /&gt;
            border: 1px solid #ef9a9a;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .status-today-closed {&lt;br /&gt;
            background: #fef5e7;&lt;br /&gt;
            color: #f39c12;&lt;br /&gt;
            border: 1px solid #f8c471;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .status-upcoming {&lt;br /&gt;
            background: #f5e9ff;&lt;br /&gt;
            color: #9b59b6;&lt;br /&gt;
            border: 1px solid #d6b8f1;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .special-tag {&lt;br /&gt;
            background: #f39c12;&lt;br /&gt;
            color: white;&lt;br /&gt;
            padding: 4px 12px;&lt;br /&gt;
            border-radius: 30px;&lt;br /&gt;
            font-size: 0.9rem;&lt;br /&gt;
            display: inline-block;&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
            margin-left: 0;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        .server-card.upcoming .special-tag {&lt;br /&gt;
            background: #9b59b6;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .footer {&lt;br /&gt;
            background: #1c2e50;&lt;br /&gt;
            color: white;&lt;br /&gt;
            padding: 30px 40px;&lt;br /&gt;
            text-align: center;&lt;br /&gt;
            margin-top: 20px;&lt;br /&gt;
            width: 100%;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .footer-content {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            justify-content: space-between;&lt;br /&gt;
            flex-wrap: wrap;&lt;br /&gt;
            gap: 20px;&lt;br /&gt;
            width: 100%;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .footer-section {&lt;br /&gt;
            flex: 1;&lt;br /&gt;
            min-width: 200px;&lt;br /&gt;
            max-width: 350px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .footer-title {&lt;br /&gt;
            font-size: 1.3rem;&lt;br /&gt;
            margin-bottom: 15px;&lt;br /&gt;
            color: #ecf0f1;&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .footer-list {&lt;br /&gt;
            list-style: none;&lt;br /&gt;
            display: flex;&lt;br /&gt;
            flex-direction: column;&lt;br /&gt;
            flex-wrap: wrap;&lt;br /&gt;
            max-height: 180px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .footer-list li {&lt;br /&gt;
            margin-bottom: 10px;&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            gap: 10px;&lt;br /&gt;
            font-size: 1rem;&lt;br /&gt;
            min-width: 150px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .maintainers-list {&lt;br /&gt;
            display: grid;&lt;br /&gt;
            grid-template-rows: repeat(3, auto);&lt;br /&gt;
            grid-auto-flow: column;&lt;br /&gt;
            gap: 10px 30px;&lt;br /&gt;
            max-height: none;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        .maintainers-list li {&lt;br /&gt;
            margin-bottom: 0;&lt;br /&gt;
            min-width: 150px;&lt;br /&gt;
        }&lt;br /&gt;
          &lt;br /&gt;
        .footer-bottom {&lt;br /&gt;
            margin-top: 30px;&lt;br /&gt;
            padding-top: 20px;&lt;br /&gt;
            border-top: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
            font-size: 0.95rem;&lt;br /&gt;
            opacity: 0.8;&lt;br /&gt;
            width: 100%;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .stats-bar {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            justify-content: space-around;&lt;br /&gt;
            background: #f8f9fa;&lt;br /&gt;
            padding: 18px;&lt;br /&gt;
            border-radius: 15px;&lt;br /&gt;
            margin: 25px 0;&lt;br /&gt;
            border: 1px solid #e0e0e0;&lt;br /&gt;
            box-shadow: 0 4px 12px rgba(0,0,0,0.05);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .stat-item {&lt;br /&gt;
            text-align: center;&lt;br /&gt;
            padding: 10px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .stat-number {&lt;br /&gt;
            font-size: 2.2rem;&lt;br /&gt;
            font-weight: 700;&lt;br /&gt;
            color: #2e7d32;&lt;br /&gt;
            line-height: 1;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .closed-count {&lt;br /&gt;
            color: #e74c3c;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .today-closed-count {&lt;br /&gt;
            color: #f39c12;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .upcoming-count {&lt;br /&gt;
            color: #9b59b6;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .stat-label {&lt;br /&gt;
            font-size: 1rem;&lt;br /&gt;
            color: #7f8c8d;&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .filter-controls {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            justify-content: flex-start;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            gap: 15px;&lt;br /&gt;
            margin-bottom: 20px;&lt;br /&gt;
            flex-wrap: wrap;&lt;br /&gt;
            padding: 15px;&lt;br /&gt;
            background: #f8f9fa;&lt;br /&gt;
            border-radius: 15px;&lt;br /&gt;
            box-shadow: 0 4px 12px rgba(0,0,0,0.05);&lt;br /&gt;
            position: relative;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .filter-label {&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
            color: #555;&lt;br /&gt;
            white-space: nowrap;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .settings-btn {&lt;br /&gt;
            background: #f8f9fa;&lt;br /&gt;
            border: 2px solid #e0e0e0;&lt;br /&gt;
            border-radius: 50%;&lt;br /&gt;
            width: 40px;&lt;br /&gt;
            height: 40px;&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            justify-content: center;&lt;br /&gt;
            cursor: pointer;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .settings-btn:hover {&lt;br /&gt;
            background: #e0e0e0;&lt;br /&gt;
            transform: rotate(30deg);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .language-toggle {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            background: #e8f5e9;&lt;br /&gt;
            border-radius: 50px;&lt;br /&gt;
            overflow: hidden;&lt;br /&gt;
            margin-top: 20px;&lt;br /&gt;
            border: 2px solid #e0e0e0;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .lang-btn {&lt;br /&gt;
            padding: 10px 25px;&lt;br /&gt;
            border: none;&lt;br /&gt;
            background: transparent;&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
            cursor: pointer;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
            font-size: 1rem;&lt;br /&gt;
            flex: 1;&lt;br /&gt;
            text-align: center;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .lang-btn.active {&lt;br /&gt;
            background: #2e7d32;&lt;br /&gt;
            color: white;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .download-progress {&lt;br /&gt;
            display: none;&lt;br /&gt;
            text-align: center;&lt;br /&gt;
            padding: 15px;&lt;br /&gt;
            background: #e8f5e9;&lt;br /&gt;
            border-radius: 10px;&lt;br /&gt;
            margin-top: 20px;&lt;br /&gt;
            z-index: 1001;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .progress-bar {&lt;br /&gt;
            height: 8px;&lt;br /&gt;
            background: #e0e0e0;&lt;br /&gt;
            border-radius: 4px;&lt;br /&gt;
            margin-top: 10px;&lt;br /&gt;
            overflow: hidden;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .progress-fill {&lt;br /&gt;
            height: 100%;&lt;br /&gt;
            background: #2e7d32;&lt;br /&gt;
            width: 0%;&lt;br /&gt;
            transition: width 0.3s ease;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .header-icons {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            justify-content: center;&lt;br /&gt;
            gap: 20px;&lt;br /&gt;
            margin-top: 15px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .icon-circle {&lt;br /&gt;
            width: 65px;&lt;br /&gt;
            height: 65px;&lt;br /&gt;
            border-radius: 50%;&lt;br /&gt;
            background: rgba(255, 255, 255, 0.2);&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            justify-content: center;&lt;br /&gt;
            font-size: 2rem;&lt;br /&gt;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .download-modal {&lt;br /&gt;
            display: none;&lt;br /&gt;
            position: fixed;&lt;br /&gt;
            top: 0;&lt;br /&gt;
            left: 0;&lt;br /&gt;
            width: 100%;&lt;br /&gt;
            height: 100%;&lt;br /&gt;
            background: rgba(0,0,0,0.7);&lt;br /&gt;
            z-index: 1000;&lt;br /&gt;
            justify-content: center;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .modal-content {&lt;br /&gt;
            background: white;&lt;br /&gt;
            border-radius: 20px;&lt;br /&gt;
            width: 90%;&lt;br /&gt;
            max-width: 500px;&lt;br /&gt;
            overflow: hidden;&lt;br /&gt;
            box-shadow: 0 25px 50px rgba(0,0,0,0.3);&lt;br /&gt;
            transform: translateY(20px);&lt;br /&gt;
            opacity: 0;&lt;br /&gt;
            transition: all 0.4s ease;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .modal-header {&lt;br /&gt;
            background: linear-gradient(90deg, #3498db, #2980b9);&lt;br /&gt;
            color: white;&lt;br /&gt;
            padding: 25px;&lt;br /&gt;
            text-align: center;&lt;br /&gt;
            position: relative;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .modal-title {&lt;br /&gt;
            font-size: 1.8rem;&lt;br /&gt;
            font-weight: 600;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .modal-body {&lt;br /&gt;
            padding: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .res-options {&lt;br /&gt;
            display: grid;&lt;br /&gt;
            grid-template-columns: repeat(2, 1fr);&lt;br /&gt;
            gap: 20px;&lt;br /&gt;
            margin-bottom: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .res-option {&lt;br /&gt;
            border: 2px solid #e0e0e0;&lt;br /&gt;
            border-radius: 15px;&lt;br /&gt;
            padding: 20px;&lt;br /&gt;
            text-align: center;&lt;br /&gt;
            cursor: pointer;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .res-option:hover {&lt;br /&gt;
            border-color: #3498db;&lt;br /&gt;
            box-shadow: 0 5px 15px rgba(52, 152, 219, 0.2);&lt;br /&gt;
            transform: translateY(-5px);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .res-option.selected {&lt;br /&gt;
            border-color: #3498db;&lt;br /&gt;
            background: #e8f4fc;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .res-percent {&lt;br /&gt;
            font-size: 1.8rem;&lt;br /&gt;
            font-weight: 700;&lt;br /&gt;
            color: #3498db;&lt;br /&gt;
            margin-bottom: 5px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .res-label {&lt;br /&gt;
            font-size: 1rem;&lt;br /&gt;
            color: #7f8c8d;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .modal-footer {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            justify-content: flex-end;&lt;br /&gt;
            padding: 20px 30px;&lt;br /&gt;
            background: #f8f9fa;&lt;br /&gt;
            border-top: 1px solid #e0e0e0;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .modal-btn {&lt;br /&gt;
            padding: 12px 30px;&lt;br /&gt;
            border-radius: 50px;&lt;br /&gt;
            border: none;&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
            font-size: 1.1rem;&lt;br /&gt;
            cursor: pointer;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .cancel-btn {&lt;br /&gt;
            background: #f8f9fa;&lt;br /&gt;
            color: #7f8c8d;&lt;br /&gt;
            margin-right: 15px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .cancel-btn:hover {&lt;br /&gt;
            background: #e0e0e0;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .download-btn {&lt;br /&gt;
            background: linear-gradient(90deg, #2ecc71, #27ae60);&lt;br /&gt;
            color: white;&lt;br /&gt;
            box-shadow: 0 5px 15px rgba(46, 204, 113, 0.3);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .download-btn:hover {&lt;br /&gt;
            background: linear-gradient(90deg, #27ae60, #219653);&lt;br /&gt;
            transform: translateY(-3px);&lt;br /&gt;
            box-shadow: 0 8px 20px rgba(46, 204, 113, 0.4);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-direction {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            justify-content: center;&lt;br /&gt;
            width: 40px;&lt;br /&gt;
            height: 40px;&lt;br /&gt;
            border-radius: 50%;&lt;br /&gt;
            background: #e8f5e9;&lt;br /&gt;
            border: 2px solid #e0e0e0;&lt;br /&gt;
            cursor: pointer;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-direction:hover {&lt;br /&gt;
            background: #d5e8d6;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-direction.desc i {&lt;br /&gt;
            transform: rotate(180deg);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-feedback {&lt;br /&gt;
            position: fixed;&lt;br /&gt;
            top: 20px;&lt;br /&gt;
            left: 50%;&lt;br /&gt;
            transform: translateX(-50%);&lt;br /&gt;
            color: white;&lt;br /&gt;
            padding: 12px 25px;&lt;br /&gt;
            border-radius: 30px;&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
            box-shadow: 0 5px 15px rgba(0,0,0,0.2);&lt;br /&gt;
            z-index: 3000;&lt;br /&gt;
            opacity: 0;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
            background: rgba(0,0,0,0.7);&lt;br /&gt;
            backdrop-filter: blur(5px);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-feedback.show {&lt;br /&gt;
            opacity: 1;&lt;br /&gt;
            transform: translateX(-50%) translateY(10px);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .settings-modal {&lt;br /&gt;
            display: none;&lt;br /&gt;
            position: fixed;&lt;br /&gt;
            top: 0;&lt;br /&gt;
            left: 0;&lt;br /&gt;
            width: 100%;&lt;br /&gt;
            height: 100%;&lt;br /&gt;
            background: rgba(0,0,0,0.5);&lt;br /&gt;
            z-index: 1000;&lt;br /&gt;
            backdrop-filter: blur(5px);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .settings-content {&lt;br /&gt;
            position: absolute;&lt;br /&gt;
            top: 50%;&lt;br /&gt;
            left: 50%;&lt;br /&gt;
            transform: translate(-50%, -50%);&lt;br /&gt;
            background: white;&lt;br /&gt;
            border-radius: 20px;&lt;br /&gt;
            padding: 30px;&lt;br /&gt;
            width: 90%;&lt;br /&gt;
            max-width: 500px;&lt;br /&gt;
            box-shadow: 0 25px 50px rgba(0,0,0,0.3);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .settings-header {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            justify-content: space-between;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            margin-bottom: 25px;&lt;br /&gt;
            padding-bottom: 15px;&lt;br /&gt;
            border-bottom: 2px solid #f0f0f0;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .settings-title {&lt;br /&gt;
            font-size: 1.5rem;&lt;br /&gt;
            font-weight: 700;&lt;br /&gt;
            color: #333;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .close-settings {&lt;br /&gt;
            background: none;&lt;br /&gt;
            border: none;&lt;br /&gt;
            font-size: 1.5rem;&lt;br /&gt;
            cursor: pointer;&lt;br /&gt;
            color: #666;&lt;br /&gt;
            padding: 5px;&lt;br /&gt;
            border-radius: 50%;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .close-settings:hover {&lt;br /&gt;
            background: #f0f0f0;&lt;br /&gt;
            color: #333;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .settings-section {&lt;br /&gt;
            margin-bottom: 25px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .settings-section h3 {&lt;br /&gt;
            margin-bottom: 15px;&lt;br /&gt;
            color: #555;&lt;br /&gt;
            font-weight: 600;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .setting-item {&lt;br /&gt;
            display: flex;&lt;br /&gt;
            justify-content: space-between;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            padding: 12px 0;&lt;br /&gt;
            border-bottom: 1px solid #f8f8f8;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .setting-label {&lt;br /&gt;
            font-weight: 500;&lt;br /&gt;
            color: #333;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .toggle-switch {&lt;br /&gt;
            width: 50px;&lt;br /&gt;
            height: 26px;&lt;br /&gt;
            background: #e0e0e0;&lt;br /&gt;
            border-radius: 13px;&lt;br /&gt;
            position: relative;&lt;br /&gt;
            cursor: pointer;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .toggle-switch::before {&lt;br /&gt;
            content: &#039;&#039;;&lt;br /&gt;
            position: absolute;&lt;br /&gt;
            width: 22px;&lt;br /&gt;
            height: 22px;&lt;br /&gt;
            background: white;&lt;br /&gt;
            border-radius: 50%;&lt;br /&gt;
            top: 2px;&lt;br /&gt;
            left: 2px;&lt;br /&gt;
            transition: all 0.3s ease;&lt;br /&gt;
            box-shadow: 0 2px 4px rgba(0,0,0,0.2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .toggle-switch.active {&lt;br /&gt;
            background: #2e7d32;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .toggle-switch.active::before {&lt;br /&gt;
            left: 26px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .sort-center-wrapper {&lt;br /&gt;
            position: absolute;&lt;br /&gt;
            left: 50%;&lt;br /&gt;
            transform: translateX(-50%);&lt;br /&gt;
            display: flex;&lt;br /&gt;
            align-items: center;&lt;br /&gt;
            gap: 10px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        .download-wrapper {&lt;br /&gt;
            margin-left: auto;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        @media (max-width: 900px) {&lt;br /&gt;
            .controls {&lt;br /&gt;
                flex-direction: column;&lt;br /&gt;
                gap: 20px;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .sort-center-wrapper {&lt;br /&gt;
                position: static;&lt;br /&gt;
                transform: none;&lt;br /&gt;
                margin: 10px 0;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .download-wrapper {&lt;br /&gt;
                margin-left: 0;&lt;br /&gt;
                width: 100%;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .download-all-btn {&lt;br /&gt;
                width: 100%;&lt;br /&gt;
                justify-content: center;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .footer-list {&lt;br /&gt;
                display: block;&lt;br /&gt;
                max-height: none;&lt;br /&gt;
            }&lt;br /&gt;
            .footer-list li {&lt;br /&gt;
                margin-bottom: 10px;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .maintainers-list {&lt;br /&gt;
                display: block;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            .maintainers-list li {&lt;br /&gt;
                margin-bottom: 10px;&lt;br /&gt;
            }&lt;br /&gt;
       }&lt;br /&gt;
        &lt;br /&gt;
        @media (max-width: 768px) {&lt;br /&gt;
            .filter-controls {&lt;br /&gt;
                flex-direction: column;&lt;br /&gt;
                align-items: stretch;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .sort-center-wrapper {&lt;br /&gt;
                flex-wrap: wrap;&lt;br /&gt;
                justify-content: center;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            h1 {&lt;br /&gt;
                font-size: 2.2rem;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .content {&lt;br /&gt;
                padding: 20px;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .server-info {&lt;br /&gt;
                grid-template-columns: 1fr;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .server-title {&lt;br /&gt;
                font-size: 1.5rem;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .server-status {&lt;br /&gt;
                position: static;&lt;br /&gt;
                margin-top: 10px;&lt;br /&gt;
                display: inline-block;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            .stats-bar {&lt;br /&gt;
                flex-direction: column;&lt;br /&gt;
                gap: 15px;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body class=&amp;quot;chinese&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot; id=&amp;quot;doc-content&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;&lt;br /&gt;
            &amp;lt;h1&amp;gt;服务器详情&amp;lt;/h1&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;subtitle&amp;quot;&amp;gt;本群服及附属群服&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;header-icons&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;icon-circle&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fas fa-server&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;icon-circle&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fas fa-train&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;icon-circle&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fas fa-network-wired&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/header&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- 筛选控制区域 --&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;filter-controls&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div style=&amp;quot;display: flex; align-items: center; gap: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;filter-label&amp;quot;&amp;gt;发起人:&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;select class=&amp;quot;sort-select&amp;quot; id=&amp;quot;founder-select&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;option value=&amp;quot;all&amp;quot;&amp;gt;全部&amp;lt;/option&amp;gt;&lt;br /&gt;
                &amp;lt;/select&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
                &amp;lt;div class=&amp;quot;settings-btn&amp;quot; id=&amp;quot;settings-btn&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;i class=&amp;quot;fas fa-cog&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;div class=&amp;quot;sort-center-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;sort-label&amp;quot;&amp;gt;排序方式:&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;select class=&amp;quot;sort-select&amp;quot; id=&amp;quot;sort-select&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;option value=&amp;quot;date&amp;quot;&amp;gt;开服日期 (默认)&amp;lt;/option&amp;gt;&lt;br /&gt;
                    &amp;lt;option value=&amp;quot;name&amp;quot;&amp;gt;服务器名称&amp;lt;/option&amp;gt;&lt;br /&gt;
                    &amp;lt;option value=&amp;quot;founder&amp;quot;&amp;gt;发起人&amp;lt;/option&amp;gt;&lt;br /&gt;
                    &amp;lt;option value=&amp;quot;size&amp;quot;&amp;gt;地图尺寸&amp;lt;/option&amp;gt;&lt;br /&gt;
                    &amp;lt;option value=&amp;quot;group&amp;quot;&amp;gt;所属群聊&amp;lt;/option&amp;gt;&lt;br /&gt;
                    &amp;lt;option value=&amp;quot;version&amp;quot;&amp;gt;版本号&amp;lt;/option&amp;gt;&lt;br /&gt;
                    &amp;lt;option value=&amp;quot;open-time&amp;quot;&amp;gt;开放时间&amp;lt;/option&amp;gt;&lt;br /&gt;
                &amp;lt;/select&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
                &amp;lt;div class=&amp;quot;sort-direction desc&amp;quot; id=&amp;quot;sort-direction&amp;quot; title=&amp;quot;切换排序方向&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;i class=&amp;quot;fas fa-arrow-down&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;div class=&amp;quot;download-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;button class=&amp;quot;download-all-btn&amp;quot; id=&amp;quot;download-btn&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;i class=&amp;quot;fas fa-download&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; 下载全图&lt;br /&gt;
                &amp;lt;/button&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- 设置模态框 --&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;settings-modal&amp;quot; id=&amp;quot;settingsModal&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;settings-content&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;settings-header&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;h2 class=&amp;quot;settings-title&amp;quot;&amp;gt;设置&amp;lt;/h2&amp;gt;&lt;br /&gt;
                    &amp;lt;button class=&amp;quot;close-settings&amp;quot; id=&amp;quot;closeSettings&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;i class=&amp;quot;fas fa-times&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
                    &amp;lt;/button&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;settings-section&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;h3&amp;gt;&amp;lt;i class=&amp;quot;fas fa-desktop&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; 显示设置&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;setting-item&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;span class=&amp;quot;setting-label&amp;quot;&amp;gt;隐藏已关闭服务器&amp;lt;/span&amp;gt;&lt;br /&gt;
                        &amp;lt;div class=&amp;quot;toggle-switch active&amp;quot; id=&amp;quot;hideClosedToggle&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;setting-item&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;span class=&amp;quot;setting-label&amp;quot;&amp;gt;隐藏即将开启服务器&amp;lt;/span&amp;gt;&lt;br /&gt;
                        &amp;lt;div class=&amp;quot;toggle-switch&amp;quot; id=&amp;quot;hideUpcomingToggle&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;settings-section&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;h3&amp;gt;&amp;lt;i class=&amp;quot;fas fa-info-circle&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; 关于&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;color: #666; line-height: 1.6;&amp;quot; id=&amp;quot;settings-about&amp;quot;&amp;gt;&lt;br /&gt;
                        服务器详情-v12.0&amp;lt;br&amp;gt;&lt;br /&gt;
                        更新时间: 2025.12.08&amp;lt;br&amp;gt;&lt;br /&gt;
                        制作人员: Hank&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;!-- 统计信息 --&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;stats-bar&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;stat-item&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;stat-number&amp;quot; id=&amp;quot;total-count&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;stat-label&amp;quot;&amp;gt;服务器总数&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;stat-item&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;stat-number&amp;quot; id=&amp;quot;configured-count&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;stat-label&amp;quot;&amp;gt;已配置服务器&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;stat-item&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;stat-number&amp;quot; id=&amp;quot;open-count&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;stat-label&amp;quot;&amp;gt;当前开放&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;stat-item&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;stat-number closed-count&amp;quot; id=&amp;quot;closed-count&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;stat-label&amp;quot;&amp;gt;永久关闭&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;stat-item&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;stat-number upcoming-count&amp;quot; id=&amp;quot;upcoming-count&amp;quot;&amp;gt;0&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;stat-label&amp;quot;&amp;gt;即将开启&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- 服务器列表 --&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;servers-container&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;div class=&amp;quot;footer&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;footer-content&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;footer-section&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;h3 class=&amp;quot;footer-title&amp;quot;&amp;gt;文档信息&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul class=&amp;quot;footer-list&amp;quot; id=&amp;quot;footer-info&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;footer-section&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;h3 class=&amp;quot;footer-title&amp;quot;&amp;gt;维护团队&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul class=&amp;quot;footer-list maintainers-list&amp;quot; id=&amp;quot;footer-maintainers&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;footer-section&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;h3 class=&amp;quot;footer-title&amp;quot;&amp;gt;注意事项&amp;lt;/h3&amp;gt;&lt;br /&gt;
                    &amp;lt;ul class=&amp;quot;footer-list&amp;quot; id=&amp;quot;footer-notes&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;footer-bottom&amp;quot; id=&amp;quot;footer-bottom&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;p&amp;gt;© 2026 服务器详情 | 群服及附属群服 | 公开参考版本&amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- 下载全图模态框 --&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;download-modal&amp;quot; id=&amp;quot;download-modal&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;modal-content&amp;quot; id=&amp;quot;modal-content&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;modal-header&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;h2 class=&amp;quot;modal-title&amp;quot;&amp;gt;下载全图&amp;lt;/h2&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;modal-body&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;p style=&amp;quot;margin-bottom: 25px; text-align: center; font-size: 1.1rem; color: #555;&amp;quot;&amp;gt;请选择下载分辨率：&amp;lt;/p&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;res-options&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;res-option&amp;quot; data-res=&amp;quot;100&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;res-percent&amp;quot;&amp;gt;100%&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;res-label&amp;quot;&amp;gt;标准分辨率&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;res-option&amp;quot; data-res=&amp;quot;200&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;res-percent&amp;quot;&amp;gt;200%&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;res-label&amp;quot;&amp;gt;高清质量&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;res-option&amp;quot; data-res=&amp;quot;400&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;res-percent&amp;quot;&amp;gt;400%&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;res-label&amp;quot;&amp;gt;超清质量&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;res-option&amp;quot; data-res=&amp;quot;600&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;res-percent&amp;quot;&amp;gt;600%&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;res-label&amp;quot;&amp;gt;最高质量&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;modal-footer&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;button class=&amp;quot;modal-btn cancel-btn&amp;quot; id=&amp;quot;cancel-download&amp;quot;&amp;gt;取消&amp;lt;/button&amp;gt;&lt;br /&gt;
                &amp;lt;button class=&amp;quot;modal-btn download-btn&amp;quot; id=&amp;quot;confirm-download&amp;quot;&amp;gt;下载&amp;lt;/button&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;download-progress&amp;quot; id=&amp;quot;download-progress&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;正在生成图片，请稍候...&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;progress-bar&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;progress-fill&amp;quot; id=&amp;quot;progress-fill&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;sort-feedback&amp;quot; id=&amp;quot;sortFeedback&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
        // ========== 全局变量 ==========&lt;br /&gt;
        let servers = [];&lt;br /&gt;
        let siteConfig = {};&lt;br /&gt;
        let sortOrder = &#039;desc&#039;;&lt;br /&gt;
&lt;br /&gt;
        // 工具函数&lt;br /&gt;
        function parseServerId(id) {&lt;br /&gt;
            const parts = id.split(&#039;-&#039;);&lt;br /&gt;
            const serverNumber = parseInt(parts[0]);&lt;br /&gt;
            const founderBlocks = parts.slice(1).join(&#039;-&#039;).split(&#039;＆&#039;);&lt;br /&gt;
            const founders = founderBlocks.map(block =&amp;gt; {&lt;br /&gt;
                const [founderPart, countryPart] = block.split(&#039;-&#039;);&lt;br /&gt;
                const [founderName, founderServerId] = founderPart.split(&#039;_&#039;);&lt;br /&gt;
                const [countryCode, countryServerId] = countryPart.split(&#039;_&#039;);&lt;br /&gt;
                return {&lt;br /&gt;
                    name: founderName,&lt;br /&gt;
                    founderServerId: parseInt(founderServerId),&lt;br /&gt;
                    countryCode,&lt;br /&gt;
                    countryServerId: parseInt(countryServerId)&lt;br /&gt;
                };&lt;br /&gt;
            });&lt;br /&gt;
            return { serverNumber, founders, isJoint: founders.length &amp;gt; 1,&lt;br /&gt;
                primaryFounder: founders[0].name,&lt;br /&gt;
                allFounderNames: founders.map(f =&amp;gt; f.name).join(&#039;＆&#039;) };&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function parseDate(dateStr) {&lt;br /&gt;
            if (dateStr.includes(&#039;-&#039;)) {&lt;br /&gt;
                const parts = dateStr.split(&#039;-&#039;);&lt;br /&gt;
                return new Date(parts[0], parts[1] - 1, parts[2]);&lt;br /&gt;
            } else if (dateStr.includes(&#039;.&#039;)) {&lt;br /&gt;
                const parts = dateStr.split(&#039;.&#039;);&lt;br /&gt;
                return new Date(parts[0], parts[1] - 1, parts[2]);&lt;br /&gt;
            }&lt;br /&gt;
            return new Date(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function showSortFeedback(message) {&lt;br /&gt;
            const feedback = document.getElementById(&#039;sortFeedback&#039;);&lt;br /&gt;
            if (!feedback) return;&lt;br /&gt;
            feedback.textContent = message;&lt;br /&gt;
            feedback.classList.add(&#039;show&#039;);&lt;br /&gt;
            setTimeout(() =&amp;gt; {&lt;br /&gt;
                feedback.classList.remove(&#039;show&#039;);&lt;br /&gt;
            }, 3000);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // 生成服务器卡片&lt;br /&gt;
function generateServerCard(server) {&lt;br /&gt;
    const today = new Date();&lt;br /&gt;
    const dayOfWeek = today.getDay();&lt;br /&gt;
    let statusClass = &amp;quot;&amp;quot;;&lt;br /&gt;
    let statusText = &amp;quot;&amp;quot;;&lt;br /&gt;
    let iconClass = &amp;quot;train&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // 解析服务器ID（如果需要ID信息，这里仍保留解析）&lt;br /&gt;
    const idInfo = parseServerId(server.id);&lt;br /&gt;
    &lt;br /&gt;
    // 根据状态显示&lt;br /&gt;
    if (server.status === &amp;quot;upcoming&amp;quot;) {&lt;br /&gt;
        statusClass = &amp;quot;upcoming&amp;quot;;&lt;br /&gt;
        statusText = &amp;quot;即将开启&amp;quot;;&lt;br /&gt;
        iconClass = &amp;quot;clock&amp;quot;;&lt;br /&gt;
    } else if (server.openTime[0] === 0) {&lt;br /&gt;
        statusClass = &amp;quot;closed&amp;quot;;&lt;br /&gt;
        statusText = &amp;quot;关闭&amp;quot;;&lt;br /&gt;
        iconClass = &amp;quot;lock&amp;quot;;&lt;br /&gt;
    } else if (server.openTime[0] === 7) {&lt;br /&gt;
        statusClass = &amp;quot;&amp;quot;;&lt;br /&gt;
        statusText = &amp;quot;开放&amp;quot;;&lt;br /&gt;
        iconClass = &amp;quot;train&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        if (server.openTime.includes(dayOfWeek)) {&lt;br /&gt;
            statusClass = &amp;quot;&amp;quot;;&lt;br /&gt;
            statusText = &amp;quot;开放&amp;quot;;&lt;br /&gt;
            iconClass = &amp;quot;train&amp;quot;;&lt;br /&gt;
        } else {&lt;br /&gt;
            statusClass = &amp;quot;today-closed&amp;quot;;&lt;br /&gt;
            statusText = &amp;quot;今日关闭&amp;quot;;&lt;br /&gt;
            iconClass = &amp;quot;calendar-times&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // 构建发起人显示（支持多个）&lt;br /&gt;
    const foundersHtml = Array.isArray(server.founder) &lt;br /&gt;
        ? server.founder.join(&#039;＆&#039;) &lt;br /&gt;
        : server.founder;&lt;br /&gt;
    &lt;br /&gt;
    // 构建标签HTML&lt;br /&gt;
    let tagsHtml = &amp;quot;&amp;quot;;&lt;br /&gt;
    server.tags.forEach(tag =&amp;gt; {&lt;br /&gt;
        tagsHtml += `&amp;lt;span class=&amp;quot;special-tag&amp;quot;&amp;gt;${tag}&amp;lt;/span&amp;gt;`;&lt;br /&gt;
    });&lt;br /&gt;
    &lt;br /&gt;
    // 构建开放时间文本&lt;br /&gt;
    let openTimeText = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (server.status === &amp;quot;upcoming&amp;quot;) {&lt;br /&gt;
        openTimeText = &amp;quot;即将开启&amp;quot;;&lt;br /&gt;
    } else if (server.openTime[0] === 0) {&lt;br /&gt;
        openTimeText = &amp;quot;以实际为准&amp;quot;;&lt;br /&gt;
    } else if (server.openTime[0] === 7) {&lt;br /&gt;
        openTimeText = &amp;quot;长期开放&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        const dayNames = [&amp;quot;周日&amp;quot;, &amp;quot;周一&amp;quot;, &amp;quot;周二&amp;quot;, &amp;quot;周三&amp;quot;, &amp;quot;周四&amp;quot;, &amp;quot;周五&amp;quot;, &amp;quot;周六&amp;quot;];&lt;br /&gt;
        openTimeText = &amp;quot;每周&amp;quot; + server.openTime.map(day =&amp;gt; dayNames[day]).join(&amp;quot;、&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return `&lt;br /&gt;
    &amp;lt;div class=&amp;quot;server-card ${statusClass}&amp;quot; id=&amp;quot;${server.id}&amp;quot; data-date=&amp;quot;${server.date}&amp;quot; data-size=&amp;quot;${server.size}&amp;quot; data-group=&amp;quot;${server.group}&amp;quot; data-version=&amp;quot;${server.version}&amp;quot; data-open-time=&amp;quot;${server.openTime.join(&#039;,&#039;)}&amp;quot; data-founder=&amp;quot;${Array.isArray(server.founder) ? server.founder.join(&#039;＆&#039;) : server.founder}&amp;quot; data-status=&amp;quot;${server.status}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h2 class=&amp;quot;server-title&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;server-title-content&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;i class=&amp;quot;fas fa-${iconClass}&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;server-name-container&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;span class=&amp;quot;chinese-name&amp;quot;&amp;gt;${server.chineseName}&amp;lt;/span&amp;gt;&lt;br /&gt;
                    ${tagsHtml}&lt;br /&gt;
                    &amp;lt;span class=&amp;quot;english-name&amp;quot;&amp;gt;${server.englishName}&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/h2&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;server-info&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;info-item&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-label&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fas fa-user-tie&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; 发起人&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-value&amp;quot;&amp;gt;${foundersHtml}&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;info-item&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-label&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;far fa-calendar-alt&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; 开服日期&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-value&amp;quot;&amp;gt;${server.date}&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;info-item&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-label&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fas fa-clock&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; 开放时间&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-value&amp;quot;&amp;gt;${openTimeText}&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;info-item&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-label&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fas fa-expand-arrows-alt&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; 地图尺寸&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-value&amp;quot;&amp;gt;${server.size}&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;info-item&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-label&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fas fa-code-branch&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; 版本&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-value&amp;quot;&amp;gt;${server.version}&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;info-item&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-label&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fas fa-comments&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; 所属群聊&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-value&amp;quot;&amp;gt;${server.group}&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;info-item&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;info-label&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fas fa-network-wired&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; IP地址&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;span class=&amp;quot;ip-address&amp;quot;&amp;gt;${server.ip}&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;description&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;strong&amp;gt;简介：&amp;lt;/strong&amp;gt; ${server.description}&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    `;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
        // 渲染服务器列表&lt;br /&gt;
        function renderServerList() {&lt;br /&gt;
            const container = document.querySelector(&#039;.servers-container&#039;);&lt;br /&gt;
            const upcoming = servers.filter(s =&amp;gt; s.status === &#039;upcoming&#039;);&lt;br /&gt;
            const others = servers.filter(s =&amp;gt; s.status !== &#039;upcoming&#039;);&lt;br /&gt;
            container.innerHTML = [...upcoming, ...others].map(s =&amp;gt; generateServerCard(s)).join(&#039;&#039;);&lt;br /&gt;
            updateStats();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function updateStats() {&lt;br /&gt;
            const today = new Date();&lt;br /&gt;
            const dayOfWeek = today.getDay();&lt;br /&gt;
            let openCount = 0, closedCount = 0, upcomingCount = 0;&lt;br /&gt;
&lt;br /&gt;
            servers.forEach(s =&amp;gt; {&lt;br /&gt;
                if (s.status === &#039;upcoming&#039;) upcomingCount++;&lt;br /&gt;
                else if (s.openTime[0] === 0) closedCount++;&lt;br /&gt;
                else if (s.openTime[0] === 7) openCount++;&lt;br /&gt;
                else if (s.openTime.includes(dayOfWeek)) openCount++;&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            const maxId = servers.length ? Math.max(...servers.map(s =&amp;gt; parseServerId(s.id).serverNumber)) : 0;&lt;br /&gt;
            document.getElementById(&#039;total-count&#039;).textContent = maxId;&lt;br /&gt;
            document.getElementById(&#039;configured-count&#039;).textContent = openCount + upcomingCount;&lt;br /&gt;
            document.getElementById(&#039;open-count&#039;).textContent = openCount;&lt;br /&gt;
            document.getElementById(&#039;closed-count&#039;).textContent = closedCount;&lt;br /&gt;
            document.getElementById(&#039;upcoming-count&#039;).textContent = upcomingCount;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // 页脚配置更新&lt;br /&gt;
        function updateFooter(config) {&lt;br /&gt;
            // 文档信息列表&lt;br /&gt;
            const infoList = document.getElementById(&#039;footer-info&#039;);&lt;br /&gt;
            if (infoList &amp;amp;&amp;amp; config.doc_info) {&lt;br /&gt;
                infoList.innerHTML = config.doc_info.map(item =&amp;gt; &lt;br /&gt;
                    `&amp;lt;li&amp;gt;&amp;lt;i class=&amp;quot;${item.icon}&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; ${item.text}&amp;lt;/li&amp;gt;`&lt;br /&gt;
                ).join(&#039;&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            // 维护团队列表&lt;br /&gt;
            const maintList = document.getElementById(&#039;footer-maintainers&#039;);&lt;br /&gt;
            if (maintList &amp;amp;&amp;amp; config.maintainers) {&lt;br /&gt;
                maintList.innerHTML = config.maintainers.map(name =&amp;gt; &lt;br /&gt;
                    `&amp;lt;li&amp;gt;&amp;lt;i class=&amp;quot;fas fa-user&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; ${name}&amp;lt;/li&amp;gt;`&lt;br /&gt;
                ).join(&#039;&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            // 注意事项列表&lt;br /&gt;
            const notesList = document.getElementById(&#039;footer-notes&#039;);&lt;br /&gt;
            if (notesList &amp;amp;&amp;amp; config.notes) {&lt;br /&gt;
                notesList.innerHTML = config.notes.map(note =&amp;gt; &lt;br /&gt;
                    `&amp;lt;li&amp;gt;&amp;lt;i class=&amp;quot;fas fa-exclamation-triangle&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; ${note}&amp;lt;/li&amp;gt;`&lt;br /&gt;
                ).join(&#039;&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            // 页脚底部文字&lt;br /&gt;
            if (config.footer_bottom) {&lt;br /&gt;
                document.getElementById(&#039;footer-bottom&#039;).innerHTML = `&amp;lt;p&amp;gt;${config.footer_bottom}&amp;lt;/p&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
            // 关于页面内的信息&lt;br /&gt;
            if (config.about) {&lt;br /&gt;
                document.getElementById(&#039;settings-about&#039;).innerHTML = config.about;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // ========== 排序与筛选 ==========&lt;br /&gt;
        function parseMapSize(size) {&lt;br /&gt;
            if (!size || size === &#039;未知&#039; || size === &#039;待定&#039; || size === &#039;0x0&#039;) return -1;&lt;br /&gt;
            const matches = size.match(/(\d+)\s*[x×]\s*(\d+)/);&lt;br /&gt;
            if (matches &amp;amp;&amp;amp; matches.length &amp;gt;= 3) {&lt;br /&gt;
                return parseInt(matches[1]) * parseInt(matches[2]);&lt;br /&gt;
            }&lt;br /&gt;
            const single = size.match(/\d+/);&lt;br /&gt;
            return single ? parseInt(single[0]) : -1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function filterAndSortServers() {&lt;br /&gt;
            const selectedFounder = document.getElementById(&#039;founder-select&#039;).value;&lt;br /&gt;
            const hideClosed = document.getElementById(&#039;hideClosedToggle&#039;).classList.contains(&#039;active&#039;);&lt;br /&gt;
            const hideUpcoming = document.getElementById(&#039;hideUpcomingToggle&#039;).classList.contains(&#039;active&#039;);&lt;br /&gt;
            const sortBy = document.getElementById(&#039;sort-select&#039;).value;&lt;br /&gt;
&lt;br /&gt;
            let filtered = servers.filter(server =&amp;gt; {&lt;br /&gt;
                const founders = Array.isArray(server.founder) &lt;br /&gt;
                    ? server.founder &lt;br /&gt;
                    : server.founder.split(&#039;＆&#039;).map(s =&amp;gt; s.trim());&lt;br /&gt;
                if (selectedFounder !== &#039;all&#039; &amp;amp;&amp;amp; !founders.includes(selectedFounder)) return false;&lt;br /&gt;
                if (hideClosed &amp;amp;&amp;amp; server.openTime[0] === 0 &amp;amp;&amp;amp; server.status !== &#039;upcoming&#039;) return false;&lt;br /&gt;
                if (hideUpcoming &amp;amp;&amp;amp; server.status === &#039;upcoming&#039;) return false;&lt;br /&gt;
                return true;&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            filtered.sort((a, b) =&amp;gt; {&lt;br /&gt;
                if (a.status === &#039;upcoming&#039; &amp;amp;&amp;amp; b.status !== &#039;upcoming&#039;) return -1;&lt;br /&gt;
                if (a.status !== &#039;upcoming&#039; &amp;amp;&amp;amp; b.status === &#039;upcoming&#039;) return 1;&lt;br /&gt;
                if (a.status === &#039;upcoming&#039; &amp;amp;&amp;amp; b.status === &#039;upcoming&#039;) return parseDate(a.date) - parseDate(b.date);&lt;br /&gt;
&lt;br /&gt;
                const dir = sortOrder === &#039;asc&#039; ? 1 : -1;&lt;br /&gt;
                let av, bv;&lt;br /&gt;
                switch (sortBy) {&lt;br /&gt;
                    case &#039;name&#039;:&lt;br /&gt;
                        av = a.chineseName; bv = b.chineseName;&lt;br /&gt;
                        return dir * av.localeCompare(bv);&lt;br /&gt;
                    case &#039;founder&#039;:&lt;br /&gt;
                        av = (Array.isArray(a.founder) ? a.founder[0] : a.founder.split(&#039;＆&#039;)[0].trim());&lt;br /&gt;
                        bv = (Array.isArray(b.founder) ? b.founder[0] : b.founder.split(&#039;＆&#039;)[0].trim());&lt;br /&gt;
                        return dir * av.localeCompare(bv);&lt;br /&gt;
                    case &#039;date&#039;:&lt;br /&gt;
                        return dir * (parseDate(a.date) - parseDate(b.date));&lt;br /&gt;
                    case &#039;size&#039;:&lt;br /&gt;
                        av = parseMapSize(a.size); bv = parseMapSize(b.size);&lt;br /&gt;
                        if (av === -1 &amp;amp;&amp;amp; bv === -1) return 0;&lt;br /&gt;
                        if (av === -1) return dir * 1;&lt;br /&gt;
                        if (bv === -1) return dir * -1;&lt;br /&gt;
                        return dir * (av - bv);&lt;br /&gt;
                    case &#039;group&#039;:&lt;br /&gt;
                        return dir * a.group.localeCompare(b.group);&lt;br /&gt;
                    case &#039;version&#039;:&lt;br /&gt;
                        return dir * a.version.localeCompare(b.version);&lt;br /&gt;
                    case &#039;open-time&#039;:&lt;br /&gt;
                        return dir * (a.openTime.length - b.openTime.length);&lt;br /&gt;
                    default:&lt;br /&gt;
                        return dir * (parseDate(a.date) - parseDate(b.date));&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            document.querySelector(&#039;.servers-container&#039;).innerHTML = filtered.map(s =&amp;gt; generateServerCard(s)).join(&#039;&#039;);&lt;br /&gt;
            updateStats();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // ========== 初始化：加载数据 ==========&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, function() {&lt;br /&gt;
            fetch(&#039;api/get_servers.php&#039;)&lt;br /&gt;
                .then(res =&amp;gt; res.json())&lt;br /&gt;
                .then(data =&amp;gt; {&lt;br /&gt;
                    // data 应包含 servers 和 config&lt;br /&gt;
                    servers = data.servers;&lt;br /&gt;
                    siteConfig = data.config || {};&lt;br /&gt;
                    &lt;br /&gt;
                    // 渲染页面&lt;br /&gt;
                    renderServerList();&lt;br /&gt;
                    filterAndSortServers();&lt;br /&gt;
                    updateFooter(siteConfig);&lt;br /&gt;
                    &lt;br /&gt;
                    // 动态生成发起人下拉选项&lt;br /&gt;
                    const founderSelect = document.getElementById(&#039;founder-select&#039;);&lt;br /&gt;
                    founderSelect.querySelectorAll(&#039;option:not([value=&amp;quot;all&amp;quot;])&#039;).forEach(opt =&amp;gt; opt.remove());&lt;br /&gt;
                    if (data.founders &amp;amp;&amp;amp; Array.isArray(data.founders)) {&lt;br /&gt;
                        data.founders.forEach(name =&amp;gt; {&lt;br /&gt;
                            const option = document.createElement(&#039;option&#039;);&lt;br /&gt;
                            option.value = name;&lt;br /&gt;
                            option.textContent = name;&lt;br /&gt;
                            founderSelect.appendChild(option);&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                    &lt;br /&gt;
                    // 初始化下载分辨率选项&lt;br /&gt;
                    document.querySelector(&#039;.res-option[data-res=&amp;quot;100&amp;quot;]&#039;).classList.add(&#039;selected&#039;);&lt;br /&gt;
                })&lt;br /&gt;
                .catch(err =&amp;gt; {&lt;br /&gt;
                    console.error(&#039;数据加载失败:&#039;, err);&lt;br /&gt;
                    alert(&#039;无法获取数据，请稍后刷新。&#039;);&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
            // 排序方向切换&lt;br /&gt;
            document.getElementById(&#039;sort-direction&#039;).addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
                sortOrder = sortOrder === &#039;asc&#039; ? &#039;desc&#039; : &#039;asc&#039;;&lt;br /&gt;
                this.classList.toggle(&#039;desc&#039;);&lt;br /&gt;
                filterAndSortServers();&lt;br /&gt;
                const sortText = document.getElementById(&#039;sort-select&#039;).selectedOptions[0].text;&lt;br /&gt;
                showSortFeedback(`已按${sortText}${sortOrder === &#039;desc&#039; ? &#039;降序&#039; : &#039;升序&#039;}排序`);&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // 发起人、排序方式变化&lt;br /&gt;
            document.getElementById(&#039;founder-select&#039;).addEventListener(&#039;change&#039;, function() {&lt;br /&gt;
                filterAndSortServers();&lt;br /&gt;
                showSortFeedback(`已筛选发起人：${this.selectedOptions[0].text}`);&lt;br /&gt;
            });&lt;br /&gt;
            document.getElementById(&#039;sort-select&#039;).addEventListener(&#039;change&#039;, function() {&lt;br /&gt;
                filterAndSortServers();&lt;br /&gt;
                const sortText = this.selectedOptions[0].text;&lt;br /&gt;
                showSortFeedback(`已按${sortText}${sortOrder === &#039;desc&#039; ? &#039;降序&#039; : &#039;升序&#039;}排序`);&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // 设置模态框&lt;br /&gt;
            const settingsBtn = document.getElementById(&#039;settings-btn&#039;);&lt;br /&gt;
            const settingsModal = document.getElementById(&#039;settingsModal&#039;);&lt;br /&gt;
            const closeSettings = document.getElementById(&#039;closeSettings&#039;);&lt;br /&gt;
            settingsBtn.addEventListener(&#039;click&#039;, () =&amp;gt; { settingsModal.style.display = &#039;flex&#039;; });&lt;br /&gt;
            closeSettings.addEventListener(&#039;click&#039;, () =&amp;gt; { settingsModal.style.display = &#039;none&#039;; });&lt;br /&gt;
            settingsModal.addEventListener(&#039;click&#039;, (e) =&amp;gt; { if (e.target === settingsModal) settingsModal.style.display = &#039;none&#039;; });&lt;br /&gt;
&lt;br /&gt;
            // 隐藏/显示开关&lt;br /&gt;
            document.getElementById(&#039;hideClosedToggle&#039;).addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
                this.classList.toggle(&#039;active&#039;);&lt;br /&gt;
                filterAndSortServers();&lt;br /&gt;
            });&lt;br /&gt;
            document.getElementById(&#039;hideUpcomingToggle&#039;).addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
                this.classList.toggle(&#039;active&#039;);&lt;br /&gt;
                filterAndSortServers();&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // ---- 下载全图功能 ----&lt;br /&gt;
            const downloadBtn = document.getElementById(&#039;download-btn&#039;);&lt;br /&gt;
            const modal = document.getElementById(&#039;download-modal&#039;);&lt;br /&gt;
            const modalContent = document.getElementById(&#039;modal-content&#039;);&lt;br /&gt;
            const cancelBtn = document.getElementById(&#039;cancel-download&#039;);&lt;br /&gt;
            const confirmBtn = document.getElementById(&#039;confirm-download&#039;);&lt;br /&gt;
            const progressDiv = document.getElementById(&#039;download-progress&#039;);&lt;br /&gt;
            const progressFill = document.getElementById(&#039;progress-fill&#039;);&lt;br /&gt;
            let selectedRes = 100;&lt;br /&gt;
&lt;br /&gt;
            downloadBtn.addEventListener(&#039;click&#039;, () =&amp;gt; {&lt;br /&gt;
                modal.style.display = &#039;flex&#039;;&lt;br /&gt;
                setTimeout(() =&amp;gt; { modalContent.style.transform = &#039;translateY(0)&#039;; modalContent.style.opacity = &#039;1&#039;; }, 10);&lt;br /&gt;
            });&lt;br /&gt;
            cancelBtn.addEventListener(&#039;click&#039;, () =&amp;gt; {&lt;br /&gt;
                modalContent.style.transform = &#039;translateY(20px)&#039;; modalContent.style.opacity = &#039;0&#039;;&lt;br /&gt;
                setTimeout(() =&amp;gt; { modal.style.display = &#039;none&#039;; }, 300);&lt;br /&gt;
            });&lt;br /&gt;
            document.querySelectorAll(&#039;.res-option&#039;).forEach(opt =&amp;gt; {&lt;br /&gt;
                opt.addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
                    document.querySelectorAll(&#039;.res-option&#039;).forEach(o =&amp;gt; o.classList.remove(&#039;selected&#039;));&lt;br /&gt;
                    this.classList.add(&#039;selected&#039;);&lt;br /&gt;
                    selectedRes = this.dataset.res;&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
            confirmBtn.addEventListener(&#039;click&#039;, () =&amp;gt; {&lt;br /&gt;
                modalContent.style.transform = &#039;translateY(20px)&#039;; modalContent.style.opacity = &#039;0&#039;;&lt;br /&gt;
                setTimeout(() =&amp;gt; { modal.style.display = &#039;none&#039;; }, 300);&lt;br /&gt;
                progressDiv.style.display = &#039;block&#039;;&lt;br /&gt;
                progressFill.style.width = &#039;0%&#039;;&lt;br /&gt;
                setTimeout(() =&amp;gt; {&lt;br /&gt;
                    progressFill.style.width = &#039;30%&#039;;&lt;br /&gt;
                    html2canvas(document.querySelector(&#039;.container&#039;), {&lt;br /&gt;
                        scale: selectedRes / 100,&lt;br /&gt;
                        useCORS: true, logging: false, backgroundColor: null,&lt;br /&gt;
                        onclone: function(clonedDoc) { clonedDoc.querySelector(&#039;.container&#039;).style.boxShadow = &#039;none&#039;; }&lt;br /&gt;
                    }).then(canvas =&amp;gt; {&lt;br /&gt;
                        progressFill.style.width = &#039;90%&#039;;&lt;br /&gt;
                        setTimeout(() =&amp;gt; {&lt;br /&gt;
                            const link = document.createElement(&#039;a&#039;);&lt;br /&gt;
                            link.href = canvas.toDataURL(&#039;image/png&#039;);&lt;br /&gt;
                            link.download = `服务器详情_${selectedRes}%_${new Date().toISOString().slice(0,10)}.png`;&lt;br /&gt;
                            document.body.appendChild(link); link.click(); document.body.removeChild(link);&lt;br /&gt;
                            progressFill.style.width = &#039;100%&#039;;&lt;br /&gt;
                            setTimeout(() =&amp;gt; { progressDiv.style.display = &#039;none&#039;; alert(&#039;图片下载完成！&#039;); }, 500);&lt;br /&gt;
                        }, 500);&lt;br /&gt;
                    }).catch(err =&amp;gt; {&lt;br /&gt;
                        console.error(err); progressDiv.style.display = &#039;none&#039;; alert(&#039;图片生成失败: &#039; + err.message);&lt;br /&gt;
                    });&lt;br /&gt;
                }, 500);&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            // 初始化分辨率默认选中&lt;br /&gt;
            document.querySelector(&#039;.res-option[data-res=&amp;quot;100&amp;quot;]&#039;).classList.add(&#039;selected&#039;);&lt;br /&gt;
        });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>TomNook</name></author>
	</entry>
</feed>