<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://yinglong.org/forum/extern.php?action=feed&amp;fid=3&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[鱗目界域 / 旅龍茶社]]></title>
		<link>https://yinglong.org/forum/index.php</link>
		<description><![CDATA[位于 鱗目界域 的最新主题]]></description>
		<lastBuildDate>Sat, 05 Sep 2026 12:06:54 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[因爲太閒了所以抓一些龍來聊天]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5080&amp;action=new</link>
			<description><![CDATA[<p>我是說好奇心搜到了龍相關關於應龍的龍百科資料，點進去論壇看看發現的。&nbsp;<img src="/forum/img/smilies/haku/haku-idea.svg" alt="[靈感]" /></p>]]></description>
			<author><![CDATA[dummy@example.com (破灭之月)]]></author>
			<pubDate>Sat, 05 Sep 2026 12:06:54 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5080&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[正在使用deepseekharness製作的STS模組]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5078&amp;action=new</link>
			<description><![CDATA[<p>簡化了頭部，不過也算是勉強完成了（<br>實現了動畫的導入<br>不過嘛。。。。各個場景的動畫還都沒有做呢，這一步可能需要一段時間了，不過大家都是龍，只需要耐心等待一下<br><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_1921_6a9a7ea575015.jpeg" alt="" /></span></p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_1921_6a9a7ea7ef957.jpeg" alt="" /></span><br>還和朋友聯機遊玩了一把，遇到了一個顯示bug<br>然後雙區兄弟玩超模mod倒在了二層。。。好丟臉&nbsp;<img src="/forum/img/smilies/dragn/dragn-shock.svg" alt="[震驚]" />&nbsp;身爲龍被一羣蜂窩雙殺了</p>]]></description>
			<author><![CDATA[dummy@example.com (Ka'lot)]]></author>
			<pubDate>Fri, 04 Sep 2026 08:19:03 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5078&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[各位理想龍身的居所是怎樣的？]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=4163&amp;action=new</link>
			<description><![CDATA[<p>冰海邊的石崖，不很遠的地方有沼澤與森林<br>感覺自己會是居無定所的生靈，也罕囤積寶物的習慣；故而巢穴也比較隨意</p>]]></description>
			<author><![CDATA[dummy@example.com (Celia)]]></author>
			<pubDate>Fri, 28 Aug 2026 21:14:00 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=4163&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[AI繪圖樓]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=4646&amp;action=new</link>
			<description><![CDATA[<div class="quotebox"><blockquote><div><p><a href="/forum/viewtopic.php?pid=56907#p56907" rel="nofollow">[↑]</a>&nbsp;<a href="/forum/profile.php?id=24" rel="nofollow">@Ancalagon</a>&nbsp;寫道:&nbsp;草圖到成品只用了四次就完成真的很強，感覺這次的&nbsp;AI&nbsp;真的可以搶到藝術家的飯碗。我弄複雜的圖大概都是分層生成，最後再合成一張。&nbsp;…</p></div></blockquote></div><p>如果造型不那麼主流就很難了。。。，我從草圖到成品至少得200次*手改4次，而且只有1/5成功率。</p>]]></description>
			<author><![CDATA[dummy@example.com (镜中龙影)]]></author>
			<pubDate>Mon, 17 Aug 2026 15:52:00 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=4646&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[想要徵求聊天好友]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5077&amp;action=new</link>
			<description><![CDATA[<p>哈哈，沒有啦，就單純聊天朋友，只是也希望理念合得來，這樣才聊得久</p><p>如果要相親會希望地理位置也要夠近</p>]]></description>
			<author><![CDATA[dummy@example.com (Distantwave)]]></author>
			<pubDate>Sat, 15 Aug 2026 13:16:17 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5077&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[最近翻譯小說的感想]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5071&amp;action=new</link>
			<description><![CDATA[<div class="quotebox"><blockquote><div><p><a href="/forum/viewtopic.php?pid=56959#p56959" rel="nofollow">[↑]</a>&nbsp;<a href="/forum/profile.php?id=1266" rel="nofollow">@Distantwave</a>&nbsp;寫道:&nbsp;我覺得你可以試試看用&nbsp;agentic&nbsp;coding&nbsp;ai&nbsp;幫你設計出工作流，像是&nbsp;antigravity，翻譯&nbsp;-&gt;&nbsp;確認是否遺漏&nbsp;-&gt;&nbsp;辨識是否有哪裡不通暢，甚至可以串不同&nbsp;AI&nbsp;model&nbsp;來做同&nbsp;…</p></div></blockquote></div><p>我在用&nbsp;ChatGPT，現在原生支持&nbsp;SKILL&nbsp;了，很不錯</p>]]></description>
			<author><![CDATA[dummy@example.com (shiningdracon)]]></author>
			<pubDate>Fri, 14 Aug 2026 17:19:32 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5071&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[聊些什麼吧......聊些什麼呢？]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5028&amp;action=new</link>
			<description><![CDATA[<p>我喜歡你文章的轉折，從沉重變得到知音，願你得到龍族星空的祝福</p>]]></description>
			<author><![CDATA[dummy@example.com (Distantwave)]]></author>
			<pubDate>Fri, 14 Aug 2026 16:35:31 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5028&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[一條新龍在這裏露面，追求着某種拯救]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5073&amp;action=new</link>
			<description><![CDATA[<p>你感覺好乖好有禮貌，我覺得蠻多龍魂都很乖也很有禮貌，只可惜就是太乖太有禮貌，容易被欺負</p><p>我認為你可以多接觸神祕學和同好，漸漸地你就會習慣這種文化和找到你認為合理的解釋</p><p>不過也別抱持太高期待就是，你會發現大家看起來很像，但是實際上又不是那麼像</p><p>我蠻喜歡也認同你說龍族是信仰和救贖</p><p>以上一些我的淺見</p>]]></description>
			<author><![CDATA[dummy@example.com (Distantwave)]]></author>
			<pubDate>Fri, 14 Aug 2026 16:18:46 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5073&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[閒聊]雅雅的電繪工作環境]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=2471&amp;action=new</link>
			<description><![CDATA[<p>藉此帖子留個檔，算是相關吧，2025年微星MSI出的旗艦筆記本“泰坦18&nbsp;Ultra&nbsp;龍魂典藏版”（臺灣命名Titan&nbsp;18&nbsp;HX&nbsp;北歐神話龍魂典藏限定版）<br>比較意外的是這次的A面配色不是之前微星常用的紅色，而是青色，龍的形態也沒有使用完整形態，而是截取了眼睛附近的一片<br><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_239_6a72cdf315b40.jpeg" alt="" /></span><br><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_239_6a72cdf34a818.jpeg" alt="" /></span><br><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_239_6a72ce305ee39.webp" alt="" /></span></p><p><a href="https://x.com/NighrVern/status/1944319024818757973" rel="nofollow">獸裝照片來自獸裝擁有者X，臺灣線下宣傳活動</a><br><a href="https://www.techbang.com/posts/124270-msi-dragon-city-rtx-50-laptop-handheld-event" rel="nofollow">線下宣傳活動報道</a><br><a href="https://www.bilibili.com/video/BV14NJDzDEAy/" rel="nofollow">Bilibili視頻網站的評測</a><br><a href="https://www.msi.cn/blog/titan-18-hx-dragon-edition-norse-myth-rtx-50-meets-norse-mythology-to-revolutionize-the-gaming-world" rel="nofollow">微星官網介紹</a><br><a href="https://tw.msi.com/Laptop/Titan-18-HX-Dragon-Edition-Norse-Myth-A2XWX" rel="nofollow">微星官網產品頁</a></p>]]></description>
			<author><![CDATA[dummy@example.com (蓝羽龙)]]></author>
			<pubDate>Wed, 05 Aug 2026 05:53:07 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=2471&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[大家是在怎樣的情況下以怎樣的方式進入這裡的呢？]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=1399&amp;action=new</link>
			<description><![CDATA[<p>嗯~硬要說的話，我是想寫龍文，通過豆包給的鏈接來到這個地方的。<img src="/forum/img/smilies/haku/haku-laugh.svg" alt="[大笑]" /></p>]]></description>
			<author><![CDATA[dummy@example.com (超越幻想之龙)]]></author>
			<pubDate>Wed, 29 Jul 2026 16:18:49 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=1399&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[一枚新蛋已經破殼而出]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5067&amp;action=new</link>
			<description><![CDATA[<p>歡迎&nbsp;<img src="/forum/img/smilies/dragn/dragn-thx.svg" alt="[謝啦]" />&nbsp;<span class="postimg"><img src="https://yinglong.org/forum/img/smilies/jcdragon/jcdragon-hi.gif" alt="" /></span></p>]]></description>
			<author><![CDATA[dummy@example.com (破灭之月)]]></author>
			<pubDate>Wed, 22 Jul 2026 10:53:00 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5067&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[正在聽什麼音樂？]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=312&amp;action=new</link>
			<description><![CDATA[<p><b>Dragonheart&nbsp;Awakens&nbsp;(Female&nbsp;Version)&nbsp;|&nbsp;Mythicgate</b></p><p><a href="https://www.youtube.com/watch?v=-s1_tX3ZTB8" rel="nofollow">https://www.youtube.com/watch?v=-s1_tX3ZTB8</a><br></p><p>Awaken&nbsp;now,&nbsp;my&nbsp;Dragonheart,<br>let&nbsp;my&nbsp;ancient&nbsp;power&nbsp;rise.<br>I&nbsp;burn&nbsp;the&nbsp;shadows&nbsp;from&nbsp;within,<br>ignite&nbsp;the&nbsp;truth&nbsp;behind&nbsp;my&nbsp;eyes.</p><p>Awaken&nbsp;now,&nbsp;my&nbsp;Dragonheart,<br>let&nbsp;the&nbsp;old&nbsp;blood&nbsp;roar&nbsp;again.<br>For&nbsp;the&nbsp;fire&nbsp;was&nbsp;never&nbsp;lost—<br>it&nbsp;only&nbsp;waited&nbsp;for&nbsp;my&nbsp;name.<br></p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_393_6a49b01cbe8f5.jpeg" alt="" /></span></p>]]></description>
			<author><![CDATA[dummy@example.com (龍爪翻書)]]></author>
			<pubDate>Sun, 05 Jul 2026 01:19:29 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=312&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[精通人類語言的毛龍適合當心理治療師嗎？]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5055&amp;action=new</link>
			<description><![CDATA[<p>雖然標註了不能使用魔法，但是看到標題還是第一反應想到了《魔龍之書》裏的《一抹藍》<br>（劇透內容）<span class="curtain">故事裏的龍們以消耗記憶（信息）轉化能量的方式維持自身存在，在結尾被引申到一種治療抑鬱症的可能（w感謝作者最後保留了倫理方面的想象空間）</span>。<br>常見的，抑鬱容易沉溺過去,焦慮容易放大未來的潛在威脅，而龍的壽命與認知尺度如果遠大於人類，物種間的“<br>距離感”可能會很明顯。這種距離一方面可能讓龍不容易被來訪者的情緒捲入移情，但另一方面也可能因爲缺乏類似的生命經驗，會有不少情緒體驗難以感同身受，不過如果立志要做這個職業，我想應該有足夠長的時間來讓這個問題不成問題。<br>另外允許rua龍的毛毛可能也是一種情緒撫慰的方式，如果龍諮詢師倫理手冊上面沒禁止的話（&nbsp;<img src="/forum/img/smilies/haku/haku-shy.svg" alt="[害羞]" /></p>]]></description>
			<author><![CDATA[dummy@example.com (NancalaStarry)]]></author>
			<pubDate>Tue, 26 May 2026 05:16:04 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5055&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[AI工具樓]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5044&amp;action=new</link>
			<description><![CDATA[<p>像素畫轉h5&nbsp;canvas網頁，最近在摸索怎麼讓ai給我把像素畫變成gif，順便就vibe&nbsp;code了一個這個。注意：超過128*128像素轉換可能會卡頓，對於海量顏色的ai像素畫原圖轉換的網頁大小會很大（300kb左右），46種顏色、大概256*170的像素畫也要70kb，還在摸索更加好的方式。</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_1760_6a0c73381ecc3.jpeg" alt="" /></span><br></p><div class="codebox"><pre><code>
&lt;!DOCTYPE&nbsp;html&gt;
&lt;html&nbsp;lang=&quot;zh-CN&quot;&gt;

&lt;head&gt;
&nbsp;&nbsp;&lt;meta&nbsp;charset=&quot;UTF-8&quot;&gt;
&nbsp;&nbsp;&lt;meta&nbsp;name=&quot;viewport&quot;&nbsp;content=&quot;width=device-width,&nbsp;initial-scale=1.0&quot;&gt;
&nbsp;&nbsp;&lt;title&gt;像素画&nbsp;→&nbsp;Canvas&nbsp;代码转换器&lt;/title&gt;
&nbsp;&nbsp;&lt;style&gt;
&nbsp;&nbsp;&nbsp;&nbsp;@import&nbsp;url(&apos;https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&amp;family=Noto+Sans+SC:wght@300;500;700&amp;display=swap&apos;);

&nbsp;&nbsp;&nbsp;&nbsp;:root&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--bg:&nbsp;#0e0e12;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--surface:&nbsp;#16161e;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--border:&nbsp;#2a2a38;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--accent:&nbsp;#e8ff5a;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--accent2:&nbsp;#ff5a8a;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--accent3:&nbsp;#5af0ff;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--text:&nbsp;#e8e8f0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--muted:&nbsp;#6a6a88;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--pixel:&nbsp;4px;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box-sizing:&nbsp;border-box;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;body&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;var(--bg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--text);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Noto&nbsp;Sans&nbsp;SC&apos;,&nbsp;sans-serif;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-weight:&nbsp;300;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min-height:&nbsp;100vh;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflow-x:&nbsp;hidden;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Scanline&nbsp;overlay&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;body::before&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;&apos;&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;fixed;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inset:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;repeating-linear-gradient(0deg,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transparent,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transparent&nbsp;2px,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgba(0,&nbsp;0,&nbsp;0,&nbsp;0.08)&nbsp;2px,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgba(0,&nbsp;0,&nbsp;0,&nbsp;0.08)&nbsp;4px);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointer-events:&nbsp;none;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z-index:&nbsp;999;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;header&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;2rem&nbsp;2.5rem&nbsp;1.5rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-bottom:&nbsp;1px&nbsp;solid&nbsp;var(--border);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;flex;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;align-items:&nbsp;baseline;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gap:&nbsp;1.2rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;relative;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;header::after&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;&apos;&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;absolute;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bottom:&nbsp;-1px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;120px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;2px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;var(--accent);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.logo&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Space&nbsp;Mono&apos;,&nbsp;monospace;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;1.4rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-weight:&nbsp;700;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--accent);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;letter-spacing:&nbsp;-1px;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.logo&nbsp;span&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--accent2);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.subtitle&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.78rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--muted);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;letter-spacing:&nbsp;2px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-transform:&nbsp;uppercase;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;main&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;grid;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid-template-columns:&nbsp;1fr&nbsp;1fr;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid-template-rows:&nbsp;auto&nbsp;1fr;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gap:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;calc(100vh&nbsp;-&nbsp;73px);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min-height:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflow:&nbsp;hidden;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;----&nbsp;Drop&nbsp;zone&nbsp;----&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;.drop-zone&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid-column:&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid-row:&nbsp;1&nbsp;/&nbsp;3;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-right:&nbsp;1px&nbsp;solid&nbsp;var(--border);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;flex;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flex-direction:&nbsp;column;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;align-items:&nbsp;center;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;justify-content:&nbsp;center;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gap:&nbsp;1.2rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;2rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursor:&nbsp;pointer;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transition:&nbsp;background&nbsp;0.2s;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;relative;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflow:&nbsp;hidden;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.drop-zone:hover&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;rgba(232,&nbsp;255,&nbsp;90,&nbsp;0.03);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.drop-zone.drag-over&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;rgba(232,&nbsp;255,&nbsp;90,&nbsp;0.07);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.drop-zone.has-image&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;justify-content:&nbsp;flex-start;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding-top:&nbsp;1.5rem;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.drop-icon&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;64px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;64px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border:&nbsp;2px&nbsp;solid&nbsp;var(--border);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;grid;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;place-items:&nbsp;center;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--muted);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;relative;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.drop-icon::before,
&nbsp;&nbsp;&nbsp;&nbsp;.drop-icon::after&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;&apos;&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;absolute;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;var(--accent);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.drop-icon::before&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;2px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;28px;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.drop-icon::after&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;28px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;2px;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.drop-text&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-align:&nbsp;center;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.82rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--muted);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line-height:&nbsp;1.7;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.drop-text&nbsp;strong&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--text);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-weight:&nbsp;500;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;block;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin-bottom:&nbsp;4px;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;#file-input&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;none;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.pixel-preview&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image-rendering:&nbsp;pixelated;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image-rendering:&nbsp;crisp-edges;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max-width:&nbsp;100%;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max-height:&nbsp;calc(100%&nbsp;-&nbsp;120px);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border:&nbsp;1px&nbsp;solid&nbsp;var(--border);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;none;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.preview-info&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Space&nbsp;Mono&apos;,&nbsp;monospace;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.72rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--accent3);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-align:&nbsp;center;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;none;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.btn-convert&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;none;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;var(--accent);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;#000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border:&nbsp;none;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Space&nbsp;Mono&apos;,&nbsp;monospace;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.78rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-weight:&nbsp;700;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;letter-spacing:&nbsp;1px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;0.6rem&nbsp;1.8rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursor:&nbsp;pointer;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-transform:&nbsp;uppercase;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transition:&nbsp;all&nbsp;0.15s;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;relative;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.btn-convert::after&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;&apos;&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;absolute;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bottom:&nbsp;-3px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right:&nbsp;-3px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;100%;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;100%;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border:&nbsp;2px&nbsp;solid&nbsp;var(--accent);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transition:&nbsp;all&nbsp;0.15s;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.btn-convert:hover&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;translate(-2px,&nbsp;-2px);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.btn-convert:hover::after&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bottom:&nbsp;-5px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right:&nbsp;-5px;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.btn-convert:active&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;translate(0,&nbsp;0);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.error-msg&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--accent2);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.78rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Space&nbsp;Mono&apos;,&nbsp;monospace;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-align:&nbsp;center;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;none;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;----&nbsp;Output&nbsp;panel&nbsp;----&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;.output-panel&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid-column:&nbsp;2;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid-row:&nbsp;1&nbsp;/&nbsp;3;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;flex;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flex-direction:&nbsp;column;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min-width:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;关键修复：防止超长单行文本把面板无限撑宽&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min-height:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;关键修复：防止纵向无限撑高&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;100%;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;填满父容器的高度&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.panel-header&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;1rem&nbsp;1.5rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-bottom:&nbsp;1px&nbsp;solid&nbsp;var(--border);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;flex;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;align-items:&nbsp;center;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;justify-content:&nbsp;space-between;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.panel-title&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Space&nbsp;Mono&apos;,&nbsp;monospace;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.72rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--muted);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;letter-spacing:&nbsp;2px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-transform:&nbsp;uppercase;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.panel-actions&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;flex;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gap:&nbsp;0.5rem;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.btn-sm&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;transparent;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border:&nbsp;1px&nbsp;solid&nbsp;var(--border);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--muted);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Space&nbsp;Mono&apos;,&nbsp;monospace;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.65rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;0.3rem&nbsp;0.8rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursor:&nbsp;pointer;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;letter-spacing:&nbsp;1px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-transform:&nbsp;uppercase;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transition:&nbsp;all&nbsp;0.15s;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.btn-sm:hover&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-color:&nbsp;var(--accent3);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--accent3);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.btn-sm.active&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-color:&nbsp;var(--accent);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--accent);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.code-area&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flex:&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflow:&nbsp;auto;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;此时生效，会规规矩矩在内部出现滚动条&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;1.2rem&nbsp;1.5rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Space&nbsp;Mono&apos;,&nbsp;monospace;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.68rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line-height:&nbsp;1.8;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;#c8c8e0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;var(--surface);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;white-space:&nbsp;pre-wrap;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;替换原来的&nbsp;pre：允许代码在超长时自动换行，防止横向无限溢出&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;word-break:&nbsp;break-all;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;强制长字符串/数组在边界断行，彻底杜绝撑开容器&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tab-size:&nbsp;2;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.code-area:empty::before&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;&apos;//&nbsp;上传像素画后点击&quot;转换&quot;按钮\n//&nbsp;这里将生成&nbsp;canvas&nbsp;绘制代码&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--muted);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-style:&nbsp;italic;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;syntax&nbsp;highlight&nbsp;colours&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;.kw&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;#ff5a8a;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.fn&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;#e8ff5a;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.str&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;#5af0ff;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.num&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;#ffb85a;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.cm&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;#6a6a88;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-style:&nbsp;italic;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.status-bar&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;0.4rem&nbsp;1.5rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border-top:&nbsp;1px&nbsp;solid&nbsp;var(--border);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;var(--bg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Space&nbsp;Mono&apos;,&nbsp;monospace;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.62rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--muted);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:&nbsp;flex;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gap:&nbsp;2rem;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.status-bar&nbsp;span&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;var(--accent3);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;copy&nbsp;toast&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;.toast&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;fixed;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bottom:&nbsp;2rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right:&nbsp;2rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;var(--accent);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;color:&nbsp;#000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-family:&nbsp;&apos;Space&nbsp;Mono&apos;,&nbsp;monospace;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size:&nbsp;0.72rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-weight:&nbsp;700;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding:&nbsp;0.5rem&nbsp;1.2rem;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;translateY(80px);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opacity:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transition:&nbsp;all&nbsp;0.3s&nbsp;cubic-bezier(.34,&nbsp;1.56,&nbsp;.64,&nbsp;1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointer-events:&nbsp;none;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z-index:&nbsp;1000;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;.toast.show&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transform:&nbsp;translateY(0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opacity:&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;pixel&nbsp;grid&nbsp;bg&nbsp;decoration&nbsp;*/
&nbsp;&nbsp;&nbsp;&nbsp;.pixel-grid-bg&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:&nbsp;absolute;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inset:&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background-image:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linear-gradient(var(--border)&nbsp;1px,&nbsp;transparent&nbsp;1px),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linear-gradient(90deg,&nbsp;var(--border)&nbsp;1px,&nbsp;transparent&nbsp;1px);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background-size:&nbsp;24px&nbsp;24px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opacity:&nbsp;0.3;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointer-events:&nbsp;none;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

&nbsp;&nbsp;&lt;header&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;logo&quot;&gt;PIXEL&lt;span&gt;→&lt;/span&gt;CVS&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;subtitle&quot;&gt;像素画&nbsp;·&nbsp;Canvas&nbsp;代码生成器&lt;/div&gt;
&nbsp;&nbsp;&lt;/header&gt;

&nbsp;&nbsp;&lt;main&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;Left:&nbsp;upload&nbsp;--&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;drop-zone&quot;&nbsp;id=&quot;dropZone&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;pixel-grid-bg&quot;&gt;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;drop-icon&quot;&nbsp;id=&quot;dropIcon&quot;&gt;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;drop-text&quot;&nbsp;id=&quot;dropText&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;strong&gt;拖拽或点击上传像素画&lt;/strong&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持&nbsp;PNG&nbsp;/&nbsp;GIF&nbsp;/&nbsp;BMP&nbsp;·&nbsp;8×8&nbsp;~&nbsp;512×512&nbsp;像素
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img&nbsp;class=&quot;pixel-preview&quot;&nbsp;id=&quot;preview&quot;&nbsp;alt=&quot;preview&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;preview-info&quot;&nbsp;id=&quot;previewInfo&quot;&gt;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;error-msg&quot;&nbsp;id=&quot;errorMsg&quot;&gt;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;class=&quot;btn-convert&quot;&nbsp;id=&quot;btnConvert&quot;&nbsp;onclick=&quot;convert()&quot;&gt;生成&nbsp;Canvas&nbsp;代码&lt;/button&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type=&quot;file&quot;&nbsp;id=&quot;file-input&quot;&nbsp;accept=&quot;image/png,image/gif,image/bmp,image/jpeg,image/webp&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;

&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;Right:&nbsp;output&nbsp;--&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;output-panel&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;panel-header&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;panel-title&quot;&gt;生成代码&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;panel-actions&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;class=&quot;btn-sm&nbsp;active&quot;&nbsp;id=&quot;btnModeInline&quot;&nbsp;onclick=&quot;setMode(&apos;inline&apos;)&quot;&gt;内联颜色&lt;/button&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;class=&quot;btn-sm&quot;&nbsp;id=&quot;btnModePalette&quot;&nbsp;onclick=&quot;setMode(&apos;palette&apos;)&quot;&gt;调色板&lt;/button&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;class=&quot;btn-sm&quot;&nbsp;id=&quot;btnCopy&quot;&nbsp;onclick=&quot;copyCode()&quot;&gt;复制&lt;/button&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;class=&quot;btn-sm&quot;&nbsp;id=&quot;btnDownload&quot;&nbsp;onclick=&quot;downloadCode()&quot;&gt;下载&lt;/button&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;code-area&quot;&nbsp;id=&quot;codeArea&quot;&gt;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;status-bar&quot;&nbsp;id=&quot;statusBar&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&nbsp;id=&quot;statSize&quot;&gt;—&lt;/span&gt;&nbsp;像素
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp;·&amp;nbsp;&nbsp;代码&nbsp;&lt;span&nbsp;id=&quot;statLines&quot;&gt;—&lt;/span&gt;&nbsp;行
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp;·&amp;nbsp;&nbsp;&lt;span&nbsp;id=&quot;statColors&quot;&gt;—&lt;/span&gt;&nbsp;种颜色
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;
&nbsp;&nbsp;&lt;/main&gt;

&nbsp;&nbsp;&lt;div&nbsp;class=&quot;toast&quot;&nbsp;id=&quot;toast&quot;&gt;已复制到剪贴板&lt;/div&gt;

&nbsp;&nbsp;&lt;script&gt;
&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;dropZone&nbsp;=&nbsp;document.getElementById(&apos;dropZone&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;fileInput&nbsp;=&nbsp;document.getElementById(&apos;file-input&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;preview&nbsp;=&nbsp;document.getElementById(&apos;preview&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;previewInfo&nbsp;=&nbsp;document.getElementById(&apos;previewInfo&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;btnConvert&nbsp;=&nbsp;document.getElementById(&apos;btnConvert&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;errorMsg&nbsp;=&nbsp;document.getElementById(&apos;errorMsg&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;codeArea&nbsp;=&nbsp;document.getElementById(&apos;codeArea&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;dropIcon&nbsp;=&nbsp;document.getElementById(&apos;dropIcon&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;dropText&nbsp;=&nbsp;document.getElementById(&apos;dropText&apos;);

&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;currentMode&nbsp;=&nbsp;&apos;inline&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;currentCode&nbsp;=&nbsp;&apos;&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;imgData&nbsp;=&nbsp;null;&nbsp;&nbsp;//&nbsp;{width,&nbsp;height,&nbsp;data:&nbsp;Uint8ClampedArray}

&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;----&nbsp;Drag&nbsp;&amp;&nbsp;Drop&nbsp;----
&nbsp;&nbsp;&nbsp;&nbsp;dropZone.addEventListener(&apos;click&apos;,&nbsp;e&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(e.target&nbsp;===&nbsp;btnConvert)&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileInput.click();
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;dropZone.addEventListener(&apos;dragover&apos;,&nbsp;e&nbsp;=&gt;&nbsp;{&nbsp;e.preventDefault();&nbsp;dropZone.classList.add(&apos;drag-over&apos;);&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;dropZone.addEventListener(&apos;dragleave&apos;,&nbsp;()&nbsp;=&gt;&nbsp;dropZone.classList.remove(&apos;drag-over&apos;));
&nbsp;&nbsp;&nbsp;&nbsp;dropZone.addEventListener(&apos;drop&apos;,&nbsp;e&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.preventDefault();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dropZone.classList.remove(&apos;drag-over&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;f&nbsp;=&nbsp;e.dataTransfer.files[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(f)&nbsp;loadFile(f);
&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;fileInput.addEventListener(&apos;change&apos;,&nbsp;()&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fileInput.files[0])&nbsp;loadFile(fileInput.files[0]);
&nbsp;&nbsp;&nbsp;&nbsp;});

&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;loadFile(file)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showError(&apos;&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;url&nbsp;=&nbsp;URL.createObjectURL(file);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;img&nbsp;=&nbsp;new&nbsp;Image();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img.onload&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;w&nbsp;=&nbsp;img.naturalWidth,&nbsp;h&nbsp;=&nbsp;img.naturalHeight;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(w&nbsp;&lt;&nbsp;8&nbsp;||&nbsp;h&nbsp;&lt;&nbsp;8&nbsp;||&nbsp;w&nbsp;&gt;&nbsp;512&nbsp;||&nbsp;h&nbsp;&gt;&nbsp;512)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showError(`尺寸&nbsp;${w}×${h}&nbsp;不在支持范围（8×8&nbsp;~&nbsp;512×512）内`);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL.revokeObjectURL(url);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Read&nbsp;pixel&nbsp;data
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;canvas&nbsp;=&nbsp;document.createElement(&apos;canvas&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas.width&nbsp;=&nbsp;w;&nbsp;canvas.height&nbsp;=&nbsp;h;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;ctx&nbsp;=&nbsp;canvas.getContext(&apos;2d&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctx.drawImage(img,&nbsp;0,&nbsp;0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgData&nbsp;=&nbsp;{&nbsp;width:&nbsp;w,&nbsp;height:&nbsp;h,&nbsp;data:&nbsp;ctx.getImageData(0,&nbsp;0,&nbsp;w,&nbsp;h).data&nbsp;};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL.revokeObjectURL(url);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Show&nbsp;preview
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preview.src&nbsp;=&nbsp;canvas.toDataURL();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preview.style.display&nbsp;=&nbsp;&apos;block&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;previewInfo.textContent&nbsp;=&nbsp;`${w}&nbsp;×&nbsp;${h}&nbsp;px`;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;previewInfo.style.display&nbsp;=&nbsp;&apos;block&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btnConvert.style.display&nbsp;=&nbsp;&apos;inline-block&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dropIcon.style.display&nbsp;=&nbsp;&apos;none&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dropText.style.display&nbsp;=&nbsp;&apos;none&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dropZone.classList.add(&apos;has-image&apos;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Auto-convert
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convert();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img.onerror&nbsp;=&nbsp;()&nbsp;=&gt;&nbsp;showError(&apos;图片加载失败，请重试&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img.src&nbsp;=&nbsp;url;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;showError(msg)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorMsg.textContent&nbsp;=&nbsp;msg;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorMsg.style.display&nbsp;=&nbsp;msg&nbsp;?&nbsp;&apos;block&apos;&nbsp;:&nbsp;&apos;none&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;setMode(m)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentMode&nbsp;=&nbsp;m;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(&apos;btnModeInline&apos;).classList.toggle(&apos;active&apos;,&nbsp;m&nbsp;===&nbsp;&apos;inline&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(&apos;btnModePalette&apos;).classList.toggle(&apos;active&apos;,&nbsp;m&nbsp;===&nbsp;&apos;palette&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(imgData)&nbsp;convert();
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;----&nbsp;Core&nbsp;conversion&nbsp;----
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;convert()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!imgData)&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;{&nbsp;width:&nbsp;W,&nbsp;height:&nbsp;H,&nbsp;data&nbsp;}&nbsp;=&nbsp;imgData;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Build&nbsp;pixel&nbsp;map:&nbsp;index&nbsp;-&gt;&nbsp;rgba&nbsp;string
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;pixels&nbsp;=&nbsp;[];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;W&nbsp;*&nbsp;H;&nbsp;i++)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;r&nbsp;=&nbsp;data[i&nbsp;*&nbsp;4],&nbsp;g&nbsp;=&nbsp;data[i&nbsp;*&nbsp;4&nbsp;+&nbsp;1],&nbsp;b&nbsp;=&nbsp;data[i&nbsp;*&nbsp;4&nbsp;+&nbsp;2],&nbsp;a&nbsp;=&nbsp;data[i&nbsp;*&nbsp;4&nbsp;+&nbsp;3];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pixels.push(a&nbsp;&lt;&nbsp;16&nbsp;?&nbsp;null&nbsp;:&nbsp;rgbaStr(r,&nbsp;g,&nbsp;b,&nbsp;a));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;uniqueColors&nbsp;=&nbsp;[...new&nbsp;Set(pixels.filter(Boolean))];

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(currentMode&nbsp;===&nbsp;&apos;palette&apos;)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentCode&nbsp;=&nbsp;generatePaletteCode(W,&nbsp;H,&nbsp;pixels,&nbsp;uniqueColors);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentCode&nbsp;=&nbsp;generateInlineCode(W,&nbsp;H,&nbsp;pixels);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;renderCode(currentCode);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateStats(W,&nbsp;H,&nbsp;uniqueColors.length);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;rgbaStr(r,&nbsp;g,&nbsp;b,&nbsp;a)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a&nbsp;===&nbsp;255)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&apos;#&apos;&nbsp;+&nbsp;[r,&nbsp;g,&nbsp;b].map(v&nbsp;=&gt;&nbsp;v.toString(16).padStart(2,&nbsp;&apos;0&apos;)).join(&apos;&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;`rgba(${r},${g},${b},${(a&nbsp;/&nbsp;255).toFixed(2)})`;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;---&nbsp;Mode&nbsp;1:&nbsp;inline&nbsp;(run-length&nbsp;compressed&nbsp;rows)&nbsp;---
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;generateInlineCode(W,&nbsp;H,&nbsp;pixels)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;scale&nbsp;=&nbsp;computeScale(W,&nbsp;H);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;rows&nbsp;=&nbsp;[];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;y&nbsp;=&nbsp;0;&nbsp;y&nbsp;&lt;&nbsp;H;&nbsp;y++)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;RLE&nbsp;per&nbsp;row
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;row&nbsp;=&nbsp;[];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;i&nbsp;=&nbsp;y&nbsp;*&nbsp;W;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(i&nbsp;&lt;&nbsp;y&nbsp;*&nbsp;W&nbsp;+&nbsp;W)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;col&nbsp;=&nbsp;pixels[i];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;run&nbsp;=&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(i&nbsp;+&nbsp;run&nbsp;&lt;&nbsp;y&nbsp;*&nbsp;W&nbsp;+&nbsp;W&nbsp;&amp;&amp;&nbsp;pixels[i&nbsp;+&nbsp;run]&nbsp;===&nbsp;col)&nbsp;run++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row.push([col,&nbsp;run]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;+=&nbsp;run;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows.push(row);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Serialise&nbsp;compactly
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Format&nbsp;each&nbsp;row&nbsp;as&nbsp;array&nbsp;of&nbsp;[color,&nbsp;count]&nbsp;—&nbsp;but&nbsp;skip&nbsp;fully-null&nbsp;rows
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;rowStrs&nbsp;=&nbsp;rows.map((row,&nbsp;y)&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(row.every(([c])&nbsp;=&gt;&nbsp;c&nbsp;===&nbsp;null))&nbsp;return&nbsp;null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;segs&nbsp;=&nbsp;row.map(([c,&nbsp;n])&nbsp;=&gt;&nbsp;c&nbsp;===&nbsp;null&nbsp;?&nbsp;`[0,${n}]`&nbsp;:&nbsp;(n&nbsp;===&nbsp;1&nbsp;?&nbsp;`&quot;${c}&quot;`&nbsp;:&nbsp;`[&quot;${c}&quot;,${n}]`));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;`&nbsp;&nbsp;/*&nbsp;y=${y}&nbsp;*/&nbsp;[${segs.join(&apos;,&apos;)}]`;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;rowsCode&nbsp;=&nbsp;rowStrs
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map((r,&nbsp;y)&nbsp;=&gt;&nbsp;r&nbsp;===&nbsp;null&nbsp;?&nbsp;`&nbsp;&nbsp;null&nbsp;/*&nbsp;y=${y}&nbsp;transparent&nbsp;*/`&nbsp;:&nbsp;r)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.join(&apos;,\n&apos;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;`&lt;!DOCTYPE&nbsp;html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta&nbsp;charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;pixel&nbsp;art&lt;/title&gt;
&lt;style&gt;body{margin:0;background:#111;display:flex;align-items:center;justify-content:center;min-height:100vh}&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;canvas&nbsp;id=&quot;c&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
//&nbsp;${W}x${H}&nbsp;pixel&nbsp;art&nbsp;&nbsp;scale:${scale}x
const&nbsp;W=${W},&nbsp;H=${H},&nbsp;S=${scale};
const&nbsp;rows=[
${rowsCode}
];
const&nbsp;c=document.getElementById(&apos;c&apos;);
c.width=W*S;&nbsp;c.height=H*S;
const&nbsp;ctx=c.getContext(&apos;2d&apos;);
rows.forEach((row,y)=&gt;{
&nbsp;&nbsp;if(!row)return;
&nbsp;&nbsp;let&nbsp;x=0;
&nbsp;&nbsp;row.forEach(seg=&gt;{
&nbsp;&nbsp;&nbsp;&nbsp;if(Array.isArray(seg)){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const[col,n]=seg;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(typeof&nbsp;col===&apos;string&apos;){ctx.fillStyle=col;ctx.fillRect(x*S,y*S,n*S,S);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x+=n;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctx.fillStyle=seg;ctx.fillRect(x*S,y*S,S,S);x++;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;});
});
&lt;\/script&gt;
&lt;/body&gt;
&lt;/html&gt;`;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;---&nbsp;Mode&nbsp;2:&nbsp;palette&nbsp;+&nbsp;index&nbsp;grid&nbsp;---
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;generatePaletteCode(W,&nbsp;H,&nbsp;pixels,&nbsp;palette)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;idx&nbsp;=&nbsp;{};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;palette.forEach((c,&nbsp;i)&nbsp;=&gt;&nbsp;idx[c]&nbsp;=&nbsp;i);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Build&nbsp;index&nbsp;rows,&nbsp;compressing&nbsp;transparent&nbsp;as&nbsp;-1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;grid&nbsp;=&nbsp;[];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;y&nbsp;=&nbsp;0;&nbsp;y&nbsp;&lt;&nbsp;H;&nbsp;y++)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;row&nbsp;=&nbsp;[];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;x&nbsp;=&nbsp;0;&nbsp;x&nbsp;&lt;&nbsp;W;&nbsp;x++)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;c&nbsp;=&nbsp;pixels[y&nbsp;*&nbsp;W&nbsp;+&nbsp;x];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row.push(c&nbsp;===&nbsp;null&nbsp;?&nbsp;-1&nbsp;:&nbsp;idx[c]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;RLE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;rle&nbsp;=&nbsp;[];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;i&nbsp;=&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(i&nbsp;&lt;&nbsp;row.length)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;run&nbsp;=&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(i&nbsp;+&nbsp;run&nbsp;&lt;&nbsp;row.length&nbsp;&amp;&amp;&nbsp;row[i&nbsp;+&nbsp;run]&nbsp;===&nbsp;row[i])&nbsp;run++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rle.push(run&nbsp;===&nbsp;1&nbsp;?&nbsp;row[i]&nbsp;:&nbsp;[row[i],&nbsp;run]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;+=&nbsp;run;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid.push(rle);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;scale&nbsp;=&nbsp;computeScale(W,&nbsp;H);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;paletteStr&nbsp;=&nbsp;palette.map(c&nbsp;=&gt;&nbsp;`&quot;${c}&quot;`).join(&apos;,&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;gridStr&nbsp;=&nbsp;grid.map((row,&nbsp;y)&nbsp;=&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`&nbsp;&nbsp;/*&nbsp;y=${y}&nbsp;*/&nbsp;[${row.map(s&nbsp;=&gt;&nbsp;Array.isArray(s)&nbsp;?&nbsp;`[${s[0]},${s[1]}]`&nbsp;:&nbsp;s).join(&apos;,&apos;)}]`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;).join(&apos;,\n&apos;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;`&lt;!DOCTYPE&nbsp;html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta&nbsp;charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;pixel&nbsp;art&lt;/title&gt;
&lt;style&gt;body{margin:0;background:#111;display:flex;align-items:center;justify-content:center;min-height:100vh}&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;canvas&nbsp;id=&quot;c&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
//&nbsp;${W}x${H}&nbsp;pixel&nbsp;art&nbsp;&nbsp;${palette.length}&nbsp;colors&nbsp;&nbsp;scale:${scale}x
const&nbsp;W=${W},H=${H},S=${scale};
const&nbsp;P=[${paletteStr}];&nbsp;//&nbsp;palette
const&nbsp;G=[
${gridStr}
];
const&nbsp;c=document.getElementById(&apos;c&apos;);
c.width=W*S;c.height=H*S;
const&nbsp;ctx=c.getContext(&apos;2d&apos;);
G.forEach((row,y)=&gt;{
&nbsp;&nbsp;let&nbsp;x=0;
&nbsp;&nbsp;row.forEach(seg=&gt;{
&nbsp;&nbsp;&nbsp;&nbsp;const[ci,n]=Array.isArray(seg)?seg:[seg,1];
&nbsp;&nbsp;&nbsp;&nbsp;if(ci&gt;=0){ctx.fillStyle=P[ci];ctx.fillRect(x*S,y*S,n*S,S);}
&nbsp;&nbsp;&nbsp;&nbsp;x+=n;
&nbsp;&nbsp;});
});
&lt;\/script&gt;
&lt;/body&gt;
&lt;/html&gt;`;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;computeScale(w,&nbsp;h)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Target&nbsp;canvas&nbsp;around&nbsp;400–600px,&nbsp;never&nbsp;go&nbsp;below&nbsp;1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;target&nbsp;=&nbsp;480;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;s&nbsp;=&nbsp;Math.max(1,&nbsp;Math.min(32,&nbsp;Math.floor(target&nbsp;/&nbsp;Math.max(w,&nbsp;h))));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;s;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;----&nbsp;Render&nbsp;with&nbsp;naive&nbsp;syntax&nbsp;highlight&nbsp;----
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;renderCode(code)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;escaped&nbsp;=&nbsp;code
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/&amp;/g,&nbsp;&apos;&amp;amp;&apos;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/&lt;/g,&nbsp;&apos;&amp;lt;&apos;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/&gt;/g,&nbsp;&apos;&amp;gt;&apos;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Very&nbsp;lightweight&nbsp;highlight
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;hl&nbsp;=&nbsp;escaped
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/(\/\/.+)/g,&nbsp;&apos;&lt;span&nbsp;class=&quot;cm&quot;&gt;$1&lt;/span&gt;&apos;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/\b(const|let|var|function|return|if|else|forEach|new|document|null|true|false)\b/g,&nbsp;&apos;&lt;span&nbsp;class=&quot;kw&quot;&gt;$1&lt;/span&gt;&apos;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/\b(getElementById|getContext|fillRect|fillStyle|width|height)\b/g,&nbsp;&apos;&lt;span&nbsp;class=&quot;fn&quot;&gt;$1&lt;/span&gt;&apos;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/(&amp;quot;[^&amp;]*&amp;quot;|&amp;#39;[^&amp;#]*&amp;#39;)/g,&nbsp;&apos;&lt;span&nbsp;class=&quot;str&quot;&gt;$1&lt;/span&gt;&apos;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.replace(/\b(\d+)\b/g,&nbsp;&apos;&lt;span&nbsp;class=&quot;num&quot;&gt;$1&lt;/span&gt;&apos;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;codeArea.innerHTML&nbsp;=&nbsp;hl;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;updateStats(w,&nbsp;h,&nbsp;colors)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(&apos;statSize&apos;).textContent&nbsp;=&nbsp;`${w}×${h}`;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;lines&nbsp;=&nbsp;currentCode.split(&apos;\n&apos;).length;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(&apos;statLines&apos;).textContent&nbsp;=&nbsp;lines;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(&apos;statColors&apos;).textContent&nbsp;=&nbsp;colors;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;copyCode()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!currentCode)&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;navigator.clipboard.writeText(currentCode).then(()&nbsp;=&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;t&nbsp;=&nbsp;document.getElementById(&apos;toast&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.classList.add(&apos;show&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(()&nbsp;=&gt;&nbsp;t.classList.remove(&apos;show&apos;),&nbsp;2000);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;downloadCode()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!currentCode)&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;a&nbsp;=&nbsp;document.createElement(&apos;a&apos;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.href&nbsp;=&nbsp;&apos;data:text/html;charset=utf-8,&apos;&nbsp;+&nbsp;encodeURIComponent(currentCode);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.download&nbsp;=&nbsp;&apos;pixel-art.html&apos;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.click();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (羽落)]]></author>
			<pubDate>Tue, 19 May 2026 14:28:15 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5044&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[虐龍癖應當被制止嗎？]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5050&amp;action=new</link>
			<description><![CDATA[<div class="quotebox"><blockquote><div><p><a href="/forum/profile.php?id=1900" rel="nofollow">@抓根寶</a>&nbsp;寫道:&nbsp;《冰與火之歌》裏，龍被鎖在地下幾十年，瘦成皮包骨，被丹妮莉絲鎖鏈捆綁、強行騎乘、當作戰爭機器</p></div></blockquote></div><p>如果使用了AI輔助寫作，請注意覈實關鍵信息。比如這一處有顯而易見的錯誤：<br>原著中丹妮莉絲曾因龍傷害平民的風險，將龍臨時鎖在彌林大金字塔下，時間沒有幾十年。按時餵食，不會“瘦成皮包骨”。坦格利安家族與龍具有血緣綁定，並非強行騎乘。</p>]]></description>
			<author><![CDATA[dummy@example.com (shiningdracon)]]></author>
			<pubDate>Mon, 18 May 2026 11:39:58 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5050&amp;action=new</guid>
		</item>
	</channel>
</rss>
