<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://ron.saltedkiss.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rin</id>
	<title>夜幕之下 - 用户贡献 [zh-cn]</title>
	<link rel="self" type="application/atom+xml" href="https://ron.saltedkiss.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rin"/>
	<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/Rin"/>
	<updated>2026-04-17T14:46:06Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=402</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=402"/>
		<updated>2026-03-28T14:11:24Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:fixed;inset:0;z-index:0;pointer-events:none;background:linear-gradient(rgba(255,255,255,0.62),rgba(255,255,255,0.58));backdrop-filter:blur(15px) saturate(155%);-webkit-backdrop-filter:blur(15px) saturate(155%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;align-items:stretch;max-width:1400px;margin:0 auto;padding:0 clamp(24px,4vw,80px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 左侧道具列表 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:220px;flex-shrink:0;border-right:1px solid rgba(255,150,170,0.18);padding:72px 0 60px;display:flex;flex-direction:column;gap:2px;position:sticky;top:0;height:100vh;overflow-y:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:11px;letter-spacing:2px;color:#b07080;padding:0 20px 16px;&amp;quot;&amp;gt;道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid #ff7676;background:rgba(255,150,170,0.08);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;font-weight:bold;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 style=&amp;quot;height:1px;background:rgba(255,150,170,0.12);margin:8px 20px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;d&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;e&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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;
&lt;br /&gt;
&amp;lt;!-- 右侧详情区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px clamp(32px,4vw,80px) 80px clamp(32px,4vw,72px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- item-a --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- 大图标区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- 文字区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#9a8090;font-style:italic;line-height:1.9;border-left:2px solid rgba(255,118,118,0.22);padding-left:12px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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;!-- 获取途径 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:16px;font-weight:bold;color:#1a1a1f;margin-bottom:4px;&amp;quot;&amp;gt;获取途径 &amp;lt;span style=&amp;quot;font-size:11px;font-weight:normal;color:#bbb;letter-spacing:1px;font-family:sans-serif;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:26px;height:2px;background:#ff7676;margin-bottom:22px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:560px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- item-b --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-c --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-d --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-d&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;材料 · 强化材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-e --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-e&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 恢复道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=401</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=401"/>
		<updated>2026-03-28T14:10:25Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;font-family:&#039;AlibabaPuHuiTi&#039;,sans-serif;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:fixed;inset:0;z-index:0;pointer-events:none;background:rgba(255,255,255,0.6);backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- 方案 A · 极简文字列表 · 图标主角大居中 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;border-bottom:1px solid rgba(200,150,160,0.12);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:200px;flex-shrink:0;border-right:1px solid rgba(200,150,160,0.12);display:flex;flex-direction:column;padding-top:56px;position:sticky;top:0;height:100vh;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 16px 10px;font-size:9px;letter-spacing:3px;color:#c09090;&amp;quot;&amp;gt;方案 A&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 12px 12px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;搜索道具…&amp;quot; style=&amp;quot;width:100%;box-sizing:border-box;background:rgba(0,0,0,0.04);border:none;border-bottom:1px solid rgba(200,150,160,0.3);padding:6px 4px;font-size:12px;color:#1a1a1f;outline:none;font-family:inherit;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;overflow-y:auto;padding-bottom:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:4px 16px 2px;font-size:9px;letter-spacing:2px;color:#c0a0a8;&amp;quot;&amp;gt;晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a1&amp;quot; data-active=&amp;quot;true&amp;quot; data-name=&amp;quot;中级歼灭勋章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#2a1a20;border-left:2px solid #ff7676;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a2&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;初级歼灭勋章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a3&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;高级歼灭勋章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:10px 16px 2px;font-size:9px;letter-spacing:2px;color:#c0a0a8;&amp;quot;&amp;gt;强化材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a4&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;欲火结晶&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a5&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;行动令&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a6&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;经验书&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a7&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;强化石&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:10px 16px 2px;font-size:9px;letter-spacing:2px;color:#c0a0a8;&amp;quot;&amp;gt;消耗品&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a8&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;夜幕徽章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a9&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;深渊之钥&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&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 style=&amp;quot;flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 60px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a1&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;width:100%;max-width:640px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:0;margin-bottom:52px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:96px;line-height:1;margin-bottom:16px;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2px;color:#c08090;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:32px;font-weight:bold;color:#1a1a1f;margin-bottom:6px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:28px;height:1px;background:#ff7676;opacity:0.7;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#3a2a30;line-height:1.9;text-align:center;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#a09098;font-style:italic;line-height:1.9;text-align:center;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-top:1px solid rgba(200,150,160,0.15);padding-top:28px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c09090;margin-bottom:18px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;gap:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a2&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a3&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a4&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a5&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a6&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;📖&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a7&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🪨&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a8&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🌙&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a9&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🗝️&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;深渊之钥&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&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;
&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- 方案 B · 图标网格列表 · 右侧横向展开 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;border-bottom:1px solid rgba(200,150,160,0.12);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:220px;flex-shrink:0;border-right:1px solid rgba(200,150,160,0.12);display:flex;flex-direction:column;padding-top:56px;position:sticky;top:0;height:100vh;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 16px 10px;font-size:9px;letter-spacing:3px;color:#c09090;&amp;quot;&amp;gt;方案 B&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 12px 12px;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div type=&amp;quot;text&amp;quot; placeholder=&amp;quot;搜索…&amp;quot; style=&amp;quot;width:100%;box-sizing:border-box;background:rgba(255,118,118,0.05);border:1px solid rgba(255,118,118,0.2);border-radius:3px;padding:6px 10px;font-size:12px;color:#1a1a1f;outline:none;font-family:inherit;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;overflow-y:auto;padding:4px 8px 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#c0a0a8;padding:4px 8px 6px;&amp;quot;&amp;gt;晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-bottom:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b1&amp;quot; data-active=&amp;quot;true&amp;quot; data-name=&amp;quot;中级歼灭勋章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(255,118,118,0.08);border:1px solid rgba(255,118,118,0.25);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#2a1a20;text-align:center;line-height:1.3;&amp;quot;&amp;gt;中级勋章&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b2&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;初级歼灭勋章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;初级勋章&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b3&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;高级歼灭勋章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;高级勋章&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 style=&amp;quot;font-size:9px;letter-spacing:2px;color:#c0a0a8;padding:4px 8px 6px;&amp;quot;&amp;gt;强化 / 消耗&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid;grid-template-columns:repeat(3,1fr);gap:4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b4&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;欲火结晶&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;欲火结晶&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b5&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;行动令&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;行动令&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b6&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;经验书&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;📖&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;经验书&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b7&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;强化石&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🪨&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;强化石&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b8&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;夜幕徽章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🌙&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b9&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;深渊之钥&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🗝️&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;深渊之钥&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px 60px 80px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b1&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:40px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:140px;height:140px;border-radius:20px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:76px;box-shadow:0 4px 24px rgba(0,0,0,0.06);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;text-align:center;margin-top:10px;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:220px;padding-top:6px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:1.5px;color:#c07080;margin-bottom:8px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:30px;font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:12px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:28px;height:2px;background:#ff7676;margin-bottom:14px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#a09098;font-style:italic;line-height:1.85;padding-left:10px;border-left:2px solid rgba(255,118,118,0.2);&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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 style=&amp;quot;border-top:1px solid rgba(200,150,160,0.12);padding-top:28px;margin-top:36px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c09090;margin-bottom:16px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:520px;display:flex;flex-direction:column;gap:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b2&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b3&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b4&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b5&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b6&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📖&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b7&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🪨&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b8&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🌙&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b9&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🗝️&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&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;
&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- 方案 C · 宽列表带小图标行 · 右侧大字幕感 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:260px;flex-shrink:0;border-right:1px solid rgba(200,150,160,0.12);display:flex;flex-direction:column;padding-top:56px;position:sticky;top:0;height:100vh;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 20px 10px;font-size:9px;letter-spacing:3px;color:#c09090;&amp;quot;&amp;gt;方案 C&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 16px 14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div type=&amp;quot;text&amp;quot; placeholder=&amp;quot;搜索道具名称…&amp;quot; style=&amp;quot;width:100%;box-sizing:border-box;background:transparent;border:none;border-bottom:1px solid rgba(200,150,160,0.25);padding:7px 0;font-size:12px;color:#1a1a1f;outline:none;font-family:inherit;letter-spacing:0.5px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;overflow-y:auto;padding-bottom:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#d0b0b8;padding:6px 20px 6px;&amp;quot;&amp;gt;晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c1&amp;quot; data-active=&amp;quot;true&amp;quot; data-name=&amp;quot;中级歼灭勋章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;background:rgba(255,118,118,0.06);border-left:2px solid #ff7676;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#1a1a1f;line-height:1.3;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c2&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;初级歼灭勋章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c3&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;高级歼灭勋章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 style=&amp;quot;font-size:9px;letter-spacing:2px;color:#d0b0b8;padding:10px 20px 6px;&amp;quot;&amp;gt;强化 / 消耗&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c4&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;欲火结晶&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c5&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;行动令&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c6&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;经验书&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;📖&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c7&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;强化石&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🪨&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c8&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;夜幕徽章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🌙&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c9&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;深渊之钥&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🗝️&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;深渊之钥&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px 60px 80px;display:flex;align-items:flex-start;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c1&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:flex;align-items:flex-start;gap:52px;width:100%;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;padding-top:4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:120px;height:120px;border-radius:18px;background:rgba(255,255,255,0.45);border:1px solid rgba(255,200,220,0.35);display:flex;align-items:center;justify-content:center;font-size:64px;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:220px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:36px;font-weight:bold;color:#1a1a1f;line-height:1.1;margin-bottom:8px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:24px;height:1px;background:#ff7676;margin-bottom:20px;opacity:0.7;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.95;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#a09098;font-style:italic;line-height:1.9;margin-bottom:40px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c09090;margin-bottom:14px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:480px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c2&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c3&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c4&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c5&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c6&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📖&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c7&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🪨&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c8&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🌙&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c9&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🗝️&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&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;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=400</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=400"/>
		<updated>2026-03-28T14:09:22Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;font-family:&#039;AlibabaPuHuiTi&#039;,sans-serif;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:fixed;inset:0;z-index:0;pointer-events:none;background:rgba(255,255,255,0.6);backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- 方案 A · 极简文字列表 · 图标主角大居中 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;border-bottom:1px solid rgba(200,150,160,0.12);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:200px;flex-shrink:0;border-right:1px solid rgba(200,150,160,0.12);display:flex;flex-direction:column;padding-top:56px;position:sticky;top:0;height:100vh;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 16px 10px;font-size:9px;letter-spacing:3px;color:#c09090;&amp;quot;&amp;gt;方案 A&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 12px 12px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;搜索道具…&amp;quot; style=&amp;quot;width:100%;box-sizing:border-box;background:rgba(0,0,0,0.04);border:none;border-bottom:1px solid rgba(200,150,160,0.3);padding:6px 4px;font-size:12px;color:#1a1a1f;outline:none;font-family:inherit;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;overflow-y:auto;padding-bottom:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:4px 16px 2px;font-size:9px;letter-spacing:2px;color:#c0a0a8;&amp;quot;&amp;gt;晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a1&amp;quot; data-active=&amp;quot;true&amp;quot; data-name=&amp;quot;中级歼灭勋章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#2a1a20;border-left:2px solid #ff7676;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a2&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;初级歼灭勋章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a3&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;高级歼灭勋章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:10px 16px 2px;font-size:9px;letter-spacing:2px;color:#c0a0a8;&amp;quot;&amp;gt;强化材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a4&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;欲火结晶&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a5&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;行动令&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a6&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;经验书&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a7&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;强化石&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:10px 16px 2px;font-size:9px;letter-spacing:2px;color:#c0a0a8;&amp;quot;&amp;gt;消耗品&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a8&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;夜幕徽章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a9&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;深渊之钥&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&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 style=&amp;quot;flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 60px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a1&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;width:100%;max-width:640px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:0;margin-bottom:52px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:96px;line-height:1;margin-bottom:16px;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2px;color:#c08090;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:32px;font-weight:bold;color:#1a1a1f;margin-bottom:6px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:28px;height:1px;background:#ff7676;opacity:0.7;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#3a2a30;line-height:1.9;text-align:center;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#a09098;font-style:italic;line-height:1.9;text-align:center;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-top:1px solid rgba(200,150,160,0.15);padding-top:28px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c09090;margin-bottom:18px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;gap:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a2&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a3&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a4&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a5&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a6&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;📖&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a7&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🪨&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a8&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🌙&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a9&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🗝️&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;深渊之钥&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&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;
&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- 方案 B · 图标网格列表 · 右侧横向展开 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;border-bottom:1px solid rgba(200,150,160,0.12);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:220px;flex-shrink:0;border-right:1px solid rgba(200,150,160,0.12);display:flex;flex-direction:column;padding-top:56px;position:sticky;top:0;height:100vh;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 16px 10px;font-size:9px;letter-spacing:3px;color:#c09090;&amp;quot;&amp;gt;方案 B&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 12px 12px;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div type=&amp;quot;text&amp;quot; placeholder=&amp;quot;搜索…&amp;quot; style=&amp;quot;width:100%;box-sizing:border-box;background:rgba(255,118,118,0.05);border:1px solid rgba(255,118,118,0.2);border-radius:3px;padding:6px 10px;font-size:12px;color:#1a1a1f;outline:none;font-family:inherit;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;overflow-y:auto;padding:4px 8px 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#c0a0a8;padding:4px 8px 6px;&amp;quot;&amp;gt;晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-bottom:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b1&amp;quot; data-active=&amp;quot;true&amp;quot; data-name=&amp;quot;中级歼灭勋章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(255,118,118,0.08);border:1px solid rgba(255,118,118,0.25);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#2a1a20;text-align:center;line-height:1.3;&amp;quot;&amp;gt;中级勋章&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b2&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;初级歼灭勋章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;初级勋章&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b3&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;高级歼灭勋章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;高级勋章&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 style=&amp;quot;font-size:9px;letter-spacing:2px;color:#c0a0a8;padding:4px 8px 6px;&amp;quot;&amp;gt;强化 / 消耗&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid;grid-template-columns:repeat(3,1fr);gap:4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b4&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;欲火结晶&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;欲火结晶&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b5&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;行动令&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;行动令&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b6&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;经验书&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;📖&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;经验书&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b7&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;强化石&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🪨&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;强化石&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b8&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;夜幕徽章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🌙&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b9&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;深渊之钥&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🗝️&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;深渊之钥&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px 60px 80px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b1&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:40px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:140px;height:140px;border-radius:20px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:76px;box-shadow:0 4px 24px rgba(0,0,0,0.06);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;text-align:center;margin-top:10px;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:220px;padding-top:6px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:1.5px;color:#c07080;margin-bottom:8px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:30px;font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:12px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:28px;height:2px;background:#ff7676;margin-bottom:14px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#a09098;font-style:italic;line-height:1.85;padding-left:10px;border-left:2px solid rgba(255,118,118,0.2);&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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 style=&amp;quot;border-top:1px solid rgba(200,150,160,0.12);padding-top:28px;margin-top:36px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c09090;margin-bottom:16px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:520px;display:flex;flex-direction:column;gap:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b2&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b3&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b4&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b5&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b6&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📖&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b7&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🪨&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b8&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🌙&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b9&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🗝️&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&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;
&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- 方案 C · 宽列表带小图标行 · 右侧大字幕感 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:260px;flex-shrink:0;border-right:1px solid rgba(200,150,160,0.12);display:flex;flex-direction:column;padding-top:56px;position:sticky;top:0;height:100vh;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 20px 10px;font-size:9px;letter-spacing:3px;color:#c09090;&amp;quot;&amp;gt;方案 C&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 16px 14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; placeholder=&amp;quot;搜索道具名称…&amp;quot; style=&amp;quot;width:100%;box-sizing:border-box;background:transparent;border:none;border-bottom:1px solid rgba(200,150,160,0.25);padding:7px 0;font-size:12px;color:#1a1a1f;outline:none;font-family:inherit;letter-spacing:0.5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;overflow-y:auto;padding-bottom:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#d0b0b8;padding:6px 20px 6px;&amp;quot;&amp;gt;晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c1&amp;quot; data-active=&amp;quot;true&amp;quot; data-name=&amp;quot;中级歼灭勋章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;background:rgba(255,118,118,0.06);border-left:2px solid #ff7676;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#1a1a1f;line-height:1.3;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c2&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;初级歼灭勋章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c3&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;高级歼灭勋章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 style=&amp;quot;font-size:9px;letter-spacing:2px;color:#d0b0b8;padding:10px 20px 6px;&amp;quot;&amp;gt;强化 / 消耗&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c4&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;欲火结晶&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c5&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;行动令&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c6&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;经验书&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;📖&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c7&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;强化石&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🪨&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c8&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;夜幕徽章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🌙&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c9&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;深渊之钥&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🗝️&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;深渊之钥&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px 60px 80px;display:flex;align-items:flex-start;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c1&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:flex;align-items:flex-start;gap:52px;width:100%;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;padding-top:4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:120px;height:120px;border-radius:18px;background:rgba(255,255,255,0.45);border:1px solid rgba(255,200,220,0.35);display:flex;align-items:center;justify-content:center;font-size:64px;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:220px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:36px;font-weight:bold;color:#1a1a1f;line-height:1.1;margin-bottom:8px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:24px;height:1px;background:#ff7676;margin-bottom:20px;opacity:0.7;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.95;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#a09098;font-style:italic;line-height:1.9;margin-bottom:40px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c09090;margin-bottom:14px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:480px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c2&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c3&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c4&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c5&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c6&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📖&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c7&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🪨&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c8&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🌙&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c9&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🗝️&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&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;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=399</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=399"/>
		<updated>2026-03-28T14:08:13Z</updated>

		<summary type="html">&lt;p&gt;Rin：​三方案重设计：紧凑列表+搜索框，去掉页面感，融合风格 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;font-family:&#039;AlibabaPuHuiTi&#039;,sans-serif;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:fixed;inset:0;z-index:0;pointer-events:none;background:rgba(255,255,255,0.6);backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- 方案 A · 极简文字列表 · 图标主角大居中 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;border-bottom:1px solid rgba(200,150,160,0.12);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:200px;flex-shrink:0;border-right:1px solid rgba(200,150,160,0.12);display:flex;flex-direction:column;padding-top:56px;position:sticky;top:0;height:100vh;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 16px 10px;font-size:9px;letter-spacing:3px;color:#c09090;&amp;quot;&amp;gt;方案 A&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 12px 12px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input id=&amp;quot;item-search&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;搜索道具…&amp;quot; style=&amp;quot;width:100%;box-sizing:border-box;background:rgba(0,0,0,0.04);border:none;border-bottom:1px solid rgba(200,150,160,0.3);padding:6px 4px;font-size:12px;color:#1a1a1f;outline:none;font-family:inherit;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;overflow-y:auto;padding-bottom:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:4px 16px 2px;font-size:9px;letter-spacing:2px;color:#c0a0a8;&amp;quot;&amp;gt;晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a1&amp;quot; data-active=&amp;quot;true&amp;quot; data-name=&amp;quot;中级歼灭勋章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#2a1a20;border-left:2px solid #ff7676;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a2&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;初级歼灭勋章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a3&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;高级歼灭勋章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:10px 16px 2px;font-size:9px;letter-spacing:2px;color:#c0a0a8;&amp;quot;&amp;gt;强化材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a4&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;欲火结晶&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a5&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;行动令&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a6&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;经验书&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a7&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;强化石&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:10px 16px 2px;font-size:9px;letter-spacing:2px;color:#c0a0a8;&amp;quot;&amp;gt;消耗品&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a8&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;夜幕徽章&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a9&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;深渊之钥&amp;quot; style=&amp;quot;padding:7px 16px;cursor:pointer;font-size:13px;color:#6a5a5e;border-left:2px solid transparent;&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 style=&amp;quot;flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 60px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a1&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;width:100%;max-width:640px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:0;margin-bottom:52px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:96px;line-height:1;margin-bottom:16px;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2px;color:#c08090;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:32px;font-weight:bold;color:#1a1a1f;margin-bottom:6px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:28px;height:1px;background:#ff7676;opacity:0.7;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#3a2a30;line-height:1.9;text-align:center;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#a09098;font-style:italic;line-height:1.9;text-align:center;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-top:1px solid rgba(200,150,160,0.15);padding-top:28px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c09090;margin-bottom:18px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;gap:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;align-items:center;padding:12px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a2&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a3&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a4&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a5&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a6&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;📖&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a7&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🪨&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a8&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🌙&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a9&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;width:100%;max-width:640px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;margin-bottom:16px;&amp;quot;&amp;gt;🗝️&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;font-weight:bold;color:#1a1a1f;&amp;quot;&amp;gt;深渊之钥&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:14px;color:#a09098;margin-top:16px;&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;
&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- 方案 B · 图标网格列表 · 右侧横向展开 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;border-bottom:1px solid rgba(200,150,160,0.12);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:220px;flex-shrink:0;border-right:1px solid rgba(200,150,160,0.12);display:flex;flex-direction:column;padding-top:56px;position:sticky;top:0;height:100vh;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 16px 10px;font-size:9px;letter-spacing:3px;color:#c09090;&amp;quot;&amp;gt;方案 B&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 12px 12px;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; placeholder=&amp;quot;搜索…&amp;quot; style=&amp;quot;width:100%;box-sizing:border-box;background:rgba(255,118,118,0.05);border:1px solid rgba(255,118,118,0.2);border-radius:3px;padding:6px 10px;font-size:12px;color:#1a1a1f;outline:none;font-family:inherit;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;overflow-y:auto;padding:4px 8px 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#c0a0a8;padding:4px 8px 6px;&amp;quot;&amp;gt;晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-bottom:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b1&amp;quot; data-active=&amp;quot;true&amp;quot; data-name=&amp;quot;中级歼灭勋章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(255,118,118,0.08);border:1px solid rgba(255,118,118,0.25);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#2a1a20;text-align:center;line-height:1.3;&amp;quot;&amp;gt;中级勋章&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b2&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;初级歼灭勋章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;初级勋章&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b3&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;高级歼灭勋章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;高级勋章&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 style=&amp;quot;font-size:9px;letter-spacing:2px;color:#c0a0a8;padding:4px 8px 6px;&amp;quot;&amp;gt;强化 / 消耗&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid;grid-template-columns:repeat(3,1fr);gap:4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b4&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;欲火结晶&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;欲火结晶&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b5&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;行动令&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;行动令&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b6&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;经验书&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;📖&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;经验书&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b7&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;强化石&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🪨&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;强化石&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b8&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;夜幕徽章&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🌙&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b9&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;深渊之钥&amp;quot; style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;cursor:pointer;border-radius:4px;background:rgba(0,0,0,0.02);border:1px solid rgba(200,150,160,0.15);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:24px;line-height:1;&amp;quot;&amp;gt;🗝️&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:9px;color:#6a5a5e;text-align:center;line-height:1.3;&amp;quot;&amp;gt;深渊之钥&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px 60px 80px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b1&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:40px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:140px;height:140px;border-radius:20px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:76px;box-shadow:0 4px 24px rgba(0,0,0,0.06);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;text-align:center;margin-top:10px;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:220px;padding-top:6px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:1.5px;color:#c07080;margin-bottom:8px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:30px;font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:12px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:28px;height:2px;background:#ff7676;margin-bottom:14px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#a09098;font-style:italic;line-height:1.85;padding-left:10px;border-left:2px solid rgba(255,118,118,0.2);&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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 style=&amp;quot;border-top:1px solid rgba(200,150,160,0.12);padding-top:28px;margin-top:36px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c09090;margin-bottom:16px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:520px;display:flex;flex-direction:column;gap:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:12px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b2&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b3&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b4&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b5&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b6&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📖&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b7&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🪨&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b8&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🌙&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b9&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;padding-top:40px;text-align:center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🗝️&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&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;
&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!-- 方案 C · 宽列表带小图标行 · 右侧大字幕感 --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ═══════════════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:260px;flex-shrink:0;border-right:1px solid rgba(200,150,160,0.12);display:flex;flex-direction:column;padding-top:56px;position:sticky;top:0;height:100vh;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 20px 10px;font-size:9px;letter-spacing:3px;color:#c09090;&amp;quot;&amp;gt;方案 C&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 16px 14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; placeholder=&amp;quot;搜索道具名称…&amp;quot; style=&amp;quot;width:100%;box-sizing:border-box;background:transparent;border:none;border-bottom:1px solid rgba(200,150,160,0.25);padding:7px 0;font-size:12px;color:#1a1a1f;outline:none;font-family:inherit;letter-spacing:0.5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;overflow-y:auto;padding-bottom:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#d0b0b8;padding:6px 20px 6px;&amp;quot;&amp;gt;晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c1&amp;quot; data-active=&amp;quot;true&amp;quot; data-name=&amp;quot;中级歼灭勋章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;background:rgba(255,118,118,0.06);border-left:2px solid #ff7676;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#1a1a1f;line-height:1.3;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c2&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;初级歼灭勋章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c3&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;高级歼灭勋章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 style=&amp;quot;font-size:9px;letter-spacing:2px;color:#d0b0b8;padding:10px 20px 6px;&amp;quot;&amp;gt;强化 / 消耗&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c4&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;欲火结晶&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c5&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;行动令&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c6&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;经验书&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;📖&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c7&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;强化石&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🪨&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c8&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;夜幕徽章&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🌙&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c9&amp;quot; data-active=&amp;quot;false&amp;quot; data-name=&amp;quot;深渊之钥&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:10px;padding:8px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:18px;line-height:1;flex-shrink:0;&amp;quot;&amp;gt;🗝️&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:12px;color:#6a5a5e;line-height:1.3;&amp;quot;&amp;gt;深渊之钥&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#c09090;margin-top:1px;&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&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px 60px 80px;display:flex;align-items:flex-start;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c1&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:flex;align-items:flex-start;gap:52px;width:100%;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;padding-top:4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:120px;height:120px;border-radius:18px;background:rgba(255,255,255,0.45);border:1px solid rgba(255,200,220,0.35);display:flex;align-items:center;justify-content:center;font-size:64px;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:220px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:36px;font-weight:bold;color:#1a1a1f;line-height:1.1;margin-bottom:8px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:24px;height:1px;background:#ff7676;margin-bottom:20px;opacity:0.7;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.95;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#a09098;font-style:italic;line-height:1.9;margin-bottom:40px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c09090;margin-bottom:14px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:480px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid rgba(200,150,160,0.1);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;justify-content:space-between;padding:11px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a1a20;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#c09090;letter-spacing:1px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c2&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;color:#a09098;margin-top:12px;font-size:13px;&amp;quot;&amp;gt;（数据待补充）&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c3&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c4&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c5&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c6&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;📖&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;经验书&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c7&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🪨&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;强化石&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c8&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🌙&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&amp;quot;&amp;gt;夜幕徽章&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c9&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size:72px;&amp;quot;&amp;gt;🗝️&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:28px;color:#1a1a1f;margin-top:16px;&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;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.js&amp;diff=398</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.js&amp;diff=398"/>
		<updated>2026-03-28T14:06:23Z</updated>

		<summary type="html">&lt;p&gt;Rin：​道具页：搜索过滤 + 切换逻辑整合 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */&lt;br /&gt;
&lt;br /&gt;
/* 引入卡片数据渲染模块 */&lt;br /&gt;
mw.loader.load( &#039;/index.php?title=MediaWiki:CardData.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
/* 卡面滚动 */&lt;br /&gt;
window.addEventListener(&amp;quot;scroll&amp;quot;, function() {&lt;br /&gt;
  var bg = document.querySelector(&amp;quot;.card_fullscreen-img&amp;quot;);&lt;br /&gt;
  if (!bg) return;&lt;br /&gt;
  if (window.scrollY &amp;gt; 10) {&lt;br /&gt;
    bg.classList.add(&amp;quot;scrolled&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    bg.classList.remove(&amp;quot;scrolled&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/* 小传折叠 + 标题 sticky */&lt;br /&gt;
mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function(){&lt;br /&gt;
    document.querySelectorAll(&amp;quot;.card_content_story&amp;quot;).forEach(function(story){&lt;br /&gt;
        var toggle     = story.querySelector(&amp;quot;.card_content_story-toggle&amp;quot;);&lt;br /&gt;
        var timeline   = story.querySelector(&amp;quot;.card_content_story-timeline&amp;quot;);&lt;br /&gt;
        var headerLeft = story.querySelector(&amp;quot;.card_content_story-header-left&amp;quot;);&lt;br /&gt;
        if (!toggle || !timeline || !headerLeft) return;&lt;br /&gt;
        var icon = toggle.querySelector(&amp;quot;.story-toggle-icon&amp;quot;);&lt;br /&gt;
        var text = toggle.querySelector(&amp;quot;.story-toggle-text&amp;quot;);&lt;br /&gt;
        toggle.addEventListener(&amp;quot;click&amp;quot;, function(){&lt;br /&gt;
            var collapsed = toggle.getAttribute(&amp;quot;data-collapsed&amp;quot;) === &amp;quot;true&amp;quot;;&lt;br /&gt;
            if (collapsed) {&lt;br /&gt;
                timeline.style.opacity   = &amp;quot;1&amp;quot;;&lt;br /&gt;
                timeline.style.transform = &amp;quot;translateY(0)&amp;quot;;&lt;br /&gt;
                timeline.style.maxHeight = &amp;quot;5000px&amp;quot;;&lt;br /&gt;
            } else {&lt;br /&gt;
                timeline.style.opacity   = &amp;quot;0&amp;quot;;&lt;br /&gt;
                timeline.style.transform = &amp;quot;translateY(-6px)&amp;quot;;&lt;br /&gt;
                timeline.style.maxHeight = &amp;quot;0&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            toggle.setAttribute(&amp;quot;data-collapsed&amp;quot;, collapsed ? &amp;quot;false&amp;quot; : &amp;quot;true&amp;quot;);&lt;br /&gt;
            icon.innerText = collapsed ? &amp;quot;－&amp;quot; : &amp;quot;＋&amp;quot;;&lt;br /&gt;
            text.innerText = collapsed ? &amp;quot;收起&amp;quot; : &amp;quot;展开&amp;quot;;&lt;br /&gt;
            if (!collapsed) headerLeft.classList.remove(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
        });&lt;br /&gt;
        function updateSticky() {&lt;br /&gt;
            if (toggle.getAttribute(&amp;quot;data-collapsed&amp;quot;) === &amp;quot;true&amp;quot;) {&lt;br /&gt;
                headerLeft.classList.remove(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            var storyRect    = story.getBoundingClientRect();&lt;br /&gt;
            var timelineRect = timeline.getBoundingClientRect();&lt;br /&gt;
            if (storyRect.top &amp;lt; 0 &amp;amp;&amp;amp; timelineRect.bottom &amp;gt; window.innerHeight) {&lt;br /&gt;
                headerLeft.classList.add(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
            } else {&lt;br /&gt;
                headerLeft.classList.remove(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        window.addEventListener(&amp;quot;scroll&amp;quot;, updateSticky, { passive: true });&lt;br /&gt;
        updateSticky();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/* 邀约故事区 */&lt;br /&gt;
mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function(){&lt;br /&gt;
    var cards    = document.querySelectorAll(&amp;quot;.card_content_date-item&amp;quot;);&lt;br /&gt;
    var panel    = document.getElementById(&amp;quot;date-story-panel&amp;quot;);&lt;br /&gt;
    var contents = document.querySelectorAll(&amp;quot;.card_date_story-content&amp;quot;);&lt;br /&gt;
    if (!cards.length || !panel) return;&lt;br /&gt;
    var currentIndex = -1;&lt;br /&gt;
    cards.forEach(function(card){&lt;br /&gt;
        card.addEventListener(&amp;quot;click&amp;quot;, function(){&lt;br /&gt;
            var index = parseInt(card.getAttribute(&amp;quot;data-date-index&amp;quot;), 10);&lt;br /&gt;
            if (currentIndex === index) {&lt;br /&gt;
                panel.classList.remove(&amp;quot;is-visible&amp;quot;);&lt;br /&gt;
                card.classList.remove(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
                currentIndex = -1;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            cards.forEach(function(c){ c.classList.remove(&amp;quot;is-active&amp;quot;); });&lt;br /&gt;
            card.classList.add(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
            currentIndex = index;&lt;br /&gt;
            panel.classList.remove(&amp;quot;is-visible&amp;quot;);&lt;br /&gt;
            void panel.offsetWidth;&lt;br /&gt;
            panel.classList.add(&amp;quot;is-visible&amp;quot;);&lt;br /&gt;
            contents.forEach(function(content){&lt;br /&gt;
                var storyIndex = parseInt(content.getAttribute(&amp;quot;data-story-index&amp;quot;), 10);&lt;br /&gt;
                content.classList.toggle(&amp;quot;is-active&amp;quot;, storyIndex === index);&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/* 道具页：列表切换 + 搜索过滤 */&lt;br /&gt;
mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function(){&lt;br /&gt;
    var tabs    = document.querySelectorAll(&amp;quot;.item-tab&amp;quot;);&lt;br /&gt;
    var details = document.querySelectorAll(&amp;quot;.item-detail&amp;quot;);&lt;br /&gt;
    var search  = document.getElementById(&amp;quot;item-search&amp;quot;);&lt;br /&gt;
    if (!tabs.length) return;&lt;br /&gt;
&lt;br /&gt;
    function activate(id) {&lt;br /&gt;
        details.forEach(function(el){ el.style.display = &amp;quot;none&amp;quot;; });&lt;br /&gt;
        tabs.forEach(function(t){ t.setAttribute(&amp;quot;data-active&amp;quot;, &amp;quot;false&amp;quot;); });&lt;br /&gt;
        var detail = document.getElementById(&amp;quot;item-&amp;quot; + id);&lt;br /&gt;
        if (detail) detail.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
        var tab = document.querySelector(&amp;quot;.item-tab[data-item=&#039;&amp;quot; + id + &amp;quot;&#039;]&amp;quot;);&lt;br /&gt;
        if (tab) tab.setAttribute(&amp;quot;data-active&amp;quot;, &amp;quot;true&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    tabs.forEach(function(tab){&lt;br /&gt;
        tab.addEventListener(&amp;quot;click&amp;quot;, function(){&lt;br /&gt;
            activate(tab.getAttribute(&amp;quot;data-item&amp;quot;));&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    if (search) {&lt;br /&gt;
        search.addEventListener(&amp;quot;input&amp;quot;, function(){&lt;br /&gt;
            var q = search.value.trim().toLowerCase();&lt;br /&gt;
            tabs.forEach(function(tab){&lt;br /&gt;
                var text = (tab.getAttribute(&amp;quot;data-name&amp;quot;) || tab.textContent || &amp;quot;&amp;quot;).toLowerCase();&lt;br /&gt;
                tab.style.display = text.indexOf(q) !== -1 ? &amp;quot;&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=397</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=397"/>
		<updated>2026-03-28T14:00:42Z</updated>

		<summary type="html">&lt;p&gt;Rin：​card_fullscreen-img 加上卡面图片，命名规则：卡面_stylename.png (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 单条属性行：图标 + 标签 + 值&lt;br /&gt;
local function makeAttrRow(label, value)&lt;br /&gt;
    local item = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;)&lt;br /&gt;
    local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-title&amp;quot;)&lt;br /&gt;
    titleDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-icon&amp;quot;)&lt;br /&gt;
    titleDiv:tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot; &amp;quot; .. label)&lt;br /&gt;
    item:tag(&amp;quot;div&amp;quot;):wikitext(value or &amp;quot;—&amp;quot;)&lt;br /&gt;
    return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 信息栏：稀有度 + 四维&lt;br /&gt;
local function makeInfoSection(intel, supply, execute, strategy, rarity)&lt;br /&gt;
    local infoDiv = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rarityItem = infoDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
    rarityItem:tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;)&lt;br /&gt;
    rarityItem:tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
&lt;br /&gt;
    local dims = {&lt;br /&gt;
        { label = &amp;quot;情报&amp;quot;, value = intel    },&lt;br /&gt;
        { label = &amp;quot;物资&amp;quot;, value = supply   },&lt;br /&gt;
        { label = &amp;quot;执行&amp;quot;, value = execute  },&lt;br /&gt;
        { label = &amp;quot;策略&amp;quot;, value = strategy },&lt;br /&gt;
    }&lt;br /&gt;
    for _, dim in ipairs(dims) do&lt;br /&gt;
        local item = infoDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(dim.label)&lt;br /&gt;
        local n = tonumber(dim.value)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(n and (&amp;quot;※&amp;quot; .. n) or &amp;quot;—&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return infoDiv&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    local maxCols = 0&lt;br /&gt;
    for _, row in ipairs(rows) do&lt;br /&gt;
        if type(row.levels) == &amp;quot;table&amp;quot; and #row.levels &amp;gt; maxCols then&lt;br /&gt;
            maxCols = #row.levels&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local DATA_COLS, gridClass&lt;br /&gt;
    if maxCols &amp;gt; 8 then&lt;br /&gt;
        DATA_COLS = 9&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid card_content_skill-upgrade-grid--10&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        DATA_COLS = 8&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, DATA_COLS + 1 do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local levels = (type(row.levels) == &amp;quot;table&amp;quot;) and row.levels or {}&lt;br /&gt;
        for col = 1, DATA_COLS do&lt;br /&gt;
            local v = levels[col]&lt;br /&gt;
            local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
            if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
                cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            text = text:gsub(&amp;quot;\r\n&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            local paragraphs = mw.text.split(text, &amp;quot;\n+&amp;quot;)&lt;br /&gt;
            for _, para in ipairs(paragraphs) do&lt;br /&gt;
                para = mw.text.trim(para)&lt;br /&gt;
                if para ~= &amp;quot;&amp;quot; then bodyDiv:tag(&amp;quot;p&amp;quot;):wikitext(para) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,intel,supply,execute,strategy&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    -- 全屏背景图，文件命名规则：卡面_卡面名.png&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;[[文件:卡面_&amp;quot; .. stylename .. &amp;quot;.png]]&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 左栏&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 卡名&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    -- 信息（稀有度 + 四维）&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeInfoSection(card.intel, card.supply, card.execute, card.strategy, rarity))&lt;br /&gt;
&lt;br /&gt;
    -- 等级 100 属性&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;生命&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;攻击&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;防御&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;暴击率&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;暴击伤害&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    -- 映像&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;固定攻击&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;固定生命&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;伤害加成&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    -- 认知&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 右栏&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    -- 小传&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    -- 邀约&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E7%BC%84%E9%BB%98%E4%B9%8B%E4%BA%BA&amp;diff=396</id>
		<title>缄默之人</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E7%BC%84%E9%BB%98%E4%B9%8B%E4%BA%BA&amp;diff=396"/>
		<updated>2026-03-28T13:52:51Z</updated>

		<summary type="html">&lt;p&gt;Rin：​创建页面，内容为“{{#invoke:CardData|render|缄默之人}}”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:CardData|render|缄默之人}}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=395</id>
		<title>首页</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E9%A6%96%E9%A1%B5&amp;diff=395"/>
		<updated>2026-03-13T12:05:12Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 感谢来访。 ==&lt;br /&gt;
==== 本站为个人维护的非商业 Wiki，请使用PC端获得正常的浏览体验 ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Power by Mediawiki&lt;br /&gt;
* Skin by Citizen&lt;br /&gt;
* Running since 2026.03.02&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== 备忘 ====&lt;br /&gt;
[[sandbox/3.0]]&lt;br /&gt;
&lt;br /&gt;
[[sandbox/2.0]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[module:test]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[mediawiki:common.css]]&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=394</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=394"/>
		<updated>2026-03-13T11:57:28Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:fixed;inset:0;z-index:0;pointer-events:none;background:linear-gradient(rgba(255,255,255,0.62),rgba(255,255,255,0.58));backdrop-filter:blur(15px) saturate(155%);-webkit-backdrop-filter:blur(15px) saturate(155%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;align-items:stretch;max-width:1400px;margin:0 auto;padding:0 clamp(24px,4vw,80px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 左侧道具列表 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:220px;flex-shrink:0;border-right:1px solid rgba(255,150,170,0.18);padding:72px 0 60px;display:flex;flex-direction:column;gap:2px;position:sticky;top:0;height:100vh;overflow-y:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:11px;letter-spacing:2px;color:#b07080;padding:0 20px 16px;&amp;quot;&amp;gt;道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid #ff7676;background:rgba(255,150,170,0.08);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;font-weight:bold;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 style=&amp;quot;height:1px;background:rgba(255,150,170,0.12);margin:8px 20px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;d&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;e&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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;
&lt;br /&gt;
&amp;lt;!-- 右侧详情区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px clamp(32px,4vw,80px) 80px clamp(32px,4vw,72px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- item-a --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- 大图标区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- 文字区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#9a8090;font-style:italic;line-height:1.9;border-left:2px solid rgba(255,118,118,0.22);padding-left:12px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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;!-- 获取途径 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:16px;font-weight:bold;color:#1a1a1f;margin-bottom:4px;&amp;quot;&amp;gt;获取途径 &amp;lt;span style=&amp;quot;font-size:11px;font-weight:normal;color:#bbb;letter-spacing:1px;font-family:sans-serif;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:26px;height:2px;background:#ff7676;margin-bottom:22px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:560px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;商店&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- item-b --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-c --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-d --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-d&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;材料 · 强化材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-e --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-e&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 恢复道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=393</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=393"/>
		<updated>2026-03-13T11:56:55Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:fixed;inset:0;z-index:0;pointer-events:none;background:linear-gradient(rgba(255,255,255,0.62),rgba(255,255,255,0.58));backdrop-filter:blur(15px) saturate(155%);-webkit-backdrop-filter:blur(15px) saturate(155%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;align-items:stretch;max-width:1400px;margin:0 auto;padding:0 clamp(24px,4vw,80px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 左侧道具列表 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:220px;flex-shrink:0;border-right:1px solid rgba(255,150,170,0.18);padding:72px 0 60px;display:flex;flex-direction:column;gap:2px;position:sticky;top:0;height:100vh;overflow-y:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:11px;letter-spacing:2px;color:#b07080;padding:0 20px 16px;&amp;quot;&amp;gt;道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid #ff7676;background:rgba(255,150,170,0.08);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;font-weight:bold;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 style=&amp;quot;height:1px;background:rgba(255,150,170,0.12);margin:8px 20px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;d&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;e&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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;
&lt;br /&gt;
&amp;lt;!-- 右侧详情区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px clamp(32px,4vw,80px) 80px clamp(32px,4vw,72px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- item-a --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- 大图标区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- 文字区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#9a8090;font-style:italic;line-height:1.9;border-left:2px solid rgba(255,118,118,0.22);padding-left:12px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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;!-- 获取途径 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:16px;font-weight:bold;color:#1a1a1f;margin-bottom:4px;&amp;quot;&amp;gt;获取途径 &amp;lt;span style=&amp;quot;font-size:11px;font-weight:normal;color:#bbb;letter-spacing:1px;font-family:sans-serif;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:26px;height:2px;background:#ff7676;margin-bottom:22px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:560px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;svg width=&amp;quot;14&amp;quot; height=&amp;quot;10&amp;quot; viewBox=&amp;quot;0 0 14 10&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;0&amp;quot; y1=&amp;quot;5&amp;quot; x2=&amp;quot;11&amp;quot; y2=&amp;quot;5&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;polyline points=&amp;quot;7,1 12,5 7,9&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;svg width=&amp;quot;14&amp;quot; height=&amp;quot;10&amp;quot; viewBox=&amp;quot;0 0 14 10&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;0&amp;quot; y1=&amp;quot;5&amp;quot; x2=&amp;quot;11&amp;quot; y2=&amp;quot;5&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;polyline points=&amp;quot;7,1 12,5 7,9&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;svg width=&amp;quot;14&amp;quot; height=&amp;quot;10&amp;quot; viewBox=&amp;quot;0 0 14 10&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;0&amp;quot; y1=&amp;quot;5&amp;quot; x2=&amp;quot;11&amp;quot; y2=&amp;quot;5&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;polyline points=&amp;quot;7,1 12,5 7,9&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;svg width=&amp;quot;14&amp;quot; height=&amp;quot;10&amp;quot; viewBox=&amp;quot;0 0 14 10&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;0&amp;quot; y1=&amp;quot;5&amp;quot; x2=&amp;quot;11&amp;quot; y2=&amp;quot;5&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;polyline points=&amp;quot;7,1 12,5 7,9&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/svg&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- item-b --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-c --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-d --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-d&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;材料 · 强化材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-e --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-e&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 恢复道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=392</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=392"/>
		<updated>2026-03-13T10:43:09Z</updated>

		<summary type="html">&lt;p&gt;Rin：​图标放大，获取途径符号换成 SVG 菱形和细箭头 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:fixed;inset:0;z-index:0;pointer-events:none;background:linear-gradient(rgba(255,255,255,0.62),rgba(255,255,255,0.58));backdrop-filter:blur(15px) saturate(155%);-webkit-backdrop-filter:blur(15px) saturate(155%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;align-items:stretch;max-width:1400px;margin:0 auto;padding:0 clamp(24px,4vw,80px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 左侧道具列表 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:220px;flex-shrink:0;border-right:1px solid rgba(255,150,170,0.18);padding:72px 0 60px;display:flex;flex-direction:column;gap:2px;position:sticky;top:0;height:100vh;overflow-y:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:11px;letter-spacing:2px;color:#b07080;padding:0 20px 16px;&amp;quot;&amp;gt;道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid #ff7676;background:rgba(255,150,170,0.08);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;font-weight:bold;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 style=&amp;quot;height:1px;background:rgba(255,150,170,0.12);margin:8px 20px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;d&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;e&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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;
&lt;br /&gt;
&amp;lt;!-- 右侧详情区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px clamp(32px,4vw,80px) 80px clamp(32px,4vw,72px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- item-a --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- 大图标区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- 文字区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#9a8090;font-style:italic;line-height:1.9;border-left:2px solid rgba(255,118,118,0.22);padding-left:12px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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;!-- 获取途径 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:16px;font-weight:bold;color:#1a1a1f;margin-bottom:4px;&amp;quot;&amp;gt;获取途径 &amp;lt;span style=&amp;quot;font-size:11px;font-weight:normal;color:#bbb;letter-spacing:1px;font-family:sans-serif;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:26px;height:2px;background:#ff7676;margin-bottom:22px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:560px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;svg width=&amp;quot;8&amp;quot; height=&amp;quot;8&amp;quot; viewBox=&amp;quot;0 0 8 8&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;polygon points=&amp;quot;4,0 8,4 4,8 0,4&amp;quot; fill=&amp;quot;#ff9090&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;svg width=&amp;quot;14&amp;quot; height=&amp;quot;10&amp;quot; viewBox=&amp;quot;0 0 14 10&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;0&amp;quot; y1=&amp;quot;5&amp;quot; x2=&amp;quot;11&amp;quot; y2=&amp;quot;5&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;polyline points=&amp;quot;7,1 12,5 7,9&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;svg width=&amp;quot;8&amp;quot; height=&amp;quot;8&amp;quot; viewBox=&amp;quot;0 0 8 8&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;polygon points=&amp;quot;4,0 8,4 4,8 0,4&amp;quot; fill=&amp;quot;#ff9090&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;svg width=&amp;quot;14&amp;quot; height=&amp;quot;10&amp;quot; viewBox=&amp;quot;0 0 14 10&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;0&amp;quot; y1=&amp;quot;5&amp;quot; x2=&amp;quot;11&amp;quot; y2=&amp;quot;5&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;polyline points=&amp;quot;7,1 12,5 7,9&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;svg width=&amp;quot;8&amp;quot; height=&amp;quot;8&amp;quot; viewBox=&amp;quot;0 0 8 8&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;polygon points=&amp;quot;4,0 8,4 4,8 0,4&amp;quot; fill=&amp;quot;#ff9090&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;svg width=&amp;quot;14&amp;quot; height=&amp;quot;10&amp;quot; viewBox=&amp;quot;0 0 14 10&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;0&amp;quot; y1=&amp;quot;5&amp;quot; x2=&amp;quot;11&amp;quot; y2=&amp;quot;5&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;polyline points=&amp;quot;7,1 12,5 7,9&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:14px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:14px;&amp;quot;&amp;gt;&amp;lt;svg width=&amp;quot;8&amp;quot; height=&amp;quot;8&amp;quot; viewBox=&amp;quot;0 0 8 8&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;polygon points=&amp;quot;4,0 8,4 4,8 0,4&amp;quot; fill=&amp;quot;#ff9090&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:2px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;svg width=&amp;quot;14&amp;quot; height=&amp;quot;10&amp;quot; viewBox=&amp;quot;0 0 14 10&amp;quot; style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&amp;lt;line x1=&amp;quot;0&amp;quot; y1=&amp;quot;5&amp;quot; x2=&amp;quot;11&amp;quot; y2=&amp;quot;5&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;polyline points=&amp;quot;7,1 12,5 7,9&amp;quot; fill=&amp;quot;none&amp;quot; stroke=&amp;quot;#d0b0bb&amp;quot; stroke-width=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/svg&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- item-b --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-c --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-d --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-d&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;材料 · 强化材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- item-e --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-e&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:48px;margin-bottom:48px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:160px;height:160px;border-radius:24px;background:rgba(255,255,255,0.55);border:1px solid rgba(255,200,220,0.45);display:flex;align-items:center;justify-content:center;font-size:88px;box-shadow:0 6px 30px rgba(0,0,0,0.07),0 1px 0 rgba(255,255,255,0.9) inset;&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:#c090a0;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;padding-top:8px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 恢复道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3vw,40px);font-weight:bold;color:#1a1a1f;line-height:1.15;margin-bottom:16px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=391</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=391"/>
		<updated>2026-03-13T10:40:16Z</updated>

		<summary type="html">&lt;p&gt;Rin：​去掉行内script，修复布局偏左，加居中 max-width 容器 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:fixed;inset:0;z-index:0;pointer-events:none;background:linear-gradient(rgba(255,255,255,0.62),rgba(255,255,255,0.58));backdrop-filter:blur(15px) saturate(155%);-webkit-backdrop-filter:blur(15px) saturate(155%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;align-items:stretch;max-width:1400px;margin:0 auto;padding:0 clamp(24px,4vw,80px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 左侧道具列表 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:220px;flex-shrink:0;border-right:1px solid rgba(255,150,170,0.18);padding:72px 0 60px;display:flex;flex-direction:column;gap:2px;position:sticky;top:0;height:100vh;overflow-y:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:11px;letter-spacing:2px;color:#b07080;padding:0 20px 16px;&amp;quot;&amp;gt;道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid #ff7676;background:rgba(255,150,170,0.08);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;font-weight:bold;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 style=&amp;quot;height:1px;background:rgba(255,150,170,0.12);margin:8px 20px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;d&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;e&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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;
&lt;br /&gt;
&amp;lt;!-- 右侧详情区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:72px clamp(32px,4vw,80px) 80px clamp(32px,4vw,72px);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#9a8090;font-style:italic;line-height:1.85;border-left:2px solid rgba(255,118,118,0.25);padding-left:12px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:16px;font-weight:bold;color:#1a1a1f;margin-bottom:4px;&amp;quot;&amp;gt;获取途径 &amp;lt;span style=&amp;quot;font-size:11px;font-weight:normal;color:#bbb;letter-spacing:1px;font-family:sans-serif;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:26px;height:2px;background:#ff7676;margin-bottom:20px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:560px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ed4141;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:4px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ed4141;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:4px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ed4141;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:4px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ed4141;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:4px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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 id=&amp;quot;item-c&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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 id=&amp;quot;item-d&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;材料 · 强化材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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 id=&amp;quot;item-e&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 恢复道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.js&amp;diff=390</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.js&amp;diff=390"/>
		<updated>2026-03-13T10:39:24Z</updated>

		<summary type="html">&lt;p&gt;Rin：​新增道具页 switchItem 函数 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */&lt;br /&gt;
&lt;br /&gt;
/* 引入卡片数据渲染模块 */&lt;br /&gt;
mw.loader.load( &#039;/index.php?title=MediaWiki:CardData.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
/* 卡面滚动 */&lt;br /&gt;
window.addEventListener(&amp;quot;scroll&amp;quot;, () =&amp;gt; {&lt;br /&gt;
  const bg = document.querySelector(&amp;quot;.card_fullscreen-img&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (window.scrollY &amp;gt; 10) {&lt;br /&gt;
    bg.classList.add(&amp;quot;scrolled&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    bg.classList.remove(&amp;quot;scrolled&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 小传折叠 + 标题 sticky */&lt;br /&gt;
mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function(){&lt;br /&gt;
&lt;br /&gt;
    document.querySelectorAll(&amp;quot;.card_content_story&amp;quot;).forEach(function(story){&lt;br /&gt;
&lt;br /&gt;
        var toggle     = story.querySelector(&amp;quot;.card_content_story-toggle&amp;quot;);&lt;br /&gt;
        var timeline   = story.querySelector(&amp;quot;.card_content_story-timeline&amp;quot;);&lt;br /&gt;
        var headerLeft = story.querySelector(&amp;quot;.card_content_story-header-left&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        if (!toggle || !timeline || !headerLeft) return;&lt;br /&gt;
&lt;br /&gt;
        var icon = toggle.querySelector(&amp;quot;.story-toggle-icon&amp;quot;);&lt;br /&gt;
        var text = toggle.querySelector(&amp;quot;.story-toggle-text&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        /* 折叠/展开 */&lt;br /&gt;
        toggle.addEventListener(&amp;quot;click&amp;quot;, function(){&lt;br /&gt;
            var collapsed = toggle.getAttribute(&amp;quot;data-collapsed&amp;quot;) === &amp;quot;true&amp;quot;;&lt;br /&gt;
            if (collapsed) {&lt;br /&gt;
                timeline.style.opacity   = &amp;quot;1&amp;quot;;&lt;br /&gt;
                timeline.style.transform = &amp;quot;translateY(0)&amp;quot;;&lt;br /&gt;
                timeline.style.maxHeight = &amp;quot;5000px&amp;quot;;&lt;br /&gt;
            } else {&lt;br /&gt;
                timeline.style.opacity   = &amp;quot;0&amp;quot;;&lt;br /&gt;
                timeline.style.transform = &amp;quot;translateY(-6px)&amp;quot;;&lt;br /&gt;
                timeline.style.maxHeight = &amp;quot;0&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            toggle.setAttribute(&amp;quot;data-collapsed&amp;quot;, collapsed ? &amp;quot;false&amp;quot; : &amp;quot;true&amp;quot;);&lt;br /&gt;
            icon.innerText = collapsed ? &amp;quot;－&amp;quot; : &amp;quot;＋&amp;quot;;&lt;br /&gt;
            text.innerText = collapsed ? &amp;quot;收起&amp;quot; : &amp;quot;展开&amp;quot;;&lt;br /&gt;
            if (!collapsed) headerLeft.classList.remove(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        /* sticky 判断 */&lt;br /&gt;
        function updateSticky() {&lt;br /&gt;
            if (toggle.getAttribute(&amp;quot;data-collapsed&amp;quot;) === &amp;quot;true&amp;quot;) {&lt;br /&gt;
                headerLeft.classList.remove(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            var storyRect    = story.getBoundingClientRect();&lt;br /&gt;
            var timelineRect = timeline.getBoundingClientRect();&lt;br /&gt;
            if (storyRect.top &amp;lt; 0 &amp;amp;&amp;amp; timelineRect.bottom &amp;gt; window.innerHeight) {&lt;br /&gt;
                headerLeft.classList.add(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
            } else {&lt;br /&gt;
                headerLeft.classList.remove(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        window.addEventListener(&amp;quot;scroll&amp;quot;, updateSticky, { passive: true });&lt;br /&gt;
        updateSticky();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/* 邀约故事区 */&lt;br /&gt;
mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function(){&lt;br /&gt;
&lt;br /&gt;
    var cards = document.querySelectorAll(&amp;quot;.card_content_date-item&amp;quot;);&lt;br /&gt;
    var panel = document.getElementById(&amp;quot;date-story-panel&amp;quot;);&lt;br /&gt;
    var contents = document.querySelectorAll(&amp;quot;.card_date_story-content&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if(!cards.length || !panel) return;&lt;br /&gt;
&lt;br /&gt;
    var currentIndex = -1;&lt;br /&gt;
&lt;br /&gt;
    cards.forEach(function(card){&lt;br /&gt;
&lt;br /&gt;
        card.addEventListener(&amp;quot;click&amp;quot;, function(){&lt;br /&gt;
&lt;br /&gt;
            var index = parseInt(card.getAttribute(&amp;quot;data-date-index&amp;quot;), 10);&lt;br /&gt;
&lt;br /&gt;
            if(currentIndex === index){&lt;br /&gt;
                panel.classList.remove(&amp;quot;is-visible&amp;quot;);&lt;br /&gt;
                card.classList.remove(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
                currentIndex = -1;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            cards.forEach(function(c){ c.classList.remove(&amp;quot;is-active&amp;quot;); });&lt;br /&gt;
            card.classList.add(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
            currentIndex = index;&lt;br /&gt;
&lt;br /&gt;
            panel.classList.remove(&amp;quot;is-visible&amp;quot;);&lt;br /&gt;
            void panel.offsetWidth;&lt;br /&gt;
            panel.classList.add(&amp;quot;is-visible&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            contents.forEach(function(content){&lt;br /&gt;
                var storyIndex = parseInt(content.getAttribute(&amp;quot;data-story-index&amp;quot;), 10);&lt;br /&gt;
                if(storyIndex === index){&lt;br /&gt;
                    content.classList.add(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
                } else {&lt;br /&gt;
                    content.classList.remove(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/* 道具页：左侧列表切换右侧详情 */&lt;br /&gt;
mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function(){&lt;br /&gt;
&lt;br /&gt;
    var tabs = document.querySelectorAll(&amp;quot;.item-tab&amp;quot;);&lt;br /&gt;
    var details = document.querySelectorAll(&amp;quot;.item-detail&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if (!tabs.length || !details.length) return;&lt;br /&gt;
&lt;br /&gt;
    tabs.forEach(function(tab){&lt;br /&gt;
        tab.addEventListener(&amp;quot;click&amp;quot;, function(){&lt;br /&gt;
            var id = tab.getAttribute(&amp;quot;data-item&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            details.forEach(function(el){ el.style.display = &amp;quot;none&amp;quot;; });&lt;br /&gt;
            tabs.forEach(function(t){&lt;br /&gt;
                t.style.borderLeft = &amp;quot;2px solid transparent&amp;quot;;&lt;br /&gt;
                t.style.background = &amp;quot;transparent&amp;quot;;&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            var detail = document.getElementById(&amp;quot;item-&amp;quot; + id);&lt;br /&gt;
            if (detail) detail.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
            tab.style.borderLeft = &amp;quot;2px solid #ff7676&amp;quot;;&lt;br /&gt;
            tab.style.background = &amp;quot;rgba(255,150,170,0.08)&amp;quot;;&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=389</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=389"/>
		<updated>2026-03-13T10:36:55Z</updated>

		<summary type="html">&lt;p&gt;Rin：​道具页：卡面同款毛玻璃风格，左侧列表+右侧详情，JS切换 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:fixed;inset:0;z-index:0;pointer-events:none;background:linear-gradient(rgba(255,255,255,0.62),rgba(255,255,255,0.58));backdrop-filter:blur(15px) saturate(155%);-webkit-backdrop-filter:blur(15px) saturate(155%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;min-height:100vh;display:flex;align-items:stretch;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 左侧道具列表 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:240px;flex-shrink:0;border-right:1px solid rgba(255,150,170,0.18);padding:60px 0 60px;display:flex;flex-direction:column;gap:2px;position:sticky;top:0;height:100vh;overflow-y:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:11px;letter-spacing:2px;color:#b07080;padding:0 24px 16px;&amp;quot;&amp;gt;道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;a&amp;quot; onclick=&amp;quot;switchItem(&#039;a&#039;)&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 24px;cursor:pointer;border-left:2px solid #ff7676;background:rgba(255,150,170,0.08);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🏅&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;font-weight:bold;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;b&amp;quot; onclick=&amp;quot;switchItem(&#039;b&#039;)&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 24px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;📦&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;c&amp;quot; onclick=&amp;quot;switchItem(&#039;c&#039;)&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 24px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;💎&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 style=&amp;quot;height:1px;background:rgba(255,150,170,0.12);margin:8px 24px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;d&amp;quot; onclick=&amp;quot;switchItem(&#039;d&#039;)&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 24px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;🔮&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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 class=&amp;quot;item-tab&amp;quot; data-item=&amp;quot;e&amp;quot; onclick=&amp;quot;switchItem(&#039;e&#039;)&amp;quot; style=&amp;quot;display:flex;align-items:center;gap:12px;padding:10px 24px;cursor:pointer;border-left:2px solid transparent;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:22px;&amp;quot;&amp;gt;⚡&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;div style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;font-size:10px;color:#b07080;margin-top:1px;&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;
&lt;br /&gt;
&amp;lt;!-- 右侧详情区 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:0;padding:60px clamp(32px,5vw,100px) 80px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 详情：中级歼灭勋章 --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-a&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:block;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#9a8090;font-style:italic;line-height:1.85;border-left:2px solid rgba(255,118,118,0.25);padding-left:12px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:16px;font-weight:bold;color:#1a1a1f;margin-bottom:4px;&amp;quot;&amp;gt;获取途径 &amp;lt;span style=&amp;quot;font-size:11px;font-weight:normal;color:#bbb;letter-spacing:1px;font-family:sans-serif;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:26px;height:2px;background:#ff7676;margin-bottom:20px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:560px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ed4141;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:4px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ed4141;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:4px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(200,160,175,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ed4141;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:4px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ed4141;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:#c08090;margin-left:4px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 详情：初级歼灭勋章（占位） --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-b&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;📦&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;初级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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;!-- 详情 c/d/e 结构相同，略作占位 --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-c&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;💎&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;高级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&amp;quot;&amp;gt;（获取途径待补充）&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-d&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;🔮&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;材料 · 强化材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;欲火结晶&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&amp;quot;&amp;gt;（获取途径待补充）&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;item-e&amp;quot; class=&amp;quot;item-detail&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:36px;margin-bottom:40px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100px;height:100px;border-radius:16px;background:rgba(255,255,255,0.5);border:1px solid rgba(255,200,220,0.4);display:flex;align-items:center;justify-content:center;font-size:52px;box-shadow:0 4px 20px rgba(0,0,0,0.08);&amp;quot;&amp;gt;⚡&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#c07080;margin-bottom:10px;&amp;quot;&amp;gt;消耗品 · 恢复道具&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(24px,3vw,36px);font-weight:bold;color:#1a1a1f;line-height:1.2;margin-bottom:14px;&amp;quot;&amp;gt;行动令&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:16px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.85;&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 style=&amp;quot;border-top:1px solid rgba(255,150,170,0.15);padding-top:32px;color:#9a8090;font-size:14px;&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&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;script&amp;gt;&lt;br /&gt;
function switchItem(id) {&lt;br /&gt;
document.querySelectorAll(&#039;.item-detail&#039;).forEach(function(el) { el.style.display = &#039;none&#039;; });&lt;br /&gt;
document.querySelectorAll(&#039;.item-tab&#039;).forEach(function(el) {&lt;br /&gt;
el.style.borderLeft = &#039;2px solid transparent&#039;;&lt;br /&gt;
el.style.background = &#039;transparent&#039;;&lt;br /&gt;
});&lt;br /&gt;
var detail = document.getElementById(&#039;item-&#039; + id);&lt;br /&gt;
if (detail) detail.style.display = &#039;block&#039;;&lt;br /&gt;
var tab = document.querySelector(&#039;[data-item=&amp;quot;&#039; + id + &#039;&amp;quot;]&#039;);&lt;br /&gt;
if (tab) {&lt;br /&gt;
tab.style.borderLeft = &#039;2px solid #ff7676&#039;;&lt;br /&gt;
tab.style.background = &#039;rgba(255,150,170,0.08)&#039;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=388</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=388"/>
		<updated>2026-03-13T10:32:22Z</updated>

		<summary type="html">&lt;p&gt;Rin：​全屏突破容器 + 共用背景，三方案上下排列 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;width:100vw;position:relative;left:50%;transform:translateX(-50%);overflow-x:clip;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 共用全屏背景 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;background:linear-gradient(160deg,#2a1828 0%,#1a1020 40%,#201525 100%);color:#f0e8ea;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- 背景光晕装饰 --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 20% 15%,rgba(255,160,200,0.09) 0%,transparent 45%),radial-gradient(ellipse at 80% 55%,rgba(180,100,160,0.06) 0%,transparent 40%),radial-gradient(ellipse at 50% 85%,rgba(255,140,180,0.07) 0%,transparent 40%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ══════════ 方案 A · 漫流 ══════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;min-height:100vh;padding:80px clamp(40px,10vw,180px) 100px;display:flex;flex-direction:column;justify-content:center;position:relative;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:4px;color:rgba(255,255,255,0.2);margin-bottom:60px;&amp;quot;&amp;gt;方案 A · 漫流&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:clamp(40px,6vw,100px);flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:16px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:130px;height:130px;border-radius:22px;background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.09);display:flex;align-items:center;justify-content:center;font-size:66px;box-shadow:0 0 60px rgba(255,140,180,0.1),0 20px 50px rgba(0,0,0,0.35);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:4px;color:rgba(255,255,255,0.18);&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:240px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2px;color:rgba(255,180,180,0.45);margin-bottom:14px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(30px,4vw,50px);font-weight:bold;color:rgba(248,235,240,0.93);line-height:1.1;margin-bottom:22px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:36px;height:1px;background:rgba(255,118,118,0.55);margin-bottom:26px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:15px;color:rgba(235,220,228,0.7);line-height:1.95;margin-bottom:12px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:rgba(210,190,205,0.4);font-style:italic;line-height:1.9;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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 style=&amp;quot;margin-top:60px;padding-top:36px;border-top:1px solid rgba(255,255,255,0.05);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:rgba(255,255,255,0.18);margin-bottom:24px;&amp;quot;&amp;gt;获取途径 &amp;amp;nbsp;/&amp;amp;nbsp; ACQUISITION&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:560px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:15px 0;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:16px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,100,100,0.45);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:rgba(235,220,228,0.65);&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,150,150,0.35);&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,255,255,0.12);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:15px 0;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:16px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,100,100,0.45);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:rgba(235,220,228,0.65);&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,150,150,0.35);&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,255,255,0.12);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:15px 0;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:16px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,100,100,0.45);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:rgba(235,220,228,0.65);&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,150,150,0.35);&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,255,255,0.12);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:15px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:16px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,100,100,0.45);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:rgba(235,220,228,0.65);&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,150,150,0.35);&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,255,255,0.12);&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ══════════ 方案 B · 毛玻璃从下升起 ══════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;min-height:100vh;position:relative;display:flex;flex-direction:column;justify-content:flex-end;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:4px;color:rgba(255,255,255,0.2);position:absolute;top:80px;left:clamp(40px,10vw,180px);&amp;quot;&amp;gt;方案 B · 升起&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;top:100px;left:50%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:18px;z-index:2;white-space:nowrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:110px;height:110px;border-radius:20px;background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.08);display:flex;align-items:center;justify-content:center;font-size:58px;box-shadow:0 0 80px rgba(255,140,180,0.1),0 30px 60px rgba(0,0,0,0.3);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:clamp(22px,3vw,36px);font-weight:bold;color:rgba(248,235,240,0.88);letter-spacing:1px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2.5px;color:rgba(255,180,180,0.35);&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,0.52) 16%,rgba(255,255,255,0.6) 100%);backdrop-filter:blur(22px) saturate(150%);-webkit-backdrop-filter:blur(22px) saturate(150%);border-top:1px solid rgba(255,235,240,0.5);padding:clamp(36px,5vw,56px) clamp(40px,10vw,180px) 80px;position:relative;z-index:1;color:#1a1a1f;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:820px;margin:0 auto;display:flex;gap:clamp(36px,6vw,90px);flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#b07080;margin-bottom:10px;&amp;quot;&amp;gt;介绍&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:22px;height:1px;background:#ff7676;margin-bottom:14px;opacity:0.6;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.95;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#9a8090;font-style:italic;line-height:1.9;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:2px;color:#b07080;margin-bottom:10px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:22px;height:1px;background:#ff7676;margin-bottom:14px;opacity:0.6;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(180,120,140,0.1);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ed6060;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a2030;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:#c08090;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(180,120,140,0.1);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ed6060;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a2030;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:#c08090;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid rgba(180,120,140,0.1);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ed6060;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a2030;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:#c08090;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:12px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ed6060;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a2030;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:#c08090;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ══════════ 方案 C · 极简竖线分隔 ══════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;min-height:100vh;padding:80px clamp(40px,10vw,180px) 100px;display:flex;flex-direction:column;justify-content:center;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:4px;color:rgba(255,255,255,0.2);margin-bottom:72px;&amp;quot;&amp;gt;方案 C · 无感&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid;grid-template-columns:auto 1px 1fr;align-items:start;gap:0;max-width:860px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:18px;padding-right:clamp(36px,5vw,72px);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:108px;height:108px;border-radius:20px;background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.07);display:flex;align-items:center;justify-content:center;font-size:56px;box-shadow:0 0 50px rgba(255,140,180,0.08),0 16px 40px rgba(0,0,0,0.25);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:rgba(255,255,255,0.16);&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:rgba(255,255,255,0.06);min-height:220px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-left:clamp(36px,5vw,72px);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2px;color:rgba(255,170,170,0.38);margin-bottom:14px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(26px,3.5vw,42px);font-weight:bold;color:rgba(248,235,240,0.9);line-height:1.15;margin-bottom:22px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:rgba(232,218,226,0.62);line-height:1.95;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:rgba(210,188,202,0.36);font-style:italic;line-height:1.9;margin-bottom:48px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:rgba(255,255,255,0.16);margin-bottom:18px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:18px;padding:12px 0;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,100,100,0.38);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:rgba(232,218,226,0.58);&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,150,150,0.28);margin-left:auto;margin-right:10px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,255,255,0.1);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:18px;padding:12px 0;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,100,100,0.38);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:rgba(232,218,226,0.58);&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,150,150,0.28);margin-left:auto;margin-right:10px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,255,255,0.1);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:18px;padding:12px 0;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,100,100,0.38);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:rgba(232,218,226,0.58);&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,150,150,0.28);margin-left:auto;margin-right:10px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,255,255,0.1);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:18px;padding:12px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,100,100,0.38);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:rgba(232,218,226,0.58);&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,150,150,0.28);margin-left:auto;margin-right:10px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,255,255,0.1);&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=387</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=387"/>
		<updated>2026-03-13T10:29:41Z</updated>

		<summary type="html">&lt;p&gt;Rin：​重写为全屏无感风格，三个方案 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;gap:0;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ══════════════════════ 方案 A · 全屏漫流，内容直接浮在背景上 ══════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;min-height:100vh;padding:80px clamp(40px,10vw,180px) 100px;display:flex;flex-direction:column;justify-content:center;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;background:radial-gradient(ellipse at 30% 40%,rgba(255,180,200,0.08) 0%,transparent 60%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:4px;color:rgba(255,255,255,0.3);margin-bottom:48px;&amp;quot;&amp;gt;方案 A · 漫流&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:clamp(40px,6vw,100px);flex-wrap:wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:140px;height:140px;border-radius:24px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.1);display:flex;align-items:center;justify-content:center;font-size:72px;box-shadow:0 0 60px rgba(255,140,180,0.12),0 20px 40px rgba(0,0,0,0.2);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:4px;color:rgba(255,255,255,0.2);text-align:center;&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:260px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:2px;color:rgba(255,200,200,0.5);margin-bottom:12px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(32px,4vw,52px);font-weight:bold;color:#f0e8ea;line-height:1.1;margin-bottom:20px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:40px;height:1px;background:rgba(255,118,118,0.6);margin-bottom:24px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:15px;color:rgba(240,230,235,0.75);line-height:1.9;margin-bottom:12px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:rgba(220,200,210,0.45);font-style:italic;line-height:1.9;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」&amp;lt;br&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 style=&amp;quot;margin-top:64px;padding-top:40px;border-top:1px solid rgba(255,255,255,0.06);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:3px;color:rgba(255,255,255,0.2);margin-bottom:28px;&amp;quot;&amp;gt;获取途径 &amp;amp;nbsp;/&amp;amp;nbsp; ACQUISITION&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;gap:1px;max-width:600px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:16px 0;border-bottom:1px solid rgba(255,255,255,0.05);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:16px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,100,100,0.5);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:rgba(240,230,235,0.7);&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:rgba(255,160,160,0.4);&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,255,255,0.15);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:16px 0;border-bottom:1px solid rgba(255,255,255,0.05);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:16px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,100,100,0.5);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:rgba(240,230,235,0.7);&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:rgba(255,160,160,0.4);&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,255,255,0.15);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:16px 0;border-bottom:1px solid rgba(255,255,255,0.05);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:16px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,100,100,0.5);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:rgba(240,230,235,0.7);&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:rgba(255,160,160,0.4);&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,255,255,0.15);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:16px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:16px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,100,100,0.5);&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:rgba(240,230,235,0.7);&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;letter-spacing:1px;color:rgba(255,160,160,0.4);&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:rgba(255,255,255,0.15);&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ══════════════════════ 方案 B · 毛玻璃从下方升起，上半透明 ══════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;min-height:100vh;position:relative;display:flex;flex-direction:column;justify-content:flex-end;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;background:radial-gradient(ellipse at 60% 20%,rgba(255,160,200,0.07) 0%,transparent 55%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:4px;color:rgba(255,255,255,0.3);position:absolute;top:80px;left:clamp(40px,10vw,180px);&amp;quot;&amp;gt;方案 B · 升起&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;top:100px;left:50%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:16px;z-index:2;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:120px;height:120px;border-radius:20px;background:rgba(255,255,255,0.05);border:1px solid rgba(255,255,255,0.08);display:flex;align-items:center;justify-content:center;font-size:62px;box-shadow:0 0 80px rgba(255,140,180,0.1),0 30px 60px rgba(0,0,0,0.25);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:clamp(24px,3vw,38px);font-weight:bold;color:rgba(255,240,245,0.9);letter-spacing:1px;text-align:center;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2.5px;color:rgba(255,200,200,0.4);&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,0.55) 18%,rgba(255,255,255,0.62) 100%);backdrop-filter:blur(20px) saturate(150%);-webkit-backdrop-filter:blur(20px) saturate(150%);border-top:1px solid rgba(255,235,240,0.5);padding:clamp(40px,5vw,60px) clamp(40px,10vw,180px) 80px;position:relative;z-index:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:800px;margin:0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;gap:clamp(40px,6vw,100px);flex-wrap:wrap;margin-bottom:48px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2px;color:#b07080;margin-bottom:12px;&amp;quot;&amp;gt;介绍&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:24px;height:1px;background:#ff7676;margin-bottom:14px;opacity:0.6;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2030;line-height:1.9;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#9a8090;font-style:italic;line-height:1.85;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;min-width:200px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2px;color:#b07080;margin-bottom:12px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:24px;height:1px;background:#ff7676;margin-bottom:14px;opacity:0.6;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;gap:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(180,120,140,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ed6060;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a2030;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:#c08090;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(180,120,140,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ed6060;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a2030;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:#c08090;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid rgba(180,120,140,0.12);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ed6060;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a2030;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:#c08090;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:13px 0;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ed6060;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#2a2030;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:#c08090;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:#ccc;&amp;quot;&amp;gt;▶&amp;lt;/span&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&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;!-- ══════════════════════ 方案 C · 极简居中，最「无感」 ══════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;min-height:100vh;padding:0 clamp(40px,10vw,180px);display:flex;flex-direction:column;justify-content:center;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;background:radial-gradient(ellipse at 50% 50%,rgba(255,140,180,0.06) 0%,transparent 55%);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:4px;color:rgba(255,255,255,0.3);margin-bottom:80px;&amp;quot;&amp;gt;方案 C · 无感&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid;grid-template-columns:auto 1px 1fr;gap:0 clamp(40px,5vw,80px);align-items:start;max-width:900px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;align-items:center;gap:20px;padding-right:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:110px;height:110px;border-radius:20px;background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.08);display:flex;align-items:center;justify-content:center;font-size:58px;box-shadow:0 0 50px rgba(255,140,180,0.08),0 16px 40px rgba(0,0,0,0.18);&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:9px;letter-spacing:3px;color:rgba(255,255,255,0.18);&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:rgba(255,255,255,0.07);height:100%;min-height:200px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-left:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2px;color:rgba(255,180,180,0.4);margin-bottom:14px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-size:clamp(28px,3.5vw,44px);font-weight:bold;color:rgba(248,235,240,0.92);line-height:1.15;margin-bottom:24px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:rgba(235,220,228,0.65);line-height:1.95;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:rgba(210,190,205,0.38);font-style:italic;line-height:1.9;margin-bottom:48px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:3px;color:rgba(255,255,255,0.18);margin-bottom:20px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;flex-direction:column;gap:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:20px;padding:13px 0;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,100,100,0.4);flex-shrink:0;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:rgba(235,220,228,0.6);&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,160,160,0.3);margin-left:auto;margin-right:12px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,255,255,0.1);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:20px;padding:13px 0;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,100,100,0.4);flex-shrink:0;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:rgba(235,220,228,0.6);&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,160,160,0.3);margin-left:auto;margin-right:12px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,255,255,0.1);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:20px;padding:13px 0;border-bottom:1px solid rgba(255,255,255,0.04);&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,100,100,0.4);flex-shrink:0;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:rgba(235,220,228,0.6);&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,160,160,0.3);margin-left:auto;margin-right:12px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,255,255,0.1);&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:20px;padding:13px 0;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,100,100,0.4);flex-shrink:0;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:rgba(235,220,228,0.6);&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;letter-spacing:1px;color:rgba(255,160,160,0.3);margin-left:auto;margin-right:12px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:9px;color:rgba(255,255,255,0.1);&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=386</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=386"/>
		<updated>2026-03-13T10:25:52Z</updated>

		<summary type="html">&lt;p&gt;Rin：​去掉行首空格，修复 pre 格式问题 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;max-width:900px;margin:0 auto;padding:40px 0 80px;display:flex;flex-direction:column;gap:80px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:13px;letter-spacing:2px;color:#aaa;margin-bottom:16px;&amp;quot;&amp;gt;方案 A · 渐融左图&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-radius:18px 18px 8px 8px;background:rgba(255,255,255,0.62);border-top:1px solid rgba(255,235,240,0.72);box-shadow:0 -2px 6px rgba(255,255,255,0.13),0 -4px 14px rgba(255,180,200,0.18),0 8px 32px rgba(0,0,0,0.14);overflow:hidden;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;inset:0;border-radius:inherit;background:radial-gradient(110% 60% at 50% -10%,rgba(255,255,255,0.88) 0%,rgba(255,225,230,0.5) 20%,rgba(255,200,215,0.15) 38%,transparent 55%);pointer-events:none;z-index:0;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.95) 30%,rgba(255,220,230,0.8) 70%,transparent);z-index:1;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:2;display:flex;align-items:stretch;min-height:240px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:185px;flex-shrink:0;background:linear-gradient(160deg,#2e1a2c 0%,#1e1222 100%);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:28px 20px;-webkit-mask-image:linear-gradient(to right,black 50%,transparent 100%);mask-image:linear-gradient(to right,black 50%,transparent 100%);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:88px;height:88px;border-radius:14px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.13);display:flex;align-items:center;justify-content:center;font-size:48px;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:18px;font-size:9px;letter-spacing:3.5px;color:rgba(255,255,255,0.2);&amp;quot;&amp;gt;ITEM&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;padding:26px 28px 22px 6px;min-width:0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:inline-block;font-size:11px;letter-spacing:1.5px;color:#c06070;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.16);border-radius:3px;padding:2px 8px;margin-bottom:8px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-weight:bold;font-size:26px;color:#1a1a1f;line-height:1.2;margin-bottom:12px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:36px;height:2px;background:#ff7676;margin-bottom:10px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2a30;line-height:1.7;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#999;font-style:italic;line-height:1.75;border-left:2px solid rgba(255,118,118,0.28);padding-left:10px;&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 style=&amp;quot;position:relative;z-index:2;padding:0 28px 22px;border-top:1px solid rgba(255,180,200,0.22);margin-top:2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:baseline;gap:8px;margin:14px 0 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:Georgia,serif;font-weight:bold;font-size:17px;color:#1a1a1f;&amp;quot;&amp;gt;获取途径&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:12px;color:#bbb;letter-spacing:1px;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:30px;height:2px;background:#ff7676;margin-bottom:12px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;margin-bottom:6px;background:rgba(255,255,255,0.45);border-radius:5px;border:1px solid rgba(255,220,230,0.38);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:12px;font-weight:bold;width:14px;text-align:center;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 6px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;margin-bottom:6px;background:rgba(255,255,255,0.45);border-radius:5px;border:1px solid rgba(255,220,230,0.38);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:12px;font-weight:bold;width:14px;text-align:center;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 6px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;margin-bottom:6px;background:rgba(255,255,255,0.45);border-radius:5px;border:1px solid rgba(255,220,230,0.38);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:12px;font-weight:bold;width:14px;text-align:center;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 6px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:rgba(255,255,255,0.45);border-radius:5px;border:1px solid rgba(255,220,230,0.38);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:12px;font-weight:bold;width:14px;text-align:center;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 6px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:13px;letter-spacing:2px;color:#aaa;margin-bottom:16px;&amp;quot;&amp;gt;方案 B · 顶横幅宽幅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-radius:14px;background:rgba(255,255,255,0.6);border:1px solid rgba(255,235,240,0.6);box-shadow:0 4px 24px rgba(0,0,0,0.12),0 1px 0 rgba(255,255,255,0.8) inset;overflow:hidden;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:linear-gradient(135deg,#2e1a2c 0%,#1e1020 60%,#281525 100%);padding:28px 32px;display:flex;align-items:center;gap:24px;position:relative;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;inset:0;background:radial-gradient(ellipse at 20% 50%,rgba(255,140,180,0.12) 0%,transparent 60%);pointer-events:none;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:80px;height:80px;border-radius:14px;background:rgba(255,255,255,0.07);border:1px solid rgba(255,255,255,0.14);display:flex;align-items:center;justify-content:center;font-size:42px;flex-shrink:0;position:relative;z-index:1;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:relative;z-index:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2.5px;color:rgba(255,255,255,0.3);margin-bottom:6px;&amp;quot;&amp;gt;ITEM · 消耗品&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-weight:bold;font-size:28px;color:#fff;line-height:1.15;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px;color:rgba(255,160,180,0.7);margin-top:4px;letter-spacing:1px;&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 style=&amp;quot;padding:26px 32px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:36px;height:2px;background:#ff7676;margin-bottom:12px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2a30;line-height:1.75;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#999;font-style:italic;line-height:1.8;margin-bottom:24px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:1px;background:linear-gradient(90deg,rgba(255,150,170,0.25),transparent);margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:baseline;gap:8px;margin-bottom:4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family:Georgia,serif;font-weight:bold;font-size:17px;color:#1a1a1f;&amp;quot;&amp;gt;获取途径&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:12px;color:#bbb;letter-spacing:1px;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:30px;height:2px;background:#ff7676;margin-bottom:14px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:0 20px 24px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:11px 16px;margin-bottom:5px;background:rgba(255,255,255,0.5);border-radius:6px;border-left:3px solid rgba(255,118,118,0.5);border-top:1px solid rgba(255,220,230,0.4);border-right:1px solid rgba(255,220,230,0.4);border-bottom:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 7px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:11px 16px;margin-bottom:5px;background:rgba(255,255,255,0.5);border-radius:6px;border-left:3px solid rgba(255,118,118,0.5);border-top:1px solid rgba(255,220,230,0.4);border-right:1px solid rgba(255,220,230,0.4);border-bottom:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 7px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:11px 16px;margin-bottom:5px;background:rgba(255,255,255,0.5);border-radius:6px;border-left:3px solid rgba(255,118,118,0.5);border-top:1px solid rgba(255,220,230,0.4);border-right:1px solid rgba(255,220,230,0.4);border-bottom:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 7px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:11px 16px;background:rgba(255,255,255,0.5);border-radius:6px;border-left:3px solid rgba(255,118,118,0.5);border-top:1px solid rgba(255,220,230,0.4);border-right:1px solid rgba(255,220,230,0.4);border-bottom:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 7px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:13px;letter-spacing:2px;color:#aaa;margin-bottom:16px;&amp;quot;&amp;gt;方案 C · 悬浮图标双栏&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-radius:14px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.13);position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:linear-gradient(160deg,#2e1a2c 0%,#1e1020 100%);height:120px;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;inset:0;background:radial-gradient(ellipse at 50% 120%,rgba(255,140,170,0.15) 0%,transparent 65%);pointer-events:none;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;top:18px;right:20px;font-size:10px;letter-spacing:2px;color:rgba(255,255,255,0.25);&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:rgba(255,255,255,0.64);border-top:1px solid rgba(255,235,240,0.7);position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;inset:0;background:radial-gradient(110% 50% at 50% -5%,rgba(255,255,255,0.85) 0%,rgba(255,225,230,0.4) 18%,transparent 45%);pointer-events:none;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;position:absolute;top:-52px;left:32px;width:96px;height:96px;border-radius:16px;background:linear-gradient(145deg,rgba(255,255,255,0.12),rgba(255,255,255,0.04));border:1px solid rgba(255,255,255,0.2);box-shadow:0 8px 24px rgba(0,0,0,0.3),0 2px 4px rgba(255,200,220,0.2);display:flex;align-items:center;justify-content:center;font-size:52px;&amp;quot;&amp;gt;🏅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding:20px 28px 0 144px;position:relative;z-index:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-weight:bold;font-size:25px;color:#1a1a1f;line-height:1.2;margin-bottom:4px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:10px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:0;position:relative;z-index:1;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;flex:1;padding:0 24px 28px 28px;border-right:1px solid rgba(255,180,200,0.2);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;color:#2a2a30;line-height:1.75;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px;color:#999;font-style:italic;line-height:1.8;border-left:2px solid rgba(255,118,118,0.25);padding-left:10px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:260px;flex-shrink:0;padding:0 24px 28px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#bbb;margin-bottom:10px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:9px 12px;margin-bottom:5px;background:rgba(255,255,255,0.55);border-radius:5px;border:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:8px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:10px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:9px 12px;margin-bottom:5px;background:rgba(255,255,255,0.55);border-radius:5px;border:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:8px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:10px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:9px 12px;margin-bottom:5px;background:rgba(255,255,255,0.55);border-radius:5px;border:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:8px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:10px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:9px 12px;background:rgba(255,255,255,0.55);border-radius:5px;border:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:8px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:10px;&amp;quot;&amp;gt;▶&amp;lt;/span&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&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&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=385</id>
		<title>Sandbox/item</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/item&amp;diff=385"/>
		<updated>2026-03-13T10:22:25Z</updated>

		<summary type="html">&lt;p&gt;Rin：​道具页面设计方案预览（行内style，三种方案） (via create-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;max-width:900px;margin:0 auto;padding:40px 0 80px;display:flex;flex-direction:column;gap:80px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ══════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!--  方案 A  左暗图区 mask 渐变溶入毛玻璃            --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ══════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:13px;letter-spacing:2px;color:#aaa;margin-bottom:16px;&amp;quot;&amp;gt;方案 A · 渐融左图&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-radius:18px 18px 8px 8px;background:rgba(255,255,255,0.62);border-top:1px solid rgba(255,235,240,0.72);box-shadow:0 -2px 6px rgba(255,255,255,0.13),0 -4px 14px rgba(255,180,200,0.18),0 8px 32px rgba(0,0,0,0.14);overflow:hidden;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- 顶部粉光 --&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;position:absolute;inset:0;border-radius:inherit;background:radial-gradient(110% 60% at 50% -10%,rgba(255,255,255,0.88) 0%,rgba(255,225,230,0.5) 20%,rgba(255,200,215,0.15) 38%,transparent 55%);pointer-events:none;z-index:0;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;!-- 顶部高光线 --&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.95) 30%,rgba(255,220,230,0.8) 70%,transparent);z-index:1;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- 主体：左图 + 右文 --&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;position:relative;z-index:2;display:flex;align-items:stretch;min-height:240px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- 左侧图区，mask 渐变溶入 --&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width:185px;flex-shrink:0;background:linear-gradient(160deg,#2e1a2c 0%,#1e1222 100%);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:28px 20px;-webkit-mask-image:linear-gradient(to right,black 50%,transparent 100%);mask-image:linear-gradient(to right,black 50%,transparent 100%);&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;!-- 图标框 --&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;width:88px;height:88px;border-radius:14px;background:rgba(255,255,255,0.06);border:1px solid rgba(255,255,255,0.13);display:flex;align-items:center;justify-content:center;font-size:48px;&amp;quot;&amp;gt;[[文件:Placeholder.png|48px|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;margin-top:18px;font-size:9px;letter-spacing:3.5px;color:rgba(255,255,255,0.2);&amp;quot;&amp;gt;ITEM&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 style=&amp;quot;flex:1;padding:26px 28px 22px 6px;min-width:0;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:inline-block;font-size:11px;letter-spacing:1.5px;color:#c06070;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.16);border-radius:3px;padding:2px 8px;margin-bottom:8px;&amp;quot;&amp;gt;消耗品 · 晋升材料&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-weight:bold;font-size:26px;color:#1a1a1f;line-height:1.2;margin-bottom:12px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;width:36px;height:2px;background:#ff7676;margin-bottom:10px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;font-size:14px;color:#2a2a30;line-height:1.7;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;font-size:13px;color:#999;font-style:italic;line-height:1.75;border-left:2px solid rgba(255,118,118,0.28);padding-left:10px;&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;
&lt;br /&gt;
  &amp;lt;!-- 获取途径 --&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;position:relative;z-index:2;padding:0 28px 22px;border-top:1px solid rgba(255,180,200,0.22);margin-top:2px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:baseline;gap:8px;margin:14px 0 4px;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;font-family:Georgia,serif;font-weight:bold;font-size:17px;color:#1a1a1f;&amp;quot;&amp;gt;获取途径&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;font-size:12px;color:#bbb;letter-spacing:1px;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width:30px;height:2px;background:#ff7676;margin-bottom:12px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;margin-bottom:6px;background:rgba(255,255,255,0.45);border-radius:5px;border:1px solid rgba(255,220,230,0.38);&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:12px;font-weight:bold;width:14px;text-align:center;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 6px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;margin-bottom:6px;background:rgba(255,255,255,0.45);border-radius:5px;border:1px solid rgba(255,220,230,0.38);&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:12px;font-weight:bold;width:14px;text-align:center;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 6px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;margin-bottom:6px;background:rgba(255,255,255,0.45);border-radius:5px;border:1px solid rgba(255,220,230,0.38);&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:12px;font-weight:bold;width:14px;text-align:center;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 6px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:rgba(255,255,255,0.45);border-radius:5px;border:1px solid rgba(255,220,230,0.38);&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:12px;font-weight:bold;width:14px;text-align:center;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 6px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&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&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ══════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!--  方案 B  顶部暗色横幅，图标大居中，下方全展开  --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ══════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:13px;letter-spacing:2px;color:#aaa;margin-bottom:16px;&amp;quot;&amp;gt;方案 B · 顶横幅宽幅&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-radius:14px;background:rgba(255,255,255,0.6);border:1px solid rgba(255,235,240,0.6);box-shadow:0 4px 24px rgba(0,0,0,0.12),0 1px 0 rgba(255,255,255,0.8) inset;overflow:hidden;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- 顶部横幅：暗色，图标居左大展示 --&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;background:linear-gradient(135deg,#2e1a2c 0%,#1e1020 60%,#281525 100%);padding:28px 32px;display:flex;align-items:center;gap:24px;position:relative;overflow:hidden;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- 横幅内光晕 --&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;position:absolute;inset:0;background:radial-gradient(ellipse at 20% 50%,rgba(255,140,180,0.12) 0%,transparent 60%);pointer-events:none;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- 图标 --&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width:80px;height:80px;border-radius:14px;background:rgba(255,255,255,0.07);border:1px solid rgba(255,255,255,0.14);display:flex;align-items:center;justify-content:center;font-size:42px;flex-shrink:0;position:relative;z-index:1;&amp;quot;&amp;gt;[[文件:Placeholder.png|42px|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- 名称与类型 --&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;position:relative;z-index:1;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;font-size:10px;letter-spacing:2.5px;color:rgba(255,255,255,0.3);margin-bottom:6px;&amp;quot;&amp;gt;ITEM · 消耗品&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-weight:bold;font-size:28px;color:#fff;line-height:1.15;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;font-size:12px;color:rgba(255,160,180,0.7);margin-top:4px;letter-spacing:1px;&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;
&lt;br /&gt;
  &amp;lt;!-- 主体内容 --&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;padding:26px 32px 10px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width:36px;height:2px;background:#ff7676;margin-bottom:12px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;font-size:14px;color:#2a2a30;line-height:1.75;margin-bottom:8px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;font-size:13px;color:#999;font-style:italic;line-height:1.8;margin-bottom:24px;&amp;quot;&amp;gt;「总算干出点成绩。别得意，在这行栽跟头可一点不难。」——颁发人员的激励寄语。&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- 分隔 --&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;height:1px;background:linear-gradient(90deg,rgba(255,150,170,0.25),transparent);margin-bottom:18px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:baseline;gap:8px;margin-bottom:4px;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;font-family:Georgia,serif;font-weight:bold;font-size:17px;color:#1a1a1f;&amp;quot;&amp;gt;获取途径&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;font-size:12px;color:#bbb;letter-spacing:1px;&amp;quot;&amp;gt;Acquisition&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;width:30px;height:2px;background:#ff7676;margin-bottom:14px;&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;!-- 获取途径列表（无左右 padding，让条目横跨全宽） --&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;padding:0 20px 24px;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:11px 16px;margin-bottom:5px;background:rgba(255,255,255,0.5);border-radius:6px;border-left:3px solid rgba(255,118,118,0.5);border-top:1px solid rgba(255,220,230,0.4);border-right:1px solid rgba(255,220,230,0.4);border-bottom:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 7px;&amp;quot;&amp;gt;自选&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:11px 16px;margin-bottom:5px;background:rgba(255,255,255,0.5);border-radius:6px;border-left:3px solid rgba(255,118,118,0.5);border-top:1px solid rgba(255,220,230,0.4);border-right:1px solid rgba(255,220,230,0.4);border-bottom:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 7px;&amp;quot;&amp;gt;关卡&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:11px 16px;margin-bottom:5px;background:rgba(255,255,255,0.5);border-radius:6px;border-left:3px solid rgba(255,118,118,0.5);border-top:1px solid rgba(255,220,230,0.4);border-right:1px solid rgba(255,220,230,0.4);border-bottom:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 7px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:11px 16px;background:rgba(255,255,255,0.5);border-radius:6px;border-left:3px solid rgba(255,118,118,0.5);border-top:1px solid rgba(255,220,230,0.4);border-right:1px solid rgba(255,220,230,0.4);border-bottom:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:12px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:14px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:10px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:10px;color:#b05060;background:rgba(237,65,100,0.07);border:1px solid rgba(237,65,100,0.14);border-radius:2px;padding:1px 7px;&amp;quot;&amp;gt;商店&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color:#ccc;font-size:11px;&amp;quot;&amp;gt;▶&amp;lt;/span&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;
&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;
&amp;lt;!-- ══════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&amp;lt;!--  方案 C  图标悬浮在分界线上，介绍与获取左右分栏  --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ══════════════════════════════════════════════ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family:Georgia,serif;font-size:13px;letter-spacing:2px;color:#aaa;margin-bottom:16px;&amp;quot;&amp;gt;方案 C · 悬浮图标双栏&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-radius:14px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.13);position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- 上半暗色区 --&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;background:linear-gradient(160deg,#2e1a2c 0%,#1e1020 100%);height:120px;position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;position:absolute;inset:0;background:radial-gradient(ellipse at 50% 120%,rgba(255,140,170,0.15) 0%,transparent 65%);pointer-events:none;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;!-- 右上角类型标注 --&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;position:absolute;top:18px;right:20px;font-size:10px;letter-spacing:2px;color:rgba(255,255,255,0.25);&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;!-- 下半毛玻璃区 --&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;background:rgba(255,255,255,0.64);border-top:1px solid rgba(255,235,240,0.7);position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;position:absolute;inset:0;background:radial-gradient(110% 50% at 50% -5%,rgba(255,255,255,0.85) 0%,rgba(255,225,230,0.4) 18%,transparent 45%);pointer-events:none;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- 悬浮图标（骑跨分界线） --&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;position:absolute;top:-52px;left:32px;width:96px;height:96px;border-radius:16px;background:linear-gradient(145deg,rgba(255,255,255,0.12),rgba(255,255,255,0.04));border:1px solid rgba(255,255,255,0.2);box-shadow:0 8px 24px rgba(0,0,0,0.3),0 2px 4px rgba(255,200,220,0.2);display:flex;align-items:center;justify-content:center;font-size:52px;&amp;quot;&amp;gt;[[文件:Placeholder.png|52px|link=]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- 内容区，左边留出图标宽度 --&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;padding:20px 28px 0 144px;position:relative;z-index:1;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;font-family:Georgia,&#039;Noto Serif SC&#039;,serif;font-weight:bold;font-size:25px;color:#1a1a1f;line-height:1.2;margin-bottom:4px;&amp;quot;&amp;gt;中级歼灭勋章&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;width:32px;height:2px;background:#ff7676;margin-bottom:10px;&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;!-- 双栏：介绍 + 获取 --&amp;gt;&lt;br /&gt;
    &amp;lt;div style=&amp;quot;display:flex;align-items:flex-start;gap:0;position:relative;z-index:1;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!-- 左：介绍 --&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;flex:1;padding:0 24px 28px 28px;border-right:1px solid rgba(255,180,200,0.2);&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div style=&amp;quot;font-size:14px;color:#2a2a30;line-height:1.75;margin-bottom:10px;&amp;quot;&amp;gt;攒后可晋升中级职位。&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div style=&amp;quot;font-size:13px;color:#999;font-style:italic;line-height:1.8;border-left:2px solid rgba(255,118,118,0.25);padding-left:10px;&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;!-- 右：获取途径 --&amp;gt;&lt;br /&gt;
      &amp;lt;div style=&amp;quot;width:260px;flex-shrink:0;padding:0 24px 28px;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div style=&amp;quot;font-size:11px;letter-spacing:1.5px;color:#bbb;margin-bottom:10px;&amp;quot;&amp;gt;获取途径&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:9px 12px;margin-bottom:5px;background:rgba(255,255,255,0.55);border-radius:5px;border:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:8px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;中级勋章自选&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;span style=&amp;quot;color:#ccc;font-size:10px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:9px 12px;margin-bottom:5px;background:rgba(255,255,255,0.55);border-radius:5px;border:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:8px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;[物资] 站台攻歼&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;span style=&amp;quot;color:#ccc;font-size:10px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:9px 12px;margin-bottom:5px;background:rgba(255,255,255,0.55);border-radius:5px;border:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:8px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;置换部&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;span style=&amp;quot;color:#ccc;font-size:10px;&amp;quot;&amp;gt;▶&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div style=&amp;quot;display:flex;align-items:center;justify-content:space-between;padding:9px 12px;background:rgba(255,255,255,0.55);border-radius:5px;border:1px solid rgba(255,220,230,0.4);&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div style=&amp;quot;display:flex;align-items:center;gap:8px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ed4141;font-size:11px;font-weight:bold;&amp;quot;&amp;gt;✕&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size:13px;color:#1a1a1f;&amp;quot;&amp;gt;闪烁柜台&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;span style=&amp;quot;color:#ccc;font-size:10px;&amp;quot;&amp;gt;▶&amp;lt;/span&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&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&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=384</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=384"/>
		<updated>2026-03-12T16:08:21Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 单条属性行：图标 + 标签 + 值&lt;br /&gt;
local function makeAttrRow(label, value)&lt;br /&gt;
    local item = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;)&lt;br /&gt;
    local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-title&amp;quot;)&lt;br /&gt;
    titleDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-icon&amp;quot;)&lt;br /&gt;
    titleDiv:tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot; &amp;quot; .. label)&lt;br /&gt;
    item:tag(&amp;quot;div&amp;quot;):wikitext(value or &amp;quot;—&amp;quot;)&lt;br /&gt;
    return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 信息栏：稀有度 + 四维&lt;br /&gt;
local function makeInfoSection(intel, supply, execute, strategy, rarity)&lt;br /&gt;
    local infoDiv = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    local dims = {&lt;br /&gt;
        { label = &amp;quot;情报&amp;quot;, value = intel    },&lt;br /&gt;
        { label = &amp;quot;物资&amp;quot;, value = supply   },&lt;br /&gt;
        { label = &amp;quot;执行&amp;quot;, value = execute  },&lt;br /&gt;
        { label = &amp;quot;策略&amp;quot;, value = strategy },&lt;br /&gt;
    }&lt;br /&gt;
    for _, dim in ipairs(dims) do&lt;br /&gt;
        local item = infoDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(dim.label)&lt;br /&gt;
        local n = tonumber(dim.value)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(n and (&amp;quot;※&amp;quot; .. n) or &amp;quot;—&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return infoDiv&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    local maxCols = 0&lt;br /&gt;
    for _, row in ipairs(rows) do&lt;br /&gt;
        if type(row.levels) == &amp;quot;table&amp;quot; and #row.levels &amp;gt; maxCols then&lt;br /&gt;
            maxCols = #row.levels&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local DATA_COLS, gridClass&lt;br /&gt;
    if maxCols &amp;gt; 8 then&lt;br /&gt;
        DATA_COLS = 9&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid card_content_skill-upgrade-grid--10&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        DATA_COLS = 8&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, DATA_COLS + 1 do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local levels = (type(row.levels) == &amp;quot;table&amp;quot;) and row.levels or {}&lt;br /&gt;
        for col = 1, DATA_COLS do&lt;br /&gt;
            local v = levels[col]&lt;br /&gt;
            local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
            if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
                cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            text = text:gsub(&amp;quot;\r\n&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            local paragraphs = mw.text.split(text, &amp;quot;\n+&amp;quot;)&lt;br /&gt;
            for _, para in ipairs(paragraphs) do&lt;br /&gt;
                para = mw.text.trim(para)&lt;br /&gt;
                if para ~= &amp;quot;&amp;quot; then bodyDiv:tag(&amp;quot;p&amp;quot;):wikitext(para) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,intel,supply,execute,strategy&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 左栏&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 卡名&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    -- 信息（稀有度 + 四维）&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeInfoSection(card.intel, card.supply, card.execute, card.strategy, rarity))&lt;br /&gt;
&lt;br /&gt;
    -- 等级 100 属性&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;生命&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;攻击&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;防御&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;暴击率&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;暴击伤害&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    -- 映像&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;固定攻击&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;固定生命&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;伤害加成&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    -- 认知&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 右栏&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    -- 小传&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    -- 邀约&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=383</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=383"/>
		<updated>2026-03-12T11:38:45Z</updated>

		<summary type="html">&lt;p&gt;Rin：​补充等级属性/映像的 HTML 结构，新增 makeAttrRow，暂以 — 占位 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 单条属性行：图标 + 标签 + 值&lt;br /&gt;
local function makeAttrRow(label, value)&lt;br /&gt;
    local item = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;)&lt;br /&gt;
    local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-title&amp;quot;)&lt;br /&gt;
    titleDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-icon&amp;quot;)&lt;br /&gt;
    titleDiv:tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot; &amp;quot; .. label)&lt;br /&gt;
    item:tag(&amp;quot;div&amp;quot;):wikitext(value or &amp;quot;—&amp;quot;)&lt;br /&gt;
    return item&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 信息栏：稀有度 + 四维&lt;br /&gt;
local function makeInfoSection(intel, supply, execute, strategy, rarity)&lt;br /&gt;
    local infoDiv = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rarityItem = infoDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
    rarityItem:tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;)&lt;br /&gt;
    rarityItem:tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
&lt;br /&gt;
    local dims = {&lt;br /&gt;
        { label = &amp;quot;情报&amp;quot;, value = intel    },&lt;br /&gt;
        { label = &amp;quot;物资&amp;quot;, value = supply   },&lt;br /&gt;
        { label = &amp;quot;执行&amp;quot;, value = execute  },&lt;br /&gt;
        { label = &amp;quot;策略&amp;quot;, value = strategy },&lt;br /&gt;
    }&lt;br /&gt;
    for _, dim in ipairs(dims) do&lt;br /&gt;
        local item = infoDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(dim.label)&lt;br /&gt;
        local n = tonumber(dim.value)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(n and (&amp;quot;※&amp;quot; .. n) or &amp;quot;—&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return infoDiv&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    local maxCols = 0&lt;br /&gt;
    for _, row in ipairs(rows) do&lt;br /&gt;
        if type(row.levels) == &amp;quot;table&amp;quot; and #row.levels &amp;gt; maxCols then&lt;br /&gt;
            maxCols = #row.levels&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local DATA_COLS, gridClass&lt;br /&gt;
    if maxCols &amp;gt; 8 then&lt;br /&gt;
        DATA_COLS = 9&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid card_content_skill-upgrade-grid--10&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        DATA_COLS = 8&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, DATA_COLS + 1 do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local levels = (type(row.levels) == &amp;quot;table&amp;quot;) and row.levels or {}&lt;br /&gt;
        for col = 1, DATA_COLS do&lt;br /&gt;
            local v = levels[col]&lt;br /&gt;
            local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
            if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
                cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            text = text:gsub(&amp;quot;\r\n&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            local paragraphs = mw.text.split(text, &amp;quot;\n+&amp;quot;)&lt;br /&gt;
            for _, para in ipairs(paragraphs) do&lt;br /&gt;
                para = mw.text.trim(para)&lt;br /&gt;
                if para ~= &amp;quot;&amp;quot; then bodyDiv:tag(&amp;quot;p&amp;quot;):wikitext(para) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,intel,supply,execute,strategy&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 左栏&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 卡名&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    -- 信息（稀有度 + 四维）&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeInfoSection(card.intel, card.supply, card.execute, card.strategy, rarity))&lt;br /&gt;
&lt;br /&gt;
    -- 等级 100 属性&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;生命&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;攻击&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;防御&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;暴击率&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;暴击伤害&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    -- 映像&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;固定攻击&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;固定生命&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
    leftCol:node(makeAttrRow(&amp;quot;伤害加成&amp;quot;, &amp;quot;—&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    -- 认知&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 右栏&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    -- 小传&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    -- 邀约&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=382</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=382"/>
		<updated>2026-03-12T11:11:51Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeInfoSection(intel, supply, execute, strategy, rarity)&lt;br /&gt;
    local infoDiv = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- local rarityItem = infoDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
    -- rarityItem:tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;)&lt;br /&gt;
    -- rarityItem:tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
&lt;br /&gt;
    local dims = {&lt;br /&gt;
        { label = &amp;quot;情报&amp;quot;, value = intel    },&lt;br /&gt;
        { label = &amp;quot;物资&amp;quot;, value = supply   },&lt;br /&gt;
        { label = &amp;quot;执行&amp;quot;, value = execute  },&lt;br /&gt;
        { label = &amp;quot;策略&amp;quot;, value = strategy },&lt;br /&gt;
    }&lt;br /&gt;
    for _, dim in ipairs(dims) do&lt;br /&gt;
        local item = infoDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(dim.label)&lt;br /&gt;
        local n = tonumber(dim.value)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(n and (&amp;quot;※&amp;quot; .. n) or &amp;quot;—&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return infoDiv&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- CSS 定义：&lt;br /&gt;
--   默认 grid：auto repeat(8,  ...)  →  1标签 + 8数据  = 9格，表头 2~9&lt;br /&gt;
--   --10  grid：auto repeat(9,  ...)  →  1标签 + 9数据  = 10格，表头 2~10&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    -- 取数据中最大列数，决定用哪种 grid&lt;br /&gt;
    local maxCols = 0&lt;br /&gt;
    for _, row in ipairs(rows) do&lt;br /&gt;
        if type(row.levels) == &amp;quot;table&amp;quot; and #row.levels &amp;gt; maxCols then&lt;br /&gt;
            maxCols = #row.levels&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- DATA_COLS = 实际数据列数（不含标签列）&lt;br /&gt;
    -- 超过8列用 --10（9数据列），否则用默认（8数据列）&lt;br /&gt;
    local DATA_COLS, gridClass&lt;br /&gt;
    if maxCols &amp;gt; 8 then&lt;br /&gt;
        DATA_COLS = 9&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid card_content_skill-upgrade-grid--10&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        DATA_COLS = 8&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
&lt;br /&gt;
    -- 表头：1格空白 + 2~(DATA_COLS+1) 的等级数字&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)  -- 空白占位&lt;br /&gt;
    for i = 2, DATA_COLS + 1 do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 数据行&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local levels = (type(row.levels) == &amp;quot;table&amp;quot;) and row.levels or {}&lt;br /&gt;
        for col = 1, DATA_COLS do&lt;br /&gt;
            local v = levels[col]&lt;br /&gt;
            local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
            if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
                cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
            :wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if idx == #stories then&lt;br /&gt;
            item:addClass(&amp;quot;card_timeline-item--last&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-numeral&amp;quot;)&lt;br /&gt;
            :wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-chapter&amp;quot;)&lt;br /&gt;
            :wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-label&amp;quot;)&lt;br /&gt;
            :wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            -- 统一换行格式&lt;br /&gt;
            text = text:gsub(&amp;quot;\r\n&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            -- 按段落拆分&lt;br /&gt;
            local paragraphs = mw.text.split(text, &amp;quot;\n+&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            for _, para in ipairs(paragraphs) do&lt;br /&gt;
                para = mw.text.trim(para)&lt;br /&gt;
&lt;br /&gt;
                if para ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    bodyDiv:tag(&amp;quot;p&amp;quot;):wikitext(para)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,intel,supply,execute,strategy&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeInfoSection(card.intel, card.supply, card.execute, card.strategy))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=381</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=381"/>
		<updated>2026-03-12T11:11:00Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeInfoSection(intel, supply, execute, strategy, rarity)&lt;br /&gt;
    local infoDiv = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rarityItem = infoDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
    rarityItem:tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;)&lt;br /&gt;
    rarityItem:tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
&lt;br /&gt;
    local dims = {&lt;br /&gt;
        { label = &amp;quot;情报&amp;quot;, value = intel    },&lt;br /&gt;
        { label = &amp;quot;物资&amp;quot;, value = supply   },&lt;br /&gt;
        { label = &amp;quot;执行&amp;quot;, value = execute  },&lt;br /&gt;
        { label = &amp;quot;策略&amp;quot;, value = strategy },&lt;br /&gt;
    }&lt;br /&gt;
    for _, dim in ipairs(dims) do&lt;br /&gt;
        local item = infoDiv:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(dim.label)&lt;br /&gt;
        local n = tonumber(dim.value)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):wikitext(n and (&amp;quot;※&amp;quot; .. n) or &amp;quot;—&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return infoDiv&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- CSS 定义：&lt;br /&gt;
--   默认 grid：auto repeat(8,  ...)  →  1标签 + 8数据  = 9格，表头 2~9&lt;br /&gt;
--   --10  grid：auto repeat(9,  ...)  →  1标签 + 9数据  = 10格，表头 2~10&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    -- 取数据中最大列数，决定用哪种 grid&lt;br /&gt;
    local maxCols = 0&lt;br /&gt;
    for _, row in ipairs(rows) do&lt;br /&gt;
        if type(row.levels) == &amp;quot;table&amp;quot; and #row.levels &amp;gt; maxCols then&lt;br /&gt;
            maxCols = #row.levels&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- DATA_COLS = 实际数据列数（不含标签列）&lt;br /&gt;
    -- 超过8列用 --10（9数据列），否则用默认（8数据列）&lt;br /&gt;
    local DATA_COLS, gridClass&lt;br /&gt;
    if maxCols &amp;gt; 8 then&lt;br /&gt;
        DATA_COLS = 9&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid card_content_skill-upgrade-grid--10&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        DATA_COLS = 8&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
&lt;br /&gt;
    -- 表头：1格空白 + 2~(DATA_COLS+1) 的等级数字&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)  -- 空白占位&lt;br /&gt;
    for i = 2, DATA_COLS + 1 do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 数据行&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local levels = (type(row.levels) == &amp;quot;table&amp;quot;) and row.levels or {}&lt;br /&gt;
        for col = 1, DATA_COLS do&lt;br /&gt;
            local v = levels[col]&lt;br /&gt;
            local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
            if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
                cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
            :wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if idx == #stories then&lt;br /&gt;
            item:addClass(&amp;quot;card_timeline-item--last&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-numeral&amp;quot;)&lt;br /&gt;
            :wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-chapter&amp;quot;)&lt;br /&gt;
            :wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-label&amp;quot;)&lt;br /&gt;
            :wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            -- 统一换行格式&lt;br /&gt;
            text = text:gsub(&amp;quot;\r\n&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            -- 按段落拆分&lt;br /&gt;
            local paragraphs = mw.text.split(text, &amp;quot;\n+&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            for _, para in ipairs(paragraphs) do&lt;br /&gt;
                para = mw.text.trim(para)&lt;br /&gt;
&lt;br /&gt;
                if para ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    bodyDiv:tag(&amp;quot;p&amp;quot;):wikitext(para)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,intel,supply,execute,strategy&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:node(makeInfoSection(card.intel, card.supply, card.execute, card.strategy, rarity))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=380</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=380"/>
		<updated>2026-03-12T10:58:30Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里放置的CSS将应用于所有皮肤 */&lt;br /&gt;
&lt;br /&gt;
/* 全局 */&lt;br /&gt;
&lt;br /&gt;
/* 字体 */&lt;br /&gt;
/* Regular */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-55-Regular.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bold */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-85-Bold.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
:root {&lt;br /&gt;
  color-scheme: dark;&lt;br /&gt;
&lt;br /&gt;
  /* 色相：暖粉 */&lt;br /&gt;
  --color-progressive-oklch__h: 15 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 正文字亮度 */&lt;br /&gt;
  --color-base-oklch__l: 92% !important;&lt;br /&gt;
  --color-base-oklch__c: 0.03 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 次级文字 */&lt;br /&gt;
  --color-subtle-oklch__l: 75% !important;&lt;br /&gt;
  --color-subtle-oklch__c: 0.025 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 强调文字 */&lt;br /&gt;
  --color-emphasized-oklch__l: 98% !important;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.04 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 背景相关 */&lt;br /&gt;
html {&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* 禁止整个页面横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
  background-image:&lt;br /&gt;
    radial-gradient(&lt;br /&gt;
      circle at 50% 30%,&lt;br /&gt;
      rgba(0, 0, 0, 0) 35%,&lt;br /&gt;
      rgba(0, 0, 0, 0.4) 100%&lt;br /&gt;
    ),&lt;br /&gt;
    url(&amp;quot;/images/b/b5/Banner.jpg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-attachment: fixed;&lt;br /&gt;
&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
  /* 禁止横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 遮罩 */&lt;br /&gt;
body::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  z-index: 0;&lt;br /&gt;
&lt;br /&gt;
  backdrop-filter: blur(12px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(12px);&lt;br /&gt;
&lt;br /&gt;
  /* 用遮罩控制模糊范围 */&lt;br /&gt;
  mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  -webkit-mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 去掉主题偏移 */&lt;br /&gt;
.citizen-page-container {&lt;br /&gt;
	padding-inline:unset!important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 修复编辑背景 */&lt;br /&gt;
.editor.ace_editor.ace-tm {&lt;br /&gt;
    background: black;&lt;br /&gt;
    &lt;br /&gt;
     /* 恢复原来的冷色调 */&lt;br /&gt;
  --color-progressive-oklch__h: 262.29;&lt;br /&gt;
  &lt;br /&gt;
  --color-base-oklch__l: 20%;&lt;br /&gt;
  --color-base-oklch__c: 0.09;&lt;br /&gt;
&lt;br /&gt;
  --color-subtle-oklch__l: 35%;&lt;br /&gt;
  --color-subtle-oklch__c: 0.11;&lt;br /&gt;
&lt;br /&gt;
  --color-emphasized-oklch__l: 5%;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.07;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.mw-body-content .CodeMirror {&lt;br /&gt;
	background-color:var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 侧边栏 */&lt;br /&gt;
.citizen-header {&lt;br /&gt;
	background-color:rgba(255,255,255,0.2);&lt;br /&gt;
	backdrop-filter:blur(10px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* footer  */&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
	background-color:unset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关--------------------------------------------------- */&lt;br /&gt;
/** card_ **/&lt;br /&gt;
/* 全屏卡面 */&lt;br /&gt;
.card_fullscreen-img {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    z-index: 0;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.card_fullscreen-img img {&lt;br /&gt;
    width: 105%;&lt;br /&gt;
    height: 105%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
&lt;br /&gt;
    transform: translateY(0px) scale(1);&lt;br /&gt;
    transition: transform 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled img {&lt;br /&gt;
    transform: translateY(-10px) scale(1.015);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗角 */&lt;br /&gt;
.card_fullscreen-img::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            ellipse at center,&lt;br /&gt;
            rgba(0,0,0,0.2) 35%,&lt;br /&gt;
            rgba(0,0,0,0.65) 100%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    opacity: 0; /* 默认没有 */&lt;br /&gt;
    transition: opacity 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled::after{&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 正文背景*/&lt;br /&gt;
&lt;br /&gt;
.card_content-background {&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding: 120px 0 0;   /* 左右 padding 交由 inner 处理 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.66) 0%, rgba(255, 255, 255, 0.62) 35%, rgba(255, 255, 255, 0.54) 100%);&lt;br /&gt;
    backdrop-filter: blur(15px) saturate(155%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(22px) saturate(155%);&lt;br /&gt;
    border-radius: 100vw 100vw 0 0 / 2.4em 2.4em 0 0;&lt;br /&gt;
    border-top: thin solid rgb(255 235 240 / 68%);&lt;br /&gt;
    box-shadow: 0 -40px 80px -45px rgba(0, 0, 0, 0.25), 0 -2px 6px rgb(255 255 255 / 13%), 0 -4px 14px rgba(255, 180, 200, 0.18), inset 0 1px 0 rgb(255 255 255 / 0%), inset 0 -30px 60px rgba(0, 0, 0, 0.04);&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::before{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            120% 70% at 50% -18%,&lt;br /&gt;
            rgba(255,255,255,0.95) 0%,&lt;br /&gt;
            rgba(255,230,235,0.65) 18%,&lt;br /&gt;
            rgba(255,200,215,0.35) 30%,&lt;br /&gt;
            rgba(255,200,215,0.15) 40%,&lt;br /&gt;
            rgba(255,200,215,0) 55%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    mix-blend-mode: screen;&lt;br /&gt;
    opacity: 0.6;&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 -1px 0 rgba(255,255,255,0.95),        /* 主亮线 */&lt;br /&gt;
        0 -2px 4px rgba(255,220,230,0.6),      /* 柔粉扩散 */&lt;br /&gt;
        0 -4px 10px rgba(255,180,200,0.25);    /* 外围粉光 */&lt;br /&gt;
&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 居中包裹层 */&lt;br /&gt;
/* 大屏：max-width 限制 + 轻微偏左（margin 右多于左），左右自适应边距 */&lt;br /&gt;
.card_content-inner {&lt;br /&gt;
    max-width: 1900px;&lt;br /&gt;
    margin: 0 auto 0 clamp(0px, 4vw, 160px); /* 超宽时整体偏左 */&lt;br /&gt;
    padding: 0 clamp(40px, 10vw, 240px) 120px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content{&lt;br /&gt;
    color:#1a1a1f;&lt;br /&gt;
    margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 卡面名&amp;amp;信息 */&lt;br /&gt;
.card_content_name-icon img {&lt;br /&gt;
	background:black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 情报 */&lt;br /&gt;
.card_content_info{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center; /* 垂直居中 */&lt;br /&gt;
    width:100%;&lt;br /&gt;
    gap:18px;&lt;br /&gt;
    margin-left:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_info-item{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 给除了最后一个以外的 item 加竖线 */&lt;br /&gt;
.card_content_info-item:not(:last-child)::after{&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left:40px;&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    transform: translateY(-50%);&lt;br /&gt;
&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    height: 60%; /* 控制线的高度 */&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to bottom,&lt;br /&gt;
        rgba(0,0,0,0),&lt;br /&gt;
        rgba(0,0,0,0.25),&lt;br /&gt;
        rgba(0,0,0,0)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关（续）--------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
/* 全局强调色 */&lt;br /&gt;
.card_accent { color: #ed4141; }&lt;br /&gt;
.card_accent--type { color: #ed4141; margin-left: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* 大框架容器 */&lt;br /&gt;
.card_content-container {&lt;br /&gt;
    width: 100vw;&lt;br /&gt;
    margin-top: -30vh;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    transform: translate(-50%);&lt;br /&gt;
    left: 50%;&lt;br /&gt;
    /* 防止内容撑出横向滚动 */&lt;br /&gt;
    overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 正文布局 */&lt;br /&gt;
.card_content--layout {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 60px;&lt;br /&gt;
    flex-wrap: wrap; /* 小屏自动折叠 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 左栏：默认 sticky */&lt;br /&gt;
.card_content_left {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 320px;&lt;br /&gt;
    transform: translateY(-220px);&lt;br /&gt;
    flex: 0 0 380px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 卡名区域 */&lt;br /&gt;
.card_content_name-container { width: 100%; }&lt;br /&gt;
.card_content_name-row { display: flex; margin-left: 2px; }&lt;br /&gt;
.card_content_name-classtext { font-size: large; margin-left: 6px; }&lt;br /&gt;
.card_content_name-icon--ml { margin-left: 8px; }&lt;br /&gt;
.card_content_name-text {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    font-size: xx-large;&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块标题通用 */&lt;br /&gt;
.card_content-item-title {&lt;br /&gt;
    font-size: x-large;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-title--mt { margin-top: 36px; }&lt;br /&gt;
.card_content-item-subtitle {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    margin-left: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块分隔线 */&lt;br /&gt;
.card_content-item-hr {&lt;br /&gt;
    width: 50px;&lt;br /&gt;
    height: 2px;&lt;br /&gt;
    background: #ff7676;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-hr--mb12 { margin-bottom: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* 属性 */&lt;br /&gt;
.card_content_attribute-item {&lt;br /&gt;
    width: 240px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-icon {&lt;br /&gt;
    width: 12px;&lt;br /&gt;
    height: 12px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右栏 */&lt;br /&gt;
.card_content_right {&lt;br /&gt;
    flex: 1 1 520px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能卡片 ---- */&lt;br /&gt;
/* 默认上下排列（描述在上，升级在下），到足够宽时才切换为左右 */&lt;br /&gt;
.card_content_skill-card {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 1100px;   /* 超宽屏给更大空间 */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column; /* 默认上下 */&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    background: #ffffff14;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-gap { height: 18px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能卡左侧描述区 */&lt;br /&gt;
.card_content_skill-left {&lt;br /&gt;
    width: 100%;         /* 上下排时占满 */&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能标题行 */&lt;br /&gt;
.card_content_skill-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-icon {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.7);&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-title-text {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-name {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    color: grey;&lt;br /&gt;
    margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta-val { margin-left: 6px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能标签（群攻/单体等） */&lt;br /&gt;
.card_content_skill-tags {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    line-height: 0.9;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-tag {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    background: #000000a3;&lt;br /&gt;
    color: #ffffff;&lt;br /&gt;
    padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能效果描述 */&lt;br /&gt;
.card_content_skill_effect {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    line-height: 1.3;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能升级表格（通用） ---- */&lt;br /&gt;
.card_content_skill-upgrade {&lt;br /&gt;
    width: 100%;        /* 上下排时占满宽度 */&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    /* 内容超出卡片宽度时才出现横向滚动条 */&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
}&lt;br /&gt;
/* 默认 8 列（终结技 Lv.2~9）；每列最小 44px */&lt;br /&gt;
.card_content_skill-upgrade-grid {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    grid-template-columns: auto repeat(8, minmax(44px, 1fr));&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    min-width: max-content; /* 防止列被压缩，超出时由父级滚动条处理 */&lt;br /&gt;
}&lt;br /&gt;
/* 9 列变体（普攻 / 被动 Lv.2~10） */&lt;br /&gt;
.card_content_skill-upgrade-grid--10 {&lt;br /&gt;
    grid-template-columns: auto repeat(9, minmax(44px, 1fr));&lt;br /&gt;
}&lt;br /&gt;
/* 表头等级数字 */&lt;br /&gt;
.card_content_skill-upgrade-lv {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标标签容器 */&lt;br /&gt;
.card_content_skill-upgrade-row-label {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-right: 18px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标圆圈数字 */&lt;br /&gt;
.card_content_skill-upgrade-badge {&lt;br /&gt;
    width: 18px;&lt;br /&gt;
    height: 18px;&lt;br /&gt;
    background: #ff7676b3;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    font-size: 0.72rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    font-family:serif;&lt;br /&gt;
    padding-left:6px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标文字 */&lt;br /&gt;
.card_content_skill-upgrade-badge-text {&lt;br /&gt;
    margin-left: 4px;&lt;br /&gt;
    color:#4b2424;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标箭头（错位） */&lt;br /&gt;
.card_content_skill-upgrade-arrow {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
/* 数值格 */&lt;br /&gt;
.card_content_skill-upgrade-val {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 4px 0;&lt;br /&gt;
}&lt;br /&gt;
/* 无变化格 */&lt;br /&gt;
.card_content_skill-upgrade-val--null { color: #aaa; }&lt;br /&gt;
&lt;br /&gt;
/* ---- 觉醒 ---- */&lt;br /&gt;
.card_content_feat-ul {&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-list {&lt;br /&gt;
    padding: 0.8rem 0;&lt;br /&gt;
    margin-bottom: 0.8rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-wrap {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-right: 2rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: -12px;&lt;br /&gt;
    left: 2px;&lt;br /&gt;
    font-size: 0.7rem;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-number {&lt;br /&gt;
    width: 28px;&lt;br /&gt;
    height: 28px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-cn {&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    margin-right: 0.5rem;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 小传 ---- */&lt;br /&gt;
.card_content_story { margin-top: 80px; }&lt;br /&gt;
&lt;br /&gt;
/* 小传 header：默认横排（标题在左，时间轴在右） */&lt;br /&gt;
.card_content_story-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-left {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    flex-shrink: 0; /* 不压缩标题区 */&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-spacer { margin-top: 36px; }&lt;br /&gt;
.card_content_story-toggle {&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-timeline {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    max-width: 820px;&lt;br /&gt;
    padding-left: 44px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    transition: opacity .25s ease, transform .25s ease, max-height .35s ease;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
    transform: translateY(0);&lt;br /&gt;
    max-height: 5000px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 时间轴 ---- */&lt;br /&gt;
.card_timeline { position: relative; }&lt;br /&gt;
.card_timeline-line {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 16px;&lt;br /&gt;
    top: 6px;&lt;br /&gt;
    bottom: 6px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.06);&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-bottom: 60px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item--last { margin-bottom: 0; }&lt;br /&gt;
.card_timeline-dot {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: -30px;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    width: 8px;&lt;br /&gt;
    height: 8px;&lt;br /&gt;
    border: 2px solid #ff7676;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-unlock {&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    margin-bottom: 8px;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-title { margin-bottom: 14px; }&lt;br /&gt;
.card_timeline-numeral {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-size: 1.15rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-chapter {&lt;br /&gt;
    margin: 0 6px;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-label {&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    margin-left: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-body {&lt;br /&gt;
    line-height: 1.5;&lt;br /&gt;
    font-size: 0.95rem;&lt;br /&gt;
    color: #292929;&lt;br /&gt;
    text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 小传标题 sticky 吸顶 */&lt;br /&gt;
.card_content_story-header-left.is-sticky {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 20px;&lt;br /&gt;
    align-self: flex-start;&lt;br /&gt;
    z-index: 10;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约模块（card_content_date-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 邀约区块容器 */&lt;br /&gt;
.card_content_date {&lt;br /&gt;
    margin-top: 80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 票券轨道 */&lt;br /&gt;
.card_content_date-track {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 8px 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 票券列表 ---- */&lt;br /&gt;
/* align-items: flex-start，高低起伏靠每张卡的 margin-top 实现 */&lt;br /&gt;
.card_content_date-list {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: nowrap;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 单张邀约卡片（基础样式，所有卡片共用） ---- */&lt;br /&gt;
.card_content_date-item {&lt;br /&gt;
    width: calc(20% - 10px);&lt;br /&gt;
    min-width: 100px;&lt;br /&gt;
    max-width: 190px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
&lt;br /&gt;
    background: rgba(255, 255, 255, 0.38);&lt;br /&gt;
    backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    border: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(0, 0, 0, 0.10),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #1a1a1f;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 清空伪元素默认，各方案自行定义 */&lt;br /&gt;
.card_content_date-item::before,&lt;br /&gt;
.card_content_date-item::after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 选中态高亮 */&lt;br /&gt;
.card_content_date-item.is-active {&lt;br /&gt;
    border-color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(237, 65, 65, 0.15),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 卡片内容区（基础） ---- */&lt;br /&gt;
.card_content_date-body {&lt;br /&gt;
    padding: 10px 10px 12px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    min-height: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 图片区域 ---- */&lt;br /&gt;
.card_content_date-img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    aspect-ratio: 3 / 2;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    position: relative;&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        135deg,&lt;br /&gt;
        rgba(200, 185, 210, 0.55) 0%,&lt;br /&gt;
        rgba(160, 140, 180, 0.35) 50%,&lt;br /&gt;
        rgba(120, 100, 140, 0.25) 100%&lt;br /&gt;
    );&lt;br /&gt;
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 图片本体：填满容器，居中裁切 */&lt;br /&gt;
.card_content_date-img img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    object-position: center top;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* MediaWiki 生成的图片包裹层 */&lt;br /&gt;
.card_content_date-img .thumb,&lt;br /&gt;
.card_content_date-img figure {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    background: none !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbinner,&lt;br /&gt;
.card_content_date-img figcaption {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbimage {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
    object-fit: cover !important;&lt;br /&gt;
    object-position: center top !important;&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 序号基础 */&lt;br /&gt;
.card_content_date-num {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.6rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.18);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Story/END 标签基础 */&lt;br /&gt;
.card_content_date-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 0.58rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 A：左上角极小红色方块 + 序号 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-a {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    left: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-body {&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.22);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 B：像素风进度条（有图卡片使用） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-b {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 5px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.10);&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px.on {&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-pixels .px.on {&lt;br /&gt;
    background: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.15);&lt;br /&gt;
    font-size: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-label {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.55);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    letter-spacing: 2.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 C：两端小色块夹住文字 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-c {&lt;br /&gt;
    border-top: 2px solid rgba(237, 65, 65, 0.25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-bracket {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 5px;&lt;br /&gt;
    padding: 10px 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 14px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block--r {&lt;br /&gt;
    width: 3px;&lt;br /&gt;
    height: 10px;&lt;br /&gt;
    opacity: 0.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-num {&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.3rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-label {&lt;br /&gt;
    font-size: 0.55rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 D：右上角单个小红方块点缀 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-d {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    right: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.20);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约故事区（card_date_story-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 故事面板容器：默认隐藏，点击卡片后出现 */&lt;br /&gt;
/* 极度透明，与正文白色大背景几乎无缝融合，仅起氛围区分作用 */&lt;br /&gt;
.card_date_story {&lt;br /&gt;
    display: none;&lt;br /&gt;
    margin-top: 28px;&lt;br /&gt;
    padding: 36px 28px 40px;&lt;br /&gt;
    /* 极淡白底：几乎看不出，只有一点点氛围感 */&lt;br /&gt;
    background: rgba(255, 255, 255, 0.18);&lt;br /&gt;
    border-top: 1px solid rgba(237, 65, 65, 0.08);&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    /* 去掉 box-shadow，不要明显的卡片感 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 显示态：加上淡入动画 */&lt;br /&gt;
.card_date_story.is-visible {&lt;br /&gt;
    display: block;&lt;br /&gt;
    animation: card_date_story-fadein 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes card_date_story-fadein {&lt;br /&gt;
    from { opacity: 0; transform: translateY(8px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 场景标签：轻盈深色，可读但不抢眼 */&lt;br /&gt;
.card_date_story-scene {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 28, 55, 0.5);&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 5px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 各故事内容块：默认隐藏，JS控制显示 */&lt;br /&gt;
.card_date_story-content {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.card_date_story-content.is-active {&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 旁白：斜体，深色系，清晰可读 */&lt;br /&gt;
.card_date_story-narration {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 32, 55, 0.62);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 13px;&lt;br /&gt;
    margin: 24px 40px;&lt;br /&gt;
    line-height: 2.1;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话行 */&lt;br /&gt;
.card_date_story-dialogue {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    margin: 18px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧（&amp;quot;我&amp;quot;）：整行翻转 */&lt;br /&gt;
.card_date_story-dialogue--right {&lt;br /&gt;
    flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 头像区域（左侧角色用） */&lt;br /&gt;
.card_date_story-avatar {&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[file:xxx.png]] 生成的 img */&lt;br /&gt;
.card_date_story-avatar img {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暂无图片时的占位圆圈（左侧角色） */&lt;br /&gt;
.card_date_story-avatar-placeholder {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    background: rgba(237, 65, 65, 0.05);&lt;br /&gt;
    border: 1px solid rgba(237, 65, 65, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧「我」的头像完全隐藏，不占空间 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-avatar {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话内容列 */&lt;br /&gt;
.card_date_story-dialogue-content {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 3px;&lt;br /&gt;
    max-width: 65%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧对话：内容靠右对齐 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-dialogue-content {&lt;br /&gt;
    align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 角色名（仅左侧显示） */&lt;br /&gt;
.card_date_story-charname {&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.7);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话正文：加深加粗，保证可读性 */&lt;br /&gt;
.card_date_story-text {&lt;br /&gt;
    color: rgba(20, 14, 30, 0.82); /* 深色，接近纯黑但不死板 */&lt;br /&gt;
    line-height: 2;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    font-weight: 500;         /* 稍微加一点字重 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 响应式断点 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ≤1399px：左栏取消 sticky，两栏上下排列 */&lt;br /&gt;
@media (max-width: 1399px) {&lt;br /&gt;
    .card_content_left {&lt;br /&gt;
        position: static;&lt;br /&gt;
        transform: none;&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_right {&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤900px：小传 header 从左右改为上下排列 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
    .card_content_story-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-header-spacer {&lt;br /&gt;
        display: none;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-timeline {&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
        margin-top: 16px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤600px：极小屏，边距收窄；邀约改为两列 */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .card_content-inner {&lt;br /&gt;
        padding: 0 20px 80px;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-list {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-item {&lt;br /&gt;
        width: calc(50% - 5px);&lt;br /&gt;
        min-width: unset;&lt;br /&gt;
        max-width: unset;&lt;br /&gt;
        margin-top: 0 !important;&lt;br /&gt;
    }&lt;br /&gt;
    .card_date_story-narration {&lt;br /&gt;
        margin: 20px 12px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≥1400px：右栏有足够宽度，技能卡内部切换为左右布局 */&lt;br /&gt;
@media (min-width: 1400px) {&lt;br /&gt;
    .card_content_skill-card {&lt;br /&gt;
        flex-direction: row;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-left {&lt;br /&gt;
        width: 340px;&lt;br /&gt;
        flex-shrink: 0;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-upgrade {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 礼物 认知 */&lt;br /&gt;
.card_content_cognition-gift {&lt;br /&gt;
		width:48px;&lt;br /&gt;
		height:48px;&lt;br /&gt;
		background:rgba(255,255,255,0.3);&lt;br /&gt;
		border-radius:3px&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=379</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=379"/>
		<updated>2026-03-12T10:56:54Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里放置的CSS将应用于所有皮肤 */&lt;br /&gt;
&lt;br /&gt;
/* 全局 */&lt;br /&gt;
&lt;br /&gt;
/* 字体 */&lt;br /&gt;
/* Regular */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-55-Regular.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bold */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-85-Bold.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
:root {&lt;br /&gt;
  color-scheme: dark;&lt;br /&gt;
&lt;br /&gt;
  /* 色相：暖粉 */&lt;br /&gt;
  --color-progressive-oklch__h: 15 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 正文字亮度 */&lt;br /&gt;
  --color-base-oklch__l: 92% !important;&lt;br /&gt;
  --color-base-oklch__c: 0.03 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 次级文字 */&lt;br /&gt;
  --color-subtle-oklch__l: 75% !important;&lt;br /&gt;
  --color-subtle-oklch__c: 0.025 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 强调文字 */&lt;br /&gt;
  --color-emphasized-oklch__l: 98% !important;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.04 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 背景相关 */&lt;br /&gt;
html {&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* 禁止整个页面横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
  background-image:&lt;br /&gt;
    radial-gradient(&lt;br /&gt;
      circle at 50% 30%,&lt;br /&gt;
      rgba(0, 0, 0, 0) 35%,&lt;br /&gt;
      rgba(0, 0, 0, 0.4) 100%&lt;br /&gt;
    ),&lt;br /&gt;
    url(&amp;quot;/images/b/b5/Banner.jpg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-attachment: fixed;&lt;br /&gt;
&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
  /* 禁止横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 遮罩 */&lt;br /&gt;
body::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  z-index: 0;&lt;br /&gt;
&lt;br /&gt;
  backdrop-filter: blur(12px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(12px);&lt;br /&gt;
&lt;br /&gt;
  /* 用遮罩控制模糊范围 */&lt;br /&gt;
  mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  -webkit-mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 去掉主题偏移 */&lt;br /&gt;
.citizen-page-container {&lt;br /&gt;
	padding-inline:unset!important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 修复编辑背景 */&lt;br /&gt;
.editor.ace_editor.ace-tm {&lt;br /&gt;
    background: black;&lt;br /&gt;
    &lt;br /&gt;
     /* 恢复原来的冷色调 */&lt;br /&gt;
  --color-progressive-oklch__h: 262.29;&lt;br /&gt;
  &lt;br /&gt;
  --color-base-oklch__l: 20%;&lt;br /&gt;
  --color-base-oklch__c: 0.09;&lt;br /&gt;
&lt;br /&gt;
  --color-subtle-oklch__l: 35%;&lt;br /&gt;
  --color-subtle-oklch__c: 0.11;&lt;br /&gt;
&lt;br /&gt;
  --color-emphasized-oklch__l: 5%;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.07;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.mw-body-content .CodeMirror {&lt;br /&gt;
	background-color:var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 侧边栏 */&lt;br /&gt;
.citizen-header {&lt;br /&gt;
	background-color:rgba(255,255,255,0.2);&lt;br /&gt;
	backdrop-filter:blur(10px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* footer  */&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
	background-color:unset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关--------------------------------------------------- */&lt;br /&gt;
/** card_ **/&lt;br /&gt;
/* 全屏卡面 */&lt;br /&gt;
.card_fullscreen-img {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    z-index: 0;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.card_fullscreen-img img {&lt;br /&gt;
    width: 105%;&lt;br /&gt;
    height: 105%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
&lt;br /&gt;
    transform: translateY(0px) scale(1);&lt;br /&gt;
    transition: transform 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled img {&lt;br /&gt;
    transform: translateY(-10px) scale(1.015);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗角 */&lt;br /&gt;
.card_fullscreen-img::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            ellipse at center,&lt;br /&gt;
            rgba(0,0,0,0.2) 35%,&lt;br /&gt;
            rgba(0,0,0,0.65) 100%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    opacity: 0; /* 默认没有 */&lt;br /&gt;
    transition: opacity 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled::after{&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 正文背景*/&lt;br /&gt;
&lt;br /&gt;
.card_content-background {&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding: 120px 0 0;   /* 左右 padding 交由 inner 处理 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.66) 0%, rgba(255, 255, 255, 0.62) 35%, rgba(255, 255, 255, 0.54) 100%);&lt;br /&gt;
    backdrop-filter: blur(15px) saturate(155%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(22px) saturate(155%);&lt;br /&gt;
    border-radius: 100vw 100vw 0 0 / 2.4em 2.4em 0 0;&lt;br /&gt;
    border-top: thin solid rgb(255 235 240 / 68%);&lt;br /&gt;
    box-shadow: 0 -40px 80px -45px rgba(0, 0, 0, 0.25), 0 -2px 6px rgb(255 255 255 / 13%), 0 -4px 14px rgba(255, 180, 200, 0.18), inset 0 1px 0 rgb(255 255 255 / 0%), inset 0 -30px 60px rgba(0, 0, 0, 0.04);&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::before{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            120% 70% at 50% -18%,&lt;br /&gt;
            rgba(255,255,255,0.95) 0%,&lt;br /&gt;
            rgba(255,230,235,0.65) 18%,&lt;br /&gt;
            rgba(255,200,215,0.35) 30%,&lt;br /&gt;
            rgba(255,200,215,0.15) 40%,&lt;br /&gt;
            rgba(255,200,215,0) 55%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    mix-blend-mode: screen;&lt;br /&gt;
    opacity: 0.6;&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 -1px 0 rgba(255,255,255,0.95),        /* 主亮线 */&lt;br /&gt;
        0 -2px 4px rgba(255,220,230,0.6),      /* 柔粉扩散 */&lt;br /&gt;
        0 -4px 10px rgba(255,180,200,0.25);    /* 外围粉光 */&lt;br /&gt;
&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 居中包裹层 */&lt;br /&gt;
/* 大屏：max-width 限制 + 轻微偏左（margin 右多于左），左右自适应边距 */&lt;br /&gt;
.card_content-inner {&lt;br /&gt;
    max-width: 1900px;&lt;br /&gt;
    margin: 0 auto 0 clamp(0px, 4vw, 160px); /* 超宽时整体偏左 */&lt;br /&gt;
    padding: 0 clamp(40px, 10vw, 240px) 120px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content{&lt;br /&gt;
    color:#1a1a1f;&lt;br /&gt;
    margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 卡面名&amp;amp;信息 */&lt;br /&gt;
.card_content_name-icon img {&lt;br /&gt;
	background:black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 情报 */&lt;br /&gt;
.card_content_info{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center; /* 垂直居中 */&lt;br /&gt;
    width:100%;&lt;br /&gt;
    gap:18px;&lt;br /&gt;
    margin-left:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_info-item{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 给除了最后一个以外的 item 加竖线 */&lt;br /&gt;
.card_content_info-item:not(:last-child)::after{&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left:40px;&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    transform: translateY(-50%);&lt;br /&gt;
&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    height: 60%; /* 控制线的高度 */&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to bottom,&lt;br /&gt;
        rgba(0,0,0,0),&lt;br /&gt;
        rgba(0,0,0,0.25),&lt;br /&gt;
        rgba(0,0,0,0)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关（续）--------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
/* 全局强调色 */&lt;br /&gt;
.card_accent { color: #ed4141; }&lt;br /&gt;
.card_accent--type { color: #ed4141; margin-left: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* 大框架容器 */&lt;br /&gt;
.card_content-container {&lt;br /&gt;
    width: 100vw;&lt;br /&gt;
    margin-top: -30vh;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    transform: translate(-50%);&lt;br /&gt;
    left: 50%;&lt;br /&gt;
    /* 防止内容撑出横向滚动 */&lt;br /&gt;
    overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 正文布局 */&lt;br /&gt;
.card_content--layout {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 60px;&lt;br /&gt;
    flex-wrap: wrap; /* 小屏自动折叠 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 左栏：默认 sticky */&lt;br /&gt;
.card_content_left {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 320px;&lt;br /&gt;
    transform: translateY(-220px);&lt;br /&gt;
    flex: 0 0 380px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 卡名区域 */&lt;br /&gt;
.card_content_name-container { width: 100%; }&lt;br /&gt;
.card_content_name-row { display: flex; margin-left: 2px; }&lt;br /&gt;
.card_content_name-classtext { font-size: large; margin-left: 6px; }&lt;br /&gt;
.card_content_name-icon--ml { margin-left: 8px; }&lt;br /&gt;
.card_content_name-text {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    font-size: xx-large;&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块标题通用 */&lt;br /&gt;
.card_content-item-title {&lt;br /&gt;
    font-size: x-large;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-title--mt { margin-top: 36px; }&lt;br /&gt;
.card_content-item-subtitle {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    margin-left: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块分隔线 */&lt;br /&gt;
.card_content-item-hr {&lt;br /&gt;
    width: 50px;&lt;br /&gt;
    height: 2px;&lt;br /&gt;
    background: #ff7676;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-hr--mb12 { margin-bottom: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* 属性 */&lt;br /&gt;
.card_content_attribute-item {&lt;br /&gt;
    width: 240px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-icon {&lt;br /&gt;
    width: 12px;&lt;br /&gt;
    height: 12px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右栏 */&lt;br /&gt;
.card_content_right {&lt;br /&gt;
    flex: 1 1 520px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能卡片 ---- */&lt;br /&gt;
/* 默认上下排列（描述在上，升级在下），到足够宽时才切换为左右 */&lt;br /&gt;
.card_content_skill-card {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 1100px;   /* 超宽屏给更大空间 */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column; /* 默认上下 */&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    background: #ffffff14;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-gap { height: 18px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能卡左侧描述区 */&lt;br /&gt;
.card_content_skill-left {&lt;br /&gt;
    width: 100%;         /* 上下排时占满 */&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能标题行 */&lt;br /&gt;
.card_content_skill-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-icon {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.7);&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-title-text {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-name {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    color: grey;&lt;br /&gt;
    margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta-val { margin-left: 6px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能标签（群攻/单体等） */&lt;br /&gt;
.card_content_skill-tags {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    line-height: 0.9;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-tag {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    background: #000000a3;&lt;br /&gt;
    color: #ffffff;&lt;br /&gt;
    padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能效果描述 */&lt;br /&gt;
.card_content_skill_effect {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    line-height: 1.3;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能升级表格（通用） ---- */&lt;br /&gt;
.card_content_skill-upgrade {&lt;br /&gt;
    width: 100%;        /* 上下排时占满宽度 */&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    /* 内容超出卡片宽度时才出现横向滚动条 */&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
}&lt;br /&gt;
/* 默认 8 列（终结技 Lv.2~9）；每列最小 44px */&lt;br /&gt;
.card_content_skill-upgrade-grid {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    grid-template-columns: auto repeat(8, minmax(44px, 1fr));&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    min-width: max-content; /* 防止列被压缩，超出时由父级滚动条处理 */&lt;br /&gt;
}&lt;br /&gt;
/* 9 列变体（普攻 / 被动 Lv.2~10） */&lt;br /&gt;
.card_content_skill-upgrade-grid--10 {&lt;br /&gt;
    grid-template-columns: auto repeat(9, minmax(44px, 1fr));&lt;br /&gt;
}&lt;br /&gt;
/* 表头等级数字 */&lt;br /&gt;
.card_content_skill-upgrade-lv {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标标签容器 */&lt;br /&gt;
.card_content_skill-upgrade-row-label {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-right: 18px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标圆圈数字 */&lt;br /&gt;
.card_content_skill-upgrade-badge {&lt;br /&gt;
    width: 18px;&lt;br /&gt;
    height: 18px;&lt;br /&gt;
    background: #ff7676b3;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    font-size: 0.72rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    font-family:serif;&lt;br /&gt;
    padding-left:6px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标文字 */&lt;br /&gt;
.card_content_skill-upgrade-badge-text {&lt;br /&gt;
    margin-left: 4px;&lt;br /&gt;
    color:#4b2424;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标箭头（错位） */&lt;br /&gt;
.card_content_skill-upgrade-arrow {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
/* 数值格 */&lt;br /&gt;
.card_content_skill-upgrade-val {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 4px 0;&lt;br /&gt;
}&lt;br /&gt;
/* 无变化格 */&lt;br /&gt;
.card_content_skill-upgrade-val--null { color: #aaa; }&lt;br /&gt;
&lt;br /&gt;
/* ---- 觉醒 ---- */&lt;br /&gt;
.card_content_feat-ul {&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-list {&lt;br /&gt;
    padding: 0.8rem 0;&lt;br /&gt;
    margin-bottom: 0.8rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-wrap {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-right: 2rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: -12px;&lt;br /&gt;
    left: 2px;&lt;br /&gt;
    font-size: 0.7rem;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-number {&lt;br /&gt;
    width: 28px;&lt;br /&gt;
    height: 28px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-cn {&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    margin-right: 0.5rem;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 小传 ---- */&lt;br /&gt;
.card_content_story { margin-top: 80px; }&lt;br /&gt;
&lt;br /&gt;
/* 小传 header：默认横排（标题在左，时间轴在右） */&lt;br /&gt;
.card_content_story-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-left {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    flex-shrink: 0; /* 不压缩标题区 */&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-spacer { margin-top: 36px; }&lt;br /&gt;
.card_content_story-toggle {&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-timeline {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    max-width: 820px;&lt;br /&gt;
    padding-left: 44px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    transition: opacity .25s ease, transform .25s ease, max-height .35s ease;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
    transform: translateY(0);&lt;br /&gt;
    max-height: 5000px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 时间轴 ---- */&lt;br /&gt;
.card_timeline { position: relative; }&lt;br /&gt;
.card_timeline-line {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 16px;&lt;br /&gt;
    top: 6px;&lt;br /&gt;
    bottom: 6px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.06);&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-bottom: 60px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item--last { margin-bottom: 0; }&lt;br /&gt;
.card_timeline-dot {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: -30px;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    width: 8px;&lt;br /&gt;
    height: 8px;&lt;br /&gt;
    border: 2px solid #ff7676;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-unlock {&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    margin-bottom: 8px;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-title { margin-bottom: 14px; }&lt;br /&gt;
.card_timeline-numeral {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-size: 1.15rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-chapter {&lt;br /&gt;
    margin: 0 6px;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-label {&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    margin-left: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-body {&lt;br /&gt;
    line-height: 1.5;&lt;br /&gt;
    font-size: 0.95rem;&lt;br /&gt;
    color: #292929;&lt;br /&gt;
    text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 小传标题 sticky 吸顶 */&lt;br /&gt;
.card_content_story-header-left.is-sticky {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 10%;&lt;br /&gt;
    align-self: flex-start;&lt;br /&gt;
    z-index: 10;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约模块（card_content_date-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 邀约区块容器 */&lt;br /&gt;
.card_content_date {&lt;br /&gt;
    margin-top: 80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 票券轨道 */&lt;br /&gt;
.card_content_date-track {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 8px 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 票券列表 ---- */&lt;br /&gt;
/* align-items: flex-start，高低起伏靠每张卡的 margin-top 实现 */&lt;br /&gt;
.card_content_date-list {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: nowrap;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 单张邀约卡片（基础样式，所有卡片共用） ---- */&lt;br /&gt;
.card_content_date-item {&lt;br /&gt;
    width: calc(20% - 10px);&lt;br /&gt;
    min-width: 100px;&lt;br /&gt;
    max-width: 190px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
&lt;br /&gt;
    background: rgba(255, 255, 255, 0.38);&lt;br /&gt;
    backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    border: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(0, 0, 0, 0.10),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #1a1a1f;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 清空伪元素默认，各方案自行定义 */&lt;br /&gt;
.card_content_date-item::before,&lt;br /&gt;
.card_content_date-item::after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 选中态高亮 */&lt;br /&gt;
.card_content_date-item.is-active {&lt;br /&gt;
    border-color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(237, 65, 65, 0.15),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 卡片内容区（基础） ---- */&lt;br /&gt;
.card_content_date-body {&lt;br /&gt;
    padding: 10px 10px 12px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    min-height: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 图片区域 ---- */&lt;br /&gt;
.card_content_date-img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    aspect-ratio: 3 / 2;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    position: relative;&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        135deg,&lt;br /&gt;
        rgba(200, 185, 210, 0.55) 0%,&lt;br /&gt;
        rgba(160, 140, 180, 0.35) 50%,&lt;br /&gt;
        rgba(120, 100, 140, 0.25) 100%&lt;br /&gt;
    );&lt;br /&gt;
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 图片本体：填满容器，居中裁切 */&lt;br /&gt;
.card_content_date-img img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    object-position: center top;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* MediaWiki 生成的图片包裹层 */&lt;br /&gt;
.card_content_date-img .thumb,&lt;br /&gt;
.card_content_date-img figure {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    background: none !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbinner,&lt;br /&gt;
.card_content_date-img figcaption {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbimage {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
    object-fit: cover !important;&lt;br /&gt;
    object-position: center top !important;&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 序号基础 */&lt;br /&gt;
.card_content_date-num {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.6rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.18);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Story/END 标签基础 */&lt;br /&gt;
.card_content_date-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 0.58rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 A：左上角极小红色方块 + 序号 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-a {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    left: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-body {&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.22);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 B：像素风进度条（有图卡片使用） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-b {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 5px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.10);&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px.on {&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-pixels .px.on {&lt;br /&gt;
    background: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.15);&lt;br /&gt;
    font-size: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-label {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.55);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    letter-spacing: 2.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 C：两端小色块夹住文字 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-c {&lt;br /&gt;
    border-top: 2px solid rgba(237, 65, 65, 0.25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-bracket {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 5px;&lt;br /&gt;
    padding: 10px 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 14px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block--r {&lt;br /&gt;
    width: 3px;&lt;br /&gt;
    height: 10px;&lt;br /&gt;
    opacity: 0.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-num {&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.3rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-label {&lt;br /&gt;
    font-size: 0.55rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 D：右上角单个小红方块点缀 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-d {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    right: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.20);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约故事区（card_date_story-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 故事面板容器：默认隐藏，点击卡片后出现 */&lt;br /&gt;
/* 极度透明，与正文白色大背景几乎无缝融合，仅起氛围区分作用 */&lt;br /&gt;
.card_date_story {&lt;br /&gt;
    display: none;&lt;br /&gt;
    margin-top: 28px;&lt;br /&gt;
    padding: 36px 28px 40px;&lt;br /&gt;
    /* 极淡白底：几乎看不出，只有一点点氛围感 */&lt;br /&gt;
    background: rgba(255, 255, 255, 0.18);&lt;br /&gt;
    border-top: 1px solid rgba(237, 65, 65, 0.08);&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    /* 去掉 box-shadow，不要明显的卡片感 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 显示态：加上淡入动画 */&lt;br /&gt;
.card_date_story.is-visible {&lt;br /&gt;
    display: block;&lt;br /&gt;
    animation: card_date_story-fadein 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes card_date_story-fadein {&lt;br /&gt;
    from { opacity: 0; transform: translateY(8px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 场景标签：轻盈深色，可读但不抢眼 */&lt;br /&gt;
.card_date_story-scene {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 28, 55, 0.5);&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 5px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 各故事内容块：默认隐藏，JS控制显示 */&lt;br /&gt;
.card_date_story-content {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.card_date_story-content.is-active {&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 旁白：斜体，深色系，清晰可读 */&lt;br /&gt;
.card_date_story-narration {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 32, 55, 0.62);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 13px;&lt;br /&gt;
    margin: 24px 40px;&lt;br /&gt;
    line-height: 2.1;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话行 */&lt;br /&gt;
.card_date_story-dialogue {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    margin: 18px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧（&amp;quot;我&amp;quot;）：整行翻转 */&lt;br /&gt;
.card_date_story-dialogue--right {&lt;br /&gt;
    flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 头像区域（左侧角色用） */&lt;br /&gt;
.card_date_story-avatar {&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[file:xxx.png]] 生成的 img */&lt;br /&gt;
.card_date_story-avatar img {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暂无图片时的占位圆圈（左侧角色） */&lt;br /&gt;
.card_date_story-avatar-placeholder {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    background: rgba(237, 65, 65, 0.05);&lt;br /&gt;
    border: 1px solid rgba(237, 65, 65, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧「我」的头像完全隐藏，不占空间 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-avatar {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话内容列 */&lt;br /&gt;
.card_date_story-dialogue-content {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 3px;&lt;br /&gt;
    max-width: 65%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧对话：内容靠右对齐 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-dialogue-content {&lt;br /&gt;
    align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 角色名（仅左侧显示） */&lt;br /&gt;
.card_date_story-charname {&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.7);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话正文：加深加粗，保证可读性 */&lt;br /&gt;
.card_date_story-text {&lt;br /&gt;
    color: rgba(20, 14, 30, 0.82); /* 深色，接近纯黑但不死板 */&lt;br /&gt;
    line-height: 2;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    font-weight: 500;         /* 稍微加一点字重 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 响应式断点 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ≤1399px：左栏取消 sticky，两栏上下排列 */&lt;br /&gt;
@media (max-width: 1399px) {&lt;br /&gt;
    .card_content_left {&lt;br /&gt;
        position: static;&lt;br /&gt;
        transform: none;&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_right {&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤900px：小传 header 从左右改为上下排列 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
    .card_content_story-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-header-spacer {&lt;br /&gt;
        display: none;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-timeline {&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
        margin-top: 16px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤600px：极小屏，边距收窄；邀约改为两列 */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .card_content-inner {&lt;br /&gt;
        padding: 0 20px 80px;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-list {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-item {&lt;br /&gt;
        width: calc(50% - 5px);&lt;br /&gt;
        min-width: unset;&lt;br /&gt;
        max-width: unset;&lt;br /&gt;
        margin-top: 0 !important;&lt;br /&gt;
    }&lt;br /&gt;
    .card_date_story-narration {&lt;br /&gt;
        margin: 20px 12px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≥1400px：右栏有足够宽度，技能卡内部切换为左右布局 */&lt;br /&gt;
@media (min-width: 1400px) {&lt;br /&gt;
    .card_content_skill-card {&lt;br /&gt;
        flex-direction: row;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-left {&lt;br /&gt;
        width: 340px;&lt;br /&gt;
        flex-shrink: 0;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-upgrade {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 礼物 认知 */&lt;br /&gt;
.card_content_cognition-gift {&lt;br /&gt;
		width:48px;&lt;br /&gt;
		height:48px;&lt;br /&gt;
		background:rgba(255,255,255,0.3);&lt;br /&gt;
		border-radius:3px&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=378</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=378"/>
		<updated>2026-03-12T10:56:18Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里放置的CSS将应用于所有皮肤 */&lt;br /&gt;
&lt;br /&gt;
/* 全局 */&lt;br /&gt;
&lt;br /&gt;
/* 字体 */&lt;br /&gt;
/* Regular */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-55-Regular.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bold */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-85-Bold.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
:root {&lt;br /&gt;
  color-scheme: dark;&lt;br /&gt;
&lt;br /&gt;
  /* 色相：暖粉 */&lt;br /&gt;
  --color-progressive-oklch__h: 15 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 正文字亮度 */&lt;br /&gt;
  --color-base-oklch__l: 92% !important;&lt;br /&gt;
  --color-base-oklch__c: 0.03 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 次级文字 */&lt;br /&gt;
  --color-subtle-oklch__l: 75% !important;&lt;br /&gt;
  --color-subtle-oklch__c: 0.025 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 强调文字 */&lt;br /&gt;
  --color-emphasized-oklch__l: 98% !important;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.04 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 背景相关 */&lt;br /&gt;
html {&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* 禁止整个页面横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
  background-image:&lt;br /&gt;
    radial-gradient(&lt;br /&gt;
      circle at 50% 30%,&lt;br /&gt;
      rgba(0, 0, 0, 0) 35%,&lt;br /&gt;
      rgba(0, 0, 0, 0.4) 100%&lt;br /&gt;
    ),&lt;br /&gt;
    url(&amp;quot;/images/b/b5/Banner.jpg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-attachment: fixed;&lt;br /&gt;
&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
  /* 禁止横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 遮罩 */&lt;br /&gt;
body::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  z-index: 0;&lt;br /&gt;
&lt;br /&gt;
  backdrop-filter: blur(12px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(12px);&lt;br /&gt;
&lt;br /&gt;
  /* 用遮罩控制模糊范围 */&lt;br /&gt;
  mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  -webkit-mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 去掉主题偏移 */&lt;br /&gt;
.citizen-page-container {&lt;br /&gt;
	padding-inline:unset!important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 修复编辑背景 */&lt;br /&gt;
.editor.ace_editor.ace-tm {&lt;br /&gt;
    background: black;&lt;br /&gt;
    &lt;br /&gt;
     /* 恢复原来的冷色调 */&lt;br /&gt;
  --color-progressive-oklch__h: 262.29;&lt;br /&gt;
  &lt;br /&gt;
  --color-base-oklch__l: 20%;&lt;br /&gt;
  --color-base-oklch__c: 0.09;&lt;br /&gt;
&lt;br /&gt;
  --color-subtle-oklch__l: 35%;&lt;br /&gt;
  --color-subtle-oklch__c: 0.11;&lt;br /&gt;
&lt;br /&gt;
  --color-emphasized-oklch__l: 5%;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.07;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.mw-body-content .CodeMirror {&lt;br /&gt;
	background-color:var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 侧边栏 */&lt;br /&gt;
.citizen-header {&lt;br /&gt;
	background-color:rgba(255,255,255,0.2);&lt;br /&gt;
	backdrop-filter:blur(10px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* footer  */&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
	background-color:unset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关--------------------------------------------------- */&lt;br /&gt;
/** card_ **/&lt;br /&gt;
/* 全屏卡面 */&lt;br /&gt;
.card_fullscreen-img {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    z-index: 0;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.card_fullscreen-img img {&lt;br /&gt;
    width: 105%;&lt;br /&gt;
    height: 105%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
&lt;br /&gt;
    transform: translateY(0px) scale(1);&lt;br /&gt;
    transition: transform 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled img {&lt;br /&gt;
    transform: translateY(-10px) scale(1.015);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗角 */&lt;br /&gt;
.card_fullscreen-img::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            ellipse at center,&lt;br /&gt;
            rgba(0,0,0,0.2) 35%,&lt;br /&gt;
            rgba(0,0,0,0.65) 100%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    opacity: 0; /* 默认没有 */&lt;br /&gt;
    transition: opacity 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled::after{&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 正文背景*/&lt;br /&gt;
&lt;br /&gt;
.card_content-background {&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding: 120px 0 0;   /* 左右 padding 交由 inner 处理 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.66) 0%, rgba(255, 255, 255, 0.62) 35%, rgba(255, 255, 255, 0.54) 100%);&lt;br /&gt;
    backdrop-filter: blur(15px) saturate(155%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(22px) saturate(155%);&lt;br /&gt;
    border-radius: 100vw 100vw 0 0 / 2.4em 2.4em 0 0;&lt;br /&gt;
    border-top: thin solid rgb(255 235 240 / 68%);&lt;br /&gt;
    box-shadow: 0 -40px 80px -45px rgba(0, 0, 0, 0.25), 0 -2px 6px rgb(255 255 255 / 13%), 0 -4px 14px rgba(255, 180, 200, 0.18), inset 0 1px 0 rgb(255 255 255 / 0%), inset 0 -30px 60px rgba(0, 0, 0, 0.04);&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::before{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            120% 70% at 50% -18%,&lt;br /&gt;
            rgba(255,255,255,0.95) 0%,&lt;br /&gt;
            rgba(255,230,235,0.65) 18%,&lt;br /&gt;
            rgba(255,200,215,0.35) 30%,&lt;br /&gt;
            rgba(255,200,215,0.15) 40%,&lt;br /&gt;
            rgba(255,200,215,0) 55%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    mix-blend-mode: screen;&lt;br /&gt;
    opacity: 0.6;&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 -1px 0 rgba(255,255,255,0.95),        /* 主亮线 */&lt;br /&gt;
        0 -2px 4px rgba(255,220,230,0.6),      /* 柔粉扩散 */&lt;br /&gt;
        0 -4px 10px rgba(255,180,200,0.25);    /* 外围粉光 */&lt;br /&gt;
&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 居中包裹层 */&lt;br /&gt;
/* 大屏：max-width 限制 + 轻微偏左（margin 右多于左），左右自适应边距 */&lt;br /&gt;
.card_content-inner {&lt;br /&gt;
    max-width: 1900px;&lt;br /&gt;
    margin: 0 auto 0 clamp(0px, 4vw, 160px); /* 超宽时整体偏左 */&lt;br /&gt;
    padding: 0 clamp(40px, 10vw, 240px) 120px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content{&lt;br /&gt;
    color:#1a1a1f;&lt;br /&gt;
    margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 卡面名&amp;amp;信息 */&lt;br /&gt;
.card_content_name-icon img {&lt;br /&gt;
	background:black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 情报 */&lt;br /&gt;
.card_content_info{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center; /* 垂直居中 */&lt;br /&gt;
    width:100%;&lt;br /&gt;
    gap:18px;&lt;br /&gt;
    margin-left:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_info-item{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 给除了最后一个以外的 item 加竖线 */&lt;br /&gt;
.card_content_info-item:not(:last-child)::after{&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left:40px;&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    transform: translateY(-50%);&lt;br /&gt;
&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    height: 60%; /* 控制线的高度 */&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to bottom,&lt;br /&gt;
        rgba(0,0,0,0),&lt;br /&gt;
        rgba(0,0,0,0.25),&lt;br /&gt;
        rgba(0,0,0,0)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关（续）--------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
/* 全局强调色 */&lt;br /&gt;
.card_accent { color: #ed4141; }&lt;br /&gt;
.card_accent--type { color: #ed4141; margin-left: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* 大框架容器 */&lt;br /&gt;
.card_content-container {&lt;br /&gt;
    width: 100vw;&lt;br /&gt;
    margin-top: -30vh;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    transform: translate(-50%);&lt;br /&gt;
    left: 50%;&lt;br /&gt;
    /* 防止内容撑出横向滚动 */&lt;br /&gt;
    overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 正文布局 */&lt;br /&gt;
.card_content--layout {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 60px;&lt;br /&gt;
    flex-wrap: wrap; /* 小屏自动折叠 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 左栏：默认 sticky */&lt;br /&gt;
.card_content_left {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 320px;&lt;br /&gt;
    transform: translateY(-220px);&lt;br /&gt;
    flex: 0 0 380px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 卡名区域 */&lt;br /&gt;
.card_content_name-container { width: 100%; }&lt;br /&gt;
.card_content_name-row { display: flex; margin-left: 2px; }&lt;br /&gt;
.card_content_name-classtext { font-size: large; margin-left: 6px; }&lt;br /&gt;
.card_content_name-icon--ml { margin-left: 8px; }&lt;br /&gt;
.card_content_name-text {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    font-size: xx-large;&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块标题通用 */&lt;br /&gt;
.card_content-item-title {&lt;br /&gt;
    font-size: x-large;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-title--mt { margin-top: 36px; }&lt;br /&gt;
.card_content-item-subtitle {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    margin-left: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块分隔线 */&lt;br /&gt;
.card_content-item-hr {&lt;br /&gt;
    width: 50px;&lt;br /&gt;
    height: 2px;&lt;br /&gt;
    background: #ff7676;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-hr--mb12 { margin-bottom: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* 属性 */&lt;br /&gt;
.card_content_attribute-item {&lt;br /&gt;
    width: 240px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-icon {&lt;br /&gt;
    width: 12px;&lt;br /&gt;
    height: 12px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右栏 */&lt;br /&gt;
.card_content_right {&lt;br /&gt;
    flex: 1 1 520px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能卡片 ---- */&lt;br /&gt;
/* 默认上下排列（描述在上，升级在下），到足够宽时才切换为左右 */&lt;br /&gt;
.card_content_skill-card {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 1100px;   /* 超宽屏给更大空间 */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column; /* 默认上下 */&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    background: #ffffff14;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-gap { height: 18px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能卡左侧描述区 */&lt;br /&gt;
.card_content_skill-left {&lt;br /&gt;
    width: 100%;         /* 上下排时占满 */&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能标题行 */&lt;br /&gt;
.card_content_skill-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-icon {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.7);&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-title-text {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-name {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    color: grey;&lt;br /&gt;
    margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta-val { margin-left: 6px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能标签（群攻/单体等） */&lt;br /&gt;
.card_content_skill-tags {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    line-height: 0.9;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-tag {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    background: #000000a3;&lt;br /&gt;
    color: #ffffff;&lt;br /&gt;
    padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能效果描述 */&lt;br /&gt;
.card_content_skill_effect {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    line-height: 1.3;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能升级表格（通用） ---- */&lt;br /&gt;
.card_content_skill-upgrade {&lt;br /&gt;
    width: 100%;        /* 上下排时占满宽度 */&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    /* 内容超出卡片宽度时才出现横向滚动条 */&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
}&lt;br /&gt;
/* 默认 8 列（终结技 Lv.2~9）；每列最小 44px */&lt;br /&gt;
.card_content_skill-upgrade-grid {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    grid-template-columns: auto repeat(8, minmax(44px, 1fr));&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    min-width: max-content; /* 防止列被压缩，超出时由父级滚动条处理 */&lt;br /&gt;
}&lt;br /&gt;
/* 9 列变体（普攻 / 被动 Lv.2~10） */&lt;br /&gt;
.card_content_skill-upgrade-grid--10 {&lt;br /&gt;
    grid-template-columns: auto repeat(9, minmax(44px, 1fr));&lt;br /&gt;
}&lt;br /&gt;
/* 表头等级数字 */&lt;br /&gt;
.card_content_skill-upgrade-lv {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标标签容器 */&lt;br /&gt;
.card_content_skill-upgrade-row-label {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-right: 18px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标圆圈数字 */&lt;br /&gt;
.card_content_skill-upgrade-badge {&lt;br /&gt;
    width: 18px;&lt;br /&gt;
    height: 18px;&lt;br /&gt;
    background: #ff7676b3;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    font-size: 0.72rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    font-family:serif;&lt;br /&gt;
    padding-left:6px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标文字 */&lt;br /&gt;
.card_content_skill-upgrade-badge-text {&lt;br /&gt;
    margin-left: 4px;&lt;br /&gt;
    color:#4b2424;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标箭头（错位） */&lt;br /&gt;
.card_content_skill-upgrade-arrow {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
/* 数值格 */&lt;br /&gt;
.card_content_skill-upgrade-val {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 4px 0;&lt;br /&gt;
}&lt;br /&gt;
/* 无变化格 */&lt;br /&gt;
.card_content_skill-upgrade-val--null { color: #aaa; }&lt;br /&gt;
&lt;br /&gt;
/* ---- 觉醒 ---- */&lt;br /&gt;
.card_content_feat-ul {&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-list {&lt;br /&gt;
    padding: 0.8rem 0;&lt;br /&gt;
    margin-bottom: 0.8rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-wrap {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-right: 2rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: -12px;&lt;br /&gt;
    left: 2px;&lt;br /&gt;
    font-size: 0.7rem;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-number {&lt;br /&gt;
    width: 28px;&lt;br /&gt;
    height: 28px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-cn {&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    margin-right: 0.5rem;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 小传 ---- */&lt;br /&gt;
.card_content_story { margin-top: 80px; }&lt;br /&gt;
&lt;br /&gt;
/* 小传 header：默认横排（标题在左，时间轴在右） */&lt;br /&gt;
.card_content_story-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-left {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    flex-shrink: 0; /* 不压缩标题区 */&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-spacer { margin-top: 36px; }&lt;br /&gt;
.card_content_story-toggle {&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-timeline {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    max-width: 820px;&lt;br /&gt;
    padding-left: 44px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    transition: opacity .25s ease, transform .25s ease, max-height .35s ease;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
    transform: translateY(0);&lt;br /&gt;
    max-height: 5000px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 时间轴 ---- */&lt;br /&gt;
.card_timeline { position: relative; }&lt;br /&gt;
.card_timeline-line {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 16px;&lt;br /&gt;
    top: 6px;&lt;br /&gt;
    bottom: 6px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.06);&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-bottom: 60px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item--last { margin-bottom: 0; }&lt;br /&gt;
.card_timeline-dot {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: -30px;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    width: 8px;&lt;br /&gt;
    height: 8px;&lt;br /&gt;
    border: 2px solid #ff7676;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-unlock {&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    margin-bottom: 8px;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-title { margin-bottom: 14px; }&lt;br /&gt;
.card_timeline-numeral {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-size: 1.15rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-chapter {&lt;br /&gt;
    margin: 0 6px;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-label {&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    margin-left: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-body {&lt;br /&gt;
    line-height: 1.5;&lt;br /&gt;
    font-size: 0.95rem;&lt;br /&gt;
    color: #292929;&lt;br /&gt;
    text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 小传标题 sticky 吸顶 */&lt;br /&gt;
.card_content_story-header-left.is-sticky {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 20%;&lt;br /&gt;
    align-self: flex-start;&lt;br /&gt;
    z-index: 10;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约模块（card_content_date-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 邀约区块容器 */&lt;br /&gt;
.card_content_date {&lt;br /&gt;
    margin-top: 80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 票券轨道 */&lt;br /&gt;
.card_content_date-track {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 8px 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 票券列表 ---- */&lt;br /&gt;
/* align-items: flex-start，高低起伏靠每张卡的 margin-top 实现 */&lt;br /&gt;
.card_content_date-list {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: nowrap;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 单张邀约卡片（基础样式，所有卡片共用） ---- */&lt;br /&gt;
.card_content_date-item {&lt;br /&gt;
    width: calc(20% - 10px);&lt;br /&gt;
    min-width: 100px;&lt;br /&gt;
    max-width: 190px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
&lt;br /&gt;
    background: rgba(255, 255, 255, 0.38);&lt;br /&gt;
    backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    border: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(0, 0, 0, 0.10),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #1a1a1f;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 清空伪元素默认，各方案自行定义 */&lt;br /&gt;
.card_content_date-item::before,&lt;br /&gt;
.card_content_date-item::after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 选中态高亮 */&lt;br /&gt;
.card_content_date-item.is-active {&lt;br /&gt;
    border-color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(237, 65, 65, 0.15),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 卡片内容区（基础） ---- */&lt;br /&gt;
.card_content_date-body {&lt;br /&gt;
    padding: 10px 10px 12px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    min-height: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 图片区域 ---- */&lt;br /&gt;
.card_content_date-img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    aspect-ratio: 3 / 2;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    position: relative;&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        135deg,&lt;br /&gt;
        rgba(200, 185, 210, 0.55) 0%,&lt;br /&gt;
        rgba(160, 140, 180, 0.35) 50%,&lt;br /&gt;
        rgba(120, 100, 140, 0.25) 100%&lt;br /&gt;
    );&lt;br /&gt;
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 图片本体：填满容器，居中裁切 */&lt;br /&gt;
.card_content_date-img img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    object-position: center top;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* MediaWiki 生成的图片包裹层 */&lt;br /&gt;
.card_content_date-img .thumb,&lt;br /&gt;
.card_content_date-img figure {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    background: none !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbinner,&lt;br /&gt;
.card_content_date-img figcaption {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbimage {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
    object-fit: cover !important;&lt;br /&gt;
    object-position: center top !important;&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 序号基础 */&lt;br /&gt;
.card_content_date-num {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.6rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.18);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Story/END 标签基础 */&lt;br /&gt;
.card_content_date-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 0.58rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 A：左上角极小红色方块 + 序号 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-a {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    left: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-body {&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.22);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 B：像素风进度条（有图卡片使用） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-b {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 5px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.10);&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px.on {&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-pixels .px.on {&lt;br /&gt;
    background: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.15);&lt;br /&gt;
    font-size: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-label {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.55);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    letter-spacing: 2.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 C：两端小色块夹住文字 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-c {&lt;br /&gt;
    border-top: 2px solid rgba(237, 65, 65, 0.25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-bracket {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 5px;&lt;br /&gt;
    padding: 10px 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 14px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block--r {&lt;br /&gt;
    width: 3px;&lt;br /&gt;
    height: 10px;&lt;br /&gt;
    opacity: 0.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-num {&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.3rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-label {&lt;br /&gt;
    font-size: 0.55rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 D：右上角单个小红方块点缀 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-d {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    right: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.20);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约故事区（card_date_story-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 故事面板容器：默认隐藏，点击卡片后出现 */&lt;br /&gt;
/* 极度透明，与正文白色大背景几乎无缝融合，仅起氛围区分作用 */&lt;br /&gt;
.card_date_story {&lt;br /&gt;
    display: none;&lt;br /&gt;
    margin-top: 28px;&lt;br /&gt;
    padding: 36px 28px 40px;&lt;br /&gt;
    /* 极淡白底：几乎看不出，只有一点点氛围感 */&lt;br /&gt;
    background: rgba(255, 255, 255, 0.18);&lt;br /&gt;
    border-top: 1px solid rgba(237, 65, 65, 0.08);&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    /* 去掉 box-shadow，不要明显的卡片感 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 显示态：加上淡入动画 */&lt;br /&gt;
.card_date_story.is-visible {&lt;br /&gt;
    display: block;&lt;br /&gt;
    animation: card_date_story-fadein 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes card_date_story-fadein {&lt;br /&gt;
    from { opacity: 0; transform: translateY(8px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 场景标签：轻盈深色，可读但不抢眼 */&lt;br /&gt;
.card_date_story-scene {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 28, 55, 0.5);&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 5px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 各故事内容块：默认隐藏，JS控制显示 */&lt;br /&gt;
.card_date_story-content {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.card_date_story-content.is-active {&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 旁白：斜体，深色系，清晰可读 */&lt;br /&gt;
.card_date_story-narration {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 32, 55, 0.62);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 13px;&lt;br /&gt;
    margin: 24px 40px;&lt;br /&gt;
    line-height: 2.1;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话行 */&lt;br /&gt;
.card_date_story-dialogue {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    margin: 18px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧（&amp;quot;我&amp;quot;）：整行翻转 */&lt;br /&gt;
.card_date_story-dialogue--right {&lt;br /&gt;
    flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 头像区域（左侧角色用） */&lt;br /&gt;
.card_date_story-avatar {&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[file:xxx.png]] 生成的 img */&lt;br /&gt;
.card_date_story-avatar img {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暂无图片时的占位圆圈（左侧角色） */&lt;br /&gt;
.card_date_story-avatar-placeholder {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    background: rgba(237, 65, 65, 0.05);&lt;br /&gt;
    border: 1px solid rgba(237, 65, 65, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧「我」的头像完全隐藏，不占空间 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-avatar {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话内容列 */&lt;br /&gt;
.card_date_story-dialogue-content {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 3px;&lt;br /&gt;
    max-width: 65%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧对话：内容靠右对齐 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-dialogue-content {&lt;br /&gt;
    align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 角色名（仅左侧显示） */&lt;br /&gt;
.card_date_story-charname {&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.7);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话正文：加深加粗，保证可读性 */&lt;br /&gt;
.card_date_story-text {&lt;br /&gt;
    color: rgba(20, 14, 30, 0.82); /* 深色，接近纯黑但不死板 */&lt;br /&gt;
    line-height: 2;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    font-weight: 500;         /* 稍微加一点字重 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 响应式断点 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ≤1399px：左栏取消 sticky，两栏上下排列 */&lt;br /&gt;
@media (max-width: 1399px) {&lt;br /&gt;
    .card_content_left {&lt;br /&gt;
        position: static;&lt;br /&gt;
        transform: none;&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_right {&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤900px：小传 header 从左右改为上下排列 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
    .card_content_story-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-header-spacer {&lt;br /&gt;
        display: none;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-timeline {&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
        margin-top: 16px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤600px：极小屏，边距收窄；邀约改为两列 */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .card_content-inner {&lt;br /&gt;
        padding: 0 20px 80px;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-list {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-item {&lt;br /&gt;
        width: calc(50% - 5px);&lt;br /&gt;
        min-width: unset;&lt;br /&gt;
        max-width: unset;&lt;br /&gt;
        margin-top: 0 !important;&lt;br /&gt;
    }&lt;br /&gt;
    .card_date_story-narration {&lt;br /&gt;
        margin: 20px 12px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≥1400px：右栏有足够宽度，技能卡内部切换为左右布局 */&lt;br /&gt;
@media (min-width: 1400px) {&lt;br /&gt;
    .card_content_skill-card {&lt;br /&gt;
        flex-direction: row;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-left {&lt;br /&gt;
        width: 340px;&lt;br /&gt;
        flex-shrink: 0;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-upgrade {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 礼物 认知 */&lt;br /&gt;
.card_content_cognition-gift {&lt;br /&gt;
		width:48px;&lt;br /&gt;
		height:48px;&lt;br /&gt;
		background:rgba(255,255,255,0.3);&lt;br /&gt;
		border-radius:3px&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.js&amp;diff=377</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.js&amp;diff=377"/>
		<updated>2026-03-12T10:53:51Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */&lt;br /&gt;
&lt;br /&gt;
/* 引入卡片数据渲染模块 */&lt;br /&gt;
mw.loader.load( &#039;/index.php?title=MediaWiki:CardData.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
&lt;br /&gt;
/* 卡面滚动 */&lt;br /&gt;
window.addEventListener(&amp;quot;scroll&amp;quot;, () =&amp;gt; {&lt;br /&gt;
  const bg = document.querySelector(&amp;quot;.card_fullscreen-img&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  if (window.scrollY &amp;gt; 10) {&lt;br /&gt;
    bg.classList.add(&amp;quot;scrolled&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    bg.classList.remove(&amp;quot;scrolled&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 小传折叠 + 标题 sticky */&lt;br /&gt;
mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function(){&lt;br /&gt;
&lt;br /&gt;
    document.querySelectorAll(&amp;quot;.card_content_story&amp;quot;).forEach(function(story){&lt;br /&gt;
&lt;br /&gt;
        var toggle     = story.querySelector(&amp;quot;.card_content_story-toggle&amp;quot;);&lt;br /&gt;
        var timeline   = story.querySelector(&amp;quot;.card_content_story-timeline&amp;quot;);&lt;br /&gt;
        var headerLeft = story.querySelector(&amp;quot;.card_content_story-header-left&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        if (!toggle || !timeline || !headerLeft) return;&lt;br /&gt;
&lt;br /&gt;
        var icon = toggle.querySelector(&amp;quot;.story-toggle-icon&amp;quot;);&lt;br /&gt;
        var text = toggle.querySelector(&amp;quot;.story-toggle-text&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        /* 折叠/展开 */&lt;br /&gt;
        toggle.addEventListener(&amp;quot;click&amp;quot;, function(){&lt;br /&gt;
            var collapsed = toggle.getAttribute(&amp;quot;data-collapsed&amp;quot;) === &amp;quot;true&amp;quot;;&lt;br /&gt;
            if (collapsed) {&lt;br /&gt;
                timeline.style.opacity   = &amp;quot;1&amp;quot;;&lt;br /&gt;
                timeline.style.transform = &amp;quot;translateY(0)&amp;quot;;&lt;br /&gt;
                timeline.style.maxHeight = &amp;quot;5000px&amp;quot;;&lt;br /&gt;
            } else {&lt;br /&gt;
                timeline.style.opacity   = &amp;quot;0&amp;quot;;&lt;br /&gt;
                timeline.style.transform = &amp;quot;translateY(-6px)&amp;quot;;&lt;br /&gt;
                timeline.style.maxHeight = &amp;quot;0&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            toggle.setAttribute(&amp;quot;data-collapsed&amp;quot;, collapsed ? &amp;quot;false&amp;quot; : &amp;quot;true&amp;quot;);&lt;br /&gt;
            icon.innerText = collapsed ? &amp;quot;－&amp;quot; : &amp;quot;＋&amp;quot;;&lt;br /&gt;
            text.innerText = collapsed ? &amp;quot;收起&amp;quot; : &amp;quot;展开&amp;quot;;&lt;br /&gt;
            if (!collapsed) headerLeft.classList.remove(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        /* sticky 判断 */&lt;br /&gt;
        function updateSticky() {&lt;br /&gt;
            if (toggle.getAttribute(&amp;quot;data-collapsed&amp;quot;) === &amp;quot;true&amp;quot;) {&lt;br /&gt;
                headerLeft.classList.remove(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            var storyRect    = story.getBoundingClientRect();&lt;br /&gt;
            var timelineRect = timeline.getBoundingClientRect();&lt;br /&gt;
            // 小传顶部滚出视口 &amp;amp;&amp;amp; 时间轴底部还在视口内&lt;br /&gt;
            if (storyRect.top &amp;lt; 0 &amp;amp;&amp;amp; timelineRect.bottom &amp;gt; window.innerHeight) {&lt;br /&gt;
                headerLeft.classList.add(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
            } else {&lt;br /&gt;
                headerLeft.classList.remove(&amp;quot;is-sticky&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        window.addEventListener(&amp;quot;scroll&amp;quot;, updateSticky, { passive: true });&lt;br /&gt;
        updateSticky();&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/* 邀约故事区 */&lt;br /&gt;
mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function(){&lt;br /&gt;
&lt;br /&gt;
    /* 卡片：.card_content_date-item，带 data-date-index&lt;br /&gt;
       故事内容：.card_date_story-content，带 data-story-index（CSS：.is-active → display:block）&lt;br /&gt;
       面板：#date-story-panel（CSS：.is-visible → display:block + 淡入动画）&lt;br /&gt;
    */&lt;br /&gt;
    var cards = document.querySelectorAll(&amp;quot;.card_content_date-item&amp;quot;);&lt;br /&gt;
    var panel = document.getElementById(&amp;quot;date-story-panel&amp;quot;);&lt;br /&gt;
    var contents = document.querySelectorAll(&amp;quot;.card_date_story-content&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if(!cards.length || !panel) return;&lt;br /&gt;
&lt;br /&gt;
    var currentIndex = -1;&lt;br /&gt;
&lt;br /&gt;
    cards.forEach(function(card){&lt;br /&gt;
&lt;br /&gt;
        card.addEventListener(&amp;quot;click&amp;quot;, function(){&lt;br /&gt;
&lt;br /&gt;
            var index = parseInt(card.getAttribute(&amp;quot;data-date-index&amp;quot;), 10);&lt;br /&gt;
&lt;br /&gt;
            // 点同一张 → 收起面板&lt;br /&gt;
            if(currentIndex === index){&lt;br /&gt;
                panel.classList.remove(&amp;quot;is-visible&amp;quot;);&lt;br /&gt;
                card.classList.remove(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
                currentIndex = -1;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // 切换卡片高亮（is-active）&lt;br /&gt;
            cards.forEach(function(c){ c.classList.remove(&amp;quot;is-active&amp;quot;); });&lt;br /&gt;
            card.classList.add(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
            currentIndex = index;&lt;br /&gt;
&lt;br /&gt;
            // 重新触发淡入动画：先移除再加回，强制 reflow&lt;br /&gt;
            panel.classList.remove(&amp;quot;is-visible&amp;quot;);&lt;br /&gt;
            void panel.offsetWidth;&lt;br /&gt;
            panel.classList.add(&amp;quot;is-visible&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            // 切换故事内容（is-active）&lt;br /&gt;
            contents.forEach(function(content){&lt;br /&gt;
                var storyIndex = parseInt(content.getAttribute(&amp;quot;data-story-index&amp;quot;), 10);&lt;br /&gt;
                if(storyIndex === index){&lt;br /&gt;
                    content.classList.add(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
                } else {&lt;br /&gt;
                    content.classList.remove(&amp;quot;is-active&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=376</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=376"/>
		<updated>2026-03-12T10:53:26Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里放置的CSS将应用于所有皮肤 */&lt;br /&gt;
&lt;br /&gt;
/* 全局 */&lt;br /&gt;
&lt;br /&gt;
/* 字体 */&lt;br /&gt;
/* Regular */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-55-Regular.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bold */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-85-Bold.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
:root {&lt;br /&gt;
  color-scheme: dark;&lt;br /&gt;
&lt;br /&gt;
  /* 色相：暖粉 */&lt;br /&gt;
  --color-progressive-oklch__h: 15 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 正文字亮度 */&lt;br /&gt;
  --color-base-oklch__l: 92% !important;&lt;br /&gt;
  --color-base-oklch__c: 0.03 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 次级文字 */&lt;br /&gt;
  --color-subtle-oklch__l: 75% !important;&lt;br /&gt;
  --color-subtle-oklch__c: 0.025 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 强调文字 */&lt;br /&gt;
  --color-emphasized-oklch__l: 98% !important;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.04 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 背景相关 */&lt;br /&gt;
html {&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* 禁止整个页面横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
  background-image:&lt;br /&gt;
    radial-gradient(&lt;br /&gt;
      circle at 50% 30%,&lt;br /&gt;
      rgba(0, 0, 0, 0) 35%,&lt;br /&gt;
      rgba(0, 0, 0, 0.4) 100%&lt;br /&gt;
    ),&lt;br /&gt;
    url(&amp;quot;/images/b/b5/Banner.jpg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-attachment: fixed;&lt;br /&gt;
&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
  /* 禁止横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 遮罩 */&lt;br /&gt;
body::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  z-index: 0;&lt;br /&gt;
&lt;br /&gt;
  backdrop-filter: blur(12px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(12px);&lt;br /&gt;
&lt;br /&gt;
  /* 用遮罩控制模糊范围 */&lt;br /&gt;
  mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  -webkit-mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 去掉主题偏移 */&lt;br /&gt;
.citizen-page-container {&lt;br /&gt;
	padding-inline:unset!important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 修复编辑背景 */&lt;br /&gt;
.editor.ace_editor.ace-tm {&lt;br /&gt;
    background: black;&lt;br /&gt;
    &lt;br /&gt;
     /* 恢复原来的冷色调 */&lt;br /&gt;
  --color-progressive-oklch__h: 262.29;&lt;br /&gt;
  &lt;br /&gt;
  --color-base-oklch__l: 20%;&lt;br /&gt;
  --color-base-oklch__c: 0.09;&lt;br /&gt;
&lt;br /&gt;
  --color-subtle-oklch__l: 35%;&lt;br /&gt;
  --color-subtle-oklch__c: 0.11;&lt;br /&gt;
&lt;br /&gt;
  --color-emphasized-oklch__l: 5%;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.07;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.mw-body-content .CodeMirror {&lt;br /&gt;
	background-color:var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 侧边栏 */&lt;br /&gt;
.citizen-header {&lt;br /&gt;
	background-color:rgba(255,255,255,0.2);&lt;br /&gt;
	backdrop-filter:blur(10px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* footer  */&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
	background-color:unset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关--------------------------------------------------- */&lt;br /&gt;
/** card_ **/&lt;br /&gt;
/* 全屏卡面 */&lt;br /&gt;
.card_fullscreen-img {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    z-index: 0;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.card_fullscreen-img img {&lt;br /&gt;
    width: 105%;&lt;br /&gt;
    height: 105%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
&lt;br /&gt;
    transform: translateY(0px) scale(1);&lt;br /&gt;
    transition: transform 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled img {&lt;br /&gt;
    transform: translateY(-10px) scale(1.015);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗角 */&lt;br /&gt;
.card_fullscreen-img::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            ellipse at center,&lt;br /&gt;
            rgba(0,0,0,0.2) 35%,&lt;br /&gt;
            rgba(0,0,0,0.65) 100%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    opacity: 0; /* 默认没有 */&lt;br /&gt;
    transition: opacity 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled::after{&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 正文背景*/&lt;br /&gt;
&lt;br /&gt;
.card_content-background {&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding: 120px 0 0;   /* 左右 padding 交由 inner 处理 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.66) 0%, rgba(255, 255, 255, 0.62) 35%, rgba(255, 255, 255, 0.54) 100%);&lt;br /&gt;
    backdrop-filter: blur(15px) saturate(155%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(22px) saturate(155%);&lt;br /&gt;
    border-radius: 100vw 100vw 0 0 / 2.4em 2.4em 0 0;&lt;br /&gt;
    border-top: thin solid rgb(255 235 240 / 68%);&lt;br /&gt;
    box-shadow: 0 -40px 80px -45px rgba(0, 0, 0, 0.25), 0 -2px 6px rgb(255 255 255 / 13%), 0 -4px 14px rgba(255, 180, 200, 0.18), inset 0 1px 0 rgb(255 255 255 / 0%), inset 0 -30px 60px rgba(0, 0, 0, 0.04);&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::before{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            120% 70% at 50% -18%,&lt;br /&gt;
            rgba(255,255,255,0.95) 0%,&lt;br /&gt;
            rgba(255,230,235,0.65) 18%,&lt;br /&gt;
            rgba(255,200,215,0.35) 30%,&lt;br /&gt;
            rgba(255,200,215,0.15) 40%,&lt;br /&gt;
            rgba(255,200,215,0) 55%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    mix-blend-mode: screen;&lt;br /&gt;
    opacity: 0.6;&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 -1px 0 rgba(255,255,255,0.95),        /* 主亮线 */&lt;br /&gt;
        0 -2px 4px rgba(255,220,230,0.6),      /* 柔粉扩散 */&lt;br /&gt;
        0 -4px 10px rgba(255,180,200,0.25);    /* 外围粉光 */&lt;br /&gt;
&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 居中包裹层 */&lt;br /&gt;
/* 大屏：max-width 限制 + 轻微偏左（margin 右多于左），左右自适应边距 */&lt;br /&gt;
.card_content-inner {&lt;br /&gt;
    max-width: 1900px;&lt;br /&gt;
    margin: 0 auto 0 clamp(0px, 4vw, 160px); /* 超宽时整体偏左 */&lt;br /&gt;
    padding: 0 clamp(40px, 10vw, 240px) 120px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content{&lt;br /&gt;
    color:#1a1a1f;&lt;br /&gt;
    margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 卡面名&amp;amp;信息 */&lt;br /&gt;
.card_content_name-icon img {&lt;br /&gt;
	background:black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 情报 */&lt;br /&gt;
.card_content_info{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center; /* 垂直居中 */&lt;br /&gt;
    width:100%;&lt;br /&gt;
    gap:18px;&lt;br /&gt;
    margin-left:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_info-item{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 给除了最后一个以外的 item 加竖线 */&lt;br /&gt;
.card_content_info-item:not(:last-child)::after{&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left:40px;&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    transform: translateY(-50%);&lt;br /&gt;
&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    height: 60%; /* 控制线的高度 */&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to bottom,&lt;br /&gt;
        rgba(0,0,0,0),&lt;br /&gt;
        rgba(0,0,0,0.25),&lt;br /&gt;
        rgba(0,0,0,0)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关（续）--------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
/* 全局强调色 */&lt;br /&gt;
.card_accent { color: #ed4141; }&lt;br /&gt;
.card_accent--type { color: #ed4141; margin-left: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* 大框架容器 */&lt;br /&gt;
.card_content-container {&lt;br /&gt;
    width: 100vw;&lt;br /&gt;
    margin-top: -30vh;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    transform: translate(-50%);&lt;br /&gt;
    left: 50%;&lt;br /&gt;
    /* 防止内容撑出横向滚动 */&lt;br /&gt;
    overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 正文布局 */&lt;br /&gt;
.card_content--layout {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 60px;&lt;br /&gt;
    flex-wrap: wrap; /* 小屏自动折叠 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 左栏：默认 sticky */&lt;br /&gt;
.card_content_left {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 320px;&lt;br /&gt;
    transform: translateY(-220px);&lt;br /&gt;
    flex: 0 0 380px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 卡名区域 */&lt;br /&gt;
.card_content_name-container { width: 100%; }&lt;br /&gt;
.card_content_name-row { display: flex; margin-left: 2px; }&lt;br /&gt;
.card_content_name-classtext { font-size: large; margin-left: 6px; }&lt;br /&gt;
.card_content_name-icon--ml { margin-left: 8px; }&lt;br /&gt;
.card_content_name-text {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    font-size: xx-large;&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块标题通用 */&lt;br /&gt;
.card_content-item-title {&lt;br /&gt;
    font-size: x-large;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-title--mt { margin-top: 36px; }&lt;br /&gt;
.card_content-item-subtitle {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    margin-left: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块分隔线 */&lt;br /&gt;
.card_content-item-hr {&lt;br /&gt;
    width: 50px;&lt;br /&gt;
    height: 2px;&lt;br /&gt;
    background: #ff7676;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-hr--mb12 { margin-bottom: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* 属性 */&lt;br /&gt;
.card_content_attribute-item {&lt;br /&gt;
    width: 240px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-icon {&lt;br /&gt;
    width: 12px;&lt;br /&gt;
    height: 12px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右栏 */&lt;br /&gt;
.card_content_right {&lt;br /&gt;
    flex: 1 1 520px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能卡片 ---- */&lt;br /&gt;
/* 默认上下排列（描述在上，升级在下），到足够宽时才切换为左右 */&lt;br /&gt;
.card_content_skill-card {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 1100px;   /* 超宽屏给更大空间 */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column; /* 默认上下 */&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    background: #ffffff14;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-gap { height: 18px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能卡左侧描述区 */&lt;br /&gt;
.card_content_skill-left {&lt;br /&gt;
    width: 100%;         /* 上下排时占满 */&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能标题行 */&lt;br /&gt;
.card_content_skill-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-icon {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.7);&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-title-text {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-name {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    color: grey;&lt;br /&gt;
    margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta-val { margin-left: 6px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能标签（群攻/单体等） */&lt;br /&gt;
.card_content_skill-tags {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    line-height: 0.9;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-tag {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    background: #000000a3;&lt;br /&gt;
    color: #ffffff;&lt;br /&gt;
    padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能效果描述 */&lt;br /&gt;
.card_content_skill_effect {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    line-height: 1.3;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能升级表格（通用） ---- */&lt;br /&gt;
.card_content_skill-upgrade {&lt;br /&gt;
    width: 100%;        /* 上下排时占满宽度 */&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    /* 内容超出卡片宽度时才出现横向滚动条 */&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
}&lt;br /&gt;
/* 默认 8 列（终结技 Lv.2~9）；每列最小 44px */&lt;br /&gt;
.card_content_skill-upgrade-grid {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    grid-template-columns: auto repeat(8, minmax(44px, 1fr));&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    min-width: max-content; /* 防止列被压缩，超出时由父级滚动条处理 */&lt;br /&gt;
}&lt;br /&gt;
/* 9 列变体（普攻 / 被动 Lv.2~10） */&lt;br /&gt;
.card_content_skill-upgrade-grid--10 {&lt;br /&gt;
    grid-template-columns: auto repeat(9, minmax(44px, 1fr));&lt;br /&gt;
}&lt;br /&gt;
/* 表头等级数字 */&lt;br /&gt;
.card_content_skill-upgrade-lv {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标标签容器 */&lt;br /&gt;
.card_content_skill-upgrade-row-label {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-right: 18px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标圆圈数字 */&lt;br /&gt;
.card_content_skill-upgrade-badge {&lt;br /&gt;
    width: 18px;&lt;br /&gt;
    height: 18px;&lt;br /&gt;
    background: #ff7676b3;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    font-size: 0.72rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    font-family:serif;&lt;br /&gt;
    padding-left:6px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标文字 */&lt;br /&gt;
.card_content_skill-upgrade-badge-text {&lt;br /&gt;
    margin-left: 4px;&lt;br /&gt;
    color:#4b2424;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标箭头（错位） */&lt;br /&gt;
.card_content_skill-upgrade-arrow {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
/* 数值格 */&lt;br /&gt;
.card_content_skill-upgrade-val {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 4px 0;&lt;br /&gt;
}&lt;br /&gt;
/* 无变化格 */&lt;br /&gt;
.card_content_skill-upgrade-val--null { color: #aaa; }&lt;br /&gt;
&lt;br /&gt;
/* ---- 觉醒 ---- */&lt;br /&gt;
.card_content_feat-ul {&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-list {&lt;br /&gt;
    padding: 0.8rem 0;&lt;br /&gt;
    margin-bottom: 0.8rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-wrap {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-right: 2rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: -12px;&lt;br /&gt;
    left: 2px;&lt;br /&gt;
    font-size: 0.7rem;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-number {&lt;br /&gt;
    width: 28px;&lt;br /&gt;
    height: 28px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-cn {&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    margin-right: 0.5rem;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 小传 ---- */&lt;br /&gt;
.card_content_story { margin-top: 80px; }&lt;br /&gt;
&lt;br /&gt;
/* 小传 header：默认横排（标题在左，时间轴在右） */&lt;br /&gt;
.card_content_story-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-left {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    flex-shrink: 0; /* 不压缩标题区 */&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-spacer { margin-top: 36px; }&lt;br /&gt;
.card_content_story-toggle {&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-timeline {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    max-width: 820px;&lt;br /&gt;
    padding-left: 44px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    transition: opacity .25s ease, transform .25s ease, max-height .35s ease;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
    transform: translateY(0);&lt;br /&gt;
    max-height: 5000px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 时间轴 ---- */&lt;br /&gt;
.card_timeline { position: relative; }&lt;br /&gt;
.card_timeline-line {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 16px;&lt;br /&gt;
    top: 6px;&lt;br /&gt;
    bottom: 6px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.06);&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-bottom: 60px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item--last { margin-bottom: 0; }&lt;br /&gt;
.card_timeline-dot {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: -30px;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    width: 8px;&lt;br /&gt;
    height: 8px;&lt;br /&gt;
    border: 2px solid #ff7676;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-unlock {&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    margin-bottom: 8px;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-title { margin-bottom: 14px; }&lt;br /&gt;
.card_timeline-numeral {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-size: 1.15rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-chapter {&lt;br /&gt;
    margin: 0 6px;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-label {&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    margin-left: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-body {&lt;br /&gt;
    line-height: 1.5;&lt;br /&gt;
    font-size: 0.95rem;&lt;br /&gt;
    color: #292929;&lt;br /&gt;
    text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 小传标题 sticky 吸顶 */&lt;br /&gt;
.card_content_story-header-left.is-sticky {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 20px;&lt;br /&gt;
    align-self: flex-start;&lt;br /&gt;
    z-index: 10;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约模块（card_content_date-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 邀约区块容器 */&lt;br /&gt;
.card_content_date {&lt;br /&gt;
    margin-top: 80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 票券轨道 */&lt;br /&gt;
.card_content_date-track {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 8px 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 票券列表 ---- */&lt;br /&gt;
/* align-items: flex-start，高低起伏靠每张卡的 margin-top 实现 */&lt;br /&gt;
.card_content_date-list {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: nowrap;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 单张邀约卡片（基础样式，所有卡片共用） ---- */&lt;br /&gt;
.card_content_date-item {&lt;br /&gt;
    width: calc(20% - 10px);&lt;br /&gt;
    min-width: 100px;&lt;br /&gt;
    max-width: 190px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
&lt;br /&gt;
    background: rgba(255, 255, 255, 0.38);&lt;br /&gt;
    backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    border: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(0, 0, 0, 0.10),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #1a1a1f;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 清空伪元素默认，各方案自行定义 */&lt;br /&gt;
.card_content_date-item::before,&lt;br /&gt;
.card_content_date-item::after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 选中态高亮 */&lt;br /&gt;
.card_content_date-item.is-active {&lt;br /&gt;
    border-color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(237, 65, 65, 0.15),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 卡片内容区（基础） ---- */&lt;br /&gt;
.card_content_date-body {&lt;br /&gt;
    padding: 10px 10px 12px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    min-height: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 图片区域 ---- */&lt;br /&gt;
.card_content_date-img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    aspect-ratio: 3 / 2;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    position: relative;&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        135deg,&lt;br /&gt;
        rgba(200, 185, 210, 0.55) 0%,&lt;br /&gt;
        rgba(160, 140, 180, 0.35) 50%,&lt;br /&gt;
        rgba(120, 100, 140, 0.25) 100%&lt;br /&gt;
    );&lt;br /&gt;
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 图片本体：填满容器，居中裁切 */&lt;br /&gt;
.card_content_date-img img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    object-position: center top;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* MediaWiki 生成的图片包裹层 */&lt;br /&gt;
.card_content_date-img .thumb,&lt;br /&gt;
.card_content_date-img figure {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    background: none !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbinner,&lt;br /&gt;
.card_content_date-img figcaption {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbimage {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
    object-fit: cover !important;&lt;br /&gt;
    object-position: center top !important;&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 序号基础 */&lt;br /&gt;
.card_content_date-num {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.6rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.18);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Story/END 标签基础 */&lt;br /&gt;
.card_content_date-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 0.58rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 A：左上角极小红色方块 + 序号 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-a {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    left: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-body {&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.22);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 B：像素风进度条（有图卡片使用） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-b {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 5px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.10);&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px.on {&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-pixels .px.on {&lt;br /&gt;
    background: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.15);&lt;br /&gt;
    font-size: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-label {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.55);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    letter-spacing: 2.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 C：两端小色块夹住文字 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-c {&lt;br /&gt;
    border-top: 2px solid rgba(237, 65, 65, 0.25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-bracket {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 5px;&lt;br /&gt;
    padding: 10px 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 14px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block--r {&lt;br /&gt;
    width: 3px;&lt;br /&gt;
    height: 10px;&lt;br /&gt;
    opacity: 0.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-num {&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.3rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-label {&lt;br /&gt;
    font-size: 0.55rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 D：右上角单个小红方块点缀 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-d {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    right: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.20);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约故事区（card_date_story-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 故事面板容器：默认隐藏，点击卡片后出现 */&lt;br /&gt;
/* 极度透明，与正文白色大背景几乎无缝融合，仅起氛围区分作用 */&lt;br /&gt;
.card_date_story {&lt;br /&gt;
    display: none;&lt;br /&gt;
    margin-top: 28px;&lt;br /&gt;
    padding: 36px 28px 40px;&lt;br /&gt;
    /* 极淡白底：几乎看不出，只有一点点氛围感 */&lt;br /&gt;
    background: rgba(255, 255, 255, 0.18);&lt;br /&gt;
    border-top: 1px solid rgba(237, 65, 65, 0.08);&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    /* 去掉 box-shadow，不要明显的卡片感 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 显示态：加上淡入动画 */&lt;br /&gt;
.card_date_story.is-visible {&lt;br /&gt;
    display: block;&lt;br /&gt;
    animation: card_date_story-fadein 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes card_date_story-fadein {&lt;br /&gt;
    from { opacity: 0; transform: translateY(8px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 场景标签：轻盈深色，可读但不抢眼 */&lt;br /&gt;
.card_date_story-scene {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 28, 55, 0.5);&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 5px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 各故事内容块：默认隐藏，JS控制显示 */&lt;br /&gt;
.card_date_story-content {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.card_date_story-content.is-active {&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 旁白：斜体，深色系，清晰可读 */&lt;br /&gt;
.card_date_story-narration {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 32, 55, 0.62);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 13px;&lt;br /&gt;
    margin: 24px 40px;&lt;br /&gt;
    line-height: 2.1;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话行 */&lt;br /&gt;
.card_date_story-dialogue {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    margin: 18px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧（&amp;quot;我&amp;quot;）：整行翻转 */&lt;br /&gt;
.card_date_story-dialogue--right {&lt;br /&gt;
    flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 头像区域（左侧角色用） */&lt;br /&gt;
.card_date_story-avatar {&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[file:xxx.png]] 生成的 img */&lt;br /&gt;
.card_date_story-avatar img {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暂无图片时的占位圆圈（左侧角色） */&lt;br /&gt;
.card_date_story-avatar-placeholder {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    background: rgba(237, 65, 65, 0.05);&lt;br /&gt;
    border: 1px solid rgba(237, 65, 65, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧「我」的头像完全隐藏，不占空间 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-avatar {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话内容列 */&lt;br /&gt;
.card_date_story-dialogue-content {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 3px;&lt;br /&gt;
    max-width: 65%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧对话：内容靠右对齐 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-dialogue-content {&lt;br /&gt;
    align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 角色名（仅左侧显示） */&lt;br /&gt;
.card_date_story-charname {&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.7);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话正文：加深加粗，保证可读性 */&lt;br /&gt;
.card_date_story-text {&lt;br /&gt;
    color: rgba(20, 14, 30, 0.82); /* 深色，接近纯黑但不死板 */&lt;br /&gt;
    line-height: 2;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    font-weight: 500;         /* 稍微加一点字重 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 响应式断点 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ≤1399px：左栏取消 sticky，两栏上下排列 */&lt;br /&gt;
@media (max-width: 1399px) {&lt;br /&gt;
    .card_content_left {&lt;br /&gt;
        position: static;&lt;br /&gt;
        transform: none;&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_right {&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤900px：小传 header 从左右改为上下排列 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
    .card_content_story-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-header-spacer {&lt;br /&gt;
        display: none;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-timeline {&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
        margin-top: 16px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤600px：极小屏，边距收窄；邀约改为两列 */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .card_content-inner {&lt;br /&gt;
        padding: 0 20px 80px;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-list {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-item {&lt;br /&gt;
        width: calc(50% - 5px);&lt;br /&gt;
        min-width: unset;&lt;br /&gt;
        max-width: unset;&lt;br /&gt;
        margin-top: 0 !important;&lt;br /&gt;
    }&lt;br /&gt;
    .card_date_story-narration {&lt;br /&gt;
        margin: 20px 12px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≥1400px：右栏有足够宽度，技能卡内部切换为左右布局 */&lt;br /&gt;
@media (min-width: 1400px) {&lt;br /&gt;
    .card_content_skill-card {&lt;br /&gt;
        flex-direction: row;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-left {&lt;br /&gt;
        width: 340px;&lt;br /&gt;
        flex-shrink: 0;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-upgrade {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 礼物 认知 */&lt;br /&gt;
.card_content_cognition-gift {&lt;br /&gt;
		width:48px;&lt;br /&gt;
		height:48px;&lt;br /&gt;
		background:rgba(255,255,255,0.3);&lt;br /&gt;
		border-radius:3px&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=375</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=375"/>
		<updated>2026-03-12T10:49:34Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里放置的CSS将应用于所有皮肤 */&lt;br /&gt;
&lt;br /&gt;
/* 全局 */&lt;br /&gt;
&lt;br /&gt;
/* 字体 */&lt;br /&gt;
/* Regular */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-55-Regular.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bold */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-85-Bold.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
:root {&lt;br /&gt;
  color-scheme: dark;&lt;br /&gt;
&lt;br /&gt;
  /* 色相：暖粉 */&lt;br /&gt;
  --color-progressive-oklch__h: 15 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 正文字亮度 */&lt;br /&gt;
  --color-base-oklch__l: 92% !important;&lt;br /&gt;
  --color-base-oklch__c: 0.03 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 次级文字 */&lt;br /&gt;
  --color-subtle-oklch__l: 75% !important;&lt;br /&gt;
  --color-subtle-oklch__c: 0.025 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 强调文字 */&lt;br /&gt;
  --color-emphasized-oklch__l: 98% !important;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.04 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 背景相关 */&lt;br /&gt;
html {&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* 禁止整个页面横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
  background-image:&lt;br /&gt;
    radial-gradient(&lt;br /&gt;
      circle at 50% 30%,&lt;br /&gt;
      rgba(0, 0, 0, 0) 35%,&lt;br /&gt;
      rgba(0, 0, 0, 0.4) 100%&lt;br /&gt;
    ),&lt;br /&gt;
    url(&amp;quot;/images/b/b5/Banner.jpg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-attachment: fixed;&lt;br /&gt;
&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
  /* 禁止横向滚动 */&lt;br /&gt;
  overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 遮罩 */&lt;br /&gt;
body::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  z-index: 0;&lt;br /&gt;
&lt;br /&gt;
  backdrop-filter: blur(12px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(12px);&lt;br /&gt;
&lt;br /&gt;
  /* 用遮罩控制模糊范围 */&lt;br /&gt;
  mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  -webkit-mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 去掉主题偏移 */&lt;br /&gt;
.citizen-page-container {&lt;br /&gt;
	padding-inline:unset!important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 修复编辑背景 */&lt;br /&gt;
.editor.ace_editor.ace-tm {&lt;br /&gt;
    background: black;&lt;br /&gt;
    &lt;br /&gt;
     /* 恢复原来的冷色调 */&lt;br /&gt;
  --color-progressive-oklch__h: 262.29;&lt;br /&gt;
  &lt;br /&gt;
  --color-base-oklch__l: 20%;&lt;br /&gt;
  --color-base-oklch__c: 0.09;&lt;br /&gt;
&lt;br /&gt;
  --color-subtle-oklch__l: 35%;&lt;br /&gt;
  --color-subtle-oklch__c: 0.11;&lt;br /&gt;
&lt;br /&gt;
  --color-emphasized-oklch__l: 5%;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.07;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.mw-body-content .CodeMirror {&lt;br /&gt;
	background-color:var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 侧边栏 */&lt;br /&gt;
.citizen-header {&lt;br /&gt;
	background-color:rgba(255,255,255,0.2);&lt;br /&gt;
	backdrop-filter:blur(10px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* footer  */&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
	background-color:unset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关--------------------------------------------------- */&lt;br /&gt;
/** card_ **/&lt;br /&gt;
/* 全屏卡面 */&lt;br /&gt;
.card_fullscreen-img {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    z-index: 0;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.card_fullscreen-img img {&lt;br /&gt;
    width: 105%;&lt;br /&gt;
    height: 105%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
&lt;br /&gt;
    transform: translateY(0px) scale(1);&lt;br /&gt;
    transition: transform 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled img {&lt;br /&gt;
    transform: translateY(-10px) scale(1.015);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗角 */&lt;br /&gt;
.card_fullscreen-img::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            ellipse at center,&lt;br /&gt;
            rgba(0,0,0,0.2) 35%,&lt;br /&gt;
            rgba(0,0,0,0.65) 100%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    opacity: 0; /* 默认没有 */&lt;br /&gt;
    transition: opacity 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled::after{&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 正文背景*/&lt;br /&gt;
&lt;br /&gt;
.card_content-background {&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding: 120px 0 0;   /* 左右 padding 交由 inner 处理 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.66) 0%, rgba(255, 255, 255, 0.62) 35%, rgba(255, 255, 255, 0.54) 100%);&lt;br /&gt;
    backdrop-filter: blur(15px) saturate(155%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(22px) saturate(155%);&lt;br /&gt;
    border-radius: 100vw 100vw 0 0 / 2.4em 2.4em 0 0;&lt;br /&gt;
    border-top: thin solid rgb(255 235 240 / 68%);&lt;br /&gt;
    box-shadow: 0 -40px 80px -45px rgba(0, 0, 0, 0.25), 0 -2px 6px rgb(255 255 255 / 13%), 0 -4px 14px rgba(255, 180, 200, 0.18), inset 0 1px 0 rgb(255 255 255 / 0%), inset 0 -30px 60px rgba(0, 0, 0, 0.04);&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::before{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            120% 70% at 50% -18%,&lt;br /&gt;
            rgba(255,255,255,0.95) 0%,&lt;br /&gt;
            rgba(255,230,235,0.65) 18%,&lt;br /&gt;
            rgba(255,200,215,0.35) 30%,&lt;br /&gt;
            rgba(255,200,215,0.15) 40%,&lt;br /&gt;
            rgba(255,200,215,0) 55%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    mix-blend-mode: screen;&lt;br /&gt;
    opacity: 0.6;&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 -1px 0 rgba(255,255,255,0.95),        /* 主亮线 */&lt;br /&gt;
        0 -2px 4px rgba(255,220,230,0.6),      /* 柔粉扩散 */&lt;br /&gt;
        0 -4px 10px rgba(255,180,200,0.25);    /* 外围粉光 */&lt;br /&gt;
&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 居中包裹层 */&lt;br /&gt;
/* 大屏：max-width 限制 + 轻微偏左（margin 右多于左），左右自适应边距 */&lt;br /&gt;
.card_content-inner {&lt;br /&gt;
    max-width: 1900px;&lt;br /&gt;
    margin: 0 auto 0 clamp(0px, 4vw, 160px); /* 超宽时整体偏左 */&lt;br /&gt;
    padding: 0 clamp(40px, 10vw, 240px) 120px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content{&lt;br /&gt;
    color:#1a1a1f;&lt;br /&gt;
    margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 卡面名&amp;amp;信息 */&lt;br /&gt;
.card_content_name-icon img {&lt;br /&gt;
	background:black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 情报 */&lt;br /&gt;
.card_content_info{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center; /* 垂直居中 */&lt;br /&gt;
    width:100%;&lt;br /&gt;
    gap:18px;&lt;br /&gt;
    margin-left:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_info-item{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 给除了最后一个以外的 item 加竖线 */&lt;br /&gt;
.card_content_info-item:not(:last-child)::after{&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left:40px;&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    transform: translateY(-50%);&lt;br /&gt;
&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    height: 60%; /* 控制线的高度 */&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to bottom,&lt;br /&gt;
        rgba(0,0,0,0),&lt;br /&gt;
        rgba(0,0,0,0.25),&lt;br /&gt;
        rgba(0,0,0,0)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关（续）--------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
/* 全局强调色 */&lt;br /&gt;
.card_accent { color: #ed4141; }&lt;br /&gt;
.card_accent--type { color: #ed4141; margin-left: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* 大框架容器 */&lt;br /&gt;
.card_content-container {&lt;br /&gt;
    width: 100vw;&lt;br /&gt;
    margin-top: -30vh;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    transform: translate(-50%);&lt;br /&gt;
    left: 50%;&lt;br /&gt;
    /* 防止内容撑出横向滚动 */&lt;br /&gt;
    overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 正文布局 */&lt;br /&gt;
.card_content--layout {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 60px;&lt;br /&gt;
    flex-wrap: wrap; /* 小屏自动折叠 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 左栏：默认 sticky */&lt;br /&gt;
.card_content_left {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 320px;&lt;br /&gt;
    transform: translateY(-220px);&lt;br /&gt;
    flex: 0 0 380px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 卡名区域 */&lt;br /&gt;
.card_content_name-container { width: 100%; }&lt;br /&gt;
.card_content_name-row { display: flex; margin-left: 2px; }&lt;br /&gt;
.card_content_name-classtext { font-size: large; margin-left: 6px; }&lt;br /&gt;
.card_content_name-icon--ml { margin-left: 8px; }&lt;br /&gt;
.card_content_name-text {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    font-size: xx-large;&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块标题通用 */&lt;br /&gt;
.card_content-item-title {&lt;br /&gt;
    font-size: x-large;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-title--mt { margin-top: 36px; }&lt;br /&gt;
.card_content-item-subtitle {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    margin-left: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块分隔线 */&lt;br /&gt;
.card_content-item-hr {&lt;br /&gt;
    width: 50px;&lt;br /&gt;
    height: 2px;&lt;br /&gt;
    background: #ff7676;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-hr--mb12 { margin-bottom: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* 属性 */&lt;br /&gt;
.card_content_attribute-item {&lt;br /&gt;
    width: 240px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-icon {&lt;br /&gt;
    width: 12px;&lt;br /&gt;
    height: 12px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右栏 */&lt;br /&gt;
.card_content_right {&lt;br /&gt;
    flex: 1 1 520px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能卡片 ---- */&lt;br /&gt;
/* 默认上下排列（描述在上，升级在下），到足够宽时才切换为左右 */&lt;br /&gt;
.card_content_skill-card {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 1100px;   /* 超宽屏给更大空间 */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column; /* 默认上下 */&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    background: #ffffff14;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-gap { height: 18px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能卡左侧描述区 */&lt;br /&gt;
.card_content_skill-left {&lt;br /&gt;
    width: 100%;         /* 上下排时占满 */&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能标题行 */&lt;br /&gt;
.card_content_skill-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-icon {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.7);&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-title-text {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-name {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    color: grey;&lt;br /&gt;
    margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta-val { margin-left: 6px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能标签（群攻/单体等） */&lt;br /&gt;
.card_content_skill-tags {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    line-height: 0.9;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-tag {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    background: #000000a3;&lt;br /&gt;
    color: #ffffff;&lt;br /&gt;
    padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能效果描述 */&lt;br /&gt;
.card_content_skill_effect {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    line-height: 1.3;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能升级表格（通用） ---- */&lt;br /&gt;
.card_content_skill-upgrade {&lt;br /&gt;
    width: 100%;        /* 上下排时占满宽度 */&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    /* 内容超出卡片宽度时才出现横向滚动条 */&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
}&lt;br /&gt;
/* 默认 8 列（终结技 Lv.2~9）；每列最小 44px */&lt;br /&gt;
.card_content_skill-upgrade-grid {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    grid-template-columns: auto repeat(8, minmax(44px, 1fr));&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    min-width: max-content; /* 防止列被压缩，超出时由父级滚动条处理 */&lt;br /&gt;
}&lt;br /&gt;
/* 9 列变体（普攻 / 被动 Lv.2~10） */&lt;br /&gt;
.card_content_skill-upgrade-grid--10 {&lt;br /&gt;
    grid-template-columns: auto repeat(9, minmax(44px, 1fr));&lt;br /&gt;
}&lt;br /&gt;
/* 表头等级数字 */&lt;br /&gt;
.card_content_skill-upgrade-lv {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标标签容器 */&lt;br /&gt;
.card_content_skill-upgrade-row-label {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-right: 18px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标圆圈数字 */&lt;br /&gt;
.card_content_skill-upgrade-badge {&lt;br /&gt;
    width: 18px;&lt;br /&gt;
    height: 18px;&lt;br /&gt;
    background: #ff7676b3;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    font-size: 0.72rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    font-family:serif;&lt;br /&gt;
    padding-left:6px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标文字 */&lt;br /&gt;
.card_content_skill-upgrade-badge-text {&lt;br /&gt;
    margin-left: 4px;&lt;br /&gt;
    color:#4b2424;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标箭头（错位） */&lt;br /&gt;
.card_content_skill-upgrade-arrow {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
/* 数值格 */&lt;br /&gt;
.card_content_skill-upgrade-val {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 4px 0;&lt;br /&gt;
}&lt;br /&gt;
/* 无变化格 */&lt;br /&gt;
.card_content_skill-upgrade-val--null { color: #aaa; }&lt;br /&gt;
&lt;br /&gt;
/* ---- 觉醒 ---- */&lt;br /&gt;
.card_content_feat-ul {&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-list {&lt;br /&gt;
    padding: 0.8rem 0;&lt;br /&gt;
    margin-bottom: 0.8rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-wrap {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-right: 2rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: -12px;&lt;br /&gt;
    left: 2px;&lt;br /&gt;
    font-size: 0.7rem;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-number {&lt;br /&gt;
    width: 28px;&lt;br /&gt;
    height: 28px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-cn {&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    margin-right: 0.5rem;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 小传 ---- */&lt;br /&gt;
.card_content_story { margin-top: 80px; }&lt;br /&gt;
&lt;br /&gt;
/* 小传 header：默认横排（标题在左，时间轴在右） */&lt;br /&gt;
.card_content_story-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-left {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    flex-shrink: 0; /* 不压缩标题区 */&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-spacer { margin-top: 36px; }&lt;br /&gt;
.card_content_story-toggle {&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-timeline {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    max-width: 820px;&lt;br /&gt;
    padding-left: 44px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    transition: opacity .25s ease, transform .25s ease, max-height .35s ease;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
    transform: translateY(0);&lt;br /&gt;
    max-height: 5000px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 时间轴 ---- */&lt;br /&gt;
.card_timeline { position: relative; }&lt;br /&gt;
.card_timeline-line {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 16px;&lt;br /&gt;
    top: 6px;&lt;br /&gt;
    bottom: 6px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.06);&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-bottom: 60px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item--last { margin-bottom: 0; }&lt;br /&gt;
.card_timeline-dot {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: -30px;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    width: 8px;&lt;br /&gt;
    height: 8px;&lt;br /&gt;
    border: 2px solid #ff7676;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-unlock {&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    margin-bottom: 8px;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-title { margin-bottom: 14px; }&lt;br /&gt;
.card_timeline-numeral {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-size: 1.15rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-chapter {&lt;br /&gt;
    margin: 0 6px;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-label {&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    margin-left: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-body {&lt;br /&gt;
    line-height: 1.5;&lt;br /&gt;
    font-size: 0.95rem;&lt;br /&gt;
    color: #292929;&lt;br /&gt;
    text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约模块（card_content_date-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 邀约区块容器 */&lt;br /&gt;
.card_content_date {&lt;br /&gt;
    margin-top: 80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 票券轨道 */&lt;br /&gt;
.card_content_date-track {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 8px 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 票券列表 ---- */&lt;br /&gt;
/* align-items: flex-start，高低起伏靠每张卡的 margin-top 实现 */&lt;br /&gt;
.card_content_date-list {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: nowrap;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 单张邀约卡片（基础样式，所有卡片共用） ---- */&lt;br /&gt;
.card_content_date-item {&lt;br /&gt;
    width: calc(20% - 10px);&lt;br /&gt;
    min-width: 100px;&lt;br /&gt;
    max-width: 190px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
&lt;br /&gt;
    background: rgba(255, 255, 255, 0.38);&lt;br /&gt;
    backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    border: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(0, 0, 0, 0.10),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #1a1a1f;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 清空伪元素默认，各方案自行定义 */&lt;br /&gt;
.card_content_date-item::before,&lt;br /&gt;
.card_content_date-item::after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 选中态高亮 */&lt;br /&gt;
.card_content_date-item.is-active {&lt;br /&gt;
    border-color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(237, 65, 65, 0.15),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 卡片内容区（基础） ---- */&lt;br /&gt;
.card_content_date-body {&lt;br /&gt;
    padding: 10px 10px 12px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    min-height: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 图片区域 ---- */&lt;br /&gt;
.card_content_date-img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    aspect-ratio: 3 / 2;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    position: relative;&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        135deg,&lt;br /&gt;
        rgba(200, 185, 210, 0.55) 0%,&lt;br /&gt;
        rgba(160, 140, 180, 0.35) 50%,&lt;br /&gt;
        rgba(120, 100, 140, 0.25) 100%&lt;br /&gt;
    );&lt;br /&gt;
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 图片本体：填满容器，居中裁切 */&lt;br /&gt;
.card_content_date-img img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    object-position: center top;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* MediaWiki 生成的图片包裹层 */&lt;br /&gt;
.card_content_date-img .thumb,&lt;br /&gt;
.card_content_date-img figure {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    background: none !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbinner,&lt;br /&gt;
.card_content_date-img figcaption {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbimage {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
    object-fit: cover !important;&lt;br /&gt;
    object-position: center top !important;&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 序号基础 */&lt;br /&gt;
.card_content_date-num {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.6rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.18);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Story/END 标签基础 */&lt;br /&gt;
.card_content_date-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 0.58rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 A：左上角极小红色方块 + 序号 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-a {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    left: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-body {&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.22);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 B：像素风进度条（有图卡片使用） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-b {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 5px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.10);&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px.on {&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-pixels .px.on {&lt;br /&gt;
    background: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.15);&lt;br /&gt;
    font-size: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-label {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.55);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    letter-spacing: 2.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 C：两端小色块夹住文字 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-c {&lt;br /&gt;
    border-top: 2px solid rgba(237, 65, 65, 0.25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-bracket {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 5px;&lt;br /&gt;
    padding: 10px 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 14px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block--r {&lt;br /&gt;
    width: 3px;&lt;br /&gt;
    height: 10px;&lt;br /&gt;
    opacity: 0.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-num {&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.3rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-label {&lt;br /&gt;
    font-size: 0.55rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 D：右上角单个小红方块点缀 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-d {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    right: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.20);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约故事区（card_date_story-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 故事面板容器：默认隐藏，点击卡片后出现 */&lt;br /&gt;
/* 极度透明，与正文白色大背景几乎无缝融合，仅起氛围区分作用 */&lt;br /&gt;
.card_date_story {&lt;br /&gt;
    display: none;&lt;br /&gt;
    margin-top: 28px;&lt;br /&gt;
    padding: 36px 28px 40px;&lt;br /&gt;
    /* 极淡白底：几乎看不出，只有一点点氛围感 */&lt;br /&gt;
    background: rgba(255, 255, 255, 0.18);&lt;br /&gt;
    border-top: 1px solid rgba(237, 65, 65, 0.08);&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    /* 去掉 box-shadow，不要明显的卡片感 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 显示态：加上淡入动画 */&lt;br /&gt;
.card_date_story.is-visible {&lt;br /&gt;
    display: block;&lt;br /&gt;
    animation: card_date_story-fadein 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes card_date_story-fadein {&lt;br /&gt;
    from { opacity: 0; transform: translateY(8px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 场景标签：轻盈深色，可读但不抢眼 */&lt;br /&gt;
.card_date_story-scene {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 28, 55, 0.5);&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 5px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 各故事内容块：默认隐藏，JS控制显示 */&lt;br /&gt;
.card_date_story-content {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.card_date_story-content.is-active {&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 旁白：斜体，深色系，清晰可读 */&lt;br /&gt;
.card_date_story-narration {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 32, 55, 0.62);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 13px;&lt;br /&gt;
    margin: 24px 40px;&lt;br /&gt;
    line-height: 2.1;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话行 */&lt;br /&gt;
.card_date_story-dialogue {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    margin: 18px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧（&amp;quot;我&amp;quot;）：整行翻转 */&lt;br /&gt;
.card_date_story-dialogue--right {&lt;br /&gt;
    flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 头像区域（左侧角色用） */&lt;br /&gt;
.card_date_story-avatar {&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[file:xxx.png]] 生成的 img */&lt;br /&gt;
.card_date_story-avatar img {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暂无图片时的占位圆圈（左侧角色） */&lt;br /&gt;
.card_date_story-avatar-placeholder {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    background: rgba(237, 65, 65, 0.05);&lt;br /&gt;
    border: 1px solid rgba(237, 65, 65, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧「我」的头像完全隐藏，不占空间 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-avatar {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话内容列 */&lt;br /&gt;
.card_date_story-dialogue-content {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 3px;&lt;br /&gt;
    max-width: 65%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧对话：内容靠右对齐 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-dialogue-content {&lt;br /&gt;
    align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 角色名（仅左侧显示） */&lt;br /&gt;
.card_date_story-charname {&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.7);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话正文：加深加粗，保证可读性 */&lt;br /&gt;
.card_date_story-text {&lt;br /&gt;
    color: rgba(20, 14, 30, 0.82); /* 深色，接近纯黑但不死板 */&lt;br /&gt;
    line-height: 2;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    font-weight: 500;         /* 稍微加一点字重 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 响应式断点 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ≤1399px：左栏取消 sticky，两栏上下排列 */&lt;br /&gt;
@media (max-width: 1399px) {&lt;br /&gt;
    .card_content_left {&lt;br /&gt;
        position: static;&lt;br /&gt;
        transform: none;&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_right {&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤900px：小传 header 从左右改为上下排列 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
    .card_content_story-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-header-spacer {&lt;br /&gt;
        display: none;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-timeline {&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
        margin-top: 16px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤600px：极小屏，边距收窄；邀约改为两列 */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .card_content-inner {&lt;br /&gt;
        padding: 0 20px 80px;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-list {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-item {&lt;br /&gt;
        width: calc(50% - 5px);&lt;br /&gt;
        min-width: unset;&lt;br /&gt;
        max-width: unset;&lt;br /&gt;
        margin-top: 0 !important;&lt;br /&gt;
    }&lt;br /&gt;
    .card_date_story-narration {&lt;br /&gt;
        margin: 20px 12px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≥1400px：右栏有足够宽度，技能卡内部切换为左右布局 */&lt;br /&gt;
@media (min-width: 1400px) {&lt;br /&gt;
    .card_content_skill-card {&lt;br /&gt;
        flex-direction: row;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-left {&lt;br /&gt;
        width: 340px;&lt;br /&gt;
        flex-shrink: 0;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-upgrade {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 礼物 认知 */&lt;br /&gt;
.card_content_cognition-gift {&lt;br /&gt;
		width:48px;&lt;br /&gt;
		height:48px;&lt;br /&gt;
		background:rgba(255,255,255,0.3);&lt;br /&gt;
		border-radius:3px&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=374</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=374"/>
		<updated>2026-03-12T10:43:12Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里放置的CSS将应用于所有皮肤 */&lt;br /&gt;
&lt;br /&gt;
/* 全局 */&lt;br /&gt;
&lt;br /&gt;
/* 字体 */&lt;br /&gt;
/* Regular */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-55-Regular.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bold */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-85-Bold.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
:root {&lt;br /&gt;
  color-scheme: dark;&lt;br /&gt;
&lt;br /&gt;
  /* 色相：暖粉 */&lt;br /&gt;
  --color-progressive-oklch__h: 15 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 正文字亮度 */&lt;br /&gt;
  --color-base-oklch__l: 92% !important;&lt;br /&gt;
  --color-base-oklch__c: 0.03 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 次级文字 */&lt;br /&gt;
  --color-subtle-oklch__l: 75% !important;&lt;br /&gt;
  --color-subtle-oklch__c: 0.025 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 强调文字 */&lt;br /&gt;
  --color-emphasized-oklch__l: 98% !important;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.04 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 背景相关 */&lt;br /&gt;
html {&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* 禁止整个页面横向滚动 */&lt;br /&gt;
  overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
  background-image:&lt;br /&gt;
    radial-gradient(&lt;br /&gt;
      circle at 50% 30%,&lt;br /&gt;
      rgba(0, 0, 0, 0) 35%,&lt;br /&gt;
      rgba(0, 0, 0, 0.4) 100%&lt;br /&gt;
    ),&lt;br /&gt;
    url(&amp;quot;/images/b/b5/Banner.jpg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-attachment: fixed;&lt;br /&gt;
&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
  /* 禁止横向滚动 */&lt;br /&gt;
  overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 遮罩 */&lt;br /&gt;
body::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  z-index: 0;&lt;br /&gt;
&lt;br /&gt;
  backdrop-filter: blur(12px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(12px);&lt;br /&gt;
&lt;br /&gt;
  /* 用遮罩控制模糊范围 */&lt;br /&gt;
  mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  -webkit-mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 去掉主题偏移 */&lt;br /&gt;
.citizen-page-container {&lt;br /&gt;
	padding-inline:unset!important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 修复编辑背景 */&lt;br /&gt;
.editor.ace_editor.ace-tm {&lt;br /&gt;
    background: black;&lt;br /&gt;
    &lt;br /&gt;
     /* 恢复原来的冷色调 */&lt;br /&gt;
  --color-progressive-oklch__h: 262.29;&lt;br /&gt;
  &lt;br /&gt;
  --color-base-oklch__l: 20%;&lt;br /&gt;
  --color-base-oklch__c: 0.09;&lt;br /&gt;
&lt;br /&gt;
  --color-subtle-oklch__l: 35%;&lt;br /&gt;
  --color-subtle-oklch__c: 0.11;&lt;br /&gt;
&lt;br /&gt;
  --color-emphasized-oklch__l: 5%;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.07;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.mw-body-content .CodeMirror {&lt;br /&gt;
	background-color:var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 侧边栏 */&lt;br /&gt;
.citizen-header {&lt;br /&gt;
	background-color:rgba(255,255,255,0.2);&lt;br /&gt;
	backdrop-filter:blur(10px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* footer  */&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
	background-color:unset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关--------------------------------------------------- */&lt;br /&gt;
/** card_ **/&lt;br /&gt;
/* 全屏卡面 */&lt;br /&gt;
.card_fullscreen-img {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    z-index: 0;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.card_fullscreen-img img {&lt;br /&gt;
    width: 105%;&lt;br /&gt;
    height: 105%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
&lt;br /&gt;
    transform: translateY(0px) scale(1);&lt;br /&gt;
    transition: transform 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled img {&lt;br /&gt;
    transform: translateY(-10px) scale(1.015);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗角 */&lt;br /&gt;
.card_fullscreen-img::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            ellipse at center,&lt;br /&gt;
            rgba(0,0,0,0.2) 35%,&lt;br /&gt;
            rgba(0,0,0,0.65) 100%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    opacity: 0; /* 默认没有 */&lt;br /&gt;
    transition: opacity 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled::after{&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 正文背景*/&lt;br /&gt;
&lt;br /&gt;
.card_content-background {&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding: 120px 0 0;   /* 左右 padding 交由 inner 处理 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.66) 0%, rgba(255, 255, 255, 0.62) 35%, rgba(255, 255, 255, 0.54) 100%);&lt;br /&gt;
    backdrop-filter: blur(15px) saturate(155%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(22px) saturate(155%);&lt;br /&gt;
    border-radius: 100vw 100vw 0 0 / 2.4em 2.4em 0 0;&lt;br /&gt;
    border-top: thin solid rgb(255 235 240 / 68%);&lt;br /&gt;
    box-shadow: 0 -40px 80px -45px rgba(0, 0, 0, 0.25), 0 -2px 6px rgb(255 255 255 / 13%), 0 -4px 14px rgba(255, 180, 200, 0.18), inset 0 1px 0 rgb(255 255 255 / 0%), inset 0 -30px 60px rgba(0, 0, 0, 0.04);&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::before{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            120% 70% at 50% -18%,&lt;br /&gt;
            rgba(255,255,255,0.95) 0%,&lt;br /&gt;
            rgba(255,230,235,0.65) 18%,&lt;br /&gt;
            rgba(255,200,215,0.35) 30%,&lt;br /&gt;
            rgba(255,200,215,0.15) 40%,&lt;br /&gt;
            rgba(255,200,215,0) 55%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    mix-blend-mode: screen;&lt;br /&gt;
    opacity: 0.6;&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 -1px 0 rgba(255,255,255,0.95),        /* 主亮线 */&lt;br /&gt;
        0 -2px 4px rgba(255,220,230,0.6),      /* 柔粉扩散 */&lt;br /&gt;
        0 -4px 10px rgba(255,180,200,0.25);    /* 外围粉光 */&lt;br /&gt;
&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 居中包裹层 */&lt;br /&gt;
/* 大屏：max-width 限制 + 轻微偏左（margin 右多于左），左右自适应边距 */&lt;br /&gt;
.card_content-inner {&lt;br /&gt;
    max-width: 1900px;&lt;br /&gt;
    margin: 0 auto 0 clamp(0px, 4vw, 160px); /* 超宽时整体偏左 */&lt;br /&gt;
    padding: 0 clamp(40px, 10vw, 240px) 120px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content{&lt;br /&gt;
    color:#1a1a1f;&lt;br /&gt;
    margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 卡面名&amp;amp;信息 */&lt;br /&gt;
.card_content_name-icon img {&lt;br /&gt;
	background:black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 情报 */&lt;br /&gt;
.card_content_info{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center; /* 垂直居中 */&lt;br /&gt;
    width:100%;&lt;br /&gt;
    gap:18px;&lt;br /&gt;
    margin-left:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_info-item{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 给除了最后一个以外的 item 加竖线 */&lt;br /&gt;
.card_content_info-item:not(:last-child)::after{&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left:40px;&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    transform: translateY(-50%);&lt;br /&gt;
&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    height: 60%; /* 控制线的高度 */&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to bottom,&lt;br /&gt;
        rgba(0,0,0,0),&lt;br /&gt;
        rgba(0,0,0,0.25),&lt;br /&gt;
        rgba(0,0,0,0)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关（续）--------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
/* 全局强调色 */&lt;br /&gt;
.card_accent { color: #ed4141; }&lt;br /&gt;
.card_accent--type { color: #ed4141; margin-left: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* 大框架容器 */&lt;br /&gt;
.card_content-container {&lt;br /&gt;
    width: 100vw;&lt;br /&gt;
    margin-top: -30vh;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    transform: translate(-50%);&lt;br /&gt;
    left: 50%;&lt;br /&gt;
    /* 防止内容撑出横向滚动 */&lt;br /&gt;
    overflow-x: clip;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 正文布局 */&lt;br /&gt;
.card_content--layout {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 60px;&lt;br /&gt;
    flex-wrap: wrap; /* 小屏自动折叠 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 左栏：默认 sticky */&lt;br /&gt;
.card_content_left {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 320px;&lt;br /&gt;
    transform: translateY(-220px);&lt;br /&gt;
    flex: 0 0 380px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 卡名区域 */&lt;br /&gt;
.card_content_name-container { width: 100%; }&lt;br /&gt;
.card_content_name-row { display: flex; margin-left: 2px; }&lt;br /&gt;
.card_content_name-classtext { font-size: large; margin-left: 6px; }&lt;br /&gt;
.card_content_name-icon--ml { margin-left: 8px; }&lt;br /&gt;
.card_content_name-text {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    font-size: xx-large;&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块标题通用 */&lt;br /&gt;
.card_content-item-title {&lt;br /&gt;
    font-size: x-large;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-title--mt { margin-top: 36px; }&lt;br /&gt;
.card_content-item-subtitle {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    margin-left: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块分隔线 */&lt;br /&gt;
.card_content-item-hr {&lt;br /&gt;
    width: 50px;&lt;br /&gt;
    height: 2px;&lt;br /&gt;
    background: #ff7676;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-hr--mb12 { margin-bottom: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* 属性 */&lt;br /&gt;
.card_content_attribute-item {&lt;br /&gt;
    width: 240px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-icon {&lt;br /&gt;
    width: 12px;&lt;br /&gt;
    height: 12px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右栏 */&lt;br /&gt;
.card_content_right {&lt;br /&gt;
    flex: 1 1 520px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能卡片 ---- */&lt;br /&gt;
/* 默认上下排列（描述在上，升级在下），到足够宽时才切换为左右 */&lt;br /&gt;
.card_content_skill-card {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 1100px;   /* 超宽屏给更大空间 */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column; /* 默认上下 */&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    background: #ffffff14;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-gap { height: 18px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能卡左侧描述区 */&lt;br /&gt;
.card_content_skill-left {&lt;br /&gt;
    width: 100%;         /* 上下排时占满 */&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能标题行 */&lt;br /&gt;
.card_content_skill-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-icon {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.7);&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-title-text {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-name {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    color: grey;&lt;br /&gt;
    margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta-val { margin-left: 6px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能标签（群攻/单体等） */&lt;br /&gt;
.card_content_skill-tags {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    line-height: 0.9;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-tag {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    background: #000000a3;&lt;br /&gt;
    color: #ffffff;&lt;br /&gt;
    padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能效果描述 */&lt;br /&gt;
.card_content_skill_effect {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    line-height: 1.3;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能升级表格（通用） ---- */&lt;br /&gt;
.card_content_skill-upgrade {&lt;br /&gt;
    width: 100%;        /* 上下排时占满宽度 */&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    /* 内容超出卡片宽度时才出现横向滚动条 */&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
}&lt;br /&gt;
/* 默认 8 列（终结技 Lv.2~9）；每列最小 44px */&lt;br /&gt;
.card_content_skill-upgrade-grid {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    grid-template-columns: auto repeat(8, minmax(44px, 1fr));&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    min-width: max-content; /* 防止列被压缩，超出时由父级滚动条处理 */&lt;br /&gt;
}&lt;br /&gt;
/* 9 列变体（普攻 / 被动 Lv.2~10） */&lt;br /&gt;
.card_content_skill-upgrade-grid--10 {&lt;br /&gt;
    grid-template-columns: auto repeat(9, minmax(44px, 1fr));&lt;br /&gt;
}&lt;br /&gt;
/* 表头等级数字 */&lt;br /&gt;
.card_content_skill-upgrade-lv {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标标签容器 */&lt;br /&gt;
.card_content_skill-upgrade-row-label {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-right: 18px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标圆圈数字 */&lt;br /&gt;
.card_content_skill-upgrade-badge {&lt;br /&gt;
    width: 18px;&lt;br /&gt;
    height: 18px;&lt;br /&gt;
    background: #ff7676b3;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    font-size: 0.72rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    font-family:serif;&lt;br /&gt;
    padding-left:6px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标文字 */&lt;br /&gt;
.card_content_skill-upgrade-badge-text {&lt;br /&gt;
    margin-left: 4px;&lt;br /&gt;
    color:#4b2424;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标箭头（错位） */&lt;br /&gt;
.card_content_skill-upgrade-arrow {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
/* 数值格 */&lt;br /&gt;
.card_content_skill-upgrade-val {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 4px 0;&lt;br /&gt;
}&lt;br /&gt;
/* 无变化格 */&lt;br /&gt;
.card_content_skill-upgrade-val--null { color: #aaa; }&lt;br /&gt;
&lt;br /&gt;
/* ---- 觉醒 ---- */&lt;br /&gt;
.card_content_feat-ul {&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-list {&lt;br /&gt;
    padding: 0.8rem 0;&lt;br /&gt;
    margin-bottom: 0.8rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-wrap {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-right: 2rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: -12px;&lt;br /&gt;
    left: 2px;&lt;br /&gt;
    font-size: 0.7rem;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-number {&lt;br /&gt;
    width: 28px;&lt;br /&gt;
    height: 28px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-cn {&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    margin-right: 0.5rem;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 小传 ---- */&lt;br /&gt;
.card_content_story { margin-top: 80px; }&lt;br /&gt;
&lt;br /&gt;
/* 小传 header：默认横排（标题在左，时间轴在右） */&lt;br /&gt;
.card_content_story-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-left {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    flex-shrink: 0; /* 不压缩标题区 */&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-spacer { margin-top: 36px; }&lt;br /&gt;
.card_content_story-toggle {&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-timeline {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    max-width: 820px;&lt;br /&gt;
    padding-left: 44px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    transition: opacity .25s ease, transform .25s ease, max-height .35s ease;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
    transform: translateY(0);&lt;br /&gt;
    max-height: 5000px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 时间轴 ---- */&lt;br /&gt;
.card_timeline { position: relative; }&lt;br /&gt;
.card_timeline-line {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 16px;&lt;br /&gt;
    top: 6px;&lt;br /&gt;
    bottom: 6px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.06);&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-bottom: 60px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item--last { margin-bottom: 0; }&lt;br /&gt;
.card_timeline-dot {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: -30px;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    width: 8px;&lt;br /&gt;
    height: 8px;&lt;br /&gt;
    border: 2px solid #ff7676;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-unlock {&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    margin-bottom: 8px;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-title { margin-bottom: 14px; }&lt;br /&gt;
.card_timeline-numeral {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-size: 1.15rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-chapter {&lt;br /&gt;
    margin: 0 6px;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-label {&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    margin-left: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-body {&lt;br /&gt;
    line-height: 1.5;&lt;br /&gt;
    font-size: 0.95rem;&lt;br /&gt;
    color: #292929;&lt;br /&gt;
    text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约模块（card_content_date-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 邀约区块容器 */&lt;br /&gt;
.card_content_date {&lt;br /&gt;
    margin-top: 80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 票券轨道 */&lt;br /&gt;
.card_content_date-track {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 8px 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 票券列表 ---- */&lt;br /&gt;
/* align-items: flex-start，高低起伏靠每张卡的 margin-top 实现 */&lt;br /&gt;
.card_content_date-list {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: nowrap;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 单张邀约卡片（基础样式，所有卡片共用） ---- */&lt;br /&gt;
.card_content_date-item {&lt;br /&gt;
    width: calc(20% - 10px);&lt;br /&gt;
    min-width: 100px;&lt;br /&gt;
    max-width: 190px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
&lt;br /&gt;
    background: rgba(255, 255, 255, 0.38);&lt;br /&gt;
    backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    border: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(0, 0, 0, 0.10),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #1a1a1f;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 清空伪元素默认，各方案自行定义 */&lt;br /&gt;
.card_content_date-item::before,&lt;br /&gt;
.card_content_date-item::after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 选中态高亮 */&lt;br /&gt;
.card_content_date-item.is-active {&lt;br /&gt;
    border-color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(237, 65, 65, 0.15),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 卡片内容区（基础） ---- */&lt;br /&gt;
.card_content_date-body {&lt;br /&gt;
    padding: 10px 10px 12px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    min-height: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 图片区域 ---- */&lt;br /&gt;
.card_content_date-img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    aspect-ratio: 3 / 2;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    position: relative;&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        135deg,&lt;br /&gt;
        rgba(200, 185, 210, 0.55) 0%,&lt;br /&gt;
        rgba(160, 140, 180, 0.35) 50%,&lt;br /&gt;
        rgba(120, 100, 140, 0.25) 100%&lt;br /&gt;
    );&lt;br /&gt;
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 图片本体：填满容器，居中裁切 */&lt;br /&gt;
.card_content_date-img img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    object-position: center top;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* MediaWiki 生成的图片包裹层 */&lt;br /&gt;
.card_content_date-img .thumb,&lt;br /&gt;
.card_content_date-img figure {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    background: none !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbinner,&lt;br /&gt;
.card_content_date-img figcaption {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbimage {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
    object-fit: cover !important;&lt;br /&gt;
    object-position: center top !important;&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 序号基础 */&lt;br /&gt;
.card_content_date-num {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.6rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.18);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Story/END 标签基础 */&lt;br /&gt;
.card_content_date-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 0.58rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 A：左上角极小红色方块 + 序号 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-a {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    left: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-body {&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.22);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 B：像素风进度条（有图卡片使用） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-b {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 5px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.10);&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px.on {&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-pixels .px.on {&lt;br /&gt;
    background: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.15);&lt;br /&gt;
    font-size: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-label {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.55);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    letter-spacing: 2.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 C：两端小色块夹住文字 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-c {&lt;br /&gt;
    border-top: 2px solid rgba(237, 65, 65, 0.25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-bracket {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 5px;&lt;br /&gt;
    padding: 10px 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 14px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block--r {&lt;br /&gt;
    width: 3px;&lt;br /&gt;
    height: 10px;&lt;br /&gt;
    opacity: 0.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-num {&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.3rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-label {&lt;br /&gt;
    font-size: 0.55rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 D：右上角单个小红方块点缀 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-d {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    right: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.20);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约故事区（card_date_story-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 故事面板容器：默认隐藏，点击卡片后出现 */&lt;br /&gt;
/* 极度透明，与正文白色大背景几乎无缝融合，仅起氛围区分作用 */&lt;br /&gt;
.card_date_story {&lt;br /&gt;
    display: none;&lt;br /&gt;
    margin-top: 28px;&lt;br /&gt;
    padding: 36px 28px 40px;&lt;br /&gt;
    /* 极淡白底：几乎看不出，只有一点点氛围感 */&lt;br /&gt;
    background: rgba(255, 255, 255, 0.18);&lt;br /&gt;
    border-top: 1px solid rgba(237, 65, 65, 0.08);&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    /* 去掉 box-shadow，不要明显的卡片感 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 显示态：加上淡入动画 */&lt;br /&gt;
.card_date_story.is-visible {&lt;br /&gt;
    display: block;&lt;br /&gt;
    animation: card_date_story-fadein 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes card_date_story-fadein {&lt;br /&gt;
    from { opacity: 0; transform: translateY(8px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 场景标签：轻盈深色，可读但不抢眼 */&lt;br /&gt;
.card_date_story-scene {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 28, 55, 0.5);&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 5px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 各故事内容块：默认隐藏，JS控制显示 */&lt;br /&gt;
.card_date_story-content {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.card_date_story-content.is-active {&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 旁白：斜体，深色系，清晰可读 */&lt;br /&gt;
.card_date_story-narration {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 32, 55, 0.62);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 13px;&lt;br /&gt;
    margin: 24px 40px;&lt;br /&gt;
    line-height: 2.1;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话行 */&lt;br /&gt;
.card_date_story-dialogue {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    margin: 18px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧（&amp;quot;我&amp;quot;）：整行翻转 */&lt;br /&gt;
.card_date_story-dialogue--right {&lt;br /&gt;
    flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 头像区域（左侧角色用） */&lt;br /&gt;
.card_date_story-avatar {&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[file:xxx.png]] 生成的 img */&lt;br /&gt;
.card_date_story-avatar img {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暂无图片时的占位圆圈（左侧角色） */&lt;br /&gt;
.card_date_story-avatar-placeholder {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    background: rgba(237, 65, 65, 0.05);&lt;br /&gt;
    border: 1px solid rgba(237, 65, 65, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧「我」的头像完全隐藏，不占空间 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-avatar {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话内容列 */&lt;br /&gt;
.card_date_story-dialogue-content {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 3px;&lt;br /&gt;
    max-width: 65%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧对话：内容靠右对齐 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-dialogue-content {&lt;br /&gt;
    align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 角色名（仅左侧显示） */&lt;br /&gt;
.card_date_story-charname {&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.7);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话正文：加深加粗，保证可读性 */&lt;br /&gt;
.card_date_story-text {&lt;br /&gt;
    color: rgba(20, 14, 30, 0.82); /* 深色，接近纯黑但不死板 */&lt;br /&gt;
    line-height: 2;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    font-weight: 500;         /* 稍微加一点字重 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 响应式断点 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ≤1399px：左栏取消 sticky，两栏上下排列 */&lt;br /&gt;
@media (max-width: 1399px) {&lt;br /&gt;
    .card_content_left {&lt;br /&gt;
        position: static;&lt;br /&gt;
        transform: none;&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_right {&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤900px：小传 header 从左右改为上下排列 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
    .card_content_story-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-header-spacer {&lt;br /&gt;
        display: none;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-timeline {&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
        margin-top: 16px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤600px：极小屏，边距收窄；邀约改为两列 */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .card_content-inner {&lt;br /&gt;
        padding: 0 20px 80px;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-list {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-item {&lt;br /&gt;
        width: calc(50% - 5px);&lt;br /&gt;
        min-width: unset;&lt;br /&gt;
        max-width: unset;&lt;br /&gt;
        margin-top: 0 !important;&lt;br /&gt;
    }&lt;br /&gt;
    .card_date_story-narration {&lt;br /&gt;
        margin: 20px 12px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≥1400px：右栏有足够宽度，技能卡内部切换为左右布局 */&lt;br /&gt;
@media (min-width: 1400px) {&lt;br /&gt;
    .card_content_skill-card {&lt;br /&gt;
        flex-direction: row;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-left {&lt;br /&gt;
        width: 340px;&lt;br /&gt;
        flex-shrink: 0;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-upgrade {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 礼物 认知 */&lt;br /&gt;
.card_content_cognition-gift {&lt;br /&gt;
		width:48px;&lt;br /&gt;
		height:48px;&lt;br /&gt;
		background:rgba(255,255,255,0.3);&lt;br /&gt;
		border-radius:3px&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=373</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=373"/>
		<updated>2026-03-12T10:32:29Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里放置的CSS将应用于所有皮肤 */&lt;br /&gt;
&lt;br /&gt;
/* 全局 */&lt;br /&gt;
&lt;br /&gt;
/* 字体 */&lt;br /&gt;
/* Regular */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-55-Regular.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bold */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-85-Bold.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
:root {&lt;br /&gt;
  color-scheme: dark;&lt;br /&gt;
&lt;br /&gt;
  /* 色相：暖粉 */&lt;br /&gt;
  --color-progressive-oklch__h: 15 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 正文字亮度 */&lt;br /&gt;
  --color-base-oklch__l: 92% !important;&lt;br /&gt;
  --color-base-oklch__c: 0.03 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 次级文字 */&lt;br /&gt;
  --color-subtle-oklch__l: 75% !important;&lt;br /&gt;
  --color-subtle-oklch__c: 0.025 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 强调文字 */&lt;br /&gt;
  --color-emphasized-oklch__l: 98% !important;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.04 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 背景相关 */&lt;br /&gt;
html {&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* 禁止整个页面横向滚动 */&lt;br /&gt;
  overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
  background-image:&lt;br /&gt;
    radial-gradient(&lt;br /&gt;
      circle at 50% 30%,&lt;br /&gt;
      rgba(0, 0, 0, 0) 35%,&lt;br /&gt;
      rgba(0, 0, 0, 0.4) 100%&lt;br /&gt;
    ),&lt;br /&gt;
    url(&amp;quot;/images/b/b5/Banner.jpg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-attachment: fixed;&lt;br /&gt;
&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
  /* 禁止横向滚动 */&lt;br /&gt;
  overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 遮罩 */&lt;br /&gt;
body::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  z-index: 0;&lt;br /&gt;
&lt;br /&gt;
  backdrop-filter: blur(12px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(12px);&lt;br /&gt;
&lt;br /&gt;
  /* 用遮罩控制模糊范围 */&lt;br /&gt;
  mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  -webkit-mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 去掉主题偏移 */&lt;br /&gt;
.citizen-page-container {&lt;br /&gt;
	padding-inline:unset!important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 修复编辑背景 */&lt;br /&gt;
.editor.ace_editor.ace-tm {&lt;br /&gt;
    background: black;&lt;br /&gt;
    &lt;br /&gt;
     /* 恢复原来的冷色调 */&lt;br /&gt;
  --color-progressive-oklch__h: 262.29;&lt;br /&gt;
  &lt;br /&gt;
  --color-base-oklch__l: 20%;&lt;br /&gt;
  --color-base-oklch__c: 0.09;&lt;br /&gt;
&lt;br /&gt;
  --color-subtle-oklch__l: 35%;&lt;br /&gt;
  --color-subtle-oklch__c: 0.11;&lt;br /&gt;
&lt;br /&gt;
  --color-emphasized-oklch__l: 5%;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.07;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.mw-body-content .CodeMirror {&lt;br /&gt;
	background-color:var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 侧边栏 */&lt;br /&gt;
.citizen-header {&lt;br /&gt;
	background-color:rgba(255,255,255,0.2);&lt;br /&gt;
	backdrop-filter:blur(10px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* footer  */&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
	background-color:unset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关--------------------------------------------------- */&lt;br /&gt;
/** card_ **/&lt;br /&gt;
/* 全屏卡面 */&lt;br /&gt;
.card_fullscreen-img {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    z-index: 0;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.card_fullscreen-img img {&lt;br /&gt;
    width: 105%;&lt;br /&gt;
    height: 105%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
&lt;br /&gt;
    transform: translateY(0px) scale(1);&lt;br /&gt;
    transition: transform 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled img {&lt;br /&gt;
    transform: translateY(-10px) scale(1.015);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗角 */&lt;br /&gt;
.card_fullscreen-img::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            ellipse at center,&lt;br /&gt;
            rgba(0,0,0,0.2) 35%,&lt;br /&gt;
            rgba(0,0,0,0.65) 100%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    opacity: 0; /* 默认没有 */&lt;br /&gt;
    transition: opacity 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled::after{&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 正文背景*/&lt;br /&gt;
&lt;br /&gt;
.card_content-background {&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding: 120px 0 0;   /* 左右 padding 交由 inner 处理 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.66) 0%, rgba(255, 255, 255, 0.62) 35%, rgba(255, 255, 255, 0.54) 100%);&lt;br /&gt;
    backdrop-filter: blur(15px) saturate(155%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(22px) saturate(155%);&lt;br /&gt;
    border-radius: 100vw 100vw 0 0 / 2.4em 2.4em 0 0;&lt;br /&gt;
    border-top: thin solid rgb(255 235 240 / 68%);&lt;br /&gt;
    box-shadow: 0 -40px 80px -45px rgba(0, 0, 0, 0.25), 0 -2px 6px rgb(255 255 255 / 13%), 0 -4px 14px rgba(255, 180, 200, 0.18), inset 0 1px 0 rgb(255 255 255 / 0%), inset 0 -30px 60px rgba(0, 0, 0, 0.04);&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::before{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            120% 70% at 50% -18%,&lt;br /&gt;
            rgba(255,255,255,0.95) 0%,&lt;br /&gt;
            rgba(255,230,235,0.65) 18%,&lt;br /&gt;
            rgba(255,200,215,0.35) 30%,&lt;br /&gt;
            rgba(255,200,215,0.15) 40%,&lt;br /&gt;
            rgba(255,200,215,0) 55%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    mix-blend-mode: screen;&lt;br /&gt;
    opacity: 0.6;&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 -1px 0 rgba(255,255,255,0.95),        /* 主亮线 */&lt;br /&gt;
        0 -2px 4px rgba(255,220,230,0.6),      /* 柔粉扩散 */&lt;br /&gt;
        0 -4px 10px rgba(255,180,200,0.25);    /* 外围粉光 */&lt;br /&gt;
&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 居中包裹层 */&lt;br /&gt;
/* 大屏：max-width 限制 + 轻微偏左（margin 右多于左），左右自适应边距 */&lt;br /&gt;
.card_content-inner {&lt;br /&gt;
    max-width: 1900px;&lt;br /&gt;
    margin: 0 auto 0 clamp(0px, 4vw, 160px); /* 超宽时整体偏左 */&lt;br /&gt;
    padding: 0 clamp(40px, 10vw, 240px) 120px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content{&lt;br /&gt;
    color:#1a1a1f;&lt;br /&gt;
    margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 卡面名&amp;amp;信息 */&lt;br /&gt;
.card_content_name-icon img {&lt;br /&gt;
	background:black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 情报 */&lt;br /&gt;
.card_content_info{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center; /* 垂直居中 */&lt;br /&gt;
    width:100%;&lt;br /&gt;
    gap:18px;&lt;br /&gt;
    margin-left:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_info-item{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 给除了最后一个以外的 item 加竖线 */&lt;br /&gt;
.card_content_info-item:not(:last-child)::after{&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left:40px;&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    transform: translateY(-50%);&lt;br /&gt;
&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    height: 60%; /* 控制线的高度 */&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to bottom,&lt;br /&gt;
        rgba(0,0,0,0),&lt;br /&gt;
        rgba(0,0,0,0.25),&lt;br /&gt;
        rgba(0,0,0,0)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关（续）--------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
/* 全局强调色 */&lt;br /&gt;
.card_accent { color: #ed4141; }&lt;br /&gt;
.card_accent--type { color: #ed4141; margin-left: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* 大框架容器 */&lt;br /&gt;
.card_content-container {&lt;br /&gt;
    width: 100vw;&lt;br /&gt;
    margin-top: -30vh;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    transform: translate(-50%);&lt;br /&gt;
    left: 50%;&lt;br /&gt;
    /* 防止内容撑出横向滚动 */&lt;br /&gt;
    overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 正文布局 */&lt;br /&gt;
.card_content--layout {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 60px;&lt;br /&gt;
    flex-wrap: wrap; /* 小屏自动折叠 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 左栏：默认 sticky */&lt;br /&gt;
.card_content_left {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 320px;&lt;br /&gt;
    transform: translateY(-220px);&lt;br /&gt;
    flex: 0 0 380px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 卡名区域 */&lt;br /&gt;
.card_content_name-container { width: 100%; }&lt;br /&gt;
.card_content_name-row { display: flex; margin-left: 2px; }&lt;br /&gt;
.card_content_name-classtext { font-size: large; margin-left: 6px; }&lt;br /&gt;
.card_content_name-icon--ml { margin-left: 8px; }&lt;br /&gt;
.card_content_name-text {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    font-size: xx-large;&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块标题通用 */&lt;br /&gt;
.card_content-item-title {&lt;br /&gt;
    font-size: x-large;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-title--mt { margin-top: 36px; }&lt;br /&gt;
.card_content-item-subtitle {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    margin-left: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块分隔线 */&lt;br /&gt;
.card_content-item-hr {&lt;br /&gt;
    width: 50px;&lt;br /&gt;
    height: 2px;&lt;br /&gt;
    background: #ff7676;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-hr--mb12 { margin-bottom: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* 属性 */&lt;br /&gt;
.card_content_attribute-item {&lt;br /&gt;
    width: 240px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-icon {&lt;br /&gt;
    width: 12px;&lt;br /&gt;
    height: 12px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右栏 */&lt;br /&gt;
.card_content_right {&lt;br /&gt;
    flex: 1 1 520px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能卡片 ---- */&lt;br /&gt;
/* 默认上下排列（描述在上，升级在下），到足够宽时才切换为左右 */&lt;br /&gt;
.card_content_skill-card {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 1100px;   /* 超宽屏给更大空间 */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column; /* 默认上下 */&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    background: #ffffff14;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-gap { height: 18px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能卡左侧描述区 */&lt;br /&gt;
.card_content_skill-left {&lt;br /&gt;
    width: 100%;         /* 上下排时占满 */&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能标题行 */&lt;br /&gt;
.card_content_skill-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-icon {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.7);&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-title-text {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-name {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    color: grey;&lt;br /&gt;
    margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta-val { margin-left: 6px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能标签（群攻/单体等） */&lt;br /&gt;
.card_content_skill-tags {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    line-height: 0.9;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-tag {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    background: #000000a3;&lt;br /&gt;
    color: #ffffff;&lt;br /&gt;
    padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能效果描述 */&lt;br /&gt;
.card_content_skill_effect {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    line-height: 1.3;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能升级表格（通用） ---- */&lt;br /&gt;
.card_content_skill-upgrade {&lt;br /&gt;
    width: 100%;        /* 上下排时占满宽度 */&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    /* 内容超出卡片宽度时才出现横向滚动条 */&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
}&lt;br /&gt;
/* 默认 8 列（终结技 Lv.2~9）；每列最小 44px */&lt;br /&gt;
.card_content_skill-upgrade-grid {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    grid-template-columns: auto repeat(8, minmax(44px, 1fr));&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    min-width: max-content; /* 防止列被压缩，超出时由父级滚动条处理 */&lt;br /&gt;
}&lt;br /&gt;
/* 9 列变体（普攻 / 被动 Lv.2~10） */&lt;br /&gt;
.card_content_skill-upgrade-grid--10 {&lt;br /&gt;
    grid-template-columns: auto repeat(9, minmax(44px, 1fr));&lt;br /&gt;
}&lt;br /&gt;
/* 表头等级数字 */&lt;br /&gt;
.card_content_skill-upgrade-lv {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标标签容器 */&lt;br /&gt;
.card_content_skill-upgrade-row-label {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-right: 18px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标圆圈数字 */&lt;br /&gt;
.card_content_skill-upgrade-badge {&lt;br /&gt;
    width: 18px;&lt;br /&gt;
    height: 18px;&lt;br /&gt;
    background: #ff7676b3;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    font-size: 0.72rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    font-family:serif;&lt;br /&gt;
    padding-left:6px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标文字 */&lt;br /&gt;
.card_content_skill-upgrade-badge-text {&lt;br /&gt;
    margin-left: 4px;&lt;br /&gt;
    color:#4b2424;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标箭头（错位） */&lt;br /&gt;
.card_content_skill-upgrade-arrow {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
/* 数值格 */&lt;br /&gt;
.card_content_skill-upgrade-val {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 4px 0;&lt;br /&gt;
}&lt;br /&gt;
/* 无变化格 */&lt;br /&gt;
.card_content_skill-upgrade-val--null { color: #aaa; }&lt;br /&gt;
&lt;br /&gt;
/* ---- 觉醒 ---- */&lt;br /&gt;
.card_content_feat-ul {&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-list {&lt;br /&gt;
    padding: 0.8rem 0;&lt;br /&gt;
    margin-bottom: 0.8rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-wrap {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-right: 2rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: -12px;&lt;br /&gt;
    left: 2px;&lt;br /&gt;
    font-size: 0.7rem;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-number {&lt;br /&gt;
    width: 28px;&lt;br /&gt;
    height: 28px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-cn {&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    margin-right: 0.5rem;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 小传 ---- */&lt;br /&gt;
.card_content_story { margin-top: 80px; }&lt;br /&gt;
&lt;br /&gt;
/* 小传 header：默认横排（标题在左，时间轴在右） */&lt;br /&gt;
.card_content_story-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-left {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    flex-shrink: 0; /* 不压缩标题区 */&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-spacer { margin-top: 36px; }&lt;br /&gt;
.card_content_story-toggle {&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-timeline {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    max-width: 820px;&lt;br /&gt;
    padding-left: 44px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    transition: opacity .25s ease, transform .25s ease, max-height .35s ease;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
    transform: translateY(0);&lt;br /&gt;
    max-height: 5000px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 时间轴 ---- */&lt;br /&gt;
.card_timeline { position: relative; }&lt;br /&gt;
.card_timeline-line {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 16px;&lt;br /&gt;
    top: 6px;&lt;br /&gt;
    bottom: 6px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.06);&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-bottom: 60px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item--last { margin-bottom: 0; }&lt;br /&gt;
.card_timeline-dot {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: -30px;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    width: 8px;&lt;br /&gt;
    height: 8px;&lt;br /&gt;
    border: 2px solid #ff7676;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-unlock {&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    margin-bottom: 8px;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-title { margin-bottom: 14px; }&lt;br /&gt;
.card_timeline-numeral {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-size: 1.15rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-chapter {&lt;br /&gt;
    margin: 0 6px;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-label {&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    margin-left: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-body {&lt;br /&gt;
    line-height: 1.5;&lt;br /&gt;
    font-size: 0.95rem;&lt;br /&gt;
    color: #292929;&lt;br /&gt;
    text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约模块（card_content_date-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 邀约区块容器 */&lt;br /&gt;
.card_content_date {&lt;br /&gt;
    margin-top: 80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 票券轨道 */&lt;br /&gt;
.card_content_date-track {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 8px 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 票券列表 ---- */&lt;br /&gt;
/* align-items: flex-start，高低起伏靠每张卡的 margin-top 实现 */&lt;br /&gt;
.card_content_date-list {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: nowrap;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 单张邀约卡片（基础样式，所有卡片共用） ---- */&lt;br /&gt;
.card_content_date-item {&lt;br /&gt;
    width: calc(20% - 10px);&lt;br /&gt;
    min-width: 100px;&lt;br /&gt;
    max-width: 190px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
&lt;br /&gt;
    background: rgba(255, 255, 255, 0.38);&lt;br /&gt;
    backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    border: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(0, 0, 0, 0.10),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #1a1a1f;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 清空伪元素默认，各方案自行定义 */&lt;br /&gt;
.card_content_date-item::before,&lt;br /&gt;
.card_content_date-item::after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 选中态高亮 */&lt;br /&gt;
.card_content_date-item.is-active {&lt;br /&gt;
    border-color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(237, 65, 65, 0.15),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 卡片内容区（基础） ---- */&lt;br /&gt;
.card_content_date-body {&lt;br /&gt;
    padding: 10px 10px 12px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    min-height: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 图片区域 ---- */&lt;br /&gt;
.card_content_date-img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    aspect-ratio: 3 / 2;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    position: relative;&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        135deg,&lt;br /&gt;
        rgba(200, 185, 210, 0.55) 0%,&lt;br /&gt;
        rgba(160, 140, 180, 0.35) 50%,&lt;br /&gt;
        rgba(120, 100, 140, 0.25) 100%&lt;br /&gt;
    );&lt;br /&gt;
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 图片本体：填满容器，居中裁切 */&lt;br /&gt;
.card_content_date-img img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    object-position: center top;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* MediaWiki 生成的图片包裹层 */&lt;br /&gt;
.card_content_date-img .thumb,&lt;br /&gt;
.card_content_date-img figure {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    background: none !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbinner,&lt;br /&gt;
.card_content_date-img figcaption {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbimage {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
    object-fit: cover !important;&lt;br /&gt;
    object-position: center top !important;&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 序号基础 */&lt;br /&gt;
.card_content_date-num {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.6rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.18);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Story/END 标签基础 */&lt;br /&gt;
.card_content_date-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 0.58rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 A：左上角极小红色方块 + 序号 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-a {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    left: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-body {&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.22);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 B：像素风进度条（有图卡片使用） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-b {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 5px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.10);&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px.on {&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-pixels .px.on {&lt;br /&gt;
    background: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.15);&lt;br /&gt;
    font-size: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-label {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.55);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    letter-spacing: 2.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 C：两端小色块夹住文字 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-c {&lt;br /&gt;
    border-top: 2px solid rgba(237, 65, 65, 0.25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-bracket {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 5px;&lt;br /&gt;
    padding: 10px 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 14px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block--r {&lt;br /&gt;
    width: 3px;&lt;br /&gt;
    height: 10px;&lt;br /&gt;
    opacity: 0.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-num {&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.3rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-label {&lt;br /&gt;
    font-size: 0.55rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 D：右上角单个小红方块点缀 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-d {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    right: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.20);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约故事区（card_date_story-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 故事面板容器：默认隐藏，点击卡片后出现 */&lt;br /&gt;
/* 极度透明，与正文白色大背景几乎无缝融合，仅起氛围区分作用 */&lt;br /&gt;
.card_date_story {&lt;br /&gt;
    display: none;&lt;br /&gt;
    margin-top: 28px;&lt;br /&gt;
    padding: 36px 28px 40px;&lt;br /&gt;
    /* 极淡白底：几乎看不出，只有一点点氛围感 */&lt;br /&gt;
    background: rgba(255, 255, 255, 0.18);&lt;br /&gt;
    border-top: 1px solid rgba(237, 65, 65, 0.08);&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    /* 去掉 box-shadow，不要明显的卡片感 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 显示态：加上淡入动画 */&lt;br /&gt;
.card_date_story.is-visible {&lt;br /&gt;
    display: block;&lt;br /&gt;
    animation: card_date_story-fadein 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes card_date_story-fadein {&lt;br /&gt;
    from { opacity: 0; transform: translateY(8px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 场景标签：轻盈深色，可读但不抢眼 */&lt;br /&gt;
.card_date_story-scene {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 28, 55, 0.5);&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 5px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 各故事内容块：默认隐藏，JS控制显示 */&lt;br /&gt;
.card_date_story-content {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.card_date_story-content.is-active {&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 旁白：斜体，深色系，清晰可读 */&lt;br /&gt;
.card_date_story-narration {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 32, 55, 0.62);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 13px;&lt;br /&gt;
    margin: 24px 40px;&lt;br /&gt;
    line-height: 2.1;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话行 */&lt;br /&gt;
.card_date_story-dialogue {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    margin: 18px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧（&amp;quot;我&amp;quot;）：整行翻转 */&lt;br /&gt;
.card_date_story-dialogue--right {&lt;br /&gt;
    flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 头像区域（左侧角色用） */&lt;br /&gt;
.card_date_story-avatar {&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[file:xxx.png]] 生成的 img */&lt;br /&gt;
.card_date_story-avatar img {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暂无图片时的占位圆圈（左侧角色） */&lt;br /&gt;
.card_date_story-avatar-placeholder {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    background: rgba(237, 65, 65, 0.05);&lt;br /&gt;
    border: 1px solid rgba(237, 65, 65, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧「我」的头像完全隐藏，不占空间 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-avatar {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话内容列 */&lt;br /&gt;
.card_date_story-dialogue-content {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 3px;&lt;br /&gt;
    max-width: 65%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧对话：内容靠右对齐 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-dialogue-content {&lt;br /&gt;
    align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 角色名（仅左侧显示） */&lt;br /&gt;
.card_date_story-charname {&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.7);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话正文：加深加粗，保证可读性 */&lt;br /&gt;
.card_date_story-text {&lt;br /&gt;
    color: rgba(20, 14, 30, 0.82); /* 深色，接近纯黑但不死板 */&lt;br /&gt;
    line-height: 2;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    font-weight: 500;         /* 稍微加一点字重 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 响应式断点 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ≤1399px：左栏取消 sticky，两栏上下排列 */&lt;br /&gt;
@media (max-width: 1399px) {&lt;br /&gt;
    .card_content_left {&lt;br /&gt;
        position: static;&lt;br /&gt;
        transform: none;&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_right {&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤900px：小传 header 从左右改为上下排列 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
    .card_content_story-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-header-spacer {&lt;br /&gt;
        display: none;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-timeline {&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
        margin-top: 16px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤600px：极小屏，边距收窄；邀约改为两列 */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .card_content-inner {&lt;br /&gt;
        padding: 0 20px 80px;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-list {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-item {&lt;br /&gt;
        width: calc(50% - 5px);&lt;br /&gt;
        min-width: unset;&lt;br /&gt;
        max-width: unset;&lt;br /&gt;
        margin-top: 0 !important;&lt;br /&gt;
    }&lt;br /&gt;
    .card_date_story-narration {&lt;br /&gt;
        margin: 20px 12px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≥1400px：右栏有足够宽度，技能卡内部切换为左右布局 */&lt;br /&gt;
@media (min-width: 1400px) {&lt;br /&gt;
    .card_content_skill-card {&lt;br /&gt;
        flex-direction: row;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-left {&lt;br /&gt;
        width: 340px;&lt;br /&gt;
        flex-shrink: 0;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-upgrade {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 礼物 认知 */&lt;br /&gt;
.card_content_cognition-gift {&lt;br /&gt;
		width:48px;&lt;br /&gt;
		height:48px;&lt;br /&gt;
		background:rgba(255,255,255,0.3);&lt;br /&gt;
		border-radius:3px&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=372</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=372"/>
		<updated>2026-03-12T10:21:28Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里放置的CSS将应用于所有皮肤 */&lt;br /&gt;
&lt;br /&gt;
/* 全局 */&lt;br /&gt;
&lt;br /&gt;
/* 字体 */&lt;br /&gt;
/* Regular */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-55-Regular.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bold */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-85-Bold.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
:root {&lt;br /&gt;
  color-scheme: dark;&lt;br /&gt;
&lt;br /&gt;
  /* 色相：暖粉 */&lt;br /&gt;
  --color-progressive-oklch__h: 15 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 正文字亮度 */&lt;br /&gt;
  --color-base-oklch__l: 92% !important;&lt;br /&gt;
  --color-base-oklch__c: 0.03 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 次级文字 */&lt;br /&gt;
  --color-subtle-oklch__l: 75% !important;&lt;br /&gt;
  --color-subtle-oklch__c: 0.025 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 强调文字 */&lt;br /&gt;
  --color-emphasized-oklch__l: 98% !important;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.04 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 背景相关 */&lt;br /&gt;
html {&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* 禁止整个页面横向滚动 */&lt;br /&gt;
  overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
  background-image:&lt;br /&gt;
    radial-gradient(&lt;br /&gt;
      circle at 50% 30%,&lt;br /&gt;
      rgba(0, 0, 0, 0) 35%,&lt;br /&gt;
      rgba(0, 0, 0, 0.4) 100%&lt;br /&gt;
    ),&lt;br /&gt;
    url(&amp;quot;/images/b/b5/Banner.jpg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-attachment: fixed;&lt;br /&gt;
&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
  /* 禁止横向滚动 */&lt;br /&gt;
  overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 遮罩 */&lt;br /&gt;
body::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  z-index: 0;&lt;br /&gt;
&lt;br /&gt;
  backdrop-filter: blur(12px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(12px);&lt;br /&gt;
&lt;br /&gt;
  /* 用遮罩控制模糊范围 */&lt;br /&gt;
  mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  -webkit-mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 去掉主题偏移 */&lt;br /&gt;
.citizen-page-container {&lt;br /&gt;
	padding-inline:unset!important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 修复编辑背景 */&lt;br /&gt;
.editor.ace_editor.ace-tm {&lt;br /&gt;
    background: black;&lt;br /&gt;
    &lt;br /&gt;
     /* 恢复原来的冷色调 */&lt;br /&gt;
  --color-progressive-oklch__h: 262.29;&lt;br /&gt;
  &lt;br /&gt;
  --color-base-oklch__l: 20%;&lt;br /&gt;
  --color-base-oklch__c: 0.09;&lt;br /&gt;
&lt;br /&gt;
  --color-subtle-oklch__l: 35%;&lt;br /&gt;
  --color-subtle-oklch__c: 0.11;&lt;br /&gt;
&lt;br /&gt;
  --color-emphasized-oklch__l: 5%;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.07;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.mw-body-content .CodeMirror {&lt;br /&gt;
	background-color:var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 侧边栏 */&lt;br /&gt;
.citizen-header {&lt;br /&gt;
	background-color:rgba(255,255,255,0.2);&lt;br /&gt;
	backdrop-filter:blur(10px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* footer  */&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
	background-color:unset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关--------------------------------------------------- */&lt;br /&gt;
/** card_ **/&lt;br /&gt;
/* 全屏卡面 */&lt;br /&gt;
.card_fullscreen-img {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    z-index: 0;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.card_fullscreen-img img {&lt;br /&gt;
    width: 105%;&lt;br /&gt;
    height: 105%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
&lt;br /&gt;
    transform: translateY(0px) scale(1);&lt;br /&gt;
    transition: transform 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled img {&lt;br /&gt;
    transform: translateY(-10px) scale(1.015);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗角 */&lt;br /&gt;
.card_fullscreen-img::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            ellipse at center,&lt;br /&gt;
            rgba(0,0,0,0.2) 35%,&lt;br /&gt;
            rgba(0,0,0,0.65) 100%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    opacity: 0; /* 默认没有 */&lt;br /&gt;
    transition: opacity 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled::after{&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 正文背景*/&lt;br /&gt;
&lt;br /&gt;
.card_content-background {&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding: 120px 0 0;   /* 左右 padding 交由 inner 处理 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.66) 0%, rgba(255, 255, 255, 0.62) 35%, rgba(255, 255, 255, 0.54) 100%);&lt;br /&gt;
    backdrop-filter: blur(15px) saturate(155%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(22px) saturate(155%);&lt;br /&gt;
    border-radius: 100vw 100vw 0 0 / 2.4em 2.4em 0 0;&lt;br /&gt;
    border-top: thin solid rgb(255 235 240 / 68%);&lt;br /&gt;
    box-shadow: 0 -40px 80px -45px rgba(0, 0, 0, 0.25), 0 -2px 6px rgb(255 255 255 / 13%), 0 -4px 14px rgba(255, 180, 200, 0.18), inset 0 1px 0 rgb(255 255 255 / 0%), inset 0 -30px 60px rgba(0, 0, 0, 0.04);&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::before{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            120% 70% at 50% -18%,&lt;br /&gt;
            rgba(255,255,255,0.95) 0%,&lt;br /&gt;
            rgba(255,230,235,0.65) 18%,&lt;br /&gt;
            rgba(255,200,215,0.35) 30%,&lt;br /&gt;
            rgba(255,200,215,0.15) 40%,&lt;br /&gt;
            rgba(255,200,215,0) 55%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    mix-blend-mode: screen;&lt;br /&gt;
    opacity: 0.6;&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 -1px 0 rgba(255,255,255,0.95),        /* 主亮线 */&lt;br /&gt;
        0 -2px 4px rgba(255,220,230,0.6),      /* 柔粉扩散 */&lt;br /&gt;
        0 -4px 10px rgba(255,180,200,0.25);    /* 外围粉光 */&lt;br /&gt;
&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 居中包裹层 */&lt;br /&gt;
/* 大屏：max-width 限制 + 轻微偏左（margin 右多于左），左右自适应边距 */&lt;br /&gt;
.card_content-inner {&lt;br /&gt;
    max-width: 1900px;&lt;br /&gt;
    margin: 0 auto 0 clamp(0px, 4vw, 160px); /* 超宽时整体偏左 */&lt;br /&gt;
    padding: 0 clamp(40px, 10vw, 240px) 120px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content{&lt;br /&gt;
    color:#1a1a1f;&lt;br /&gt;
    margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 卡面名&amp;amp;信息 */&lt;br /&gt;
.card_content_name-icon img {&lt;br /&gt;
	background:black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 情报 */&lt;br /&gt;
.card_content_info{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center; /* 垂直居中 */&lt;br /&gt;
    width:100%;&lt;br /&gt;
    gap:18px;&lt;br /&gt;
    margin-left:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_info-item{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 给除了最后一个以外的 item 加竖线 */&lt;br /&gt;
.card_content_info-item:not(:last-child)::after{&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left:40px;&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    transform: translateY(-50%);&lt;br /&gt;
&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    height: 60%; /* 控制线的高度 */&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to bottom,&lt;br /&gt;
        rgba(0,0,0,0),&lt;br /&gt;
        rgba(0,0,0,0.25),&lt;br /&gt;
        rgba(0,0,0,0)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关（续）--------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
/* 全局强调色 */&lt;br /&gt;
.card_accent { color: #ed4141; }&lt;br /&gt;
.card_accent--type { color: #ed4141; margin-left: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* 大框架容器 */&lt;br /&gt;
.card_content-container {&lt;br /&gt;
    width: 100vw;&lt;br /&gt;
    margin-top: -30vh;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    transform: translate(-50%);&lt;br /&gt;
    left: 50%;&lt;br /&gt;
    /* 防止内容撑出横向滚动 */&lt;br /&gt;
    overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 正文布局 */&lt;br /&gt;
.card_content--layout {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 60px;&lt;br /&gt;
    flex-wrap: wrap; /* 小屏自动折叠 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 左栏：默认 sticky */&lt;br /&gt;
.card_content_left {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 320px;&lt;br /&gt;
    transform: translateY(-220px);&lt;br /&gt;
    flex: 0 0 380px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 卡名区域 */&lt;br /&gt;
.card_content_name-container { width: 100%; }&lt;br /&gt;
.card_content_name-row { display: flex; margin-left: 2px; }&lt;br /&gt;
.card_content_name-classtext { font-size: large; margin-left: 6px; }&lt;br /&gt;
.card_content_name-icon--ml { margin-left: 8px; }&lt;br /&gt;
.card_content_name-text {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    font-size: xx-large;&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块标题通用 */&lt;br /&gt;
.card_content-item-title {&lt;br /&gt;
    font-size: x-large;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-title--mt { margin-top: 36px; }&lt;br /&gt;
.card_content-item-subtitle {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    margin-left: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块分隔线 */&lt;br /&gt;
.card_content-item-hr {&lt;br /&gt;
    width: 50px;&lt;br /&gt;
    height: 2px;&lt;br /&gt;
    background: #ff7676;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-hr--mb12 { margin-bottom: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* 属性 */&lt;br /&gt;
.card_content_attribute-item {&lt;br /&gt;
    width: 240px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-icon {&lt;br /&gt;
    width: 12px;&lt;br /&gt;
    height: 12px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右栏 */&lt;br /&gt;
.card_content_right {&lt;br /&gt;
    flex: 1 1 520px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能卡片 ---- */&lt;br /&gt;
/* 默认上下排列（描述在上，升级在下），到足够宽时才切换为左右 */&lt;br /&gt;
.card_content_skill-card {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 1100px;   /* 超宽屏给更大空间 */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column; /* 默认上下 */&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    background: #ffffff14;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-gap { height: 18px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能卡左侧描述区 */&lt;br /&gt;
.card_content_skill-left {&lt;br /&gt;
    width: 100%;         /* 上下排时占满 */&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能标题行 */&lt;br /&gt;
.card_content_skill-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-icon {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.7);&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-title-text {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-name {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    color: grey;&lt;br /&gt;
    margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta-val { margin-left: 6px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能标签（群攻/单体等） */&lt;br /&gt;
.card_content_skill-tags {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    line-height: 0.9;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-tag {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    background: #000000a3;&lt;br /&gt;
    color: #ffffff;&lt;br /&gt;
    padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能效果描述 */&lt;br /&gt;
.card_content_skill_effect {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    line-height: 1.3;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能升级表格（通用） ---- */&lt;br /&gt;
.card_content_skill-upgrade {&lt;br /&gt;
    width: 100%;        /* 上下排时占满宽度 */&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    /* 内容超出卡片宽度时才出现横向滚动条 */&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
}&lt;br /&gt;
/* 默认 8 列（终结技 Lv.2~9）；每列最小 44px */&lt;br /&gt;
.card_content_skill-upgrade-grid {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    grid-template-columns: auto repeat(8, minmax(44px, 1fr));&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    min-width: max-content; /* 防止列被压缩，超出时由父级滚动条处理 */&lt;br /&gt;
}&lt;br /&gt;
/* 9 列变体（普攻 / 被动 Lv.2~10） */&lt;br /&gt;
.card_content_skill-upgrade-grid--10 {&lt;br /&gt;
    grid-template-columns: auto repeat(9, minmax(44px, 1fr));&lt;br /&gt;
}&lt;br /&gt;
/* 表头等级数字 */&lt;br /&gt;
.card_content_skill-upgrade-lv {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标标签容器 */&lt;br /&gt;
.card_content_skill-upgrade-row-label {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-right: 18px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标圆圈数字 */&lt;br /&gt;
.card_content_skill-upgrade-badge {&lt;br /&gt;
    width: 18px;&lt;br /&gt;
    height: 18px;&lt;br /&gt;
    background: #ff7676b3;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    font-size: 0.72rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    font-family:serif;&lt;br /&gt;
    padding-left:6px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标文字 */&lt;br /&gt;
.card_content_skill-upgrade-badge-text {&lt;br /&gt;
    margin-left: 4px;&lt;br /&gt;
    color:#4b2424;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标箭头（错位） */&lt;br /&gt;
.card_content_skill-upgrade-arrow {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
/* 数值格 */&lt;br /&gt;
.card_content_skill-upgrade-val {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 4px 0;&lt;br /&gt;
}&lt;br /&gt;
/* 无变化格 */&lt;br /&gt;
.card_content_skill-upgrade-val--null { color: #aaa; }&lt;br /&gt;
&lt;br /&gt;
/* ---- 觉醒 ---- */&lt;br /&gt;
.card_content_feat-ul {&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-list {&lt;br /&gt;
    padding: 0.8rem 0;&lt;br /&gt;
    margin-bottom: 0.8rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-wrap {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-right: 2rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: -12px;&lt;br /&gt;
    left: 2px;&lt;br /&gt;
    font-size: 0.7rem;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-number {&lt;br /&gt;
    width: 28px;&lt;br /&gt;
    height: 28px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-cn {&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    margin-right: 0.5rem;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 小传 ---- */&lt;br /&gt;
.card_content_story { margin-top: 80px; }&lt;br /&gt;
&lt;br /&gt;
/* 小传 header：默认横排（标题在左，时间轴在右） */&lt;br /&gt;
.card_content_story-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-left {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    flex-shrink: 0; /* 不压缩标题区 */&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-spacer { margin-top: 36px; }&lt;br /&gt;
.card_content_story-toggle {&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-timeline {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    max-width: 820px;&lt;br /&gt;
    padding-left: 44px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    transition: opacity .25s ease, transform .25s ease, max-height .35s ease;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
    transform: translateY(0);&lt;br /&gt;
    max-height: 5000px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 时间轴 ---- */&lt;br /&gt;
.card_timeline { position: relative; }&lt;br /&gt;
.card_timeline-line {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 16px;&lt;br /&gt;
    top: 6px;&lt;br /&gt;
    bottom: 6px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.06);&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-bottom: 60px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item--last { margin-bottom: 0; }&lt;br /&gt;
.card_timeline-dot {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: -30px;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    width: 8px;&lt;br /&gt;
    height: 8px;&lt;br /&gt;
    border: 2px solid #ff7676;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-unlock {&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    margin-bottom: 8px;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-title { margin-bottom: 14px; }&lt;br /&gt;
.card_timeline-numeral {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-size: 1.15rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-chapter {&lt;br /&gt;
    margin: 0 6px;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-label {&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    margin-left: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-body {&lt;br /&gt;
    line-height: 1.95;&lt;br /&gt;
    font-size: 0.95rem;&lt;br /&gt;
    color: #292929;&lt;br /&gt;
    text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约模块（card_content_date-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 邀约区块容器 */&lt;br /&gt;
.card_content_date {&lt;br /&gt;
    margin-top: 80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 票券轨道 */&lt;br /&gt;
.card_content_date-track {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 8px 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 票券列表 ---- */&lt;br /&gt;
/* align-items: flex-start，高低起伏靠每张卡的 margin-top 实现 */&lt;br /&gt;
.card_content_date-list {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: nowrap;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 单张邀约卡片（基础样式，所有卡片共用） ---- */&lt;br /&gt;
.card_content_date-item {&lt;br /&gt;
    width: calc(20% - 10px);&lt;br /&gt;
    min-width: 100px;&lt;br /&gt;
    max-width: 190px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
&lt;br /&gt;
    background: rgba(255, 255, 255, 0.38);&lt;br /&gt;
    backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    border: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(0, 0, 0, 0.10),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #1a1a1f;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 清空伪元素默认，各方案自行定义 */&lt;br /&gt;
.card_content_date-item::before,&lt;br /&gt;
.card_content_date-item::after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 选中态高亮 */&lt;br /&gt;
.card_content_date-item.is-active {&lt;br /&gt;
    border-color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(237, 65, 65, 0.15),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 卡片内容区（基础） ---- */&lt;br /&gt;
.card_content_date-body {&lt;br /&gt;
    padding: 10px 10px 12px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    min-height: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 图片区域 ---- */&lt;br /&gt;
.card_content_date-img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    aspect-ratio: 3 / 2;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    position: relative;&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        135deg,&lt;br /&gt;
        rgba(200, 185, 210, 0.55) 0%,&lt;br /&gt;
        rgba(160, 140, 180, 0.35) 50%,&lt;br /&gt;
        rgba(120, 100, 140, 0.25) 100%&lt;br /&gt;
    );&lt;br /&gt;
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 图片本体：填满容器，居中裁切 */&lt;br /&gt;
.card_content_date-img img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    object-position: center top;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* MediaWiki 生成的图片包裹层 */&lt;br /&gt;
.card_content_date-img .thumb,&lt;br /&gt;
.card_content_date-img figure {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    background: none !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbinner,&lt;br /&gt;
.card_content_date-img figcaption {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbimage {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
    object-fit: cover !important;&lt;br /&gt;
    object-position: center top !important;&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 序号基础 */&lt;br /&gt;
.card_content_date-num {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.6rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.18);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Story/END 标签基础 */&lt;br /&gt;
.card_content_date-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 0.58rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 A：左上角极小红色方块 + 序号 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-a {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    left: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-body {&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.22);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 B：像素风进度条（有图卡片使用） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-b {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 5px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.10);&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px.on {&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-pixels .px.on {&lt;br /&gt;
    background: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.15);&lt;br /&gt;
    font-size: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-label {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.55);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    letter-spacing: 2.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 C：两端小色块夹住文字 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-c {&lt;br /&gt;
    border-top: 2px solid rgba(237, 65, 65, 0.25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-bracket {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 5px;&lt;br /&gt;
    padding: 10px 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 14px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block--r {&lt;br /&gt;
    width: 3px;&lt;br /&gt;
    height: 10px;&lt;br /&gt;
    opacity: 0.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-num {&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.3rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-label {&lt;br /&gt;
    font-size: 0.55rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 D：右上角单个小红方块点缀 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-d {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    right: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.20);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约故事区（card_date_story-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 故事面板容器：默认隐藏，点击卡片后出现 */&lt;br /&gt;
/* 极度透明，与正文白色大背景几乎无缝融合，仅起氛围区分作用 */&lt;br /&gt;
.card_date_story {&lt;br /&gt;
    display: none;&lt;br /&gt;
    margin-top: 28px;&lt;br /&gt;
    padding: 36px 28px 40px;&lt;br /&gt;
    /* 极淡白底：几乎看不出，只有一点点氛围感 */&lt;br /&gt;
    background: rgba(255, 255, 255, 0.18);&lt;br /&gt;
    border-top: 1px solid rgba(237, 65, 65, 0.08);&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    /* 去掉 box-shadow，不要明显的卡片感 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 显示态：加上淡入动画 */&lt;br /&gt;
.card_date_story.is-visible {&lt;br /&gt;
    display: block;&lt;br /&gt;
    animation: card_date_story-fadein 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes card_date_story-fadein {&lt;br /&gt;
    from { opacity: 0; transform: translateY(8px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 场景标签：轻盈深色，可读但不抢眼 */&lt;br /&gt;
.card_date_story-scene {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 28, 55, 0.5);&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 5px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 各故事内容块：默认隐藏，JS控制显示 */&lt;br /&gt;
.card_date_story-content {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.card_date_story-content.is-active {&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 旁白：斜体，深色系，清晰可读 */&lt;br /&gt;
.card_date_story-narration {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 32, 55, 0.62);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 13px;&lt;br /&gt;
    margin: 24px 40px;&lt;br /&gt;
    line-height: 2.1;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话行 */&lt;br /&gt;
.card_date_story-dialogue {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    margin: 18px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧（&amp;quot;我&amp;quot;）：整行翻转 */&lt;br /&gt;
.card_date_story-dialogue--right {&lt;br /&gt;
    flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 头像区域（左侧角色用） */&lt;br /&gt;
.card_date_story-avatar {&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[file:xxx.png]] 生成的 img */&lt;br /&gt;
.card_date_story-avatar img {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暂无图片时的占位圆圈（左侧角色） */&lt;br /&gt;
.card_date_story-avatar-placeholder {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    background: rgba(237, 65, 65, 0.05);&lt;br /&gt;
    border: 1px solid rgba(237, 65, 65, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧「我」的头像完全隐藏，不占空间 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-avatar {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话内容列 */&lt;br /&gt;
.card_date_story-dialogue-content {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 3px;&lt;br /&gt;
    max-width: 65%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧对话：内容靠右对齐 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-dialogue-content {&lt;br /&gt;
    align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 角色名（仅左侧显示） */&lt;br /&gt;
.card_date_story-charname {&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.7);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话正文：加深加粗，保证可读性 */&lt;br /&gt;
.card_date_story-text {&lt;br /&gt;
    color: rgba(20, 14, 30, 0.82); /* 深色，接近纯黑但不死板 */&lt;br /&gt;
    line-height: 2;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    font-weight: 500;         /* 稍微加一点字重 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 响应式断点 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ≤1399px：左栏取消 sticky，两栏上下排列 */&lt;br /&gt;
@media (max-width: 1399px) {&lt;br /&gt;
    .card_content_left {&lt;br /&gt;
        position: static;&lt;br /&gt;
        transform: none;&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_right {&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤900px：小传 header 从左右改为上下排列 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
    .card_content_story-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-header-spacer {&lt;br /&gt;
        display: none;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-timeline {&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
        margin-top: 16px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤600px：极小屏，边距收窄；邀约改为两列 */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .card_content-inner {&lt;br /&gt;
        padding: 0 20px 80px;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-list {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-item {&lt;br /&gt;
        width: calc(50% - 5px);&lt;br /&gt;
        min-width: unset;&lt;br /&gt;
        max-width: unset;&lt;br /&gt;
        margin-top: 0 !important;&lt;br /&gt;
    }&lt;br /&gt;
    .card_date_story-narration {&lt;br /&gt;
        margin: 20px 12px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≥1400px：右栏有足够宽度，技能卡内部切换为左右布局 */&lt;br /&gt;
@media (min-width: 1400px) {&lt;br /&gt;
    .card_content_skill-card {&lt;br /&gt;
        flex-direction: row;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-left {&lt;br /&gt;
        width: 340px;&lt;br /&gt;
        flex-shrink: 0;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-upgrade {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 礼物 认知 */&lt;br /&gt;
.card_content_cognition-gift {&lt;br /&gt;
		width:48px;&lt;br /&gt;
		height:48px;&lt;br /&gt;
		background:rgba(255,255,255,0.3);&lt;br /&gt;
		border-radius:3px&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=371</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=MediaWiki:Common.css&amp;diff=371"/>
		<updated>2026-03-12T10:19:51Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 这里放置的CSS将应用于所有皮肤 */&lt;br /&gt;
&lt;br /&gt;
/* 全局 */&lt;br /&gt;
&lt;br /&gt;
/* 字体 */&lt;br /&gt;
/* Regular */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-55-Regular.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 400;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bold */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;;&lt;br /&gt;
  src: url(&#039;/resources/assets/fonts/AlibabaPuHuiTi-3-85-Bold.ttf&#039;) format(&#039;truetype&#039;);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-display: swap;&lt;br /&gt;
}&lt;br /&gt;
:root {&lt;br /&gt;
  color-scheme: dark;&lt;br /&gt;
&lt;br /&gt;
  /* 色相：暖粉 */&lt;br /&gt;
  --color-progressive-oklch__h: 15 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 正文字亮度 */&lt;br /&gt;
  --color-base-oklch__l: 92% !important;&lt;br /&gt;
  --color-base-oklch__c: 0.03 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 次级文字 */&lt;br /&gt;
  --color-subtle-oklch__l: 75% !important;&lt;br /&gt;
  --color-subtle-oklch__c: 0.025 !important;&lt;br /&gt;
&lt;br /&gt;
  /* 强调文字 */&lt;br /&gt;
  --color-emphasized-oklch__l: 98% !important;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.04 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 背景相关 */&lt;br /&gt;
html {&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* 禁止整个页面横向滚动 */&lt;br /&gt;
  overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
  background-image:&lt;br /&gt;
    radial-gradient(&lt;br /&gt;
      circle at 50% 30%,&lt;br /&gt;
      rgba(0, 0, 0, 0) 35%,&lt;br /&gt;
      rgba(0, 0, 0, 0.4) 100%&lt;br /&gt;
    ),&lt;br /&gt;
    url(&amp;quot;/images/b/b5/Banner.jpg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-attachment: fixed;&lt;br /&gt;
&lt;br /&gt;
  font-family: &#039;AlibabaPuHuiTi&#039;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
  /* 禁止横向滚动 */&lt;br /&gt;
  overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 遮罩 */&lt;br /&gt;
body::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
  z-index: 0;&lt;br /&gt;
&lt;br /&gt;
  backdrop-filter: blur(12px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(12px);&lt;br /&gt;
&lt;br /&gt;
  /* 用遮罩控制模糊范围 */&lt;br /&gt;
  mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  -webkit-mask-image: radial-gradient(&lt;br /&gt;
    circle at 50% 30%,&lt;br /&gt;
    rgba(0,0,0,0) 40%,&lt;br /&gt;
    rgba(0,0,0,0.6) 75%,&lt;br /&gt;
    rgba(0,0,0,1) 100%&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 去掉主题偏移 */&lt;br /&gt;
.citizen-page-container {&lt;br /&gt;
	padding-inline:unset!important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 修复编辑背景 */&lt;br /&gt;
.editor.ace_editor.ace-tm {&lt;br /&gt;
    background: black;&lt;br /&gt;
    &lt;br /&gt;
     /* 恢复原来的冷色调 */&lt;br /&gt;
  --color-progressive-oklch__h: 262.29;&lt;br /&gt;
  &lt;br /&gt;
  --color-base-oklch__l: 20%;&lt;br /&gt;
  --color-base-oklch__c: 0.09;&lt;br /&gt;
&lt;br /&gt;
  --color-subtle-oklch__l: 35%;&lt;br /&gt;
  --color-subtle-oklch__c: 0.11;&lt;br /&gt;
&lt;br /&gt;
  --color-emphasized-oklch__l: 5%;&lt;br /&gt;
  --color-emphasized-oklch__c: 0.07;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
.mw-body-content .CodeMirror {&lt;br /&gt;
	background-color:var(--color-surface-0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 侧边栏 */&lt;br /&gt;
.citizen-header {&lt;br /&gt;
	background-color:rgba(255,255,255,0.2);&lt;br /&gt;
	backdrop-filter:blur(10px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* footer  */&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
	background-color:unset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关--------------------------------------------------- */&lt;br /&gt;
/** card_ **/&lt;br /&gt;
/* 全屏卡面 */&lt;br /&gt;
.card_fullscreen-img {&lt;br /&gt;
    position: fixed;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    z-index: 0;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.card_fullscreen-img img {&lt;br /&gt;
    width: 105%;&lt;br /&gt;
    height: 105%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
&lt;br /&gt;
    transform: translateY(0px) scale(1);&lt;br /&gt;
    transition: transform 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled img {&lt;br /&gt;
    transform: translateY(-10px) scale(1.015);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗角 */&lt;br /&gt;
.card_fullscreen-img::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            ellipse at center,&lt;br /&gt;
            rgba(0,0,0,0.2) 35%,&lt;br /&gt;
            rgba(0,0,0,0.65) 100%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    opacity: 0; /* 默认没有 */&lt;br /&gt;
    transition: opacity 0.8s cubic-bezier(.22,.61,.36,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_fullscreen-img.scrolled::after{&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 正文背景*/&lt;br /&gt;
&lt;br /&gt;
.card_content-background {&lt;br /&gt;
        position: relative;&lt;br /&gt;
        padding: 120px 0 0;   /* 左右 padding 交由 inner 处理 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background: linear-gradient(to bottom, rgba(255, 255, 255, 0.66) 0%, rgba(255, 255, 255, 0.62) 35%, rgba(255, 255, 255, 0.54) 100%);&lt;br /&gt;
    backdrop-filter: blur(15px) saturate(155%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(22px) saturate(155%);&lt;br /&gt;
    border-radius: 100vw 100vw 0 0 / 2.4em 2.4em 0 0;&lt;br /&gt;
    border-top: thin solid rgb(255 235 240 / 68%);&lt;br /&gt;
    box-shadow: 0 -40px 80px -45px rgba(0, 0, 0, 0.25), 0 -2px 6px rgb(255 255 255 / 13%), 0 -4px 14px rgba(255, 180, 200, 0.18), inset 0 1px 0 rgb(255 255 255 / 0%), inset 0 -30px 60px rgba(0, 0, 0, 0.04);&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::before{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    background:&lt;br /&gt;
        radial-gradient(&lt;br /&gt;
            120% 70% at 50% -18%,&lt;br /&gt;
            rgba(255,255,255,0.95) 0%,&lt;br /&gt;
            rgba(255,230,235,0.65) 18%,&lt;br /&gt;
            rgba(255,200,215,0.35) 30%,&lt;br /&gt;
            rgba(255,200,215,0.15) 40%,&lt;br /&gt;
            rgba(255,200,215,0) 55%&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
    mix-blend-mode: screen;&lt;br /&gt;
    opacity: 0.6;&lt;br /&gt;
}&lt;br /&gt;
.card_content-background::after{&lt;br /&gt;
    content:&amp;quot;&amp;quot;;&lt;br /&gt;
    position:absolute;&lt;br /&gt;
    inset:0;&lt;br /&gt;
    border-radius:inherit;&lt;br /&gt;
    pointer-events:none;&lt;br /&gt;
&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 -1px 0 rgba(255,255,255,0.95),        /* 主亮线 */&lt;br /&gt;
        0 -2px 4px rgba(255,220,230,0.6),      /* 柔粉扩散 */&lt;br /&gt;
        0 -4px 10px rgba(255,180,200,0.25);    /* 外围粉光 */&lt;br /&gt;
&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 居中包裹层 */&lt;br /&gt;
/* 大屏：max-width 限制 + 轻微偏左（margin 右多于左），左右自适应边距 */&lt;br /&gt;
.card_content-inner {&lt;br /&gt;
    max-width: 1900px;&lt;br /&gt;
    margin: 0 auto 0 clamp(0px, 4vw, 160px); /* 超宽时整体偏左 */&lt;br /&gt;
    padding: 0 clamp(40px, 10vw, 240px) 120px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content{&lt;br /&gt;
    color:#1a1a1f;&lt;br /&gt;
    margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 卡面名&amp;amp;信息 */&lt;br /&gt;
.card_content_name-icon img {&lt;br /&gt;
	background:black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 情报 */&lt;br /&gt;
.card_content_info{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center; /* 垂直居中 */&lt;br /&gt;
    width:100%;&lt;br /&gt;
    gap:18px;&lt;br /&gt;
    margin-left:2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_info-item{&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 给除了最后一个以外的 item 加竖线 */&lt;br /&gt;
.card_content_info-item:not(:last-child)::after{&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left:40px;&lt;br /&gt;
    top: 50%;&lt;br /&gt;
    transform: translateY(-50%);&lt;br /&gt;
&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    height: 60%; /* 控制线的高度 */&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to bottom,&lt;br /&gt;
        rgba(0,0,0,0),&lt;br /&gt;
        rgba(0,0,0,0.25),&lt;br /&gt;
        rgba(0,0,0,0)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --------------------------------------------------卡面界面相关（续）--------------------------------------------------- */&lt;br /&gt;
&lt;br /&gt;
/* 全局强调色 */&lt;br /&gt;
.card_accent { color: #ed4141; }&lt;br /&gt;
.card_accent--type { color: #ed4141; margin-left: 4px; }&lt;br /&gt;
&lt;br /&gt;
/* 大框架容器 */&lt;br /&gt;
.card_content-container {&lt;br /&gt;
    width: 100vw;&lt;br /&gt;
    margin-top: -30vh;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    transform: translate(-50%);&lt;br /&gt;
    left: 50%;&lt;br /&gt;
    /* 防止内容撑出横向滚动 */&lt;br /&gt;
    overflow-x: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 正文布局 */&lt;br /&gt;
.card_content--layout {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 60px;&lt;br /&gt;
    flex-wrap: wrap; /* 小屏自动折叠 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 左栏：默认 sticky */&lt;br /&gt;
.card_content_left {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 320px;&lt;br /&gt;
    transform: translateY(-220px);&lt;br /&gt;
    flex: 0 0 380px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 卡名区域 */&lt;br /&gt;
.card_content_name-container { width: 100%; }&lt;br /&gt;
.card_content_name-row { display: flex; margin-left: 2px; }&lt;br /&gt;
.card_content_name-classtext { font-size: large; margin-left: 6px; }&lt;br /&gt;
.card_content_name-icon--ml { margin-left: 8px; }&lt;br /&gt;
.card_content_name-text {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    font-size: xx-large;&lt;br /&gt;
    margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块标题通用 */&lt;br /&gt;
.card_content-item-title {&lt;br /&gt;
    font-size: x-large;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-title--mt { margin-top: 36px; }&lt;br /&gt;
.card_content-item-subtitle {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    margin-left: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 区块分隔线 */&lt;br /&gt;
.card_content-item-hr {&lt;br /&gt;
    width: 50px;&lt;br /&gt;
    height: 2px;&lt;br /&gt;
    background: #ff7676;&lt;br /&gt;
    margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.card_content-item-hr--mb12 { margin-bottom: 12px; }&lt;br /&gt;
&lt;br /&gt;
/* 属性 */&lt;br /&gt;
.card_content_attribute-item {&lt;br /&gt;
    width: 240px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_attribute-icon {&lt;br /&gt;
    width: 12px;&lt;br /&gt;
    height: 12px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.6);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右栏 */&lt;br /&gt;
.card_content_right {&lt;br /&gt;
    flex: 1 1 520px;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能卡片 ---- */&lt;br /&gt;
/* 默认上下排列（描述在上，升级在下），到足够宽时才切换为左右 */&lt;br /&gt;
.card_content_skill-card {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    max-width: 1100px;   /* 超宽屏给更大空间 */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column; /* 默认上下 */&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    background: #ffffff14;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-gap { height: 18px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能卡左侧描述区 */&lt;br /&gt;
.card_content_skill-left {&lt;br /&gt;
    width: 100%;         /* 上下排时占满 */&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能标题行 */&lt;br /&gt;
.card_content_skill-title {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-icon {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    background: rgba(255, 255, 255, 0.7);&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-title-text {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-name {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    color: grey;&lt;br /&gt;
    margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-meta-val { margin-left: 6px; }&lt;br /&gt;
&lt;br /&gt;
/* 技能标签（群攻/单体等） */&lt;br /&gt;
.card_content_skill-tags {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 4px;&lt;br /&gt;
    line-height: 0.9;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_skill-tag {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
    background: #000000a3;&lt;br /&gt;
    color: #ffffff;&lt;br /&gt;
    padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 技能效果描述 */&lt;br /&gt;
.card_content_skill_effect {&lt;br /&gt;
    margin-top: 8px;&lt;br /&gt;
    line-height: 1.3;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 技能升级表格（通用） ---- */&lt;br /&gt;
.card_content_skill-upgrade {&lt;br /&gt;
    width: 100%;        /* 上下排时占满宽度 */&lt;br /&gt;
    min-width: 0;&lt;br /&gt;
    /* 内容超出卡片宽度时才出现横向滚动条 */&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 6px;&lt;br /&gt;
}&lt;br /&gt;
/* 默认 8 列（终结技 Lv.2~9）；每列最小 44px */&lt;br /&gt;
.card_content_skill-upgrade-grid {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    grid-template-columns: auto repeat(8, minmax(44px, 1fr));&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    min-width: max-content; /* 防止列被压缩，超出时由父级滚动条处理 */&lt;br /&gt;
}&lt;br /&gt;
/* 9 列变体（普攻 / 被动 Lv.2~10） */&lt;br /&gt;
.card_content_skill-upgrade-grid--10 {&lt;br /&gt;
    grid-template-columns: auto repeat(9, minmax(44px, 1fr));&lt;br /&gt;
}&lt;br /&gt;
/* 表头等级数字 */&lt;br /&gt;
.card_content_skill-upgrade-lv {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标标签容器 */&lt;br /&gt;
.card_content_skill-upgrade-row-label {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding-right: 18px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标圆圈数字 */&lt;br /&gt;
.card_content_skill-upgrade-badge {&lt;br /&gt;
    width: 18px;&lt;br /&gt;
    height: 18px;&lt;br /&gt;
    background: #ff7676b3;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    font-size: 0.72rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    font-family:serif;&lt;br /&gt;
    padding-left:6px;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标文字 */&lt;br /&gt;
.card_content_skill-upgrade-badge-text {&lt;br /&gt;
    margin-left: 4px;&lt;br /&gt;
    color:#4b2424;&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
/* 行首角标箭头（错位） */&lt;br /&gt;
.card_content_skill-upgrade-arrow {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
/* 数值格 */&lt;br /&gt;
.card_content_skill-upgrade-val {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    padding: 4px 0;&lt;br /&gt;
}&lt;br /&gt;
/* 无变化格 */&lt;br /&gt;
.card_content_skill-upgrade-val--null { color: #aaa; }&lt;br /&gt;
&lt;br /&gt;
/* ---- 觉醒 ---- */&lt;br /&gt;
.card_content_feat-ul {&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-list {&lt;br /&gt;
    padding: 0.8rem 0;&lt;br /&gt;
    margin-bottom: 0.8rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-wrap {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-right: 2rem;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: -12px;&lt;br /&gt;
    left: 2px;&lt;br /&gt;
    font-size: 0.7rem;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-number {&lt;br /&gt;
    width: 28px;&lt;br /&gt;
    height: 28px;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.card_content_feat-stage-cn {&lt;br /&gt;
    font-size: 0.8rem;&lt;br /&gt;
    margin-right: 0.5rem;&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 小传 ---- */&lt;br /&gt;
.card_content_story { margin-top: 80px; }&lt;br /&gt;
&lt;br /&gt;
/* 小传 header：默认横排（标题在左，时间轴在右） */&lt;br /&gt;
.card_content_story-header {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-left {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    flex-shrink: 0; /* 不压缩标题区 */&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-header-spacer { margin-top: 36px; }&lt;br /&gt;
.card_content_story-toggle {&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_content_story-timeline {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    max-width: 820px;&lt;br /&gt;
    padding-left: 44px;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    transition: opacity .25s ease, transform .25s ease, max-height .35s ease;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
    transform: translateY(0);&lt;br /&gt;
    max-height: 5000px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 时间轴 ---- */&lt;br /&gt;
.card_timeline { position: relative; }&lt;br /&gt;
.card_timeline-line {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 16px;&lt;br /&gt;
    top: 6px;&lt;br /&gt;
    bottom: 6px;&lt;br /&gt;
    width: 1px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.06);&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-bottom: 60px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-item--last { margin-bottom: 0; }&lt;br /&gt;
.card_timeline-dot {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: -30px;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    width: 8px;&lt;br /&gt;
    height: 8px;&lt;br /&gt;
    border: 2px solid #ff7676;&lt;br /&gt;
    background: #fff;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-unlock {&lt;br /&gt;
    font-size: 0.78rem;&lt;br /&gt;
    color: #999;&lt;br /&gt;
    margin-bottom: 8px;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-title { margin-bottom: 14px; }&lt;br /&gt;
.card_timeline-numeral {&lt;br /&gt;
    font-family: serif;&lt;br /&gt;
    font-size: 1.15rem;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    color: #ff7676;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-chapter {&lt;br /&gt;
    margin: 0 6px;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-label {&lt;br /&gt;
    font-size: 0.75rem;&lt;br /&gt;
    color: #aaa;&lt;br /&gt;
    margin-left: 6px;&lt;br /&gt;
}&lt;br /&gt;
.card_timeline-body {&lt;br /&gt;
    line-height: 1.95;&lt;br /&gt;
    font-size: 0.95rem;&lt;br /&gt;
    color: #292929;&lt;br /&gt;
    text-align: justify;&lt;br /&gt;
    text-indent: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约模块（card_content_date-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 邀约区块容器 */&lt;br /&gt;
.card_content_date {&lt;br /&gt;
    margin-top: 80px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 票券轨道 */&lt;br /&gt;
.card_content_date-track {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 8px 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 票券列表 ---- */&lt;br /&gt;
/* align-items: flex-start，高低起伏靠每张卡的 margin-top 实现 */&lt;br /&gt;
.card_content_date-list {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-wrap: nowrap;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    list-style: none;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
    padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 单张邀约卡片（基础样式，所有卡片共用） ---- */&lt;br /&gt;
.card_content_date-item {&lt;br /&gt;
    width: calc(20% - 10px);&lt;br /&gt;
    min-width: 100px;&lt;br /&gt;
    max-width: 190px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
&lt;br /&gt;
    background: rgba(255, 255, 255, 0.38);&lt;br /&gt;
    backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    -webkit-backdrop-filter: blur(10px) saturate(130%);&lt;br /&gt;
    border: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(0, 0, 0, 0.10),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    color: #1a1a1f;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 清空伪元素默认，各方案自行定义 */&lt;br /&gt;
.card_content_date-item::before,&lt;br /&gt;
.card_content_date-item::after {&lt;br /&gt;
    content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 选中态高亮 */&lt;br /&gt;
.card_content_date-item.is-active {&lt;br /&gt;
    border-color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    box-shadow:&lt;br /&gt;
        0 4px 18px rgba(237, 65, 65, 0.15),&lt;br /&gt;
        0 1px 3px rgba(255, 255, 255, 0.4) inset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 卡片内容区（基础） ---- */&lt;br /&gt;
.card_content_date-body {&lt;br /&gt;
    padding: 10px 10px 12px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
    min-height: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---- 图片区域 ---- */&lt;br /&gt;
.card_content_date-img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    aspect-ratio: 3 / 2;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    display: block;&lt;br /&gt;
    position: relative;&lt;br /&gt;
&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        135deg,&lt;br /&gt;
        rgba(200, 185, 210, 0.55) 0%,&lt;br /&gt;
        rgba(160, 140, 180, 0.35) 50%,&lt;br /&gt;
        rgba(120, 100, 140, 0.25) 100%&lt;br /&gt;
    );&lt;br /&gt;
    border-bottom: 1px solid rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 图片本体：填满容器，居中裁切 */&lt;br /&gt;
.card_content_date-img img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    object-position: center top;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* MediaWiki 生成的图片包裹层 */&lt;br /&gt;
.card_content_date-img .thumb,&lt;br /&gt;
.card_content_date-img figure {&lt;br /&gt;
    margin: 0 !important;&lt;br /&gt;
    padding: 0 !important;&lt;br /&gt;
    border: none !important;&lt;br /&gt;
    background: none !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbinner,&lt;br /&gt;
.card_content_date-img figcaption {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.card_content_date-img .thumbimage {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    height: 100% !important;&lt;br /&gt;
    object-fit: cover !important;&lt;br /&gt;
    object-position: center top !important;&lt;br /&gt;
    display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 序号基础 */&lt;br /&gt;
.card_content_date-num {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.6rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.18);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    user-select: none;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Story/END 标签基础 */&lt;br /&gt;
.card_content_date-label {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 0.58rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    margin-top: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 A：左上角极小红色方块 + 序号 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-a {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a::before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    left: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-body {&lt;br /&gt;
    padding-left: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.22);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-a .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 B：像素风进度条（有图卡片使用） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-b {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 2px;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 5px;&lt;br /&gt;
    background: rgba(0, 0, 0, 0.10);&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-pixels .px.on {&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-pixels .px.on {&lt;br /&gt;
    background: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.15);&lt;br /&gt;
    font-size: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-b .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--end .card_content_date-label {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.55);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    letter-spacing: 2.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 C：两端小色块夹住文字 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-c {&lt;br /&gt;
    border-top: 2px solid rgba(237, 65, 65, 0.25);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-bracket {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 5px;&lt;br /&gt;
    padding: 10px 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: 5px;&lt;br /&gt;
    height: 14px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-block--r {&lt;br /&gt;
    width: 3px;&lt;br /&gt;
    height: 10px;&lt;br /&gt;
    opacity: 0.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-num {&lt;br /&gt;
    font-family: &#039;Georgia&#039;, serif;&lt;br /&gt;
    font-size: 1.3rem;&lt;br /&gt;
    font-weight: 700;&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.5);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    letter-spacing: -0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.bracket-label {&lt;br /&gt;
    font-size: 0.55rem;&lt;br /&gt;
    color: rgba(80, 60, 100, 0.4);&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 方案 D：右上角单个小红方块点缀 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
.card_content_date-item--style-d {&lt;br /&gt;
    border-top: 1px solid rgba(255, 255, 255, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 8px;&lt;br /&gt;
    right: 8px;&lt;br /&gt;
    width: 6px;&lt;br /&gt;
    height: 6px;&lt;br /&gt;
    background: #ed4141;&lt;br /&gt;
    border-radius: 1px;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-num {&lt;br /&gt;
    color: rgba(237, 65, 65, 0.20);&lt;br /&gt;
    font-size: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.card_content_date-item--style-d .card_content_date-label {&lt;br /&gt;
    color: rgba(80, 60, 100, 0.38);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 邀约故事区（card_date_story-*） ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 故事面板容器：默认隐藏，点击卡片后出现 */&lt;br /&gt;
/* 极度透明，与正文白色大背景几乎无缝融合，仅起氛围区分作用 */&lt;br /&gt;
.card_date_story {&lt;br /&gt;
    display: none;&lt;br /&gt;
    margin-top: 28px;&lt;br /&gt;
    padding: 36px 28px 40px;&lt;br /&gt;
    /* 极淡白底：几乎看不出，只有一点点氛围感 */&lt;br /&gt;
    background: rgba(255, 255, 255, 0.18);&lt;br /&gt;
    border-top: 1px solid rgba(237, 65, 65, 0.08);&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
    /* 去掉 box-shadow，不要明显的卡片感 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 显示态：加上淡入动画 */&lt;br /&gt;
.card_date_story.is-visible {&lt;br /&gt;
    display: block;&lt;br /&gt;
    animation: card_date_story-fadein 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes card_date_story-fadein {&lt;br /&gt;
    from { opacity: 0; transform: translateY(8px); }&lt;br /&gt;
    to   { opacity: 1; transform: translateY(0); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 场景标签：轻盈深色，可读但不抢眼 */&lt;br /&gt;
.card_date_story-scene {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 28, 55, 0.5);&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 5px;&lt;br /&gt;
    padding-bottom: 16px;&lt;br /&gt;
    margin-bottom: 28px;&lt;br /&gt;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 各故事内容块：默认隐藏，JS控制显示 */&lt;br /&gt;
.card_date_story-content {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
.card_date_story-content.is-active {&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 旁白：斜体，深色系，清晰可读 */&lt;br /&gt;
.card_date_story-narration {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    color: rgba(40, 32, 55, 0.62);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
    font-size: 13px;&lt;br /&gt;
    margin: 24px 40px;&lt;br /&gt;
    line-height: 2.1;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话行 */&lt;br /&gt;
.card_date_story-dialogue {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
    gap: 12px;&lt;br /&gt;
    margin: 18px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧（&amp;quot;我&amp;quot;）：整行翻转 */&lt;br /&gt;
.card_date_story-dialogue--right {&lt;br /&gt;
    flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 头像区域（左侧角色用） */&lt;br /&gt;
.card_date_story-avatar {&lt;br /&gt;
    flex-shrink: 0;&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[file:xxx.png]] 生成的 img */&lt;br /&gt;
.card_date_story-avatar img {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暂无图片时的占位圆圈（左侧角色） */&lt;br /&gt;
.card_date_story-avatar-placeholder {&lt;br /&gt;
    width: 44px;&lt;br /&gt;
    height: 44px;&lt;br /&gt;
    border-radius: 50%;&lt;br /&gt;
    background: rgba(237, 65, 65, 0.05);&lt;br /&gt;
    border: 1px solid rgba(237, 65, 65, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧「我」的头像完全隐藏，不占空间 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-avatar {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话内容列 */&lt;br /&gt;
.card_date_story-dialogue-content {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 3px;&lt;br /&gt;
    max-width: 65%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 右侧对话：内容靠右对齐 */&lt;br /&gt;
.card_date_story-dialogue--right .card_date_story-dialogue-content {&lt;br /&gt;
    align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 角色名（仅左侧显示） */&lt;br /&gt;
.card_date_story-charname {&lt;br /&gt;
    font-size: 11px;&lt;br /&gt;
    letter-spacing: 2px;&lt;br /&gt;
    color: rgba(237, 65, 65, 0.7);&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 对话正文：加深加粗，保证可读性 */&lt;br /&gt;
.card_date_story-text {&lt;br /&gt;
    color: rgba(20, 14, 30, 0.82); /* 深色，接近纯黑但不死板 */&lt;br /&gt;
    line-height: 2;&lt;br /&gt;
    font-family: &#039;Georgia&#039;, &#039;Noto Serif SC&#039;, serif;&lt;br /&gt;
    font-weight: 500;         /* 稍微加一点字重 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
/* ---- 响应式断点 ---- */&lt;br /&gt;
/* ================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ≤1399px：左栏取消 sticky，两栏上下排列 */&lt;br /&gt;
@media (max-width: 1399px) {&lt;br /&gt;
    .card_content_left {&lt;br /&gt;
        position: static;&lt;br /&gt;
        transform: none;&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_right {&lt;br /&gt;
        flex: 1 1 100%;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤900px：小传 header 从左右改为上下排列 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
    .card_content_story-header {&lt;br /&gt;
        flex-direction: column;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-header-spacer {&lt;br /&gt;
        display: none;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_story-timeline {&lt;br /&gt;
        max-width: 100%;&lt;br /&gt;
        margin-top: 16px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≤600px：极小屏，边距收窄；邀约改为两列 */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
    .card_content-inner {&lt;br /&gt;
        padding: 0 20px 80px;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-list {&lt;br /&gt;
        flex-wrap: wrap;&lt;br /&gt;
        justify-content: flex-start;&lt;br /&gt;
        gap: 10px;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_date-item {&lt;br /&gt;
        width: calc(50% - 5px);&lt;br /&gt;
        min-width: unset;&lt;br /&gt;
        max-width: unset;&lt;br /&gt;
        margin-top: 0 !important;&lt;br /&gt;
    }&lt;br /&gt;
    .card_date_story-narration {&lt;br /&gt;
        margin: 20px 12px;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ≥1400px：右栏有足够宽度，技能卡内部切换为左右布局 */&lt;br /&gt;
@media (min-width: 1400px) {&lt;br /&gt;
    .card_content_skill-card {&lt;br /&gt;
        flex-direction: row;&lt;br /&gt;
        align-items: flex-start;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-left {&lt;br /&gt;
        width: 340px;&lt;br /&gt;
        flex-shrink: 0;&lt;br /&gt;
    }&lt;br /&gt;
    .card_content_skill-upgrade {&lt;br /&gt;
        flex: 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 礼物 认知 */&lt;br /&gt;
.card_content_cognition-gift {&lt;br /&gt;
		width:48px;&lt;br /&gt;
		height:48px;&lt;br /&gt;
		background:rgba(255,255,255,0.3);&lt;br /&gt;
		border-radius:3px&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/3.0&amp;diff=370</id>
		<title>Sandbox/3.0</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/3.0&amp;diff=370"/>
		<updated>2026-03-12T10:17:57Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:CardData|render|复仇童谣}}&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=369</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=369"/>
		<updated>2026-03-12T10:17:50Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- CSS 定义：&lt;br /&gt;
--   默认 grid：auto repeat(8,  ...)  →  1标签 + 8数据  = 9格，表头 2~9&lt;br /&gt;
--   --10  grid：auto repeat(9,  ...)  →  1标签 + 9数据  = 10格，表头 2~10&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    -- 取数据中最大列数，决定用哪种 grid&lt;br /&gt;
    local maxCols = 0&lt;br /&gt;
    for _, row in ipairs(rows) do&lt;br /&gt;
        if type(row.levels) == &amp;quot;table&amp;quot; and #row.levels &amp;gt; maxCols then&lt;br /&gt;
            maxCols = #row.levels&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- DATA_COLS = 实际数据列数（不含标签列）&lt;br /&gt;
    -- 超过8列用 --10（9数据列），否则用默认（8数据列）&lt;br /&gt;
    local DATA_COLS, gridClass&lt;br /&gt;
    if maxCols &amp;gt; 8 then&lt;br /&gt;
        DATA_COLS = 9&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid card_content_skill-upgrade-grid--10&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        DATA_COLS = 8&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
&lt;br /&gt;
    -- 表头：1格空白 + 2~(DATA_COLS+1) 的等级数字&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)  -- 空白占位&lt;br /&gt;
    for i = 2, DATA_COLS + 1 do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 数据行&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local levels = (type(row.levels) == &amp;quot;table&amp;quot;) and row.levels or {}&lt;br /&gt;
        for col = 1, DATA_COLS do&lt;br /&gt;
            local v = levels[col]&lt;br /&gt;
            local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
            if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
                cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
            :wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if idx == #stories then&lt;br /&gt;
            item:addClass(&amp;quot;card_timeline-item--last&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-numeral&amp;quot;)&lt;br /&gt;
            :wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-chapter&amp;quot;)&lt;br /&gt;
            :wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;card_timeline-label&amp;quot;)&lt;br /&gt;
            :wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            -- 统一换行格式&lt;br /&gt;
            text = text:gsub(&amp;quot;\r\n&amp;quot;, &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            -- 按段落拆分&lt;br /&gt;
            local paragraphs = mw.text.split(text, &amp;quot;\n+&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            for _, para in ipairs(paragraphs) do&lt;br /&gt;
                para = mw.text.trim(para)&lt;br /&gt;
&lt;br /&gt;
                if para ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    bodyDiv:tag(&amp;quot;p&amp;quot;):wikitext(para)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=368</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=368"/>
		<updated>2026-03-12T04:58:46Z</updated>

		<summary type="html">&lt;p&gt;Rin：​修复升级表：--10 class 共10格，表头 2~10（9格）+标签列，数据补齐9格 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- CSS 定义：&lt;br /&gt;
--   默认 grid：auto repeat(8,  ...)  →  1标签 + 8数据  = 9格，表头 2~9&lt;br /&gt;
--   --10  grid：auto repeat(9,  ...)  →  1标签 + 9数据  = 10格，表头 2~10&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    -- 取数据中最大列数，决定用哪种 grid&lt;br /&gt;
    local maxCols = 0&lt;br /&gt;
    for _, row in ipairs(rows) do&lt;br /&gt;
        if type(row.levels) == &amp;quot;table&amp;quot; and #row.levels &amp;gt; maxCols then&lt;br /&gt;
            maxCols = #row.levels&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- DATA_COLS = 实际数据列数（不含标签列）&lt;br /&gt;
    -- 超过8列用 --10（9数据列），否则用默认（8数据列）&lt;br /&gt;
    local DATA_COLS, gridClass&lt;br /&gt;
    if maxCols &amp;gt; 8 then&lt;br /&gt;
        DATA_COLS = 9&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid card_content_skill-upgrade-grid--10&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        DATA_COLS = 8&lt;br /&gt;
        gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
&lt;br /&gt;
    -- 表头：1格空白 + 2~(DATA_COLS+1) 的等级数字&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)  -- 空白占位&lt;br /&gt;
    for i = 2, DATA_COLS + 1 do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 数据行&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local levels = (type(row.levels) == &amp;quot;table&amp;quot;) and row.levels or {}&lt;br /&gt;
        for col = 1, DATA_COLS do&lt;br /&gt;
            local v = levels[col]&lt;br /&gt;
            local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
            if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
                cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            for i, line in ipairs(lines) do&lt;br /&gt;
                if line ~= &amp;quot;&amp;quot; then bodyDiv:wikitext(line) end&lt;br /&gt;
                if i &amp;lt; #lines then bodyDiv:tag(&amp;quot;br&amp;quot;) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=367</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=367"/>
		<updated>2026-03-12T04:53:31Z</updated>

		<summary type="html">&lt;p&gt;Rin：​清理调试输出；修复升级表：表头从1开始到10、不足列补— (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    -- 固定列数为 10（含第1级），表头从 1 到 10&lt;br /&gt;
    local TOTAL_COLS = 10&lt;br /&gt;
&lt;br /&gt;
    local gridClass = &amp;quot;card_content_skill-upgrade-grid card_content_skill-upgrade-grid--10&amp;quot;&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
&lt;br /&gt;
    -- 表头第一格空白，然后 1~10&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 1, TOTAL_COLS do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 数据行&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local levels = (type(row.levels) == &amp;quot;table&amp;quot;) and row.levels or {}&lt;br /&gt;
        for col = 1, TOTAL_COLS do&lt;br /&gt;
            local v = levels[col]&lt;br /&gt;
            local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
            if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
                cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            for i, line in ipairs(lines) do&lt;br /&gt;
                if line ~= &amp;quot;&amp;quot; then bodyDiv:wikitext(line) end&lt;br /&gt;
                if i &amp;lt; #lines then bodyDiv:tag(&amp;quot;br&amp;quot;) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=364</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=364"/>
		<updated>2026-03-12T04:40:43Z</updated>

		<summary type="html">&lt;p&gt;Rin：​调试：在 debugOut 里同时输出 apiUrl，确认实际请求的 URL (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
    local colCount = 0&lt;br /&gt;
    if rows[1] and rows[1].levels then colCount = #rows[1].levels end&lt;br /&gt;
    local gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    if colCount &amp;gt;= 10 then gridClass = gridClass .. &amp;quot; card_content_skill-upgrade-grid--10&amp;quot; end&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, colCount do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
        if row.levels and type(row.levels) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(row.levels) do&lt;br /&gt;
                local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
                if v == nil or v == &amp;quot;&amp;quot; or v == &amp;quot;—&amp;quot; then&lt;br /&gt;
                    cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            for i, line in ipairs(lines) do&lt;br /&gt;
                if line ~= &amp;quot;&amp;quot; then bodyDiv:wikitext(line) end&lt;br /&gt;
                if i &amp;lt; #lines then bodyDiv:tag(&amp;quot;br&amp;quot;) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
        .. &amp;quot;&amp;amp;_v=7&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 调试：输出 apiUrl 和 rawResponse&lt;br /&gt;
    local debugOut = &#039;&amp;lt;pre style=&amp;quot;background:#111;color:#0f0;font-size:11px;padding:12px;white-space:pre-wrap;word-break:break-all;margin-top:32px&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. &#039;[API URL]\n&#039; .. mw.text.nowiki(apiUrl) .. &#039;\n\n&#039;&lt;br /&gt;
        .. &#039;[rawResponse length=&#039; .. tostring(#rawResponse) .. &#039;]\n&#039;&lt;br /&gt;
        .. mw.text.nowiki(rawResponse)&lt;br /&gt;
        .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return debugOut .. &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root) .. debugOut&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=363</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=363"/>
		<updated>2026-03-12T04:36:59Z</updated>

		<summary type="html">&lt;p&gt;Rin：​修复：fields 不用 uri.encode，改用手动拼接避免 * 被编码为 %2A；stories.text 明确指定 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
    local colCount = 0&lt;br /&gt;
    if rows[1] and rows[1].levels then colCount = #rows[1].levels end&lt;br /&gt;
    local gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    if colCount &amp;gt;= 10 then gridClass = gridClass .. &amp;quot; card_content_skill-upgrade-grid--10&amp;quot; end&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, colCount do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
        if row.levels and type(row.levels) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(row.levels) do&lt;br /&gt;
                local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
                if v == nil or v == &amp;quot;&amp;quot; or v == &amp;quot;—&amp;quot; then&lt;br /&gt;
                    cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            for i, line in ipairs(lines) do&lt;br /&gt;
                if line ~= &amp;quot;&amp;quot; then bodyDiv:wikitext(line) end&lt;br /&gt;
                if i &amp;lt; #lines then bodyDiv:tag(&amp;quot;br&amp;quot;) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- fields 不整体 encode，避免 * 被编码成 %2A 导致 Directus 不识别&lt;br /&gt;
    -- 只对卡名单独 encode&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=stylename,rarity,character.name,profession.name,desire.name&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.name,skill_normal_attack.type,skill_normal_attack.weapon&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_normal_attack.description,skill_normal_attack.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.name,skill_passive.type,skill_passive.trigger_type&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.trigger_value,skill_passive.tags,skill_passive.description&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_passive.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.name,skill_ultimate.type,skill_ultimate.desire_cost&amp;quot;&lt;br /&gt;
        .. &amp;quot;,skill_ultimate.tags,skill_ultimate.description,skill_ultimate.levels.*&amp;quot;&lt;br /&gt;
        .. &amp;quot;,feats.stages&amp;quot;&lt;br /&gt;
        .. &amp;quot;,stories.text&amp;quot;&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
        .. &amp;quot;&amp;amp;_v=7&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 调试：输出 rawResponse 原文到页面底部&lt;br /&gt;
    local debugOut = &#039;&amp;lt;pre style=&amp;quot;background:#111;color:#0f0;font-size:11px;padding:12px;white-space:pre-wrap;word-break:break-all;margin-top:32px&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. &#039;[rawResponse length=&#039; .. tostring(#rawResponse) .. &#039;]\n&#039;&lt;br /&gt;
        .. mw.text.nowiki(rawResponse)&lt;br /&gt;
        .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return debugOut .. &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root) .. debugOut&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=Sandbox/3.0&amp;diff=362</id>
		<title>Sandbox/3.0</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=Sandbox/3.0&amp;diff=362"/>
		<updated>2026-03-12T04:34:52Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
what&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=361</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=361"/>
		<updated>2026-03-12T04:27:57Z</updated>

		<summary type="html">&lt;p&gt;Rin：​stories.story_id 改为 stories.*；_v=6 绕缓存 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
    local colCount = 0&lt;br /&gt;
    if rows[1] and rows[1].levels then colCount = #rows[1].levels end&lt;br /&gt;
    local gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    if colCount &amp;gt;= 10 then gridClass = gridClass .. &amp;quot; card_content_skill-upgrade-grid--10&amp;quot; end&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, colCount do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
        if row.levels and type(row.levels) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(row.levels) do&lt;br /&gt;
                local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
                if v == nil or v == &amp;quot;&amp;quot; or v == &amp;quot;—&amp;quot; then&lt;br /&gt;
                    cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            for i, line in ipairs(lines) do&lt;br /&gt;
                if line ~= &amp;quot;&amp;quot; then bodyDiv:wikitext(line) end&lt;br /&gt;
                if i &amp;lt; #lines then bodyDiv:tag(&amp;quot;br&amp;quot;) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local fields = table.concat({&lt;br /&gt;
        &amp;quot;stylename&amp;quot;, &amp;quot;rarity&amp;quot;,&lt;br /&gt;
        &amp;quot;character.name&amp;quot;, &amp;quot;profession.name&amp;quot;, &amp;quot;desire.name&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.name&amp;quot;, &amp;quot;skill_normal_attack.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.weapon&amp;quot;, &amp;quot;skill_normal_attack.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.name&amp;quot;, &amp;quot;skill_passive.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.trigger_type&amp;quot;, &amp;quot;skill_passive.trigger_value&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.tags&amp;quot;, &amp;quot;skill_passive.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.name&amp;quot;, &amp;quot;skill_ultimate.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.desire_cost&amp;quot;, &amp;quot;skill_ultimate.tags&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.description&amp;quot;, &amp;quot;skill_ultimate.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;feats.stages&amp;quot;,&lt;br /&gt;
        &amp;quot;stories.*&amp;quot;&lt;br /&gt;
    }, &amp;quot;,&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=&amp;quot; .. mw.uri.encode(fields, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
        .. &amp;quot;&amp;amp;_v=6&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 调试：输出 rawResponse 原文到页面底部&lt;br /&gt;
    local debugOut = &#039;&amp;lt;pre style=&amp;quot;background:#111;color:#0f0;font-size:11px;padding:12px;white-space:pre-wrap;word-break:break-all;margin-top:32px&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. &#039;[rawResponse length=&#039; .. tostring(#rawResponse) .. &#039;]\n&#039;&lt;br /&gt;
        .. mw.text.nowiki(rawResponse)&lt;br /&gt;
        .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return debugOut .. &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root) .. debugOut&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=360</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=360"/>
		<updated>2026-03-12T04:25:54Z</updated>

		<summary type="html">&lt;p&gt;Rin：​添加调试：页面底部输出 rawResponse 原文 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
    local colCount = 0&lt;br /&gt;
    if rows[1] and rows[1].levels then colCount = #rows[1].levels end&lt;br /&gt;
    local gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    if colCount &amp;gt;= 10 then gridClass = gridClass .. &amp;quot; card_content_skill-upgrade-grid--10&amp;quot; end&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, colCount do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
        if row.levels and type(row.levels) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(row.levels) do&lt;br /&gt;
                local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
                if v == nil or v == &amp;quot;&amp;quot; or v == &amp;quot;—&amp;quot; then&lt;br /&gt;
                    cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            for i, line in ipairs(lines) do&lt;br /&gt;
                if line ~= &amp;quot;&amp;quot; then bodyDiv:wikitext(line) end&lt;br /&gt;
                if i &amp;lt; #lines then bodyDiv:tag(&amp;quot;br&amp;quot;) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local fields = table.concat({&lt;br /&gt;
        &amp;quot;stylename&amp;quot;, &amp;quot;rarity&amp;quot;,&lt;br /&gt;
        &amp;quot;character.name&amp;quot;, &amp;quot;profession.name&amp;quot;, &amp;quot;desire.name&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.name&amp;quot;, &amp;quot;skill_normal_attack.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.weapon&amp;quot;, &amp;quot;skill_normal_attack.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.name&amp;quot;, &amp;quot;skill_passive.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.trigger_type&amp;quot;, &amp;quot;skill_passive.trigger_value&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.tags&amp;quot;, &amp;quot;skill_passive.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.name&amp;quot;, &amp;quot;skill_ultimate.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.desire_cost&amp;quot;, &amp;quot;skill_ultimate.tags&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.description&amp;quot;, &amp;quot;skill_ultimate.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;feats.stages&amp;quot;,&lt;br /&gt;
        &amp;quot;stories.story_id&amp;quot;,&lt;br /&gt;
        &amp;quot;stories.text&amp;quot;&lt;br /&gt;
    }, &amp;quot;,&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=&amp;quot; .. mw.uri.encode(fields, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
        .. &amp;quot;&amp;amp;_v=5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- ── 调试：输出 rawResponse 原文到页面底部 ──&lt;br /&gt;
    local debugOut = &#039;&amp;lt;pre style=&amp;quot;background:#111;color:#0f0;font-size:11px;padding:12px;white-space:pre-wrap;word-break:break-all;margin-top:32px&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. &#039;[rawResponse length=&#039; .. tostring(#rawResponse) .. &#039;]\n&#039;&lt;br /&gt;
        .. mw.text.nowiki(rawResponse)&lt;br /&gt;
        .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return debugOut .. &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root) .. debugOut&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=359</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=359"/>
		<updated>2026-03-12T04:23:45Z</updated>

		<summary type="html">&lt;p&gt;Rin：​适配新 stories 结构：story_id+text 平铺数组；_v=5 绕缓存 (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
    local colCount = 0&lt;br /&gt;
    if rows[1] and rows[1].levels then colCount = #rows[1].levels end&lt;br /&gt;
    local gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    if colCount &amp;gt;= 10 then gridClass = gridClass .. &amp;quot; card_content_skill-upgrade-grid--10&amp;quot; end&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, colCount do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
        if row.levels and type(row.levels) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(row.levels) do&lt;br /&gt;
                local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
                if v == nil or v == &amp;quot;&amp;quot; or v == &amp;quot;—&amp;quot; then&lt;br /&gt;
                    cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ──────────────────────────────────────────────&lt;br /&gt;
-- 小传时间线&lt;br /&gt;
-- stories = [ { story_id, text }, ... ]，按 story_id 顺序排列&lt;br /&gt;
-- ──────────────────────────────────────────────&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            for i, line in ipairs(lines) do&lt;br /&gt;
                if line ~= &amp;quot;&amp;quot; then bodyDiv:wikitext(line) end&lt;br /&gt;
                if i &amp;lt; #lines then bodyDiv:tag(&amp;quot;br&amp;quot;) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local fields = table.concat({&lt;br /&gt;
        &amp;quot;stylename&amp;quot;, &amp;quot;rarity&amp;quot;,&lt;br /&gt;
        &amp;quot;character.name&amp;quot;, &amp;quot;profession.name&amp;quot;, &amp;quot;desire.name&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.name&amp;quot;, &amp;quot;skill_normal_attack.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.weapon&amp;quot;, &amp;quot;skill_normal_attack.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.name&amp;quot;, &amp;quot;skill_passive.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.trigger_type&amp;quot;, &amp;quot;skill_passive.trigger_value&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.tags&amp;quot;, &amp;quot;skill_passive.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.name&amp;quot;, &amp;quot;skill_ultimate.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.desire_cost&amp;quot;, &amp;quot;skill_ultimate.tags&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.description&amp;quot;, &amp;quot;skill_ultimate.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;feats.stages&amp;quot;,&lt;br /&gt;
        &amp;quot;stories.story_id&amp;quot;,&lt;br /&gt;
        &amp;quot;stories.text&amp;quot;&lt;br /&gt;
    }, &amp;quot;,&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=&amp;quot; .. mw.uri.encode(fields, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
        .. &amp;quot;&amp;amp;_v=5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=358</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=358"/>
		<updated>2026-03-12T04:20:03Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
-- 通过 ExternalData 扩展从 Directus API 拉取数据，在服务端渲染完整 HTML&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- ══════════════════════════════════════════════&lt;br /&gt;
-- 工具函数&lt;br /&gt;
-- ══════════════════════════════════════════════&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    local colCount = 0&lt;br /&gt;
    if rows[1] and rows[1].levels then colCount = #rows[1].levels end&lt;br /&gt;
&lt;br /&gt;
    local gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    if colCount &amp;gt;= 10 then gridClass = gridClass .. &amp;quot; card_content_skill-upgrade-grid--10&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, colCount do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
        if row.levels and type(row.levels) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(row.levels) do&lt;br /&gt;
                local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
                if v == nil or v == &amp;quot;&amp;quot; or v == &amp;quot;—&amp;quot; then&lt;br /&gt;
                    cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ──────────────────────────────────────────────&lt;br /&gt;
-- 辅助：小传时间线&lt;br /&gt;
-- card.stories = [ { sort, story: [ { id, text }, ... ] } ]&lt;br /&gt;
-- cardTitle = card.stylename，作为故事标题展示&lt;br /&gt;
-- ──────────────────────────────────────────────&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not stories or type(stories) ~= &amp;quot;table&amp;quot; or #stories == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(stories) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #stories then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;):wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            for i, line in ipairs(lines) do&lt;br /&gt;
                if line ~= &amp;quot;&amp;quot; then bodyDiv:wikitext(line) end&lt;br /&gt;
                if i &amp;lt; #lines then bodyDiv:tag(&amp;quot;br&amp;quot;) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ══════════════════════════════════════════════&lt;br /&gt;
-- 主渲染函数&lt;br /&gt;
-- ══════════════════════════════════════════════&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- ── 1. 构造 API URL（与其他关联字段逻辑完全一致，不加额外过滤）──&lt;br /&gt;
    local fields = table.concat({&lt;br /&gt;
        &amp;quot;stylename&amp;quot;, &amp;quot;rarity&amp;quot;,&lt;br /&gt;
        &amp;quot;character.name&amp;quot;, &amp;quot;profession.name&amp;quot;, &amp;quot;desire.name&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.name&amp;quot;, &amp;quot;skill_normal_attack.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.weapon&amp;quot;, &amp;quot;skill_normal_attack.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.name&amp;quot;, &amp;quot;skill_passive.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.trigger_type&amp;quot;, &amp;quot;skill_passive.trigger_value&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.tags&amp;quot;, &amp;quot;skill_passive.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.name&amp;quot;, &amp;quot;skill_ultimate.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.desire_cost&amp;quot;, &amp;quot;skill_ultimate.tags&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.description&amp;quot;, &amp;quot;skill_ultimate.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;feats.stages&amp;quot;,&lt;br /&gt;
        &amp;quot;stories.sort&amp;quot;,&lt;br /&gt;
        &amp;quot;stories.text&amp;quot;&lt;br /&gt;
    }, &amp;quot;,&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=&amp;quot; .. mw.uri.encode(fields, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    -- ── 2. 拉取原始 JSON ──&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- ── 3. 解析 ──&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    -- ── 4. 组装 HTML ──&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 左栏&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 右栏&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    -- 小传&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    -- 邀约（待补充）&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=357</id>
		<title>模块:CardData</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:CardData&amp;diff=357"/>
		<updated>2026-03-11T14:54:21Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:CardData&lt;br /&gt;
-- 用法：{{#invoke:CardData|render|复仇童谣}}&lt;br /&gt;
-- 通过 ExternalData 扩展从 Directus API 拉取数据，在服务端渲染完整 HTML&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- ══════════════════════════════════════════════&lt;br /&gt;
-- 工具函数&lt;br /&gt;
-- ══════════════════════════════════════════════&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then return fallback or &amp;quot;—&amp;quot; end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rarityStars(n)&lt;br /&gt;
    n = tonumber(n) or 0&lt;br /&gt;
    return string.rep(&amp;quot;★&amp;quot;, n)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseJson(str)&lt;br /&gt;
    if not str or str == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local ok, result = pcall(mw.text.jsonDecode, str)&lt;br /&gt;
    if ok then return result else return nil end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTitle(titleText, subtitleText, extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_content-item-title--mt&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    div:wikitext(titleText)&lt;br /&gt;
    div:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content-item-subtitle&amp;quot;):wikitext(subtitleText)&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHr(extraClass)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-item-hr&amp;quot;)&lt;br /&gt;
    if extraClass then div:addClass(extraClass) end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTriggerLabel(triggerType, triggerValue)&lt;br /&gt;
    local span = mw.html.create(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
    if triggerType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        span:wikitext(&amp;quot;每进行&amp;quot;)&lt;br /&gt;
        span:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(triggerValue or &amp;quot;?&amp;quot;))&lt;br /&gt;
        span:wikitext(&amp;quot;次普攻&amp;quot;)&lt;br /&gt;
    else&lt;br /&gt;
        span:wikitext(val(triggerType))&lt;br /&gt;
    end&lt;br /&gt;
    return span&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTagsRow(tagsJson)&lt;br /&gt;
    local div = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tags&amp;quot;)&lt;br /&gt;
    local tags = parseJson(tagsJson)&lt;br /&gt;
    if tags and type(tags) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for _, tag in ipairs(tags) do&lt;br /&gt;
            div:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-tag&amp;quot;):wikitext(tag)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUpgradeTable(levelsJson)&lt;br /&gt;
    local wrap = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade&amp;quot;)&lt;br /&gt;
    local rows = parseJson(levelsJson)&lt;br /&gt;
    if not rows or type(rows) ~= &amp;quot;table&amp;quot; or #rows == 0 then return wrap end&lt;br /&gt;
&lt;br /&gt;
    local colCount = 0&lt;br /&gt;
    if rows[1] and rows[1].levels then colCount = #rows[1].levels end&lt;br /&gt;
&lt;br /&gt;
    local gridClass = &amp;quot;card_content_skill-upgrade-grid&amp;quot;&lt;br /&gt;
    if colCount &amp;gt;= 10 then gridClass = gridClass .. &amp;quot; card_content_skill-upgrade-grid--10&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
    local grid = wrap:tag(&amp;quot;div&amp;quot;):addClass(gridClass)&lt;br /&gt;
    grid:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    for i = 2, colCount do&lt;br /&gt;
        grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-lv&amp;quot;):wikitext(tostring(i))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for idx, row in ipairs(rows) do&lt;br /&gt;
        local labelCell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-row-label&amp;quot;)&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge&amp;quot;):wikitext(tostring(idx))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-badge-text&amp;quot;):wikitext(val(row.name, &amp;quot;&amp;quot;))&lt;br /&gt;
        labelCell:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-arrow&amp;quot;):wikitext(&amp;quot;→&amp;quot;)&lt;br /&gt;
        if row.levels and type(row.levels) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(row.levels) do&lt;br /&gt;
                local cell = grid:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-upgrade-val&amp;quot;)&lt;br /&gt;
                if v == nil or v == &amp;quot;&amp;quot; or v == &amp;quot;—&amp;quot; then&lt;br /&gt;
                    cell:addClass(&amp;quot;card_content_skill-upgrade-val--null&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    cell:addClass(&amp;quot;card_accent&amp;quot;):wikitext(tostring(v))&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return wrap&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSkillCard(skillData, skillType)&lt;br /&gt;
    local card = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-card&amp;quot;)&lt;br /&gt;
    local left = card:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-left&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local titleRow = left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title&amp;quot;)&lt;br /&gt;
    titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-icon&amp;quot;)&lt;br /&gt;
    local titleText = titleRow:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-title-text&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local nameRow = titleText:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-name&amp;quot;):wikitext(val(skillData.name))&lt;br /&gt;
    nameRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-type card_accent--type&amp;quot;)&lt;br /&gt;
        :wikitext(&amp;quot;「&amp;quot; .. val(skillData.type) .. &amp;quot;」&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local metaRow = titleText:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-meta&amp;quot;)&lt;br /&gt;
    if skillType == &amp;quot;normal_attack&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;使用武器 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val card_accent&amp;quot;):wikitext(val(skillData.weapon))&lt;br /&gt;
    elseif skillType == &amp;quot;passive&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;触发条件 &amp;quot;)&lt;br /&gt;
        metaRow:node(makeTriggerLabel(skillData.trigger_type, skillData.trigger_value))&lt;br /&gt;
    elseif skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        metaRow:wikitext(&amp;quot;欲火消耗 &amp;quot;)&lt;br /&gt;
        metaRow:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_skill-meta-val&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(val(skillData.desire_cost))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if skillType == &amp;quot;passive&amp;quot; or skillType == &amp;quot;ultimate&amp;quot; then&lt;br /&gt;
        left:node(makeTagsRow(skillData.tags))&lt;br /&gt;
    end&lt;br /&gt;
    left:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill_effect&amp;quot;):wikitext(val(skillData.description))&lt;br /&gt;
    card:node(makeUpgradeTable(skillData.levels))&lt;br /&gt;
    return card&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFeatList(stagesJson)&lt;br /&gt;
    local ul = mw.html.create(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_feat-ul&amp;quot;)&lt;br /&gt;
    local stages = parseJson(stagesJson)&lt;br /&gt;
    if not stages or type(stages) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        ul:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;—&amp;quot;)&lt;br /&gt;
        return ul&lt;br /&gt;
    end&lt;br /&gt;
    for _, stage in ipairs(stages) do&lt;br /&gt;
        local li  = ul:tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_feat-list&amp;quot;)&lt;br /&gt;
        local row = li:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-row&amp;quot;)&lt;br /&gt;
        local sw  = row:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-stage-wrap&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;p&amp;quot;):tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage&amp;quot;):wikitext(&amp;quot;STAGE&amp;quot;)&lt;br /&gt;
        sw:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_feat-number&amp;quot;)&lt;br /&gt;
            :wikitext(string.format(&amp;quot;%02d&amp;quot;, stage.stage or 0))&lt;br /&gt;
        local rd = row:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        if stage.value and type(stage.value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, v in ipairs(stage.value) do&lt;br /&gt;
                if v.description then&lt;br /&gt;
                    rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(v.description)&lt;br /&gt;
                    rd:tag(&amp;quot;br&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.stat_boosts and type(stage.stat_boosts) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for _, boost in ipairs(stage.stat_boosts) do&lt;br /&gt;
                rd:wikitext((boost.type or &amp;quot;&amp;quot;) .. &amp;quot;提升&amp;quot; .. (boost.value or &amp;quot;&amp;quot;))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if stage.extra_name then&lt;br /&gt;
            rd:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_content_feat-stage-cn&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;「&amp;quot; .. stage.extra_name .. &amp;quot;」&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ul&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ──────────────────────────────────────────────&lt;br /&gt;
-- 辅助：小传时间线&lt;br /&gt;
-- card.stories = [ { sort, story: [ { id, text }, ... ] } ]&lt;br /&gt;
-- cardTitle = card.stylename，作为故事标题展示&lt;br /&gt;
-- ──────────────────────────────────────────────&lt;br /&gt;
local function makeStoryTimeline(stories, cardTitle)&lt;br /&gt;
    local timeline = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;card_timeline card_content_story-timeline&amp;quot;)&lt;br /&gt;
    timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-line&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local entry    = stories and type(stories) == &amp;quot;table&amp;quot; and stories[1]&lt;br /&gt;
    local chapters = entry and type(entry.story) == &amp;quot;table&amp;quot; and entry.story or {}&lt;br /&gt;
&lt;br /&gt;
    if #chapters == 0 then&lt;br /&gt;
        timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;):wikitext(&amp;quot;（小传数据待补充）&amp;quot;)&lt;br /&gt;
        return timeline&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local romans       = { &amp;quot;Ⅰ&amp;quot;, &amp;quot;Ⅱ&amp;quot;, &amp;quot;Ⅲ&amp;quot;, &amp;quot;Ⅳ&amp;quot;, &amp;quot;Ⅴ&amp;quot; }&lt;br /&gt;
    local unlockLevels = { &amp;quot;Lv.20 解锁&amp;quot;, &amp;quot;Lv.40 解锁&amp;quot;, &amp;quot;Lv.60 解锁&amp;quot;, &amp;quot;Lv.80 解锁&amp;quot;, &amp;quot;Lv.100 解锁&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
    for idx, chapter in ipairs(chapters) do&lt;br /&gt;
        local item = timeline:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-item&amp;quot;)&lt;br /&gt;
        if idx == #chapters then item:addClass(&amp;quot;card_timeline-item--last&amp;quot;) end&lt;br /&gt;
&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-dot&amp;quot;)&lt;br /&gt;
        item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-unlock&amp;quot;)&lt;br /&gt;
            :wikitext(unlockLevels[idx] or (&amp;quot;Lv.&amp;quot; .. (idx * 20) .. &amp;quot; 解锁&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        local titleDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-title&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-numeral&amp;quot;)&lt;br /&gt;
            :wikitext(romans[idx] or tostring(idx))&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-chapter&amp;quot;):wikitext(cardTitle or &amp;quot;&amp;quot;)&lt;br /&gt;
        titleDiv:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_timeline-label&amp;quot;):wikitext(&amp;quot;/ Story&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local bodyDiv = item:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_timeline-body&amp;quot;)&lt;br /&gt;
        local text = chapter.text or &amp;quot;&amp;quot;&lt;br /&gt;
        if text ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
            for i, line in ipairs(lines) do&lt;br /&gt;
                if line ~= &amp;quot;&amp;quot; then bodyDiv:wikitext(line) end&lt;br /&gt;
                if i &amp;lt; #lines then bodyDiv:tag(&amp;quot;br&amp;quot;) end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return timeline&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ══════════════════════════════════════════════&lt;br /&gt;
-- 主渲染函数&lt;br /&gt;
-- ══════════════════════════════════════════════&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local name = mw.text.trim(frame.args[1] or frame.args.name or &amp;quot;&amp;quot;)&lt;br /&gt;
    if name == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;错误：请提供卡片名称，例如 {{#invoke:CardData|render|复仇童谣}}&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- ── 1. 构造 API URL（与其他关联字段逻辑完全一致，不加额外过滤）──&lt;br /&gt;
    local fields = table.concat({&lt;br /&gt;
        &amp;quot;stylename&amp;quot;, &amp;quot;rarity&amp;quot;,&lt;br /&gt;
        &amp;quot;character.name&amp;quot;, &amp;quot;profession.name&amp;quot;, &amp;quot;desire.name&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.name&amp;quot;, &amp;quot;skill_normal_attack.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.weapon&amp;quot;, &amp;quot;skill_normal_attack.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_normal_attack.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.name&amp;quot;, &amp;quot;skill_passive.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.trigger_type&amp;quot;, &amp;quot;skill_passive.trigger_value&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.tags&amp;quot;, &amp;quot;skill_passive.description&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_passive.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.name&amp;quot;, &amp;quot;skill_ultimate.type&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.desire_cost&amp;quot;, &amp;quot;skill_ultimate.tags&amp;quot;,&lt;br /&gt;
        &amp;quot;skill_ultimate.description&amp;quot;, &amp;quot;skill_ultimate.levels.*&amp;quot;,&lt;br /&gt;
        &amp;quot;feats.stages&amp;quot;,&lt;br /&gt;
        &amp;quot;stories.sort&amp;quot;,&lt;br /&gt;
        &amp;quot;stories.text&amp;quot;&lt;br /&gt;
    }, &amp;quot;,&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local encodedName = mw.uri.encode(name, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
    local apiUrl = &amp;quot;https://data.saltedkiss.org/items/cards&amp;quot;&lt;br /&gt;
        .. &amp;quot;?fields=&amp;quot; .. mw.uri.encode(fields, &amp;quot;QUERY&amp;quot;)&lt;br /&gt;
        .. &amp;quot;&amp;amp;filter[stylename][_eq]=&amp;quot; .. encodedName&lt;br /&gt;
&lt;br /&gt;
    -- ── 2. 拉取原始 JSON ──&lt;br /&gt;
    local rawResponse = frame:preprocess(&lt;br /&gt;
        &#039;{{#get_web_data:url=&#039; .. apiUrl&lt;br /&gt;
        .. &#039;|format=text|data=responseText=__text}}&#039;&lt;br /&gt;
        .. &#039;{{#external_value:responseText}}&#039;&lt;br /&gt;
    )&lt;br /&gt;
    rawResponse = mw.text.trim(rawResponse or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- ── 3. 解析 ──&lt;br /&gt;
    local parsed = parseJson(rawResponse)&lt;br /&gt;
    local card   = parsed and type(parsed.data) == &amp;quot;table&amp;quot; and parsed.data[1] or nil&lt;br /&gt;
&lt;br /&gt;
    if not card then&lt;br /&gt;
        return &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;⚠ 无法加载卡片数据：&#039; .. mw.text.nowiki(name)&lt;br /&gt;
            .. &#039;（response=&#039; .. mw.text.nowiki(rawResponse) .. &#039;）&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local charData   = card.character or {}&lt;br /&gt;
    local profData   = card.profession or {}&lt;br /&gt;
    local desireData = card.desire or {}&lt;br /&gt;
    local skillNA    = card.skill_normal_attack or {}&lt;br /&gt;
    local skillPA    = card.skill_passive or {}&lt;br /&gt;
    local skillUL    = card.skill_ultimate or {}&lt;br /&gt;
    local stories    = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    local featsStagesJson = &amp;quot;[]&amp;quot;&lt;br /&gt;
    if card.feats and type(card.feats) == &amp;quot;table&amp;quot; and card.feats[1] then&lt;br /&gt;
        local sr = card.feats[1].stages&lt;br /&gt;
        featsStagesJson = type(sr) == &amp;quot;table&amp;quot; and mw.text.jsonEncode(sr)&lt;br /&gt;
                       or type(sr) == &amp;quot;string&amp;quot; and sr or &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function levelsToJson(skill)&lt;br /&gt;
        if not skill.levels then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;string&amp;quot; then return skill.levels end&lt;br /&gt;
        if type(skill.levels) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.levels) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillNA.levels = levelsToJson(skillNA)&lt;br /&gt;
    skillPA.levels = levelsToJson(skillPA)&lt;br /&gt;
    skillUL.levels = levelsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    local function tagsToJson(skill)&lt;br /&gt;
        if not skill.tags then return &amp;quot;[]&amp;quot; end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;string&amp;quot; then return skill.tags end&lt;br /&gt;
        if type(skill.tags) == &amp;quot;table&amp;quot;  then return mw.text.jsonEncode(skill.tags) end&lt;br /&gt;
        return &amp;quot;[]&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    skillPA.tags = tagsToJson(skillPA)&lt;br /&gt;
    skillUL.tags = tagsToJson(skillUL)&lt;br /&gt;
&lt;br /&gt;
    -- ── 4. 组装 HTML ──&lt;br /&gt;
    local rarity    = tonumber(card.rarity) or 0&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local charName  = val(charData.name)&lt;br /&gt;
    local profName  = val(profData.name)&lt;br /&gt;
    local desName   = val(desireData.name)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;ron-card ron-card--rarity-&amp;quot; .. rarity)&lt;br /&gt;
        :attr(&amp;quot;data-rarity&amp;quot;, rarity)&lt;br /&gt;
&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_fullscreen-img&amp;quot;)&lt;br /&gt;
    root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_hero&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;100vh&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local layout = root:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-container&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-background&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content-inner&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content card_content--layout&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 左栏&lt;br /&gt;
    local leftCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_left&amp;quot;)&lt;br /&gt;
    local nc = leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-container&amp;quot;)&lt;br /&gt;
    local nr = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-row&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(profName)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-icon card_content_name-icon--ml&amp;quot;)&lt;br /&gt;
    nr:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-classtext&amp;quot;):wikitext(desName)&lt;br /&gt;
    local nt = nc:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_name-text&amp;quot;)&lt;br /&gt;
    nt:wikitext(stylename .. &amp;quot; &amp;quot;)&lt;br /&gt;
    nt:tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;card_accent&amp;quot;):wikitext(&amp;quot;·&amp;quot;)&lt;br /&gt;
    nt:wikitext(&amp;quot; &amp;quot; .. charName)&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;信息&amp;quot;, &amp;quot;Info&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_info-item&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(&amp;quot;稀有度&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):wikitext(rarityStars(rarity))&lt;br /&gt;
&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;等级 100&amp;quot;, &amp;quot;Lv. Max&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;映像&amp;quot;, &amp;quot;Reflection&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
    leftCol:node(makeTitle(&amp;quot;认知&amp;quot;, &amp;quot;Cognition&amp;quot;))&lt;br /&gt;
    leftCol:node(makeHr())&lt;br /&gt;
    leftCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_attribute-item&amp;quot;):wikitext(&amp;quot;（数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 右栏&lt;br /&gt;
    local rightCol = layout:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_right&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;战斗技能&amp;quot;, &amp;quot;Tactical&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeSkillCard(skillNA, &amp;quot;normal_attack&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillPA, &amp;quot;passive&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_skill-gap&amp;quot;)&lt;br /&gt;
    rightCol:node(makeSkillCard(skillUL, &amp;quot;ultimate&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;觉醒&amp;quot;, &amp;quot;Feat&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:node(makeFeatList(featsStagesJson))&lt;br /&gt;
&lt;br /&gt;
    -- 小传&lt;br /&gt;
    local storySection = rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story&amp;quot;)&lt;br /&gt;
    local storyHeader  = storySection:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header&amp;quot;)&lt;br /&gt;
    local storyLeft    = storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-left&amp;quot;)&lt;br /&gt;
    storyLeft:node(makeTitle(&amp;quot;小传&amp;quot;, &amp;quot;Story&amp;quot;))&lt;br /&gt;
    storyLeft:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    storyLeft:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-toggle&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-collapsed&amp;quot;, &amp;quot;false&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-text&amp;quot;):wikitext(&amp;quot;收起&amp;quot;):done()&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;):addClass(&amp;quot;story-toggle-icon&amp;quot;):wikitext(&amp;quot;－&amp;quot;)&lt;br /&gt;
    storyHeader:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_story-header-spacer&amp;quot;)&lt;br /&gt;
    storyHeader:node(makeStoryTimeline(stories, stylename))&lt;br /&gt;
&lt;br /&gt;
    -- 邀约（待补充）&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):css(&amp;quot;height&amp;quot;, &amp;quot;12px&amp;quot;):css(&amp;quot;width&amp;quot;, &amp;quot;100%&amp;quot;)&lt;br /&gt;
    rightCol:node(makeTitle(&amp;quot;邀约&amp;quot;, &amp;quot;Date&amp;quot;))&lt;br /&gt;
    rightCol:node(makeHr(&amp;quot;card_content-item-hr--mb12&amp;quot;))&lt;br /&gt;
    rightCol:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;card_content_date-track&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;ul&amp;quot;):addClass(&amp;quot;card_content_date-list&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;li&amp;quot;):addClass(&amp;quot;card_content_date-item&amp;quot;):wikitext(&amp;quot;（邀约数据待补充）&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=356</id>
		<title>模块:HttpTest</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=356"/>
		<updated>2026-03-11T14:37:24Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.get(frame)&lt;br /&gt;
    local cardname = frame.args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local url =&lt;br /&gt;
        &amp;quot;https://data.saltedkiss.org/items/cards?filter[stylename][_eq]=&amp;quot;&lt;br /&gt;
        .. mw.uri.encode(cardname)&lt;br /&gt;
        .. &amp;quot;&amp;amp;limit=1&amp;amp;fields=*,character.*,profession.*,desire.*,skill_normal_attack.*,skill_passive.*,skill_ultimate.*,feats.stages.*,stories.text&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local rawData = mw.ext.externalData.getExternalData({&lt;br /&gt;
        url = url,&lt;br /&gt;
        format = &amp;quot;json&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    if not rawData or #rawData == 0 then&lt;br /&gt;
        return &amp;quot;No data returned.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local cardData = rawData[1].__json.data[1]&lt;br /&gt;
    if not cardData then&lt;br /&gt;
        return &amp;quot;Card not found.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 创建变量&lt;br /&gt;
    local name = cardData.stylename or &amp;quot;—&amp;quot;&lt;br /&gt;
    local rarity = cardData.rarity or &amp;quot;—&amp;quot;&lt;br /&gt;
    local character = cardData.character and cardData.character.name or &amp;quot;—&amp;quot;&lt;br /&gt;
    local profession = cardData.profession and cardData.profession.name or &amp;quot;—&amp;quot;&lt;br /&gt;
    local desire = cardData.desire and cardData.desire.name or &amp;quot;—&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local normal = cardData.skill_normal_attack or {}&lt;br /&gt;
    local passive = cardData.skill_passive or {}&lt;br /&gt;
    local ultimate = cardData.skill_ultimate or {}&lt;br /&gt;
&lt;br /&gt;
    -- 故事&lt;br /&gt;
    local stories = cardData.stories or {}&lt;br /&gt;
    local storyCount = #stories&lt;br /&gt;
    local storyTexts = {}&lt;br /&gt;
    for i, s in ipairs(stories) do&lt;br /&gt;
        table.insert(storyTexts, string.format(&amp;quot;%d: %s&amp;quot;, i, s.text or &amp;quot;&amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 输出&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.insert(out, string.format(&amp;quot;卡牌名: %s&amp;quot;, name))&lt;br /&gt;
    table.insert(out, string.format(&amp;quot;稀有度: %s&amp;quot;, rarity))&lt;br /&gt;
    table.insert(out, string.format(&amp;quot;角色: %s&amp;quot;, character))&lt;br /&gt;
    table.insert(out, string.format(&amp;quot;职业: %s&amp;quot;, profession))&lt;br /&gt;
    table.insert(out, string.format(&amp;quot;欲望: %s&amp;quot;, desire))&lt;br /&gt;
    table.insert(out, &amp;quot;&amp;quot;)&lt;br /&gt;
    table.insert(out, string.format(&amp;quot;普通攻击: %s - %s&amp;quot;, normal.name or &amp;quot;—&amp;quot;, normal.description or &amp;quot;—&amp;quot;))&lt;br /&gt;
    table.insert(out, string.format(&amp;quot;被动技能: %s - %s&amp;quot;, passive.name or &amp;quot;—&amp;quot;, passive.description or &amp;quot;—&amp;quot;))&lt;br /&gt;
    table.insert(out, string.format(&amp;quot;必杀技能: %s - %s&amp;quot;, ultimate.name or &amp;quot;—&amp;quot;, ultimate.description or &amp;quot;—&amp;quot;))&lt;br /&gt;
    table.insert(out, &amp;quot;&amp;quot;)&lt;br /&gt;
    table.insert(out, string.format(&amp;quot;故事条数: %d&amp;quot;, storyCount))&lt;br /&gt;
    table.insert(out, table.concat(storyTexts, &amp;quot;\n&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=355</id>
		<title>模块:HttpTest</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=355"/>
		<updated>2026-03-11T14:35:31Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.get(frame)&lt;br /&gt;
    local cardname = frame.args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local url =&lt;br /&gt;
        &amp;quot;https://data.saltedkiss.org/items/cards?filter[stylename][_eq]=&amp;quot;&lt;br /&gt;
        .. mw.uri.encode(cardname)&lt;br /&gt;
        .. &amp;quot;&amp;amp;limit=1&amp;amp;fields=*,character.*,profession.*,desire.*,skill_normal_attack.*,skill_passive.*,skill_ultimate.*,feats.stages.*,stories.text&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- 调用 ExternalData&lt;br /&gt;
    local rawData = mw.ext.externalData.getExternalData({&lt;br /&gt;
        url = url,&lt;br /&gt;
        format = &amp;quot;json&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    -- 先确保数据存在&lt;br /&gt;
    if not rawData or not rawData[1] or not rawData[1].__json&lt;br /&gt;
        or not rawData[1].__json.data or #rawData[1].__json.data == 0 then&lt;br /&gt;
        return &amp;quot;未获取到卡牌数据&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 核心数据表&lt;br /&gt;
    local cardData = rawData[1].__json.data[1]&lt;br /&gt;
&lt;br /&gt;
    -- 创建变量&lt;br /&gt;
    local stylename = cardData.stylename or &amp;quot;—&amp;quot;&lt;br /&gt;
    local rarity = cardData.rarity or &amp;quot;—&amp;quot;&lt;br /&gt;
    local character = (cardData.character and cardData.character.name) or &amp;quot;—&amp;quot;&lt;br /&gt;
    local profession = (cardData.profession and cardData.profession.name) or &amp;quot;—&amp;quot;&lt;br /&gt;
    local desire = (cardData.desire and cardData.desire.name) or &amp;quot;—&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local skill_normal_name = (cardData.skill_normal_attack and cardData.skill_normal_attack.name) or &amp;quot;—&amp;quot;&lt;br /&gt;
    local skill_normal_desc = (cardData.skill_normal_attack and cardData.skill_normal_attack.description) or &amp;quot;—&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local skill_passive_name = (cardData.skill_passive and cardData.skill_passive.name) or &amp;quot;—&amp;quot;&lt;br /&gt;
    local skill_passive_desc = (cardData.skill_passive and cardData.skill_passive.description) or &amp;quot;—&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local skill_ultimate_name = (cardData.skill_ultimate and cardData.skill_ultimate.name) or &amp;quot;—&amp;quot;&lt;br /&gt;
    local skill_ultimate_desc = (cardData.skill_ultimate and cardData.skill_ultimate.description) or &amp;quot;—&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local stories = {}&lt;br /&gt;
    if cardData.stories then&lt;br /&gt;
        for i, s in ipairs(cardData.stories) do&lt;br /&gt;
            table.insert(stories, s.text or &amp;quot;—&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 返回一个简单 HTML 显示&lt;br /&gt;
    local output = &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;卡牌名: &amp;quot; .. stylename .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;稀有度: &amp;quot; .. rarity .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;角色: &amp;quot; .. character .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;职业: &amp;quot; .. profession .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;欲望: &amp;quot; .. desire .. &amp;quot;\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    output = output .. &amp;quot;普通攻击: &amp;quot; .. skill_normal_name .. &amp;quot; - &amp;quot; .. skill_normal_desc .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;被动技能: &amp;quot; .. skill_passive_name .. &amp;quot; - &amp;quot; .. skill_passive_desc .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;必杀技能: &amp;quot; .. skill_ultimate_name .. &amp;quot; - &amp;quot; .. skill_ultimate_desc .. &amp;quot;\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    output = output .. &amp;quot;故事条数: &amp;quot; .. #stories .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    for i, story in ipairs(stories) do&lt;br /&gt;
        output = output .. &amp;quot;故事 &amp;quot; .. i .. &amp;quot;:\n&amp;quot; .. story .. &amp;quot;\n\n&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    output = output .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=354</id>
		<title>模块:HttpTest</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=354"/>
		<updated>2026-03-11T14:33:45Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
        return fallback or &amp;quot;—&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.get(frame)&lt;br /&gt;
    local cardname = frame.args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local url =&lt;br /&gt;
        &amp;quot;https://data.saltedkiss.org/items/cards?filter[stylename][_eq]=&amp;quot;&lt;br /&gt;
        .. mw.uri.encode(cardname)&lt;br /&gt;
        .. &amp;quot;&amp;amp;limit=1&amp;amp;fields=*,character.*,profession.*,desire.*,skill_normal_attack.*,skill_passive.*,skill_ultimate.*,feats.stages.*,stories.story&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- 从 ExternalData 获取数据&lt;br /&gt;
    local data = mw.ext.externalData.getExternalData({&lt;br /&gt;
        url = url,&lt;br /&gt;
        format = &amp;quot;json&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    if not data or not data[1] then&lt;br /&gt;
        return &amp;quot;未获取到卡牌数据&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local card = data[1]&lt;br /&gt;
&lt;br /&gt;
    -- 创建变量&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local rarity = val(card.rarity)&lt;br /&gt;
    local character = val(card.character and card.character.name)&lt;br /&gt;
    local profession = val(card.profession and card.profession.name)&lt;br /&gt;
    local desire = val(card.desire and card.desire.name)&lt;br /&gt;
&lt;br /&gt;
    local skill_normal_attack = card.skill_normal_attack or {}&lt;br /&gt;
    local skill_passive = card.skill_passive or {}&lt;br /&gt;
    local skill_ultimate = card.skill_ultimate or {}&lt;br /&gt;
&lt;br /&gt;
    local feats = card.feats or {}&lt;br /&gt;
    local stories = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    -- 简单输出测试（可换成你后续处理）&lt;br /&gt;
    local output = &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;卡牌名: &amp;quot; .. stylename .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;稀有度: &amp;quot; .. rarity .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;角色: &amp;quot; .. character .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;职业: &amp;quot; .. profession .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;欲望: &amp;quot; .. desire .. &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- 技能输出示例&lt;br /&gt;
    output = output .. &amp;quot;\n普通攻击: &amp;quot; .. val(skill_normal_attack.name) .. &amp;quot; - &amp;quot; .. val(skill_normal_attack.description) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;被动技能: &amp;quot; .. val(skill_passive.name) .. &amp;quot; - &amp;quot; .. val(skill_passive.description) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;必杀技能: &amp;quot; .. val(skill_ultimate.name) .. &amp;quot; - &amp;quot; .. val(skill_ultimate.description) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- 输出故事数量&lt;br /&gt;
    output = output .. &amp;quot;\n故事条数: &amp;quot; .. #stories .. &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    output = output .. mw.dumpObject(data) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=353</id>
		<title>模块:HttpTest</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=353"/>
		<updated>2026-03-11T14:32:26Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
        return fallback or &amp;quot;—&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.get(frame)&lt;br /&gt;
    local cardname = frame.args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local url =&lt;br /&gt;
        &amp;quot;https://data.saltedkiss.org/items/cards?filter[stylename][_eq]=&amp;quot;&lt;br /&gt;
        .. mw.uri.encode(cardname)&lt;br /&gt;
        .. &amp;quot;&amp;amp;limit=1&amp;amp;fields=*,character.*,profession.*,desire.*,skill_normal_attack.*,skill_passive.*,skill_ultimate.*,feats.stages.*,stories.story&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- 从 ExternalData 获取数据&lt;br /&gt;
    local data = mw.ext.externalData.getExternalData({&lt;br /&gt;
        url = url,&lt;br /&gt;
        format = &amp;quot;json&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    if not data or not data[1] then&lt;br /&gt;
        return &amp;quot;未获取到卡牌数据&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local card = data[1]&lt;br /&gt;
&lt;br /&gt;
    -- 创建变量&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local rarity = val(card.rarity)&lt;br /&gt;
    local character = val(card.character and card.character.name)&lt;br /&gt;
    local profession = val(card.profession and card.profession.name)&lt;br /&gt;
    local desire = val(card.desire and card.desire.name)&lt;br /&gt;
&lt;br /&gt;
    local skill_normal_attack = card.skill_normal_attack or {}&lt;br /&gt;
    local skill_passive = card.skill_passive or {}&lt;br /&gt;
    local skill_ultimate = card.skill_ultimate or {}&lt;br /&gt;
&lt;br /&gt;
    local feats = card.feats or {}&lt;br /&gt;
    local stories = card.stories or {}&lt;br /&gt;
&lt;br /&gt;
    -- 简单输出测试（可换成你后续处理）&lt;br /&gt;
    local output = &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;卡牌名: &amp;quot; .. stylename .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;稀有度: &amp;quot; .. rarity .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;角色: &amp;quot; .. character .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;职业: &amp;quot; .. profession .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;欲望: &amp;quot; .. desire .. &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- 技能输出示例&lt;br /&gt;
    output = output .. &amp;quot;\n普通攻击: &amp;quot; .. val(skill_normal_attack.name) .. &amp;quot; - &amp;quot; .. val(skill_normal_attack.description) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;被动技能: &amp;quot; .. val(skill_passive.name) .. &amp;quot; - &amp;quot; .. val(skill_passive.description) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    output = output .. &amp;quot;必杀技能: &amp;quot; .. val(skill_ultimate.name) .. &amp;quot; - &amp;quot; .. val(skill_ultimate.description) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- 输出故事数量&lt;br /&gt;
    output = output .. &amp;quot;\n故事条数: &amp;quot; .. #stories .. &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    output = output .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=352</id>
		<title>模块:HttpTest</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=352"/>
		<updated>2026-03-11T14:27:55Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function val(v, fallback)&lt;br /&gt;
    if v == nil or v == &amp;quot;&amp;quot; then&lt;br /&gt;
        return fallback or &amp;quot;—&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 用于调试输出表格结构&lt;br /&gt;
local function dump(tbl, indent)&lt;br /&gt;
    indent = indent or 0&lt;br /&gt;
    local formatting = string.rep(&amp;quot;  &amp;quot;, indent)&lt;br /&gt;
    if type(tbl) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        return tostring(tbl)&lt;br /&gt;
    end&lt;br /&gt;
    local str = &amp;quot;{\n&amp;quot;&lt;br /&gt;
    for k,v in pairs(tbl) do&lt;br /&gt;
        if type(v) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            str = str .. formatting .. &amp;quot;  &amp;quot; .. tostring(k) .. &amp;quot; = &amp;quot; .. dump(v, indent+1) .. &amp;quot;,\n&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            str = str .. formatting .. &amp;quot;  &amp;quot; .. tostring(k) .. &amp;quot; = &amp;quot; .. tostring(v) .. &amp;quot;,\n&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    str = str .. formatting .. &amp;quot;}&amp;quot;&lt;br /&gt;
    return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.get(frame)&lt;br /&gt;
    local cardname = frame.args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    local url =&lt;br /&gt;
        &amp;quot;https://data.saltedkiss.org/items/cards?filter[stylename][_eq]=&amp;quot;&lt;br /&gt;
        .. mw.uri.encode(cardname)&lt;br /&gt;
        .. &amp;quot;&amp;amp;limit=1&amp;amp;fields=stylename,rarity,character.name,profession.name,desire.name,&amp;quot;&lt;br /&gt;
        .. &amp;quot;skill_normal_attack.name,skill_normal_attack.description,skill_normal_attack.levels,&amp;quot;&lt;br /&gt;
        .. &amp;quot;skill_passive.name,skill_passive.description,skill_passive.levels,&amp;quot;&lt;br /&gt;
        .. &amp;quot;skill_ultimate.name,skill_ultimate.description,skill_ultimate.levels,&amp;quot;&lt;br /&gt;
        .. &amp;quot;feats.stages,stories.text&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- 调用 External API&lt;br /&gt;
    local response = mw.ext.jsonapi.get(url)&lt;br /&gt;
    if not response or not response.data then&lt;br /&gt;
        return &amp;quot;API 请求失败或返回为空&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local card = response.data[1] or {}&lt;br /&gt;
&lt;br /&gt;
    -- 变量映射&lt;br /&gt;
    local stylename = val(card.stylename)&lt;br /&gt;
    local rarity = val(card.rarity)&lt;br /&gt;
    local character = val(card.character and card.character.name)&lt;br /&gt;
    local profession = val(card.profession and card.profession.name)&lt;br /&gt;
    local desire = val(card.desire and card.desire.name)&lt;br /&gt;
&lt;br /&gt;
    -- 技能&lt;br /&gt;
    local skill_normal_attack = {&lt;br /&gt;
        name = val(card.skill_normal_attack and card.skill_normal_attack.name),&lt;br /&gt;
        description = val(card.skill_normal_attack and card.skill_normal_attack.description),&lt;br /&gt;
        levels = card.skill_normal_attack and card.skill_normal_attack.levels or {}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    local skill_passive = {&lt;br /&gt;
        name = val(card.skill_passive and card.skill_passive.name),&lt;br /&gt;
        description = val(card.skill_passive and card.skill_passive.description),&lt;br /&gt;
        levels = card.skill_passive and card.skill_passive.levels or {}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    local skill_ultimate = {&lt;br /&gt;
        name = val(card.skill_ultimate and card.skill_ultimate.name),&lt;br /&gt;
        description = val(card.skill_ultimate and card.skill_ultimate.description),&lt;br /&gt;
        levels = card.skill_ultimate and card.skill_ultimate.levels or {}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    -- feats&lt;br /&gt;
    local feats = {}&lt;br /&gt;
    if card.feats and #card.feats &amp;gt; 0 then&lt;br /&gt;
        for i, featEntry in ipairs(card.feats) do&lt;br /&gt;
            feats[i] = {}&lt;br /&gt;
            if featEntry.stages then&lt;br /&gt;
                feats[i].stages = {}&lt;br /&gt;
                for j, stage in ipairs(featEntry.stages) do&lt;br /&gt;
                    feats[i].stages[j] = {&lt;br /&gt;
                        stage = stage.stage,&lt;br /&gt;
                        extra_name = stage.extra_name,&lt;br /&gt;
                        stat_boosts = stage.stat_boosts or {},&lt;br /&gt;
                        value = stage.value or {}&lt;br /&gt;
                    }&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- stories&lt;br /&gt;
    local stories = {}&lt;br /&gt;
    if card.stories and #card.stories &amp;gt; 0 then&lt;br /&gt;
        for i, s in ipairs(card.stories) do&lt;br /&gt;
            stories[i] = s.text or &amp;quot;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 调试输出&lt;br /&gt;
    local output_table = {&lt;br /&gt;
        stylename = stylename,&lt;br /&gt;
        rarity = rarity,&lt;br /&gt;
        character = character,&lt;br /&gt;
        profession = profession,&lt;br /&gt;
        desire = desire,&lt;br /&gt;
        skill_normal_attack = skill_normal_attack,&lt;br /&gt;
        skill_passive = skill_passive,&lt;br /&gt;
        skill_ultimate = skill_ultimate,&lt;br /&gt;
        feats = feats,&lt;br /&gt;
        stories = stories&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    -- 直接返回调试字符串&lt;br /&gt;
    return dump(output_table)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
	<entry>
		<id>https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=351</id>
		<title>模块:HttpTest</title>
		<link rel="alternate" type="text/html" href="https://ron.saltedkiss.org/index.php?title=%E6%A8%A1%E5%9D%97:HttpTest&amp;diff=351"/>
		<updated>2026-03-11T14:19:52Z</updated>

		<summary type="html">&lt;p&gt;Rin：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.get(frame)&lt;br /&gt;
&lt;br /&gt;
    local cardname = frame.args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    local url =&lt;br /&gt;
    &amp;quot;https://data.saltedkiss.org/items/cards?filter[stylename][_eq]=&amp;quot;&lt;br /&gt;
    .. mw.uri.encode(cardname)&lt;br /&gt;
    .. &amp;quot;&amp;amp;limit=1&amp;amp;fields=*,character.*,profession.*,desire.*,skill_normal_attack.*,skill_passive.*,skill_ultimate.*,feats.stages.*,stories.story&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- 从 ExternalData 获取数据&lt;br /&gt;
    local data = mw.ext.externalData.getExternalData({&lt;br /&gt;
        url = url,&lt;br /&gt;
        format = &amp;quot;json&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    -- 调试输出&lt;br /&gt;
    return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.dumpObject(data) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Rin</name></author>
	</entry>
</feed>