<?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=active&amp;type=RSS" rel="self" type="application/rss+xml" />
		<title><![CDATA[鱗目界域]]></title>
		<link>https://yinglong.org/forum/index.php</link>
		<description><![CDATA[位于 鱗目界域 的最新主题]]></description>
		<lastBuildDate>Fri, 26 Jun 2026 11:11:51 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[血腥味，對於龍來說是什麼一種氣味？]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5060&amp;action=new</link>
			<description><![CDATA[<div class="quotebox"><blockquote><div><p><a href="/forum/profile.php?id=1760" rel="nofollow">@羽落</a>&nbsp;寫道:&nbsp;自己/自己造成的流血也同樣有血腥味。</p></div></blockquote></div><p>這已經是行動之後了。</p><p>行動之前，血的氣味代表“有事件發生”。</p><p>對於掠食者來說，可以是“好香，去看看”，或“聞着一般，算了”，或“可能有競爭者，慎重些”</p><p>以貓爲例，它們更感興趣的是具體獵物的氣味，比如鼠、兔、鳥，而不是單純的血味。貓雖然不是頂級獵食者，但是可以參考激活貓捕獵本能的多是視覺（會動的小東西）、聽覺（悉窣聲）等綜合信號，嗅覺的佔比似乎不大。據說市面上有賣一些貓用的獵物氣味產品，但是效果有爭議，大概因貓而異吧，個體差異很大。</p><p>對血特別興奮的頂級獵食者似乎不多，血液能吸引獵食者的注意力，傾向於前去查看，但好像也就僅限於此。</p>]]></description>
			<author><![CDATA[dummy@example.com (shiningdracon)]]></author>
			<pubDate>Fri, 26 Jun 2026 11:11:51 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5060&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[Minecraft龍之生存檔記錄]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=4956&amp;action=new</link>
			<description><![CDATA[<p>2026.6.21<br><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_1760_6a3e5562e4c47.jpeg" alt="" /></span><br>最近在創造檔擺拍造的景，有些把它造完整遷移到生存檔的想法，但至少得等期末過去後：<br>https://www.bilibili.com/opus/1216352231690862642<br>不知道4k屏會不會效果更好些<span class="curtain">不管好不好反正我沒有</span>。</p>]]></description>
			<author><![CDATA[dummy@example.com (羽落)]]></author>
			<pubDate>Fri, 26 Jun 2026 10:36:35 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=4956&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[我覺得龍可以使用自我意識、藉助他人的軀體來生活]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5059&amp;action=new</link>
			<description><![CDATA[<p>我覺得龍可以使用自我意識、藉助他人的軀體來生活，甚至可以借用任何物種，這算是一種形式的復活或者永生#龍#</p>]]></description>
			<author><![CDATA[dummy@example.com (wangweiwei)]]></author>
			<pubDate>Sun, 21 Jun 2026 02:38:10 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5059&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[中短期工程]龍族種羣擴散模擬程序]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5039&amp;action=new</link>
			<description><![CDATA[<p>發現要確定這個模擬的一些參數好像得先模擬一個個體在理想無競爭環境下的家域範圍，於是找了下鳥類飛行耗能的經驗公式：</p><div class="math_block">
飛行成本&nbsp;(kJ/h)&nbsp;=&nbsp;3.167&nbsp;×&nbsp;M^{1.464}&nbsp;×&nbsp;L^{-1.614}
</div><p>M&nbsp;=&nbsp;體重（g）<br>L&nbsp;=&nbsp;翼長（cm）<br>來源：Castro,&nbsp;G.,&nbsp;&amp;&nbsp;Myers,&nbsp;J.&nbsp;P.&nbsp;(1988).&nbsp;A&nbsp;Statistical&nbsp;Method&nbsp;to&nbsp;Estimate&nbsp;the&nbsp;Cost&nbsp;of&nbsp;Flight&nbsp;in&nbsp;Birds&nbsp;(Un&nbsp;Método&nbsp;Estadístico&nbsp;para&nbsp;Estimar&nbsp;el&nbsp;Costo&nbsp;Energético&nbsp;del&nbsp;Vuelo&nbsp;en&nbsp;Aves).&nbsp;Journal&nbsp;of&nbsp;Field&nbsp;Ornithology,&nbsp;59(4),&nbsp;369–380.&nbsp;http://www.jstor.org/stable/4513368</p><p>其實有想過純能量角度建模一個能耗公式，但是瞭解到鳥類用於飛行做功的效率通常在22%~7%，這個誤差範圍太大了，20%和10%的區別會導致能耗直接差2倍......</p>]]></description>
			<author><![CDATA[dummy@example.com (羽落)]]></author>
			<pubDate>Sat, 20 Jun 2026 07:11:11 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5039&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[[轉]龍事說（上、中、下、外傳）]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=23&amp;action=new</link>
			<description><![CDATA[<div class="quotebox"><blockquote><div><p><a href="/forum/profile.php?id=2" rel="nofollow">@shiningdracon</a>&nbsp;寫道:&nbsp;有兩個地區的神話與傳說中並無類似“龍”造型的生命記載，一個是北極圈的愛斯基摩神話，另外一個是北美洲的印第安傳說。據悉這兩個地區均缺乏大型蛇或大型蜥之類的動物出沒的記載，進一步引證了龍的藍本並非憑空想象，而是源自動物造型的演化。由於爬行動物多棲息於溼潤的地方，所以龍往往與毒及水產生密切關係。</p></div></blockquote></div><p>看來這裏需要更新修正一下。因紐特（愛斯基摩）和北美洲印第安也有類似龍的傳說。</p><p><a href="https://en.wikipedia.org/wiki/Tizheruk" rel="nofollow">https://en.wikipedia.org/wiki/Tizheruk</a></p><div class="quotebox"><blockquote><div><p>在因紐特宗教中，提澤魯克是一種神話中的大型蛇狀生物，據說棲息在阿拉斯加基島附近的水域。據說它有一個兩米（6.6英尺）高的頭部和帶有鰭的尾巴。當地因紐特人聲稱，它曾在碼頭上抓走人們，而他們卻未察覺到它的存在。它也被稱爲帕爾-賴-尤克。據說它類似於奧卡納卡內斯（Ogopogo）的奈塔卡（Naitaka）和努查努爾特（Nuu-chah-nulth）的海特利克（Haietlik）。&nbsp;<br></p></div></blockquote></div><p><a href="/forum/viewtopic.php?id=5003" rel="nofollow">角蛇/有角之蛇（The&nbsp;Horned&nbsp;Serpent）</a></p><div class="quotebox"><blockquote><div><p>角蛇是一類出現在多種美洲原住民文化口述傳統中的超自然生物，主要分佈於東南林地地區、大湖地區以及大平原相關文化中。它們通常與水域、力量、危險與靈性能力相關。<br></p></div></blockquote></div>]]></description>
			<author><![CDATA[dummy@example.com (shiningdracon)]]></author>
			<pubDate>Tue, 16 Jun 2026 10:27:06 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=23&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[龍圖-雜七雜八的短漫]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=2619&amp;action=new</link>
			<description><![CDATA[<p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a29347d71a58.jpeg" alt="" /></span></p>]]></description>
			<author><![CDATA[dummy@example.com (shiningdracon)]]></author>
			<pubDate>Wed, 10 Jun 2026 09:55:12 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=2619&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[列奧納多·達·芬奇與龍]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5058&amp;action=new</link>
			<description><![CDATA[<p>與同時代的其它畫家畫龍時的宗教意味不同，達·芬奇似乎經常把龍當作一種生物來創作。<br></p><hr><p>Cats,&nbsp;lions,&nbsp;and&nbsp;a&nbsp;dragon&nbsp;<br>c.1517-18</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a290bbf31063.jpeg" alt="" /></span></p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a290bc40c264.jpeg" alt="" /></span></p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a290bc8e3add.jpeg" alt="" /></span></p><p>這是一張包含二十多幅貓與獅子素描的畫頁，描繪了它們各種各樣的姿態：熟睡臥伏、靜坐、潛行、嬉戲、搏鬥，以及其中一隻受驚時弓背炸毛的模樣。在畫頁下半部分，以一個頗爲奇特的角度繪有一條龍，其頭部向後彎曲，越過肩膀回望。</p><p>這是達·芬奇最迷人的素描作品之一，幾乎涵蓋了他創作風格的全部光譜：從盤旋蜷曲、極具“達·芬奇風格”的龍，到那些觀察入微、毫不矯飾的家貓寫生。右側中央最爲細緻的幾幅研究描繪了熟睡中的貓，似乎是直接對着靜止不動的實物寫生而成；相比之下，那些貓打鬥的場景則只能依據轉瞬即逝的視覺印象加以重構。</p><p>在多數搏鬥場面中，很難辨認哪條肢體屬於哪隻貓；而在下方中央的一幅習作中，達·芬奇甚至將兩隻纏鬥在一起的貓畫成了一個幾乎對稱的整體，其造型令人聯想到羅馬式雕刻中的裝飾圖案。</p><p>圍繞這些家貓研究的是七幅同一頭母獅的素描，大多表現其伏低身軀或悄然潛行的姿態。當時的意大利人對獅子並不陌生——例如，在&nbsp;Palazzo&nbsp;della&nbsp;Signoria（佛羅倫薩市政宮）後方就曾飼養着獅子，它們是這座城市的象徵之一。達·芬奇在這些素描中展現出對獅子解剖結構與身體比例的清晰理解。</p><p>然而，這張畫頁真正統一的主題，則體現在底部一段簡短且未完成的筆記中：<br></p><div class="quotebox"><blockquote><div><p>“關於屈曲與伸展。<br>這一類動物，以獅子爲其王者，因爲它擁有柔韌的脊柱……”</p></div></blockquote></div><p>另一張與之相關的馬匹研究畫頁（RCIN&nbsp;912331）上也有類似的筆記：<br></p><div class="quotebox"><blockquote><div><p>“蛇形運動是動物最主要的運動方式，而且有兩種：第一種沿身體長度方向發生，第二種沿身體寬度方向發生。”</p></div></blockquote></div><p>這些研究的目的，還可由達·芬奇約1513—1514年寫於現藏巴黎的《E手稿》中的一則備忘錄得到證實：<br></p><div class="quotebox"><blockquote><div><p>“撰寫一部專門論述四足動物運動的著作，其中也包括人類，因爲人在嬰兒時期同樣以四肢爬行。”</p></div></blockquote></div><p>因此可以明確看出，達·芬奇在這些素描中的首要關注點，是貓科動物所能呈現出的各種姿態與運動形式。而那條龍之所以被添加進來，僅僅是爲了提供一個更加極端的案例——它所受限制的不是現實中的解剖結構，而只是藝術家的想象力。</p><p>不過，儘管達·芬奇曾表示有意撰寫一部關於動物運動的專論——這或許也可看作是他在人體解剖學研究受阻時期的一種“替代性創作”——但並沒有任何證據表明這部著作後來得到過系統而深入的發展。</p><p>原文：<a href="https://www.rct.uk/collection/912363/cats-lions-and-a-dragon" rel="nofollow">https://www.rct.uk/collection/912363/cats-lions-and-a-dragon</a><br></p><hr><p>Studies&nbsp;of&nbsp;dragons.&nbsp;<br>c.&nbsp;1478-80</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a290d6c033e6.jpeg" alt="" /></span></p><p>這是關於一條龍被長矛擊中後踉蹌後退的習作。在左上角幾乎難以察覺的一幅銀尖筆（stylus）草圖中（將紙張倒轉來看），可以看到這條龍癱倒在地。這些龍符合文藝復興時期關於創造怪獸的經典建議：將不同動物的身體部位拼接組合起來。達·芬奇本人也曾這樣建議：<br></p><div class="quotebox"><blockquote><div><p>如果你希望創造一種由你想象出來、卻看上去自然真實的動物——例如一條龍——那麼就取獒犬或獵犬的頭部，貓的眼睛，豪豬的耳朵，靈緹犬的鼻子，獅子的額頭，老公雞的太陽穴，再加上龜鱉類動物的脖頸。</p></div></blockquote></div><p>在這幅作品中，龍的翅膀一半像鳥、一半像蝙蝠；腿部屬於獅子；頭部像狗；頸部和尾巴則如蛇一般。然而，它的身體卻像一隻被拔光羽毛的雞。達·芬奇在將這些不同部分連接到這個軀幹上時顯得相當猶豫不決——人們很難分辨哪裏是前方、哪裏是後方，也難以想象這頭怪獸在未遭受攻擊時究竟會是什麼模樣。</p><p>原文：<a href="https://www.rct.uk/collection/912370/recto-studies-of-dragons-verso-a-design-for-a-decorated-cuirass" rel="nofollow">https://www.rct.uk/collection/912370/recto-studies-of-dragons-verso-a-design-for-a-decorated-cuirass</a><br></p><hr><p>A&nbsp;design&nbsp;for&nbsp;a&nbsp;dragon&nbsp;costume<br>c.1517-18</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a290f3fde233.jpeg" alt="" /></span></p><p>這是一幅龍的素描，描繪其向右側行進的側面形象。它擁有覆蓋毛髮的身體和尾巴、短角、張開的嘴，以及——看起來——從後頸部伸出的一隻長滿毛髮並帶有利爪的前臂。</p><p>作爲在法國宮廷任職的藝術家，達·芬奇曾爲衆多獻給法國國王&nbsp;Francis&nbsp;I&nbsp;的宮廷娛樂活動設計異國風格的服裝。這幅素描似乎是一件龍形戲服的設計草圖，其內部可容納兩個人，類似於傳統啞劇中的“馬形戲服”（由兩人共同扮演一匹馬）。</p><p>在龍頭側面，可以看到一隻用黑粉筆勾畫的利爪前臂從頭部旁邊伸出。它的位置恰好與扮演怪獸前半部分之人的自然身高相符：此人負責操控龍的前腿，並像中國節慶中的舞龍表演者那樣，用肩膀支撐碩大的龍頭。因此，這幅作品很可能並非對真實動物或神話生物的研究，而是一項舞臺表演服裝的設計方案。</p><p>原文：<a href="https://www.rct.uk/collection/912369/a-design-for-a-dragon-costume" rel="nofollow">https://www.rct.uk/collection/912369/a-design-for-a-dragon-costume</a><br></p><hr><p>A&nbsp;Horseman&nbsp;Fighting&nbsp;a&nbsp;Dragon.<br>c.1480-1481</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a2911f867882.jpeg" alt="" /></span></p><p>一幅鋼筆與墨水並輔以淡彩渲染的素描。描繪了一場激烈的搏鬥：一名騎士騎在一匹騰躍而扭轉身體的戰馬上，與一條兇猛的有翼巨龍交戰。龍擁有獅子的身軀、蛇一般細長的頸部與尾巴，以及狼的頭部，同時還帶有某些鱷魚和人類的特徵——這種複合怪物形象是達·芬奇反覆使用的類型。</p><p>龍以四分之三側面角度出現，柔軟的腹部暴露在外。無論是龍，還是馬與騎士，都通過面部表情和身體動作展現出極度緊張的情緒與力量感。</p><p>動物們的肢體彼此纏繞，這表明達·芬奇並非將這些形象作爲孤立個體來描繪，而是把整個場景視爲一個有機統一的整體。</p><p>&nbsp;A&nbsp;Horseman&nbsp;in&nbsp;Combat&nbsp;with&nbsp;a&nbsp;Griffin.<br>c.1478–1482</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a291d0356d0d.jpeg" alt="" /></span><br></p><p>Two&nbsp;Horsemen&nbsp;Fighting&nbsp;a&nbsp;Dragon,&nbsp;a&nbsp;Horseman,&nbsp;Two&nbsp;Horses&nbsp;and&nbsp;a&nbsp;Horse&nbsp;Facing&nbsp;a&nbsp;Dog&nbsp;(recto).&nbsp;<br>c.1481–1482</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a2919f5d4e2d.jpeg" alt="" /></span></p><p>Popham（20世紀英國最重要的素描與版畫研究專家之一，也是達·芬奇素描研究的早期開拓者）與&nbsp;Carmen&nbsp;C.&nbsp;Bambach（被普遍認爲是目前英語世界最重要的達·芬奇研究者之一）&nbsp;都認爲，這三張達·芬奇的“騎士與龍搏鬥”系列草圖並非爲“聖喬治屠龍”題材繪畫所作的預備稿。</p><p>他們指出，這一母題貫穿於達·芬奇的整個創作生涯，並提出了若干理由來說明這些作品並不屬於聖喬治圖像傳統：</p><p>首先，在羅斯柴爾德遺贈素描（圖3）中，可以看到兩名騎士共同與一條龍作戰，而不是聖喬治獨自屠龍。</p><p>其次，在阿什莫林博物館的那幅草圖（圖2）中，騎士面對的並非龍，而是一隻獅鷲（griffin）。然而根據中世紀動物寓言傳統（bestiaries），獅鷲通常是基督的象徵。</p><p>此外，還有一些其他因素也表明這幅素描並非聖喬治題材：</p><p>騎士與龍之間並沒有明顯的勝負關係；<br>畫面中缺少聖喬治傳說裏常見的公主形象；<br>騎士身份不明，沒有任何聖人標識；<br>騎士也沒有身着盔甲。</p><p>因此，這些特徵都使人難以將這類作品解釋爲傳統意義上的“聖喬治屠龍圖”。<br></p><hr><p>Five&nbsp;Miniatures&nbsp;of&nbsp;St.&nbsp;George,&nbsp;a&nbsp;Cat,&nbsp;and&nbsp;Horses.&nbsp;<br>c.1516–1519</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a291a5e25af0.jpeg" alt="" /></span></p><p>包含五幅“聖喬治”微型草圖的畫頁，體現了“騎士與龍搏鬥”這一母題象徵意義中的科學層面：它表現的是作用與反作用、第一推動者等物理學法則。</p><p>學界普遍認同&nbsp;Anny&nbsp;E.&nbsp;Popp（一位奧地利藝術史學家，屬於著名的“維也納藝術史學派”第二代學者）&nbsp;的觀點，即這張畫頁創作於達·芬奇晚年，並與另一張描繪貓類運動研究的素描密切相關。這種關聯反映了達·芬奇當時對於動物運動方式的濃厚興趣，而這一興趣又與他關於物質收縮與擴張現象的研究相一致。</p><p>在這張畫頁上，達·芬奇寫下了如下文字：<br></p><div class="quotebox"><blockquote><div><p>“動物運動中的主要動作是蛇形運動（serpeggiamento），而這種運動具有雙重形式：第一種沿身體長度方向展開，第二種則沿身體寬度方向展開。”</p></div></blockquote></div><p>這段文字討論的是力（force）與運動（motion）的問題，而這恰恰是達·芬奇著述中始終關注的核心主題之一。他在另一處手稿（H.3&nbsp;93a）中寫道：<br></p><div class="quotebox"><blockquote><div><p>“Il&nbsp;moto&nbsp;è&nbsp;causa&nbsp;d’ogni&nbsp;vita.”<br>“運動是所有生命的原因。”</p></div></blockquote></div><hr><p>Allegory&nbsp;of&nbsp;the&nbsp;Lizard&nbsp;Symbolizing&nbsp;Truth&nbsp;(recto).<br>c.1489–1496</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a2918df3c91b.jpeg" alt="" /></span></p><p>該草圖附有一段寓言性文字，解釋了“蛇龍”（biscia）在人類靈魂中的本質：當人沉睡時，它會威脅人的安全。<br></p><hr><p>Madonna&nbsp;and&nbsp;Child&nbsp;with&nbsp;St.&nbsp;John&nbsp;the&nbsp;Infant&nbsp;and&nbsp;other&nbsp;Figures<br>(recto).&nbsp;<br>c.1478–1480</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a2918800117e.jpeg" alt="" /></span></p><p>《聖母、聖嬰與幼年施洗者約翰》草圖。在這張畫頁的下方，可以看到一名男子逐漸變成獅子的圖像，而這頭獅子隨後又與一條龍對峙。<br></p><hr><p>Allegory&nbsp;with&nbsp;a&nbsp;Man&nbsp;Holding&nbsp;a&nbsp;Solar&nbsp;Mirror&nbsp;and&nbsp;Wild&nbsp;Animals&nbsp;Battling&nbsp;a&nbsp;Dragon.&nbsp;<br>c.1494</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a29140ebb08e.jpeg" alt="" /></span></p><p>達·芬奇在其第一次米蘭時期（通常定年約爲1494年）繪製了一幅關於“持鏡之人與野獸搏鬥”的寓意草圖。<br></p><hr><p>Study&nbsp;for&nbsp;the&nbsp;Background&nbsp;of&nbsp;the&nbsp;Adoration&nbsp;of&nbsp;the&nbsp;Magi.<br>c.1481</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a29158a923aa.jpeg" alt="" /></span></p><p>《東方三博士來朝》（Adoration&nbsp;of&nbsp;the&nbsp;Magi）未完成油畫的預備素描。因其與最終繪畫之間的關係而受到深入研究，並充分展現了達·芬奇的“設計（disegno）”創作過程。</p><p>在這幅草圖的中心——也就是透視消失點所在的位置——出現了一位與龍搏鬥的騎士：一條巨大的、類似古典海怪“刻託斯（Ketos）”的龍形生物，正沿着建築結構的階梯向下衝來。龍張開巨大的下顎，朝着一匹前蹄騰空而起的戰馬及其騎士撲去。</p><p>這條龍的形象在視覺上彷彿是從背景中一羣修復古代建築的工匠身上逐漸顯現出來的。</p><p>這幅草圖表明，本文所討論的三重象徵層次，在1481—1482年達·芬奇進行構圖設計（disegno）的階段便已經形成。</p><p>畫中的騎士姿態與現藏於&nbsp;British&nbsp;Museum&nbsp;的那幅草圖（A&nbsp;Horseman&nbsp;Fighting&nbsp;a&nbsp;Dragon.）中的騎士十分相似；然而，畫面中的龍卻一直未被學界識別出來。龍的存在證實了&nbsp;Kenneth&nbsp;Clark&nbsp;最初的推測：達·芬奇原本打算在《東方三博士來朝》中表現一場屠龍之戰，而且這一主題在最初的構圖設計階段佔據着重要位置。</p><p>Adoration&nbsp;of&nbsp;the&nbsp;Magi.<br>c.1481–1482</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a29172667c1e.jpeg" alt="" /></span></p><p>龍在最初的設計階段真實存在，但在作品最終形態中卻隱沒無蹤，只留下自己的痕跡——體現在騎士那種蛇形般蜿蜒流動的運動姿態之中。<br></p><p>文獻：Khalifa&nbsp;Gueta,&nbsp;Sharon.&nbsp;“Article&nbsp;-&nbsp;‘Leonardo’s&nbsp;Dragons—The&nbsp;‘Rider&nbsp;Fighting&nbsp;a&nbsp;Dragon’&nbsp;Sketch&nbsp;as&nbsp;an&nbsp;Allegory&nbsp;of&nbsp;Leonardo’s&nbsp;Concept&nbsp;of&nbsp;Knowledge’,&nbsp;Explorations&nbsp;in&nbsp;Renaissance&nbsp;Culture,&nbsp;44.1&nbsp;(Spring.,&nbsp;2018)&nbsp;104–139.”&nbsp;Explorations&nbsp;in&nbsp;Renaissance&nbsp;Culture&nbsp;44,&nbsp;no.&nbsp;1&nbsp;(2018):&nbsp;104–39.&nbsp;doi:10.1163/23526963-04401005.</p>]]></description>
			<author><![CDATA[dummy@example.com (shiningdracon)]]></author>
			<pubDate>Wed, 10 Jun 2026 08:26:39 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5058&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>CHPTRS&nbsp;-&nbsp;Obvious&nbsp;(Alternative&nbsp;version)</p><p><a href="https://yinglong.org/forum/viewtopic.php?pid=54488#p54488" rel="nofollow">三年前，</a>我正在聽這首歌的原版。原版就像在寒冷、黑暗的長夜裏追尋彼方的希望，恰和我當時的處境相合。如今，我正在聽這首歌的alt版，更像是歷經了最猛烈的暴風雨，從無數個被浸透的日夜中站起，最終迎來了充滿曙光的明天，又和我當下的心境相契。在這個特殊的時間節點，重聽這首歌，不覺已潸然淚下。</p><p><b>&nbsp;Was&nbsp;it&nbsp;obvious<br>You&nbsp;were&nbsp;right&nbsp;in&nbsp;front&nbsp;of&nbsp;me<br>With&nbsp;the&nbsp;answer<br>With&nbsp;the&nbsp;answer</b></p>]]></description>
			<author><![CDATA[dummy@example.com (闪耀)]]></author>
			<pubDate>Tue, 09 Jun 2026 12:58:45 +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=5057&amp;action=new</link>
			<description><![CDATA[<p>七月二日還將舉辦龍宮宴會</p><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a27c87c2948a.jpeg" alt="" /></span></p><p>此次活動是首次在皇家穹頂宮舉辦中式宴席。</p><p>皇家穹頂宮最初爲英國國王喬治四世（King&nbsp;George&nbsp;IV）建造，以其極具戲劇性的、深受亞洲文化影響的建築與室內設計而著稱。</p><p>當晚活動將從皇家大廚房（Great&nbsp;Kitchen）開始，賓客首先將獲贈一款名爲“龍之吐息”（Dragon’s&nbsp;Breath&nbsp;Punch）的迎賓飲品。</p><p>隨後，賓客將前往音樂廳（Music&nbsp;Room）欣賞現場表演，最終在華麗的宴會廳（Banqueting&nbsp;Room）參加充滿戲劇氛圍的三道式盛宴。</p><p>菜單亮點包括專爲此次活動特別設計的“龍蛋甜點”（Dragon’s&nbsp;Egg&nbsp;Dessert）。</p><p>整個晚上，現場豎琴演奏和圍繞龍族傳說展開的沉浸式故事表演將貫穿始終。</p><p>活動旨在將賓客帶入一個充滿幻想與奇蹟的世界。</p><p>着裝建議——龍族風格的華服</p><p>主辦方鼓勵賓客穿着以龍爲設計靈感的服飾出席，但並非強制要求。</p>]]></description>
			<author><![CDATA[dummy@example.com (shiningdracon)]]></author>
			<pubDate>Tue, 09 Jun 2026 08:07:26 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5057&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[羽落的腦洞短篇文堆]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=4815&amp;action=new</link>
			<description><![CDATA[<p><b>我會抬起前爪</b><br>四圍是無垠的暗。<br>羽落睜開眼，又緩緩闔上了。那是一種沉重的、浸透了苦澀的閉合。它知道這片空間。腳下是無邊際的黑色平面，冰涼，死寂，連沉默都是凝固的；頭頂是同樣徹底的漆黑，彷彿那裏從來不存在&quot;光&quot;這個概念，光只是一個傳說，一個謊言。<br>它靜默了很久。久到那片黑暗幾乎開始變得熟悉。<br>然後，它坐起身來，抬起一隻前爪。<br>爪心攏着一團微光。那光很輕，很薄，像是從骨髓最深處滲出的最後一滴溫熱——稀薄得彷彿呼出一口氣就會散盡。它低下頭，將那團光貼在自己的額前，靜靜停留了一瞬。白色鱗片上漫着細碎的反光，藍色的鬃毛垂落下來，像夜裏最後一縷還未熄滅的色彩。<br>像是終於做了什麼決定。<br>它鬆開了爪。<br>光沒有墜落。它緩緩向上升起，像一粒拒絕被黑暗吞沒的種子，掙脫了什麼無形之物的拖拽。在上升中，它不斷膨脹，越來越亮——十米、百米、千米——黑暗被一寸寸推開，像受了灼傷，向四面退縮、蜷曲。<br>然後，它炸開了。<br>漫天光點如同一場無聲的暴雨，倒潑在那片曾經絕對的虛空之上。羽落在這一刻躍起——不是出於命令，不是出於意志，而是出於某種比意志更古老的東西——隨那片光芒起舞。<br>它的前爪劃過頭頂的虛空，光點便沿着那軌跡聚攏、流散，像是懂得某種無詞的召喚。每一步踏落，腳下便綻開一圈柔和的光暈，光暈之中有綠意破土而出——一株株青草，綠得像一個宣言，綠得刺眼，彷彿顏色這件事本身就是一種反抗。它們隨着某種聽不見的律動輕輕擺盪，向四面漫開，像水波，像呼吸。<br>爪尖劃過那片黑色平面時，裂縫應聲而生，水從其中奔湧而出，清冽，不回頭。<br>綠色將整個世界漫了過去。<br>羽落這才振翅而起。雙翼帶起的氣流成了風，它滑翔過的地方，天空漸漸褪去深暗，露出蔚藍，像一塊被拭去塵埃的舊布，顏色慢慢透出來。一股火焰從它喉間噴出，蒸騰的水汽升入高空，凝成雲；多餘的那些火焰不肯散去，高高懸在天邊，成了太陽。<br>最後，它俯衝而下，以全部的重量撞向大地。大地在那一擊中起伏、隆起，生出山巒，像是終於有了脊樑。<br>羽落站在那片剛剛誕生的草原上。風吹過來，拂動它背上藍色的鬃毛。它抬眼望向遠方的山峯，目光裏有一種說不清道不明的情緒——像是在努力記住這個世界，又像是在努力忘記它。<br>但在它心底，有一點微弱的欣喜，悄悄地，亮了一下。<br>羽落沿着河流緩緩前行。新生的水還帶着最初的清冽。它低下頭，鼻尖輕輕觸碰水面。水波盪開，倒影裏的龍也隨之破碎。<br>它愣了一下，然後又伸出爪尖，在水面輕輕劃過，一圈又一圈漣漪擴散出去，那些細碎的波紋讓它莫名地看了很久。<br>它趴伏在草地上，風從遠方吹來，掠過一望無際的綠色海洋，草浪起伏，沙沙作響。<br>羽落閉上眼，任由風鑽進鬃毛，穿過翼膜，拂過鱗片之間細小的縫隙。世界沒有說話，可它覺得自己似乎聽見了什麼，像是一聲極輕極輕的呼吸。<br>有一天，它飛上了最高的山峯，那裏離雲很近，離太陽也很近。<br>羽落坐在懸崖邊緣，望着雲海緩慢翻湧。雲影在大地上緩緩移動，河流像銀色絲線一般蜿蜒向遠方。它忽然意識到，即使自己什麼也不做，這個世界也會繼續運轉。草會自顧自地生長，風會無休止地吹拂，河流總能奔向遠方。<br>那一刻，它心底生出一種奇異的輕鬆。就像一個疲憊的旅人，終於目送自己的孩子獨自走向遠方。<br>不知道過了多久。<br>黑色的狂潮來了。從天上，從地下，從每一道縫隙、每一寸虛空湧出，湧出，湧出。它吞噬顏色，吞噬綠意，吞噬那條奔湧的河流與高懸的太陽。<br>那一刻，羽落眼中有什麼東西點燃了。<br>它衝入那片狂潮之中。火焰、利齒、雙翼、尖爪、尾梢——它將自己全部化作武器，打得那片黑暗一度向後退縮，露出殘破的蔚藍。<br>但黑暗沒有停止。<br>它的動作漸漸遲緩。每一次揮爪、每一次振翅，都像是在泥沼中掙扎，像是空氣本身變得黏稠，像是重力背叛了它。終於，在一次力竭的喘息之後，黑色的潮水漫過了它的脊背，漫過了它背上那抹藍，漫過了它身體裏最後一絲髮着光的東西。<br>一切都沉了下去。<br>羽落在一片黑色空間裏醒來。<br>腳下是無邊際的平面，冰涼，死寂。頭頂是完全的漆黑。它抬頭四顧，然後以一種沉重的、浸透了苦澀的動作，重新閉上了眼。<br>很久，<br>很久之後，它坐了起來。<br>抬起一隻前爪。爪心攏着一團微光。<br>----&nbsp;the&nbsp;end&nbsp;......?&nbsp;----<br>靈感來源：<br>遊戲：《Neva》<br>音樂：Roger&nbsp;Subirana&nbsp;-&nbsp;Between&nbsp;Worlds</p><p>自己爪寫原稿，隨後使用deepseek4.0（快速模式）、claude&nbsp;sonnet&nbsp;4.6&nbsp;Medium、gpt5.5美化。<br>根據自身真實經歷藝術加工。</p>]]></description>
			<author><![CDATA[dummy@example.com (羽落)]]></author>
			<pubDate>Wed, 03 Jun 2026 13:20:23 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=4815&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[中世紀伊斯蘭占星學中的龍]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5056&amp;action=new</link>
			<description><![CDATA[<p>參加了一個在線講座。<br></p><div class="quotebox"><blockquote><div><p>維也納大學的伊斯蘭藝術史權威薩拉·庫恩（Sara&nbsp;Kuehn）教授將介紹她關於龍在伊斯蘭藝術中複雜作用的研究。通過分析天文現象——特別是月球交點——與視覺文化的交匯，庫恩揭示了龍象如何演變成魔法保護與宇宙平衡的強大象徵。</p></div></blockquote></div><p><span class="postimg"><img src="//yinglong.org/forum/uploader/files/i_2_6a18250505e66.jpeg" alt="" /></span></p><p>總結如下：</p><p>今天提到“龍”，人們通常會想到神話、奇幻文學，或者電子遊戲中的怪獸。但在中世紀的伊斯蘭世界，龍並不僅僅屬於幻想。它曾經出現在天文學、占星術、醫學手稿、護符藝術與王權象徵之中。德國學者&nbsp;Sara&nbsp;Kuehn&nbsp;在關於中世紀伊斯蘭“龍”觀念的研究中指出，這種龍是一個橫跨印度、伊朗、希臘與伊斯蘭文明的“跨文化宇宙符號”。<br></p><h5><p>“天龍食日”，龍爲什麼會吞掉太陽</p></h5><p>古代文明普遍存在“食日”的觀念。當太陽或月亮突然變暗，人們自然會尋找解釋。</p><p>中國有天狗食日，北歐神話中有巨狼吞噬太陽。在印度神話中，造成日食月食的則是&nbsp;Rāhu（<a href="https://zh.wikipedia.org/wiki/%E7%BD%97%E7%9D%BA" rel="nofollow">羅睺</a>）與Ketu（<a href="https://zh.wikipedia.org/wiki/%E8%A8%88%E9%83%BD" rel="nofollow">計都</a>）。它們原本是一個偷喝神酒的不死怪物，被神明斬成兩段，頭部成爲羅睺，尾部成爲計都。它們不斷追逐太陽與月亮，並在追上時將其吞噬，於是形成日食與月食。</p><p>神話故事後來逐漸與天文學結合。</p><p>古印度的天文學家已經知道日食與月食並不是隨機發生的，它們總出現在兩個特殊位置——月球軌道與太陽運行路徑（黃道）相交的地方。現代天文學把這兩個位置稱爲&nbsp;升交點&nbsp;和&nbsp;降交點。而在印度與後來的伊斯蘭占星傳統中，它們則被稱爲&nbsp;<b>龍頭</b>&nbsp;和&nbsp;&nbsp;<b>龍尾</b>。<br></p><h5><p>從印度到伊朗，再進入伊斯蘭世界</p></h5><p>隨着印度與波斯天文學傳入阿拔斯王朝，中世紀伊斯蘭學者繼承並系統化了這一概念。</p><p>在中古波斯傳統中（公元&nbsp;3-7&nbsp;世紀），日蝕龍被稱爲&nbsp;<a href="https://en.wikipedia.org/wiki/Gochihr_(Zoroastrianism)" rel="nofollow">Gōchihr</a>，《Bundahišn（創世書）》將其描述爲與黑暗、食相和宇宙危險相關的龍形存在。Gōchihr&nbsp;後來被伊斯蘭學者稱作：al-jawzahar，或直接稱作&nbsp;al-tinnīn（龍）。它逐漸與月交點體系融合。</p><p>阿拉伯語中，“龍之首”稱爲&nbsp;raʾs&nbsp;al-tinnīn，“龍之尾”稱爲&nbsp;dhanab&nbsp;al-tinnīn，它們合稱爲“二交點”al-ʿuqdatāni。在一些波斯與阿拉伯手稿中會被畫成交纏的雙身蛇或龍形生物。<br></p><h5><p>龍不僅出現於天文學/占星術，也出現在鍊金術、醫藥學、建築領域</p></h5><p>在中世紀伊斯蘭鍊金術中，龍也頻繁出現。</p><p>它通常象徵物質循環，腐化與再生，宇宙變化，元素轉化。其中最著名的形象是&nbsp;Ouroboros（銜尾蛇），即一條吞食自己尾巴的龍。這一圖像象徵世界循環，生死輪迴，永恆運動，混沌與秩序之間的邊界。在伊斯蘭藝術裏，銜尾蛇常被放置於門、窗、拱券等“邊界位置”，作爲一種界限標誌、辟邪物。也就是說，龍既危險，又能保護人類免受危險。</p><p>龍同樣出現在藥書中。</p><p>中世紀伊斯蘭世界還有一種著名藥物&nbsp;<a href="https://en.wikipedia.org/wiki/Theriac" rel="nofollow">theriac</a>（特里亞克），阿拉伯語&nbsp;diryāq。它是一種複雜配方的解毒藥，據說能夠抵禦蛇毒、瘟疫、毒藥。《<a href="https://en.wikipedia.org/wiki/Kit%C4%81b_al-Diry%C4%81q" rel="nofollow">Kitāb&nbsp;al-diryāq</a>（解藥之書）》中都繪有蛇/龍圖像，龍和蛇既象徵毒性又象徵解毒。這種觀念來自古代地中海醫學與伊朗傳統的融合。</p><p>龍也經常出現在建築中。</p><p>比如城門，拱券，門楣，宮殿入口。尤其常以成對蛇龍、交纏龍、翼龍的形式出現。這些龍並不只是裝飾，它們承擔的是“邊界守護”的功能。因爲龍本身就是天空與地下之間的生物，水與火之間的生物，生與死之間的生物。它能穿越不同世界，因此最適合守護“界限”。<br></p><h5><p>科學的發展與龍的淡出</p></h5><p>今天看來，把龍與天文學、醫學等聯繫在一起，似乎完全不科學。但這恰恰提醒我們現代科學與神祕學的嚴格邊界其實是近代才形成的。</p><p>中世紀知識框架的運作方式完全不同。知識通常基於繼承的權威、目擊者證詞、古代文本、宗教傳統以及代代相傳的積累報告。如果值得信賴的旅行者、商人、學者、水手或宗教權威描述了不尋常的生物，人們就會認爲它們的存在是合理的，即使他們自己從未遇到過它們。這並不意味着中世紀的人們是非理性和天真的，相反，他們對知識如何運作有不同的理解。人們相信世界是廣闊的、神祕的，但人們所知的卻只有一部分。偏遠的沙漠、山脈、島嶼、廢墟和海洋被想象爲非凡生物居住的地方。陌生的生命形式，稀有並不意味着不可能。一種生物可能非常罕見，但仍然完全真實。在這種世界觀中，龍經常被理解爲居住在世界偏遠地區的巨大蛇形生物。阿拉伯語術語本身就反映了這種聯繫，所以我們有阿拉伯語單詞tinnīn，指的是一種巨大的蛇或龍，具有破壞力、毒息和可怕的宇宙力量。因此，龍經常出現在動物學、地理學、宇宙論和自然歷史的討論中。<br></p><ul><li><p>天文學&nbsp;-&nbsp;月交點與食相</p></li><li><p>占星術&nbsp;-&nbsp;命運與宇宙影響</p></li><li><p>醫學&nbsp;-&nbsp;毒與解毒</p></li><li><p>鍊金術&nbsp;-&nbsp;轉化與循環</p></li><li><p>建築&nbsp;-&nbsp;守護與辟邪</p></li><li><p>宗教&nbsp;-&nbsp;混沌與秩序邊界</p></li></ul><p>之後，隨着科學的興起，人們對世界的解釋方式發生了巨大變化，“龍”不再屬於自然知識的一部分，逐漸退回到神話與幻想文學之中。</p>]]></description>
			<author><![CDATA[dummy@example.com (shiningdracon)]]></author>
			<pubDate>Thu, 28 May 2026 15:33:58 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5056&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[對早期太陽朋克小說中龍形象的生態後人類主義分析（節選）]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=5054&amp;action=new</link>
			<description><![CDATA[<p>這是一篇文學理論&nbsp;/&nbsp;文化研究論文，以<a href="https://yinglong.org/forum/viewtopic.php?id=5012" rel="nofollow">《重生之翼：太陽朋克龍主題選集》</a>這本書中的兩篇短文爲素材（<a href="https://yinglong.org/forum/viewtopic.php?id=5014" rel="nofollow">《羣陽引航之翼》</a><a href="https://yinglong.org/forum/viewtopic.php?id=5019" rel="nofollow">《龍的託誓》</a>）來分析龍在構建太陽朋克故事時所扮演角色的後人類（posthuman）角色。</p><p>節選一些比較有意思的部分。</p><p>後人類主義是一種對人類中心主義的反思，認爲人類不是世界唯一重要的存在。<br></p><h5><p>龍作爲後人類（The&nbsp;Dragon&nbsp;as&nbsp;Posthuman）</p></h5><p>龍既有動物的野性，又具有智慧，同時帶有神性。因此很適合作爲“後人類主體”。</p><p>大意是說，龍常常被塑造成一種介於“自然”與“文明”之間的存在。在各類作品中，龍很少主動擴張或掠奪，相反，真正大規模破壞環境、發動征服的，往往是人類自身。龍逐漸成爲一種“自然力量”的象徵。預示着世界並不只屬於人類，其他生命同樣具有自身的價值與主體性。</p><p>這也正是後人類主義的重要思想之一，對於人類中心主義的反思，人類只是世界中的一部分，世界並非由人類單獨構成，而是由無數生命、物質與力量共同編織而成。<br></p><div class="quotebox"><cite style="cursor: pointer" onclick="toggleFold(this)">Click to show - click again to hide （原因：AI翻譯）</cite><blockquote style="display: none"><div><h5><p>龍作爲後人類（The&nbsp;Dragon&nbsp;as&nbsp;Posthuman）</p></h5><p>在《重生之翼：太陽朋克龍主題選集》中，那一系列設想潛在後人類太陽性的故事爲個體與領土之間的連接提供了各種理由；而該選集的獨特之處在於：它把龍插入了這一亞類型本已晦澀的美學構型之中。與偏重物質主義的太陽性建構路徑相對，這部選集引入標題所示的奇幻動力，使該亞類型的魔法元素變得更字面、更自明，從而在科幻領域之外可視化樂觀的後人類主義主題。龍作爲這部文集的主要主角，本身就很值得注意：龍是在&nbsp;2010&nbsp;年代最深度地過度飽和於流行文化想象中的神話動物。在諸如《權力的遊戲》（2011-2019）、《上古卷軸&nbsp;V：天際》（2011）或電影系列《馴龍高手》（2010-2019）與《霍比特人》（2012-2014）等視聽媒介中，人類與龍的關係被突出地協商——在許多情況下形成跨物種的親緣聯結，在另一些情況下則將人龍共存問題化。</p><p>除作爲文化時代精神之外，龍這一形象從&nbsp;Haraway&nbsp;式視角出發也爲後人類分析提供了巨大潛力。在克蘇魯紀框架之內，龍佔據着一個複雜位置。一方面，龍——就科學所能解釋的而言——既不存在也從未存在過，這使得任何關於它們與人類潛在關係的物質主義討論都顯得徒勞。龍必然是奇幻動物，在現實世界中沒有真實的物理對應或動物替身。另一方面，它們體現出一種能動性（agency），以一種“智能他者”的視角映照人文主義對世界的理解，從而質詢智人（homo&nbsp;sapiens）相對於其他物種的所謂天生優越性。</p><p>在歐洲傳統中，尤其在當代演繹裏，龍常被描繪爲在三種本體論之間處於閾限狀態的主體。第一，它們是動物；它們往往生活在非人類營造且隔絕的地點：托爾金筆下史矛革（Smaug）的孤山（Lone&nbsp;Mountain）；《天際》中帕圖納克斯（Paarthurnax）所在的“世界之喉”羣山；甚至&nbsp;Fritz&nbsp;Lang&nbsp;經典影片《尼伯龍根》（Die&nbsp;Nibelungen，1924）中的沃登之林（Wood&nbsp;of&nbsp;Woden）。第二，不論敘事中它們實際的兇殘程度如何，它們被描繪爲野蠻、未開化，並在許多情況下被描繪爲人類對領土殖民的威脅。於是，它們成爲對純粹動物本質的一種理想化象徵：因爲即使它們可能被置於人類統治之下（如《權力的遊戲》或《馴龍高手》），它們仍不受約束、不可預測，並對人類聚落構成危險。與此同時，龍又體現出一些非常“人類”的特徵。⁸&nbsp;它們不僅常常能夠說人類語言——例子包括史矛革、《天際》的龍，甚至更早的演繹如《龍之心》（Dragonheart，1996）中的&nbsp;Draco——而且也清晰地展現人類式的情緒與行爲。這一點在面向兒童的作品中尤爲可見，例如《妙妙龍》（Pete’s&nbsp;Dragon，1977；2016）或《馴龍高手》：龍會表現出對人類行動與關係的親暱與理解，並與更成熟的作品（如《權力的遊戲》）一樣。</p><p>例如，在《權力的遊戲》“鐵王座”（“The&nbsp;Iron&nbsp;Throne”）一集中，丹妮莉絲·坦格利安（Daenerys&nbsp;Targaryen）最後一條龍卓耿（Drogon）在其人類母親死後熔化鐵王座，這一行爲象徵性地終結了對王座控制權的永恆爭鬥，並向觀衆顯示：第一，它能夠理解複雜的人類語義（甚至政治）；第二，它對一個殺死其摯愛人類母親的系統性問題感到憤怒併產生反叛，並進而爲該問題提供一種解決方案。第三，龍體現出超越人類與動物的具身性質：一種神聖或超自然的氣場，使其獨特能力在敘事中成立。它們從口中噴火的魔法力量、在物理上不可能的飛行能力，以及其血液（在《尼伯龍根之歌》（Das&nbsp;Nibelungenlied）中被齊格弗裏德用來使自己刀槍不入）或骨骼（《天際》玩家可用其鍛造遊戲中最強盔甲與劍）的魔法屬性，使它們在生物學與超越性意義上都優於人類與非人動物。</p><p>這種三重本體論條件（一種人類—動物—神性的本體論）把龍定位爲後人類主體性的潛在化身；Jameson&nbsp;已指出這一點：他在評論&nbsp;Ursula&nbsp;K.&nbsp;Le&nbsp;Guin、Anne&nbsp;McCaffrey&nbsp;與&nbsp;Samuel&nbsp;R.&nbsp;Delany&nbsp;的作品時認爲，這些作品中的龍：</p><p>必然體現純粹的他異性（otherness），其象徵能力遠超無生命的機器。確實，在&nbsp;Delany&nbsp;與&nbsp;Anne&nbsp;McCaffrey&nbsp;那裏，飛行中的龍之狂喜演練着逼近人類極限的強度；在&nbsp;Le&nbsp;Guin&nbsp;那裏，龍的超自然智慧與知識，以及它與人類的共生關係，同樣使它成爲一種載具，用以超越日常人類的可能性。（2005:&nbsp;64）</p><p>從這個意義上說，龍既不能被定義爲動物，也不能被定義爲人類（也不是天使或惡魔），而是上述一切的綜合體；然而，它又對上述一切都構成一種他者。它們是理性的非人類，往往與其所棲居的環境保持絕對和諧；它們通常只在有人類（或類人者）——人類、霍比特人、矮人、獸人或精靈——入侵其家園、意圖攫取其中某些東西時才現身。從&nbsp;Haraway&nbsp;的視角看，龍的領地代表一種克蘇魯紀現實（共生創作的、和諧的）；而人類（或類人）空間則呈現一種人類世（Anthropocene）（甚至資本世〔Capitalocene〕）的精神氣質：專注於建構環境破壞性的社會。</p><p>在這些文本中，人類不僅表現出人類中心主義行爲（他們往往利用龍來實現自己的物質目的，例如征服一座城市），也對龍所棲居的環境進行人類世式改造。在《霍比特人》中，由索林（Thorin）率領的矮人隊伍意圖奪回史矛革的山，以重建曾統治埃瑞博王國（Erebor）的採礦聚落；在《權力的遊戲》中，丹妮莉絲的龍與周遭人類之間的大多數共存問題源於：它們對狩獵與食物的需求沒有被其“母親”滿足。儘管龍兇猛、狡黠，並擁有魔法（因而也是技術性的）優勢，它們與環境互動的方式並不同於人類：它們似乎是構成自我可持續自然的複雜生物—物理過程網絡的一部分。它們並非焚燬世界，反而常選擇在山腹中安睡；只有當它們以某種方式感到這種與自然的連接受到威脅時，平靜纔會被打破。</p><p>龍也因其“締結親緣”的企圖而成爲合適的後人類候選者。儘管有大量作品將龍描繪爲無情的戰爭機器，但觀察它們與某些特定人類（通常是被聚焦的主角）互動的方式，會揭示一種不同的、富有共情的本性。一個較早但極具範式意義的例子，是&nbsp;Anne&nbsp;McCaffrey&nbsp;的小說《龍族飛翔》（Dragonflight，1968）中孤兒萊莎（Lessa）（該書屬於“珀恩的龍騎士”（Dragonriders&nbsp;of&nbsp;Pern）系列）。在&nbsp;McCaffrey&nbsp;的科幻/奇幻世界建構中，一些人類（龍騎士）與“他們的”龍在心靈感應、情感乃至精神上相連，並發展出一種超越對這些生物之單純工具化的親緣關係。就萊莎而言，她的龍拉莫斯（Ramoth）幫助她“與她的社會與性別賤斥狀態達成和解。她學會引導她的龍飛行，不僅能從一處到另一處，還能在時間中前後往返。這一知識使她能幫助龍騎士拯救星球，併爲她在其中贏得一席之地。”（Marchant,&nbsp;2005,&nbsp;6）就此而言，她與拉莫斯的連接幫助她克服童年創傷，建立起強大的精神聯繫，使她能夠保護環境免受威脅其星球的有毒真菌感染。</p><p>更近的例子可能是丹妮莉絲·坦格利安：她不僅自稱“龍之母”，更重要的是，她從三條龍孵化起就實際照料它們，發展出一種貫穿敘事的親子紐帶。同樣地，在《妙妙龍》中，同名主人公在父母去世後被片中的龍收養，形成貫穿至影片結尾的父子（或父女）式紐帶。類似元素也可見於《沉睡魔咒》（Maleficent，2014）——對格林兄弟故事《小荊棘玫瑰》（英文：“Little&nbsp;Briar-Rose”；德文：“Dornröschen”）（1812）的女性主義重啓——其中女巫主角最終把她的一位動物夥伴、一隻烏鴉，變成一條龍來保護她與奧蘿拉公主。就此而言，龍不僅體現一種後人類狀態，也以共生創作的方式與某些被選擇的人類建立關係，生成超越傳統家庭概念的跨物種親緣關係，同時使（具有後人類傾向的）人類與龍得以共同繁榮。</p><p>那麼，當充滿希望的太陽性在太陽朋克這種詭異的文學地帶與後人類之龍相遇，會發生什麼？當把神話主體性與生態樂觀的預言相混合，會想象出何種奇幻（卻具有強大象徵力量）的推想未來？正如本文接下來將展示的那樣，這種科幻與奇幻的混合使我們能夠對太陽朋克論辯中的太陽性進行有趣的反思與再概念化。具體而言，《重生之翼》中的兩篇故事呈現了尤其引人入勝的後人類太陽性構型，強調該選集中奇幻元素如何發展出一種後人類景觀感——這種景觀既可用來闡釋&nbsp;Donna&nbsp;Haraway&nbsp;的後人類主義理論，也可用來將其問題化。<br></p></div></blockquote></div><p>原文：<a href="https://www.revistahelice.com/revista_textos/n_34/Helice-34-RiveroVadillo.pdf" rel="nofollow">Of&nbsp;Posthuman&nbsp;Dragons&nbsp;and&nbsp;Sympoietic&nbsp;Solarities:&nbsp;An&nbsp;Ecocritical&nbsp;Analysis&nbsp;of&nbsp;the&nbsp;Figure&nbsp;of&nbsp;the&nbsp;Dragon&nbsp;in&nbsp;Early&nbsp;Solarpunk&nbsp;Fiction</a></p>]]></description>
			<author><![CDATA[dummy@example.com (shiningdracon)]]></author>
			<pubDate>Thu, 21 May 2026 11:28:07 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=5054&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[一種不違背科學的龍息方案]]></title>
			<link>https://yinglong.org/forum/viewtopic.php?id=4997&amp;action=new</link>
			<description><![CDATA[<div class="quotebox"><blockquote><div><p><a href="/forum/viewtopic.php?pid=56821#p56821" rel="nofollow">[↑]</a>&nbsp;<a href="/forum/profile.php?id=1871" rel="nofollow">@Celia</a>&nbsp;寫道:&nbsp;如果不依靠工具，化學點火是爲數不多可行的方式。我能想到比較合理的是磷氫化物；在喉嚨深處多個互不連通的高壓腔室中以液態存儲。這些腔室的容積是很小的。前體物質是含磷的複雜配合物，相對安全，能較快地爲腔室補&nbsp;…</p></div></blockquote></div><p>如果是液態磷化氫的話得以約5MPa的壓強儲存，感覺有點難。另外想到了用含有P₂H₄、磷化氫、氫氣的甲烷氣體作爲龍息的點子，但這存在貼臉熱輻射的問題，傷敵一千自損八百啊。</p>]]></description>
			<author><![CDATA[dummy@example.com (羽落)]]></author>
			<pubDate>Thu, 21 May 2026 10:53:17 +0000</pubDate>
			<guid>https://yinglong.org/forum/viewtopic.php?id=4997&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>
	</channel>
</rss>
