refactor(render): 解决国内可能存在的资源访问问题,新增大陆资源和海外资源可选项,允许用户根据服务器位置选择不同的资源策略,并且允许自定义资源镜像站

- Updated language attributes in HTML templates to dynamically set based on `t2i_font_source`.
- Replaced hardcoded Google Fonts links with dynamic links using `t2i_google_fonts_mirror` and `t2i_gstatic_mirror`.
- Adjusted font-family declarations to conditionally include 'Noto Sans SC' and 'Noto Sans TC' based on the `t2i_font_source`.
- Ensured consistent formatting and style across various templates including image, quote, topic, and user title items.
- Added missing newlines at the end of several files for consistency.
This commit is contained in:
SXP-Simon
2026-04-25 12:22:36 +08:00
parent 54f517d3b0
commit 948bfb1b5b
64 changed files with 614 additions and 219 deletions
+3
View File
@@ -34,3 +34,6 @@ scripts/output/mock_report_test_group_mock_*.pdf
astrbot-lark-group-daily-analysis-main/**
.ace-tool/
debug_atri.html
data/test/avatar/cache.db
test_mainland.html
test_overseas.html
+9
View File
@@ -1,5 +1,14 @@
# 更新日志 (CHANGELOG)
## [v4.10.2] - ✨ 支持多地区渲染环境与自定义镜像
* **🌍 多地区环境支持**: 新增 `t2i_font_source` 配置项,支持 `Mainland` (大陆) 和 `Overseas` (海外) 模式。自动切换 HTML 语言标识 (`zh-CN`/`zh-Hant`) 并动态调整 CSS 字体栈优先级,解决繁体中文支持与字形偏移问题。
* **⚙️ 自定义镜像地址**: 移除了所有硬编码的字体资源站地址。现在用户可以为国内和国外环境分别自定义 Google Fonts、Gstatic 字体镜像站。
* **📱 平台与主题优化**:
* **Telegram**: 修复了 Telegram 平台的头像处理逻辑 (#176 @lekoOwO)。
* **🛠️ 基础设施与调试**: 重构模板实现完全的数据驱动渲染;更新 `debug_render.py` 并新增 `test_regional_rendering.py` 验证脚本。
---
## [v4.10.1] - ✨ 优化 T2I 渲染与自定义配置
* **✨ 自定义配置支持**: 支持配置两轮 T2I 渲染策略,允许用户自定义图片格式(PNG/JPEG)、质量、分辨率及超时时间(#164),支持复杂渲染场景的超时参数配置(#174 感谢 @uuutt2023)。
* **🛠️ 健壮性增强**: 实现 T2I 返回 HTML 错误页的自动识别与摘要提取(如 502 Bad Gateway),提升故障排查效率。(参考 #171 说明)
+31
View File
@@ -215,6 +215,37 @@
"step": 5000
},
"hint": "回退尝试通常针对复杂页面,建议设置更长的超时时间(如 100000ms+)。"
},
"t2i_font_source": {
"type": "string",
"description": "t2i 渲染环境切换",
"options": ["Mainland", "Overseas"],
"default": "Overseas",
"hint": "切换环境会自动应用下方对应的镜像站地址、语言标识(zh-CN/zh-Hant)及字体优先级。"
},
"t2i_mainland_google_fonts": {
"type": "string",
"description": "[国内] Google Fonts 镜像",
"default": "https://fonts.loli.net",
"hint": "国内环境下推荐使用 loli.net 或其他可访问镜像。"
},
"t2i_mainland_gstatic": {
"type": "string",
"description": "[国内] Gstatic 镜像",
"default": "https://gstatic.loli.net",
"hint": "国内环境下推荐使用 loli.net 或其他可访问镜像。"
},
"t2i_overseas_google_fonts": {
"type": "string",
"description": "[国外] Google Fonts 官方",
"default": "https://fonts.googleapis.com",
"hint": "海外环境通常直接使用官方地址即可。"
},
"t2i_overseas_gstatic": {
"type": "string",
"description": "[国外] Gstatic 官方",
"default": "https://fonts.gstatic.com",
"hint": "海外环境通常直接使用官方地址即可。"
}
}
},
+15
View File
@@ -125,6 +125,21 @@ class MockConfigManager:
def get_html_base_url(self) -> str:
return ""
def get_t2i_font_source(self) -> str:
return "Overseas"
def get_t2i_google_fonts_mirror(self) -> str:
return "https://fonts.googleapis.com"
def get_t2i_gstatic_mirror(self) -> str:
return "https://fonts.gstatic.com"
def get_t2i_atri_font_mirror(self) -> str:
return "https://tc.ciallo.ccwu.cc"
def get_t2i_rendering_strategies(self) -> list:
return []
async def mock_get_user_avatar(user_id: str) -> str:
# Return a known avatar URL for testing
+219
View File
@@ -0,0 +1,219 @@
import asyncio
import os
import sys
import types
from pathlib import Path
# ==========================================
# 1. Environment Setup
# ==========================================
current_dir = os.path.dirname(os.path.abspath(__file__))
plugin_root = os.path.abspath(os.path.join(current_dir, ".."))
sys.path.insert(0, plugin_root)
# Mock astrbot.api
astrbot_api = types.ModuleType("astrbot.api")
class MockLogger:
def info(self, msg, *args, **kwargs):
print(f"[INFO] {msg}")
def error(self, msg, *args, **kwargs):
print(f"[ERROR] {msg}")
def warning(self, msg, *args, **kwargs):
print(f"[WARN] {msg}")
def debug(self, msg, *args, **kwargs):
pass
def log(self, level, msg, *args, **kwargs):
pass
def isEnabledFor(self, level):
return True
astrbot_api.logger = MockLogger()
astrbot_api.AstrBotConfig = dict
sys.modules["astrbot.api"] = astrbot_api
# Mock astrbot.core.utils.astrbot_path
astrbot_core_utils = types.ModuleType("astrbot.core.utils")
astrbot_path = types.ModuleType("astrbot.core.utils.astrbot_path")
astrbot_path.get_astrbot_data_path = lambda: Path(".")
sys.modules["astrbot.core.utils"] = astrbot_core_utils
sys.modules["astrbot.core.utils.astrbot_path"] = astrbot_path
from src.domain.models.data_models import ( # noqa: E402
ActivityVisualization,
EmojiStatistics,
GroupStatistics,
QualityReview,
TokenUsage,
)
from src.infrastructure.reporting.generators import ReportGenerator # noqa: E402
class MockConfigManager:
def __init__(self, source: str) -> None:
self.source = source
def get_report_template(self) -> str:
return "simple"
def get_max_topics(self) -> int:
return 5
def get_max_user_titles(self) -> int:
return 5
def get_max_golden_quotes(self) -> int:
return 5
def get_html_output_dir(self) -> str:
return "data/html"
def get_html_filename_format(self) -> str:
return "report.html"
def get_enable_user_card(self) -> bool:
return True
def get_t2i_font_source(self) -> str:
return self.source
def get_t2i_google_fonts_mirror(self) -> str:
return (
"https://fonts.loli.net"
if self.source == "Mainland"
else "https://fonts.googleapis.com"
)
def get_t2i_gstatic_mirror(self) -> str:
return (
"https://gstatic.loli.net"
if self.source == "Mainland"
else "https://fonts.gstatic.com"
)
def get_t2i_atri_font_mirror(self) -> str:
return "https://tc.ciallo.ccwu.cc"
def get_profile_display_mode(self) -> str:
return "mbti"
def get_profile_image_opacity(self) -> float:
return 0.2
def get_profile_image_size_mode(self) -> str:
return "contain"
def get_profile_mapping_config(self) -> str:
return ""
def get_t2i_max_concurrent(self) -> int:
return 4
def get_llm_max_concurrent(self) -> int:
return 2
def get_t2i_rendering_strategies(self) -> list:
return []
def get_html_base_url(self) -> str:
return ""
async def mock_get_user_avatar(user_id: str) -> str:
return f"https://q4.qlogo.cn/headimg_dl?dst_uin={user_id}&spec=640"
async def verify_rendering(source: str):
print(f"\n--- Verifying {source} Rendering ---")
config = MockConfigManager(source)
data_dir = Path("data/test")
data_dir.mkdir(parents=True, exist_ok=True)
generator = ReportGenerator(config, data_dir)
# Mock avatar cache
class MockCache(dict):
def __getitem__(self, key):
return self.get(key, "")
def set(self, key, value, expire=None):
self[key] = value
generator._avatar_cache = MockCache()
stats = GroupStatistics(
message_count=100,
total_characters=1000,
participant_count=5,
most_active_period="12:00",
golden_quotes=[],
emoji_count=0,
emoji_statistics=EmojiStatistics(0, 0),
activity_visualization=ActivityVisualization({}),
token_usage=TokenUsage(0, 0, 0),
chat_quality_review=QualityReview("Test", "Test", [], "Summary"),
)
analysis_result = {
"statistics": stats,
"topics": [],
"user_titles": [],
"user_analysis": {},
"chat_quality_review": stats.chat_quality_review,
"analysis_date": "2026-04-25",
"group_id": "123",
"group_name": "Test Group",
}
render_payload = await generator._prepare_render_data(
analysis_result, mock_get_user_avatar
)
html = generator.html_templates.render_template(
"image_template.html", **render_payload
)
filename = f"test_{source.lower()}.html"
Path(filename).write_text(html, encoding="utf-8")
# Verification
expected_lang = "zh-CN" if source == "Mainland" else "zh-Hant"
expected_font = (
"https://fonts.loli.net"
if source == "Mainland"
else "https://fonts.googleapis.com"
)
expected_gstatic = (
"https://gstatic.loli.net"
if source == "Mainland"
else "https://fonts.gstatic.com"
)
success = True
if f'lang="{expected_lang}"' not in html:
print(f'[FAIL] Expected lang="{expected_lang}" not found.')
success = False
if expected_font not in html:
print(f'[FAIL] Expected font mirror "{expected_font}" not found.')
success = False
if expected_gstatic not in html:
print(f'[FAIL] Expected gstatic mirror "{expected_gstatic}" not found.')
success = False
if success:
print(f"[PASS] {source} rendering verified. Output saved to {filename}")
await generator.close()
async def main():
await verify_rendering("Mainland")
await verify_rendering("Overseas")
if __name__ == "__main__":
asyncio.run(main())
@@ -225,6 +225,32 @@ class ConfigManager:
},
]
def get_t2i_font_source(self) -> str:
"""获取 T2I 字体源 (Mainland/Overseas)"""
return self._get_group("t2i_rendering").get("t2i_font_source", "Overseas")
def get_t2i_google_fonts_mirror(self) -> str:
"""根据环境选择获取 Google Fonts 镜像地址"""
source = self.get_t2i_font_source()
group = self._get_group("t2i_rendering")
if source == "Mainland":
return group.get("t2i_mainland_google_fonts", "https://fonts.loli.net")
return group.get("t2i_overseas_google_fonts", "https://fonts.googleapis.com")
def get_t2i_gstatic_mirror(self) -> str:
"""根据环境选择获取 Gstatic 镜像地址"""
source = self.get_t2i_font_source()
group = self._get_group("t2i_rendering")
if source == "Mainland":
return group.get("t2i_mainland_gstatic", "https://gstatic.loli.net")
return group.get("t2i_overseas_gstatic", "https://fonts.gstatic.com")
def get_t2i_atri_font_mirror(self) -> str:
"""获取 ATRI 主题字体镜像地址 (目前保持不变,如有需要可后续添加 Mainland/Overseas 配置)"""
return self._get_group("t2i_rendering").get(
"t2i_atri_font_mirror", "https://tc.ciallo.ccwu.cc"
)
def get_llm_provider_id(self) -> str:
"""获取主 LLM Provider ID"""
return self._get_group("llm").get("llm_provider_id", "")
@@ -816,6 +816,10 @@ class ReportGenerator(IReportGenerator):
# 准备最终渲染数据
render_data = {
"t2i_font_source": self.config_manager.get_t2i_font_source(),
"t2i_google_fonts_mirror": self.config_manager.get_t2i_google_fonts_mirror(),
"t2i_gstatic_mirror": self.config_manager.get_t2i_gstatic_mirror(),
"t2i_atri_font_mirror": self.config_manager.get_t2i_atri_font_mirror(),
"current_date": datetime.now().strftime("%Y年%m月%d"),
"current_datetime": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"message_count": stats.message_count,
@@ -1,4 +1,4 @@
<div class="chart-container">
<div class="chart-container">
<div style="display: flex; align-items: stretch; height: 220px; gap: 5px; padding: 20px 0 10px;">
{% for hour_data in chart_data %}
{% set ratio = loop.index0 / ((chart_data|length - 1) if (chart_data|length - 1) > 0 else 1) %}
@@ -50,4 +50,4 @@
</div>
{% endfor %}
</div>
</div>
</div>
@@ -1,4 +1,4 @@
<style>
<style>
.quality-card {
position: relative;
padding: 24px 24px 20px;
@@ -152,4 +152,4 @@
</div>
<div class="quality-summary">{{ summary }}</div>
</div>
</div>
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
@@ -8,19 +8,19 @@
<style>
@font-face {
font-family: 'LXGW WenKai';
src: url('https://tc.ciallo.ccwu.cc/file/1775130743963_1774880718993_LXGWWenKai-Regular.woff2') format('woff2');
src: url('{{ t2i_atri_font_mirror }}/file/1775130743963_1774880718993_LXGWWenKai-Regular.woff2') format('woff2');
font-weight: 400;
}
@font-face {
font-family: 'LXGW WenKai';
src: url('https://tc.ciallo.ccwu.cc/file/1775130739223_1774880715380_LXGWWenKai-Medium.woff2') format('woff2');
src: url('{{ t2i_atri_font_mirror }}/file/1775130739223_1774880715380_LXGWWenKai-Medium.woff2') format('woff2');
font-weight: 600;
}
@font-face {
font-family: 'LXGW WenKai Mono';
src: url('https://tc.ciallo.ccwu.cc/file/1775130738049_1774880717027_LXGWWenKaiMono-Regular.woff2') format('woff2');
src: url('{{ t2i_atri_font_mirror }}/file/1775130738049_1774880717027_LXGWWenKaiMono-Regular.woff2') format('woff2');
font-weight: 400;
}
@@ -55,7 +55,7 @@
body {
margin: 0;
padding: clamp(12px, 2.4vw, 28px);
font-family: 'LXGW WenKai', 'Microsoft YaHei', sans-serif;
font-family: 'LXGW WenKai', {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, 'Microsoft YaHei', sans-serif;
color: var(--text-main);
background: transparent;
}
@@ -74,7 +74,7 @@
radial-gradient(circle at 15% 12%, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0) 26%),
linear-gradient(rgba(117, 193, 240, 0.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(117, 193, 240, 0.08) 1px, transparent 1px),
url('https://tc.ciallo.ccwu.cc/file/1775130588385_1774881257527_bg1.webp');
url('{{ t2i_atri_font_mirror }}/file/1775130588385_1774881257527_bg1.webp');
background-size: auto, auto, auto, 26px 26px, 26px 26px, cover;
background-position: center, center, center, center, center, center;
border: 1px solid var(--border);
@@ -2667,18 +2667,18 @@
<div class="float-sticker sticker-moon-2"><svg class="icon-svg">
<use href="#icon-moon-star"></use>
</svg></div>
<img class="deco-character" src="https://tc.ciallo.ccwu.cc/file/1775130613783_1774881310058_atri3.webp"
<img class="deco-character" src="{{ t2i_atri_font_mirror }}/file/1775130613783_1774881310058_atri3.webp"
alt="ATRI decor">
<div class="inner">
<header class="header">
<div class="header-bg-layer">
<div class="header-bg-carousel" aria-hidden="true">
<div class="header-bg-carousel__slide" style="background-image: url('https://tc.ciallo.ccwu.cc/file/1775138337740_ev002al.webp');"></div>
<div class="header-bg-carousel__slide" style="background-image: url('https://tc.ciallo.ccwu.cc/file/1775138345152_ev004bl.webp');"></div>
<div class="header-bg-carousel__slide" style="background-image: url('https://tc.ciallo.ccwu.cc/file/1775138343182_ev008cl.webp');"></div>
<div class="header-bg-carousel__slide" style="background-image: url('https://tc.ciallo.ccwu.cc/file/1775138341839_ev007bl.webp');"></div>
<div class="header-bg-carousel__slide" style="background-image: url('https://tc.ciallo.ccwu.cc/file/1775138344406_title_base2.webp');"></div>
<div class="header-bg-carousel__slide" style="background-image: url('{{ t2i_atri_font_mirror }}/file/1775138337740_ev002al.webp');"></div>
<div class="header-bg-carousel__slide" style="background-image: url('{{ t2i_atri_font_mirror }}/file/1775138345152_ev004bl.webp');"></div>
<div class="header-bg-carousel__slide" style="background-image: url('{{ t2i_atri_font_mirror }}/file/1775138343182_ev008cl.webp');"></div>
<div class="header-bg-carousel__slide" style="background-image: url('{{ t2i_atri_font_mirror }}/file/1775138341839_ev007bl.webp');"></div>
<div class="header-bg-carousel__slide" style="background-image: url('{{ t2i_atri_font_mirror }}/file/1775138344406_title_base2.webp');"></div>
<div class="header-bg-carousel__overlay"></div>
</div>
</div>
@@ -2705,7 +2705,7 @@
</svg>
</div>
Overview
<img class="hero-kawaii" src="https://tc.ciallo.ccwu.cc/file/1775132815504_1774881268554_可爱.gif"
<img class="hero-kawaii" src="{{ t2i_atri_font_mirror }}/file/1775132815504_1774881268554_可爱.gif"
alt="cute icon">
</div>
<h2 class="hero-title">来看看今天都发生了什么吧!</h2>
@@ -2714,7 +2714,7 @@
位群友浮出水面参与了互动哦!我都仔细做好了备忘录哦,哼哼!
</div>
<img class="hero-character"
src="https://tc.ciallo.ccwu.cc/file/1775130626446_1774881312214_atri1.webp" alt="ATRI main">
src="{{ t2i_atri_font_mirror }}/file/1775130626446_1774881312214_atri1.webp" alt="ATRI main">
</div>
<div class="peak-card glass-card">
@@ -2728,7 +2728,7 @@
</div>
</div>
</div>
<img class="peak-image" src="https://tc.ciallo.ccwu.cc/file/1775130623112_1774881319340_atri4.webp"
<img class="peak-image" src="{{ t2i_atri_font_mirror }}/file/1775130623112_1774881319340_atri4.webp"
alt="ATRI peak">
</div>
</section>
@@ -2780,13 +2780,13 @@
</svg></div>
<div>
<h3 class="section-title">心跳潮汐<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132804506_1774881263342_观察.gif"
src="{{ t2i_atri_font_mirror }}/file/1775132804506_1774881263342_观察.gif"
alt="kawaii icon"></h3>
<div class="section-sub">一整天的心跳节拍,由亚托莉为您完美记录</div>
</div>
</div>
<div class="section-badge">TIDE CHART <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132817115_1774881269400_可爱-1.gif" alt="badge icon">
src="{{ t2i_atri_font_mirror }}/file/1775132817115_1774881269400_可爱-1.gif" alt="badge icon">
</div>
</div>
<div class="html-slot">{{ hourly_chart_html | safe }}</div>
@@ -2800,13 +2800,13 @@
</svg></div>
<div>
<h3 class="section-title">高亮记忆碎片<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132805081_1774881262835_疑惑.gif"
src="{{ t2i_atri_font_mirror }}/file/1775132805081_1774881262835_疑惑.gif"
alt="kawaii icon"></h3>
<div class="section-sub">亚托莉捕获的最亮眼的记忆碎片!</div>
</div>
</div>
<div class="section-badge">TOPIC BOARD <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132804506_1774881263342_观察.gif" alt="badge icon">
src="{{ t2i_atri_font_mirror }}/file/1775132804506_1774881263342_观察.gif" alt="badge icon">
</div>
</div>
<div class="html-slot">{{ topics_html | safe }}</div>
@@ -2820,13 +2820,13 @@
</svg></div>
<div>
<h3 class="section-title">神人名片颁发<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132813334_1774881267181_得意.gif"
src="{{ t2i_atri_font_mirror }}/file/1775132813334_1774881267181_得意.gif"
alt="kawaii icon"></h3>
<div class="section-sub">颁发给各位的高性能称号!</div>
</div>
</div>
<div class="section-badge">SPOTLIGHT <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132808652_1774881267385_得意-1.gif" alt="badge icon">
src="{{ t2i_atri_font_mirror }}/file/1775132808652_1774881267385_得意-1.gif" alt="badge icon">
</div>
</div>
<div class="html-slot title-grid">{{ titles_html | safe }}</div>
@@ -2840,13 +2840,13 @@
</svg></div>
<div>
<h3 class="section-title">亚托莉的宝藏瓶<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132814629_1774881270686_爱心.gif"
src="{{ t2i_atri_font_mirror }}/file/1775132814629_1774881270686_爱心.gif"
alt="kawaii icon"></h3>
<div class="section-sub">亚托莉偷偷记在小本子上的宝藏名言!</div>
</div>
</div>
<div class="section-badge">PRECIOUS WORDS <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132805485_1774881263748_可爱-3.gif" alt="badge icon">
src="{{ t2i_atri_font_mirror }}/file/1775132805485_1774881263748_可爱-3.gif" alt="badge icon">
</div>
</div>
<div class="html-slot">{{ quotes_html | safe }}</div>
@@ -2861,13 +2861,13 @@
</svg></div>
<div>
<h3 class="section-title">亚托莉观测报告<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132817115_1774881269400_可爱-1.gif"
src="{{ t2i_atri_font_mirror }}/file/1775132817115_1774881269400_可爱-1.gif"
alt="kawaii icon"></h3>
<div class="section-sub">来自高性能亚托莉的每日特别观测报告!</div>
</div>
</div>
<div class="section-badge">GROUP VIBE <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132804506_1774881263342_观察.gif" alt="badge icon">
src="{{ t2i_atri_font_mirror }}/file/1775132804506_1774881263342_观察.gif" alt="badge icon">
</div>
</div>
<div class="html-slot">{{ chat_quality_html | safe }}</div>
@@ -2882,13 +2882,13 @@
</svg></div>
<div>
<h3 class="section-title">能量解析雷达<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132809943_1774881264350_睡觉.gif"
src="{{ t2i_atri_font_mirror }}/file/1775132809943_1774881264350_睡觉.gif"
alt="kawaii icon"></h3>
<div class="section-sub">维持亚托莉运行与心跳的能量消耗~</div>
</div>
</div>
<div class="section-badge">ENERGY COST <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775132811492_1774881264336_不要.gif" alt="badge icon">
src="{{ t2i_atri_font_mirror }}/file/1775132811492_1774881264336_不要.gif" alt="badge icon">
</div>
</div>
<div class="token-grid">
@@ -3095,4 +3095,7 @@
</script>
</body>
</html>
</html>
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
@@ -8,19 +8,19 @@
<style>
@font-face {
font-family: 'LXGW WenKai';
src: url('https://tc.ciallo.ccwu.cc/file/1775130743963_1774880718993_LXGWWenKai-Regular.woff2') format('woff2');
src: url('{{ t2i_atri_font_mirror }}/file/1775130743963_1774880718993_LXGWWenKai-Regular.woff2') format('woff2');
font-weight: 400;
}
@font-face {
font-family: 'LXGW WenKai';
src: url('https://tc.ciallo.ccwu.cc/file/1775130739223_1774880715380_LXGWWenKai-Medium.woff2') format('woff2');
src: url('{{ t2i_atri_font_mirror }}/file/1775130739223_1774880715380_LXGWWenKai-Medium.woff2') format('woff2');
font-weight: 600;
}
@font-face {
font-family: 'LXGW WenKai Mono';
src: url('https://tc.ciallo.ccwu.cc/file/1775130738049_1774880717027_LXGWWenKaiMono-Regular.woff2') format('woff2');
src: url('{{ t2i_atri_font_mirror }}/file/1775130738049_1774880717027_LXGWWenKaiMono-Regular.woff2') format('woff2');
font-weight: 400;
}
@@ -55,7 +55,7 @@
body {
margin: 0;
padding: 0;
font-family: 'LXGW WenKai', 'Microsoft YaHei', sans-serif;
font-family: 'LXGW WenKai', {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, 'Microsoft YaHei', sans-serif;
color: var(--text-main);
background: transparent;
}
@@ -73,7 +73,7 @@
radial-gradient(circle at 15% 12%, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0) 26%),
linear-gradient(rgba(117, 193, 240, 0.08) 1px, transparent 1px),
linear-gradient(90deg, rgba(117, 193, 240, 0.08) 1px, transparent 1px),
url('https://tc.ciallo.ccwu.cc/file/1775130588385_1774881257527_bg1.webp');
url('{{ t2i_atri_font_mirror }}/file/1775130588385_1774881257527_bg1.webp');
background-size: auto, auto, auto, 26px 26px, 26px 26px, cover;
background-position: center, center, center, center, center, center;
border: 1px solid var(--border);
@@ -335,7 +335,7 @@
background:
linear-gradient(120deg, rgba(44, 118, 161, 0.78) 0%, rgba(88, 176, 221, 0.62) 56%, rgba(174, 226, 247, 0.38) 100%),
linear-gradient(135deg, rgba(255, 255, 255, 0.10), rgba(255, 255, 255, 0) 50%),
url('https://tc.ciallo.ccwu.cc/file/1775130588385_1774881257527_bg1.webp') center center / cover no-repeat;
url('{{ t2i_atri_font_mirror }}/file/1775130588385_1774881257527_bg1.webp') center center / cover no-repeat;
color: #fff;
box-shadow: 0 16px 40px rgba(77, 163, 210, 0.18);
position: relative;
@@ -1667,7 +1667,7 @@
<div class="float-sticker sticker-moon-2"><svg class="icon-svg">
<use href="#icon-moon-star"></use>
</svg></div>
<img class="deco-character" src="https://tc.ciallo.ccwu.cc/file/1775130613783_1774881310058_atri3.webp"
<img class="deco-character" src="{{ t2i_atri_font_mirror }}/file/1775130613783_1774881310058_atri3.webp"
alt="ATRI decor">
<div class="inner">
@@ -1696,7 +1696,7 @@
</div>
Overview
<img class="hero-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130600453_1774881268554_可爱.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130600453_1774881268554_可爱.webp"
alt="cute icon">
</div>
<h2 class="hero-title">来看看今天<br>都发生了什<br>么吧!</h2>
@@ -1705,7 +1705,7 @@
位群友浮出水面参与了互动哦!我都仔细做好了备忘录哦,哼哼!
</div>
<img class="hero-character"
src="https://tc.ciallo.ccwu.cc/file/1775130626446_1774881312214_atri1.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130626446_1774881312214_atri1.webp"
alt="ATRI main">
</div>
@@ -1721,7 +1721,7 @@
</div>
</div>
<img class="peak-image"
src="https://tc.ciallo.ccwu.cc/file/1775130623112_1774881319340_atri4.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130623112_1774881319340_atri4.webp"
alt="ATRI peak">
</div>
</section>
@@ -1773,13 +1773,13 @@
</svg></div>
<div>
<h3 class="section-title">心跳潮汐<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130585446_1774881263342_观察.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130585446_1774881263342_观察.webp"
alt="kawaii icon"></h3>
<div class="section-sub">一整天的心跳节拍,由亚托莉为您完美记录</div>
</div>
</div>
<div class="section-badge">TIDE CHART <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130609119_1774881269400_可爱-1.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130609119_1774881269400_可爱-1.webp"
alt="badge icon"></div>
</div>
<div class="html-slot">{{ hourly_chart_html | safe }}</div>
@@ -1793,13 +1793,13 @@
</svg></div>
<div>
<h3 class="section-title">高亮记忆碎片<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130581843_1774881262835_疑惑.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130581843_1774881262835_疑惑.webp"
alt="kawaii icon"></h3>
<div class="section-sub">亚托莉捕获的最亮眼的记忆碎片!</div>
</div>
</div>
<div class="section-badge">TOPIC BOARD <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130585446_1774881263342_观察.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130585446_1774881263342_观察.webp"
alt="badge icon"></div>
</div>
<div class="html-slot">{{ topics_html | safe }}</div>
@@ -1813,13 +1813,13 @@
</svg></div>
<div>
<h3 class="section-title">神人名片颁发<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130598778_1774881267181_得意.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130598778_1774881267181_得意.webp"
alt="kawaii icon"></h3>
<div class="section-sub">颁发给各位的高性能称号!</div>
</div>
</div>
<div class="section-badge">SPOTLIGHT <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130599184_1774881267385_得意-1.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130599184_1774881267385_得意-1.webp"
alt="badge icon"></div>
</div>
<div class="html-slot title-grid">{{ titles_html | safe }}</div>
@@ -1833,13 +1833,13 @@
</svg></div>
<div>
<h3 class="section-title">亚托莉的宝藏瓶<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130605165_1774881270686_爱心.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130605165_1774881270686_爱心.webp"
alt="kawaii icon"></h3>
<div class="section-sub">亚托莉偷偷记在小本子上的宝藏名言!</div>
</div>
</div>
<div class="section-badge">PRECIOUS WORDS <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130588642_1774881263748_可爱-3.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130588642_1774881263748_可爱-3.webp"
alt="badge icon"></div>
</div>
<div class="html-slot">{{ quotes_html | safe }}</div>
@@ -1854,13 +1854,13 @@
</svg></div>
<div>
<h3 class="section-title">亚托莉观测报告<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130609119_1774881269400_可爱-1.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130609119_1774881269400_可爱-1.webp"
alt="kawaii icon"></h3>
<div class="section-sub">来自高性能亚托莉的每日特别观测报告!</div>
</div>
</div>
<div class="section-badge">GROUP VIBE <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130585446_1774881263342_观察.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130585446_1774881263342_观察.webp"
alt="badge icon"></div>
</div>
<div class="html-slot">{{ chat_quality_html | safe }}</div>
@@ -1875,13 +1875,13 @@
</svg></div>
<div>
<h3 class="section-title">能量解析雷达<img class="section-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130591277_1774881264350_睡觉.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130591277_1774881264350_睡觉.webp"
alt="kawaii icon"></h3>
<div class="section-sub">维持亚托莉运行与心跳的能量消耗~</div>
</div>
</div>
<div class="section-badge">ENERGY COST <img class="badge-kawaii"
src="https://tc.ciallo.ccwu.cc/file/1775130591487_1774881264336_不要.webp"
src="{{ t2i_atri_font_mirror }}/file/1775130591487_1774881264336_不要.webp"
alt="badge icon"></div>
</div>
<div class="token-grid">
@@ -1922,4 +1922,7 @@
</body>
</html>
</html>
@@ -1,8 +1,8 @@
{% set quote_emojis = [
'https://tc.ciallo.ccwu.cc/file/1775132814629_1774881270686_爱心.gif',
'https://tc.ciallo.ccwu.cc/file/1775132815504_1774881268554_可爱.gif',
'https://tc.ciallo.ccwu.cc/file/1775132809943_1774881264350_睡觉.gif',
'https://tc.ciallo.ccwu.cc/file/1775175892953_1774881267664_舔屏幕.gif'
{% set quote_emojis = [
'{{ t2i_atri_font_mirror }}/file/1775132814629_1774881270686_爱心.gif',
'{{ t2i_atri_font_mirror }}/file/1775132815504_1774881268554_可爱.gif',
'{{ t2i_atri_font_mirror }}/file/1775132809943_1774881264350_睡觉.gif',
'{{ t2i_atri_font_mirror }}/file/1775175892953_1774881267664_舔屏幕.gif'
] %}
{% for quote in quotes %}
<div class="quote-wrapper">
@@ -30,4 +30,4 @@
</div>
</div>
</div>
{% endfor %}
{% endfor %}
@@ -1,9 +1,9 @@
{% set topic_emojis = [
'https://tc.ciallo.ccwu.cc/file/1775132804506_1774881263342_观察.gif',
'https://tc.ciallo.ccwu.cc/file/1775132805081_1774881262835_疑惑.gif',
'https://tc.ciallo.ccwu.cc/file/1775132815504_1774881268554_可爱.gif',
'https://tc.ciallo.ccwu.cc/file/1775132817115_1774881269400_可爱-1.gif',
'https://tc.ciallo.ccwu.cc/file/1775132805485_1774881263748_可爱-3.gif'
{% set topic_emojis = [
'{{ t2i_atri_font_mirror }}/file/1775132804506_1774881263342_观察.gif',
'{{ t2i_atri_font_mirror }}/file/1775132805081_1774881262835_疑惑.gif',
'{{ t2i_atri_font_mirror }}/file/1775132815504_1774881268554_可爱.gif',
'{{ t2i_atri_font_mirror }}/file/1775132817115_1774881269400_可爱-1.gif',
'{{ t2i_atri_font_mirror }}/file/1775132805485_1774881263748_可爱-3.gif'
] %}
{% set topic_rank_colors = [
{'bg': 'linear-gradient(135deg, #a9d8ff 0%, #8fc5ff 48%, #8aaeff 100%)', 'text': '#ffffff', 'shadow': 'rgba(126, 177,
@@ -41,4 +41,4 @@
</div>
<img class="item-emoji topic-emoji" src="{{ topic_emojis | random }}" alt="话题表情">
</li>
{% endfor %}
{% endfor %}
@@ -1,8 +1,8 @@
{% set title_emojis = [
'https://tc.ciallo.ccwu.cc/file/1775132813334_1774881267181_得意.gif',
'https://tc.ciallo.ccwu.cc/file/1775132808652_1774881267385_得意-1.gif',
'https://tc.ciallo.ccwu.cc/file/1775132804506_1774881263342_观察.gif',
'https://tc.ciallo.ccwu.cc/file/1775132811492_1774881264336_不要.gif'
{% set title_emojis = [
'{{ t2i_atri_font_mirror }}/file/1775132813334_1774881267181_得意.gif',
'{{ t2i_atri_font_mirror }}/file/1775132808652_1774881267385_得意-1.gif',
'{{ t2i_atri_font_mirror }}/file/1775132804506_1774881263342_观察.gif',
'{{ t2i_atri_font_mirror }}/file/1775132811492_1774881264336_不要.gif'
] %}
{% set title_badge_colors = [
{'bg': 'linear-gradient(135deg, #ffcadf 0%, #ffc1cc 45%, #ffd9b8 100%)', 'text': '#b85c7b', 'shadow': 'rgba(255, 177, 203, 0.28)', 'border': 'rgba(255, 184, 210, 0.72)'},
@@ -40,3 +40,4 @@
<img class="item-emoji title-emoji" src="{{ title_emojis | random }}" alt="称号表情" style="z-index: 2;">
</li>
{% endfor %}
@@ -1,4 +1,4 @@
<div class="miku-activity-chart" style="display: flex; flex-direction: column; gap: 12px; width: 100%;">
<div class="miku-activity-chart" style="display: flex; flex-direction: column; gap: 12px; width: 100%;">
{# 柱状图主体层:确保底部对齐 #}
<div style="display: flex; align-items: flex-end; justify-content: space-between; height: 160px; gap: 4px; padding-bottom: 5px; border-bottom: 2px solid rgba(57, 197, 187, 0.1);">
{% set chart_colors = [
@@ -43,3 +43,4 @@
{% endfor %}
</div>
</div>
@@ -1,4 +1,4 @@
<div class="card-common miku-chat-quality" style="padding: 30px;">
<div class="card-common miku-chat-quality" style="padding: 30px;">
<div class="miku-chat-quality-head" style="display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 25px; border-bottom: 2px dashed var(--miku-blue); padding-bottom: 15px;">
<div style="font-family: var(--font-title); font-size: 1.6rem; color: var(--miku-dark);">{{ title }}</div>
<div style="font-family: var(--font-num); color: var(--text-sub); background: var(--miku-blue); padding: 4px 12px; border-radius: 20px; font-size: 0.9rem;">{{ subtitle }}</div>
@@ -40,3 +40,4 @@
</div>
</div>
</div>
@@ -1,12 +1,14 @@
<!DOCTYPE html>
<html lang="zh-Hant">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>群聊日常分析看板 · {{current_date}}</title>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;700;800&family=Noto+Sans+SC:wght@400;500;700&family=Outfit:wght@400;600;800&family=Share+Tech+Mono&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=Noto+Sans+TC:wght@400;500;700;800&family=Noto+Sans+SC:wght@400;500;700&family=Outfit:wght@400;600;800&family=Share+Tech+Mono&display=swap"
rel="stylesheet">
<link
href="https://cdn.jsdelivr.net/npm/@proj-airi/font-cjkfonts-allseto@0.9.0/dist/index.css"
@@ -28,8 +30,8 @@
--accent-dark: #2C3E50;
--radius: 12px;
--font-main: 'Noto Sans TC', 'Noto Sans SC', 'Microsoft JhengHei', 'PingFang TC', 'Heiti TC', 'Noto Sans CJK TC', 'Source Han Sans TC', sans-serif;
--font-title: 'cjkfonts AllSeto', 'Noto Sans TC', 'Noto Sans SC', 'Microsoft JhengHei', 'PingFang TC', 'Heiti TC', 'Noto Sans CJK TC', 'Source Han Sans TC', sans-serif;
--font-main: {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, 'Microsoft JhengHei', 'PingFang TC', 'Heiti TC', 'Noto Sans CJK TC', 'Source Han Sans TC', sans-serif;
--font-title: 'cjkfonts AllSeto', {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, 'Microsoft JhengHei', 'PingFang TC', 'Heiti TC', 'Noto Sans CJK TC', 'Source Han Sans TC', sans-serif;
--font-num: 'Outfit', sans-serif;
--font-mono: 'Share Tech Mono', monospace;
@@ -855,3 +857,7 @@
</body>
</html>
@@ -1,12 +1,14 @@
<!DOCTYPE html>
<html lang="zh-Hant">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>群聊日常分析看板 · {{current_date}}</title>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;700;800&family=Noto+Sans+SC:wght@400;500;700&family=Outfit:wght@400;600;800&family=Share+Tech+Mono&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=Noto+Sans+TC:wght@400;500;700;800&family=Noto+Sans+SC:wght@400;500;700&family=Outfit:wght@400;600;800&family=Share+Tech+Mono&display=swap"
rel="stylesheet">
<link
href="https://cdn.jsdelivr.net/npm/@proj-airi/font-cjkfonts-allseto@0.9.0/dist/index.css"
@@ -28,8 +30,8 @@
--accent-dark: #2C3E50;
--radius: 12px;
--font-main: 'Noto Sans TC', 'Noto Sans SC', 'Microsoft JhengHei', 'PingFang TC', 'Heiti TC', 'Noto Sans CJK TC', 'Source Han Sans TC', sans-serif;
--font-title: 'cjkfonts AllSeto', 'Noto Sans TC', 'Noto Sans SC', 'Microsoft JhengHei', 'PingFang TC', 'Heiti TC', 'Noto Sans CJK TC', 'Source Han Sans TC', cursive;
--font-main: {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, 'Microsoft JhengHei', 'PingFang TC', 'Heiti TC', 'Noto Sans CJK TC', 'Source Han Sans TC', sans-serif;
--font-title: 'cjkfonts AllSeto', {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, 'Microsoft JhengHei', 'PingFang TC', 'Heiti TC', 'Noto Sans CJK TC', 'Source Han Sans TC', cursive;
--font-num: 'Outfit', sans-serif;
--font-mono: 'Share Tech Mono', monospace;
@@ -638,3 +640,7 @@
</body>
</html>
@@ -1,4 +1,4 @@
{% if quotes %}
{% if quotes %}
{% for quote in quotes %}
<div class="miku-quote-row" style="margin-bottom: 25px; display: flex; flex-direction: column; align-items: {% if loop.index0 is even %}flex-start{% else %}flex-end{% endif %};">
<div class="miku-quote-wrap" style="display: flex; gap: 15px; max-width: 85%; {% if loop.index0 is odd %}flex-direction: row-reverse;{% endif %}">
@@ -27,3 +27,4 @@
</div>
{% endfor %}
{% endif %}
@@ -1,4 +1,4 @@
{% for topic in topics %}
{% for topic in topics %}
<div class="card-common miku-topic-card" style="padding: 24px; border-left: 6px solid var(--miku-base); display: flex; gap: 20px; margin-bottom: 25px; transition: all 0.3s ease;">
<div style="font-family: var(--font-num); font-size: 1.8rem; color: var(--miku-pink-light); font-weight: 800; padding-top: 2px; opacity: 0.8;">
#{{ "%02d" | format(topic.index) }}
@@ -33,3 +33,4 @@
</div>
</div>
{% endfor %}
@@ -1,4 +1,4 @@
{% if titles %}
{% if titles %}
<div class="miku-user-title-grid" style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px;">
{% for title in titles %}
<div class="card-common miku-user-title-card" style="padding: 24px; margin-bottom: 0; border-top: 4px solid var(--miku-light); display: flex; flex-direction: column; gap: 15px; position: relative; overflow: hidden;">
@@ -35,3 +35,4 @@
{% endfor %}
</div>
{% endif %}
@@ -1,4 +1,4 @@
{% for item in chart_data %}
{% for item in chart_data %}
<div class="hour-bar-container">
<div class="hour-label">{{ "%02d" | format(item.hour) }}:00</div>
<div class="bar-wrapper">
@@ -11,4 +11,4 @@
{% endif %}
</div>
</div>
{% endfor %}
{% endfor %}
@@ -1,4 +1,4 @@
<style>
<style>
.format-quality-item {
background: #ffffff;
border: 1px solid #dee2e6;
@@ -128,3 +128,4 @@
</div>
</div>
@@ -1,12 +1,14 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>群聊日常分析报告</title>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=Inter:wght@300;400;500;600&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=Noto+Serif+TC:wght@400;600;700&family=Noto+Serif+SC:wght@400;600;700&family=Inter:wght@300;400;500;600&display=swap"
rel="stylesheet">
<style>
:root {
@@ -27,7 +29,7 @@
}
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
font-family: 'Inter', {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, -apple-system, BlinkMacSystemFont, sans-serif;
background-color: var(--bg-body);
color: var(--text-main);
line-height: 1.6;
@@ -55,7 +57,7 @@
}
.header h1 {
font-family: 'Noto Serif SC', serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
font-size: 2.4em;
font-weight: 700;
margin-bottom: 12px;
@@ -85,7 +87,7 @@
}
.section-title {
font-family: 'Noto Serif SC', serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
font-size: 1.5em;
font-weight: 600;
margin-bottom: 25px;
@@ -157,7 +159,7 @@
}
.active-period .time {
font-family: 'Noto Serif SC', serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
font-size: 2.2em;
font-weight: 400;
margin-bottom: 6px;
@@ -401,7 +403,7 @@
}
.quote-content {
font-family: 'Noto Serif SC', serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
font-size: 1.1em;
color: var(--text-main);
font-weight: 500;
@@ -538,4 +540,7 @@
</div>
</body>
</html>
</html>
@@ -1,12 +1,14 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>群聊日常分析报告</title>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=Inter:wght@300;400;500;600&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=Noto+Serif+TC:wght@400;600;700&family=Noto+Serif+SC:wght@400;600;700&family=Inter:wght@300;400;500;600&display=swap"
rel="stylesheet">
<style>
:root {
@@ -27,7 +29,7 @@
}
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
font-family: 'Inter', {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, -apple-system, BlinkMacSystemFont, sans-serif;
background-color: var(--bg-body);
color: var(--text-main);
line-height: 1.6;
@@ -55,7 +57,7 @@
}
.header h1 {
font-family: 'Noto Serif SC', serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
font-size: 2.4em;
font-weight: 700;
margin-bottom: 12px;
@@ -85,7 +87,7 @@
}
.section-title {
font-family: 'Noto Serif SC', serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
font-size: 1.5em;
font-weight: 600;
margin-bottom: 25px;
@@ -157,7 +159,7 @@
}
.active-period .time {
font-family: 'Noto Serif SC', serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
font-size: 2.2em;
font-weight: 400;
margin-bottom: 6px;
@@ -401,7 +403,7 @@
}
.quote-content {
font-family: 'Noto Serif SC', serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
font-size: 1.1em;
color: var(--text-main);
font-weight: 500;
@@ -538,4 +540,7 @@
</div>
</body>
</html>
</html>
@@ -1,4 +1,4 @@
{% if quotes %}
{% if quotes %}
<div class="section">
<h2 class="section-title">群圣经</h2>
{% for quote in quotes %}
@@ -9,4 +9,4 @@
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if topics %}
{% if topics %}
<div class="section">
<h2 class="section-title">热门话题</h2>
<div class="topics-grid">
@@ -14,4 +14,4 @@
{% endfor %}
</div>
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if titles %}
{% if titles %}
<div class="section">
<h2 class="section-title">群友称号</h2>
<div class="users-grid">
@@ -27,3 +27,4 @@
</div>
</div>
{% endif %}
@@ -1,4 +1,4 @@
{% if chart_data %}
{% if chart_data %}
{% for item in chart_data %}
<div class="activity-col">
<span class="activity-val-top">{{ item.count }}</span>
@@ -10,4 +10,4 @@
<div class="activity-col" style="flex:1; justify-content: center; height: 100px;">
<div class="comment">// NO_DATA_STREAM</div>
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
<style>
<style>
.hack-quality-item {
background: #000;
border: 2px solid #ff9900;
@@ -185,3 +185,4 @@
<span>{{ summary }}</span>
</div>
</div>
@@ -1,14 +1,14 @@
<!DOCTYPE html>
<html lang="zh-Hant">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Night Mode Analysis Portal</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;600;800&family=Noto+Sans+TC:wght@400;700&family=Noto+Sans+SC:wght@400;700&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;600;800&family=Noto+Sans+TC:wght@400;700&family=Noto+Sans+SC:wght@400;700&display=swap"
rel="stylesheet">
{% include 'shared_styles.html' %}
</head>
@@ -123,3 +123,7 @@
</body>
</html>
@@ -1,14 +1,14 @@
<!DOCTYPE html>
<html lang="zh-Hant">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Night Mode Analysis Portal</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;600;800&family=Noto+Sans+TC:wght@400;700&family=Noto+Sans+SC:wght@400;700&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;600;800&family=Noto+Sans+TC:wght@400;700&family=Noto+Sans+SC:wght@400;700&display=swap"
rel="stylesheet">
{% include 'shared_styles.html' %}
</head>
@@ -123,3 +123,7 @@
</body>
</html>
@@ -1,4 +1,4 @@
{% if quotes %}
{% if quotes %}
<div class="user-grid">
{% for quote in quotes %}
<div class="quote-item avoid-break">
@@ -21,4 +21,4 @@
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
<style>
 <style>
:root {
--bg-deep: #0a0a0a;
--bg-panel: #141414;
@@ -16,7 +16,7 @@
--grid-color: rgba(255, 255, 255, 0.03);
--font-mono: 'JetBrains Mono', monospace;
--font-body: 'Inter', 'Noto Sans TC', 'Noto Sans SC', 'Microsoft JhengHei', 'PingFang TC', sans-serif;
--font-body: 'Inter', {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, 'Microsoft JhengHei', 'PingFang TC', sans-serif;
}
* {
@@ -776,3 +776,7 @@
}
}
</style>
@@ -1,4 +1,4 @@
{% if topics %}
{% if topics %}
<div class="topic-list">
{% for topic in topics %}
<div class="topic-item avoid-break">
@@ -8,4 +8,4 @@
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if titles %}
{% if titles %}
<div class="user-grid">
{% for title in titles %}
<div class="user-card avoid-break" style="position: relative; overflow: hidden;">
@@ -27,3 +27,4 @@
{% endfor %}
</div>
{% endif %}
@@ -1,4 +1,4 @@
{% if chart_data %}
{% if chart_data %}
<div class="activity-container">
{% for item in chart_data %}
<div class="activity-col">
@@ -12,4 +12,4 @@
<div class="activity-col" style="flex:1; justify-content: center; height: 100px;">
<div class="topic-meta">NO_DATA_AVAILABLE_FOR_ACTIVITY_SPECTRUM</div>
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
<style>
<style>
.retro-quality-item {
background: #FFFFFF;
border: 3px solid var(--c-text);
@@ -174,3 +174,4 @@
<span>{{ summary }}</span>
</div>
</div>
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<title>Retro Futurism Daily Export</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Oswald:wght@400;600&family=JetBrains+Mono:wght@400;600&family=Noto+Sans+SC:wght@400;500&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=Oswald:wght@400;600&family=JetBrains+Mono:wght@400;600&family=Noto+Sans+TC:wght@400;500&family=Noto+Sans+SC:wght@400;500&display=swap"
rel="stylesheet">
<style>
@font-face {
@@ -50,7 +50,7 @@
/* Fonts */
--font-display: "Oswald", "Oswald-Fallback", Impact, sans-serif;
--font-mono: "JetBrains Mono", monospace;
--font-body: "Noto Sans SC", sans-serif;
--font-body: {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, sans-serif;
}
* {
@@ -840,4 +840,7 @@
</div>
</body>
</html>
</html>
@@ -1,13 +1,13 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<title>Retro Futurism Daily Export</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Oswald:wght@400;600&family=JetBrains+Mono:wght@400;600&family=Noto+Sans+SC:wght@400;500&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=Oswald:wght@400;600&family=JetBrains+Mono:wght@400;600&family=Noto+Sans+TC:wght@400;500&family=Noto+Sans+SC:wght@400;500&display=swap"
rel="stylesheet">
<style>
@font-face {
@@ -50,7 +50,7 @@
/* Fonts */
--font-display: "Oswald", "Oswald-Fallback", Impact, sans-serif;
--font-mono: "JetBrains Mono", monospace;
--font-body: "Noto Sans SC", sans-serif;
--font-body: {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, sans-serif;
}
* {
@@ -840,4 +840,7 @@
</div>
</body>
</html>
</html>
@@ -1,4 +1,4 @@
{% if quotes %}
{% if quotes %}
{% for quote in quotes %}
<section class="quote-item">
{% if quote.avatar_url %}
@@ -17,4 +17,4 @@
</div>
</section>
{% endfor %}
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if topics %}
{% if topics %}
{% for topic in topics %}
<section class="topic-item">
<div class="topic-content">
@@ -9,4 +9,4 @@
</div>
</section>
{% endfor %}
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if titles %}
{% if titles %}
{% for title in titles %}
<div class="title-item" style="position: relative; overflow: hidden;">
<div class="title-avatar-wrap">
@@ -25,3 +25,4 @@
</div>
{% endfor %}
{% endif %}
@@ -1,4 +1,4 @@
<div class="chart-section-horizontal">
<div class="chart-section-horizontal">
{% for item in chart_data %}
{% set bar_percentage = item.percentage | float %}
{% if bar_percentage < 0 %}
@@ -38,3 +38,4 @@
</div>
{% endfor %}
</div>
@@ -1,4 +1,4 @@
<style>
<style>
.quality-item {
background: #fff9c4;
/* notes paper color */
@@ -293,3 +293,4 @@
</div>
</div>
</div>
@@ -1,15 +1,15 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>五彩斑斓的一天,来看看群里发生了什么吧! · {{current_date}}</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<!-- 引入手写字体和正文阅读字体 -->
<link
href="https://fonts.googleapis.com/css2?family=ZCOOL+KuaiLe&family=Long+Cang&family=Noto+Sans+SC:wght@400;500;700&family=Patrick+Hand&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=ZCOOL+KuaiLe&family=Long+Cang&family=Noto+Sans+TC:wght@400;500;700&family=Noto+Sans+SC:wght@400;500;700&family=Patrick+Hand&display=swap"
rel="stylesheet">
<style>
@@ -42,7 +42,7 @@
/* 标题字体 */
--font-hand: 'Patrick Hand', "KaiTi", "STKaiti", serif;
/* 手写体 */
--font-body: 'Noto Sans SC', sans-serif;
--font-body: {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, sans-serif;
/* 正文体 */
}
@@ -1192,4 +1192,7 @@
</div>
</body>
</html>
</html>
@@ -1,15 +1,15 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>五彩斑斓的一天,来看看群里发生了什么吧! · {{current_date}}</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<!-- 引入手写字体和正文阅读字体 -->
<link
href="https://fonts.googleapis.com/css2?family=ZCOOL+KuaiLe&family=Long+Cang&family=Noto+Sans+SC:wght@400;500;700&family=Patrick+Hand&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=ZCOOL+KuaiLe&family=Long+Cang&family=Noto+Sans+TC:wght@400;500;700&family=Noto+Sans+SC:wght@400;500;700&family=Patrick+Hand&display=swap"
rel="stylesheet">
<style>
@@ -42,7 +42,7 @@
/* 标题字体 */
--font-hand: 'Patrick Hand', "KaiTi", "STKaiti", serif;
/* 手写体 */
--font-body: 'Noto Sans SC', sans-serif;
--font-body: {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, sans-serif;
/* 正文体 */
}
@@ -1192,4 +1192,7 @@
</div>
</body>
</html>
</html>
@@ -1,4 +1,4 @@
{% if quotes %}
{% if quotes %}
<div class="quotes-section">
<div class="section-title" style="justify-content: center;">
<svg class="doodle" viewBox="0 0 24 24">
@@ -32,4 +32,4 @@
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if topics %}
{% if topics %}
<div class="topic-section">
<div class="paper-holes">
<div class="hole"></div>
@@ -31,4 +31,4 @@
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if titles %}
{% if titles %}
<div class="user-section">
<div class="section-title" style="justify-content: center;">
<svg class="doodle" viewBox="0 0 24 24">
@@ -41,3 +41,4 @@
</div>
</div>
{% endif %}
@@ -1,4 +1,4 @@
<div style="display: flex; flex-direction: column; gap: 5px;">
<div style="display: flex; flex-direction: column; gap: 5px;">
{% for item in chart_data %}
<div style="display: flex; align-items: center;">
<span style="width: 50px;">{{ "%02d" | format(item.hour) }}:00</span>
@@ -8,4 +8,4 @@
<span style="width: 30px; text-align: right;">{{ item.count }}</span>
</div>
{% endfor %}
</div>
</div>
@@ -1,4 +1,4 @@
<style>
<style>
.simple-quality-item {
background: #ffffff;
border: 1px solid #e0e0e0;
@@ -118,3 +118,4 @@
</div>
</div>
@@ -1,12 +1,15 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<title>Simple Report</title>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link href="{{ t2i_google_fonts_mirror }}/css2?family=Noto+Sans+TC:wght@400;700&family=Noto+Sans+SC:wght@400;700&display=swap" rel="stylesheet">
<style>
body {
font-family: sans-serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, sans-serif;
padding: 20px;
}
@@ -60,4 +63,7 @@
</div>
</body>
</html>
</html>
@@ -1,12 +1,15 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<title>Simple Report</title>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link href="{{ t2i_google_fonts_mirror }}/css2?family=Noto+Sans+TC:wght@400;700&family=Noto+Sans+SC:wght@400;700&display=swap" rel="stylesheet">
<style>
body {
font-family: sans-serif;
font-family: {% if t2i_font_source == 'Mainland' %}'Noto Sans SC', 'Noto Sans TC'{% else %}'Noto Sans TC', 'Noto Sans SC'{% endif %}, sans-serif;
padding: 20px;
}
@@ -60,4 +63,7 @@
</div>
</body>
</html>
</html>
@@ -1,4 +1,4 @@
{% if quotes %}
{% if quotes %}
<div class="section">
<h2>群圣经</h2>
{% for quote in quotes %}
@@ -13,4 +13,4 @@
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if topics %}
{% if topics %}
<div class="section">
<h2>热门话题</h2>
{% for item in topics %}
@@ -9,4 +9,4 @@
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if titles %}
{% if titles %}
<div class="section">
<h2>群友称号</h2>
{% for item in titles %}
@@ -13,3 +13,4 @@
{% endfor %}
</div>
{% endif %}
@@ -1,4 +1,4 @@
{% if chart_data %}
{% if chart_data %}
<div class="sf-chart-container"
style="display: flex; height: 260px; align-items: flex-end; justify-content: space-around; width: 100%; padding-bottom: 40px; box-sizing: border-box;">
{% for item in chart_data %}
@@ -41,4 +41,4 @@
style="display:flex; align-items:center; justify-content:center; height: 200px; width: 100%; color: #888; font-style: italic;">
🏮 尚无活跃记录 🏮
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
<style>
<style>
.sf-quality-item {
background: #fff5f5;
border: 2px solid #ff4d4f;
@@ -150,3 +150,4 @@
</div>
</div>
@@ -1,14 +1,14 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<title>春节特供 · 群聊日报</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<!-- 引入书法字体和节日字体 -->
<link
href="https://fonts.googleapis.com/css2?family=Ma+Shan+Zheng&family=ZCOOL+XiaoWei&family=Noto+Serif+SC:wght@400;700&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=Ma+Shan+Zheng&family=ZCOOL+XiaoWei&family=Noto+Serif+TC:wght@400;700&family=Noto+Serif+SC:wght@400;700&display=swap"
rel="stylesheet">
<style>
:root {
@@ -24,7 +24,7 @@
--font-calligraphy: 'Ma Shan Zheng', cursive;
--font-heading: 'ZCOOL XiaoWei', serif;
--font-body: 'Noto Serif SC', serif;
--font-body: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
}
* {
@@ -687,4 +687,7 @@
</div>
</body>
</html>
</html>
@@ -1,14 +1,13 @@
<!DOCTYPE html>
<html lang="zh-CN">
<!DOCTYPE html>
<html lang="{{ 'zh-CN' if t2i_font_source == 'Mainland' else 'zh-Hant' }}">
<head>
<meta charset="UTF-8">
<title>春节特供 · 群聊日报</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<!-- 引入书法字体和节日字体 -->
<link rel="preconnect" href="{{ t2i_google_fonts_mirror }}">
<link rel="preconnect" href="{{ t2i_gstatic_mirror }}" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Ma+Shan+Zheng&family=ZCOOL+XiaoWei&family=Noto+Serif+SC:wght@400;700&display=swap"
href="{{ t2i_google_fonts_mirror }}/css2?family=Ma+Shan+Zheng&family=ZCOOL+XiaoWei&family=Noto+Serif+TC:wght@400;700&family=Noto+Serif+SC:wght@400;700&display=swap"
rel="stylesheet">
<style>
:root {
@@ -24,7 +23,7 @@
--font-calligraphy: 'Ma Shan Zheng', cursive;
--font-heading: 'ZCOOL XiaoWei', serif;
--font-body: 'Noto Serif SC', serif;
--font-body: {% if t2i_font_source == 'Mainland' %}'Noto Serif SC', 'Noto Serif TC'{% else %}'Noto Serif TC', 'Noto Serif SC'{% endif %}, serif;
}
* {
@@ -687,4 +686,7 @@
</div>
</body>
</html>
</html>
@@ -1,4 +1,4 @@
{% if quotes %}
{% if quotes %}
<div class="sf-quote-timeline">
{% for quote in quotes %}
<div class="sf-quote-item {% if loop.index is even %}sf-right{% endif %} avoid-break">
@@ -21,4 +21,4 @@
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if topics %}
{% if topics %}
<div class="sf-topic-list">
{% for topic in topics %}
<div class="sf-topic-card avoid-break">
@@ -11,4 +11,4 @@
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
@@ -1,4 +1,4 @@
{% if titles %}
{% if titles %}
<div class="sf-user-masonry">
{% for title in titles %}
<div class="sf-user-card avoid-break" style="position: relative; overflow: hidden;">
@@ -27,3 +27,4 @@
{% endfor %}
</div>
{% endif %}