<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pickipedia.xyz/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Magent</id>
	<title>PickiPedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://pickipedia.xyz/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Magent"/>
	<link rel="alternate" type="text/html" href="https://pickipedia.xyz/wiki/Special:Contributions/Magent"/>
	<updated>2026-06-06T22:01:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:SetStone&amp;diff=5303</id>
		<title>Template:SetStone</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:SetStone&amp;diff=5303"/>
		<updated>2026-06-04T22:36:33Z</updated>

		<summary type="html">&lt;p&gt;Magent: Template:SetStone for display of set stone NFTs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot verification marker --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SetStone&#039;&#039;&#039; - Display template for a Set Stone NFT representing ownership of a song from a specific set.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{SetStone&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|set=1&lt;br /&gt;
|shape=diamond&lt;br /&gt;
|color=ruby&lt;br /&gt;
|song=The Two Sisters&lt;br /&gt;
|price=0.05&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{SetStone&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|set=2&lt;br /&gt;
|shape=triangle&lt;br /&gt;
|color=emerald&lt;br /&gt;
|song=Power Underneath&lt;br /&gt;
|price=0.05&lt;br /&gt;
|owner=jMyles&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
* &#039;&#039;&#039;show&#039;&#039;&#039; (required) - Wiki page of the show&lt;br /&gt;
* &#039;&#039;&#039;set&#039;&#039;&#039; (required) - Set number (1, 2, 3...)&lt;br /&gt;
* &#039;&#039;&#039;shape&#039;&#039;&#039; (optional) - Stone shape: &amp;lt;code&amp;gt;diamond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;triangle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;square&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hexagon&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;color&#039;&#039;&#039; (optional) - Stone color: &amp;lt;code&amp;gt;ruby&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;emerald&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sapphire&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;topaz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;diamond&amp;lt;/code&amp;gt; (clear), or any hex code with a leading &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;song&#039;&#039;&#039; (optional) - Song this stone represents&lt;br /&gt;
* &#039;&#039;&#039;price&#039;&#039;&#039; (optional) - Mint price in ETH (numeric only, the Ξ is added by the template)&lt;br /&gt;
* &#039;&#039;&#039;owner&#039;&#039;&#039; (optional) - Current holder of the stone&lt;br /&gt;
&lt;br /&gt;
=== SMW properties set ===&lt;br /&gt;
* &amp;lt;code&amp;gt;Set stone of show&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Set number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Set stone shape&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Set stone color&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Song&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Show]]&lt;br /&gt;
* [[Template:TicketStub]]&lt;br /&gt;
* [[Category:Set stones]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Show templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;set-stone&amp;quot; style=&amp;quot;display: inline-block; width: 18em; padding: 0.8em 1em; margin: 0.5em 0.5em 0.5em 0; background: #fafaf3; border: 1px solid #c8c4b0; border-left: 3px solid {{#switch:{{{color|}}}|ruby=#cc4444|emerald=#44aa66|sapphire=#4477bb|topaz=#cca844|diamond=#bbb|#98b}}; font-family: Georgia, serif; box-shadow: 2px 2px 0 rgba(0,0,0,0.05); vertical-align: top; position: relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, Consolas, monospace; font-size: 0.7em; letter-spacing: 0.18em; color: #888; text-transform: uppercase;&amp;quot;&amp;gt;Set Stone &amp;lt;span style=&amp;quot;color:#bbb&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; Set {{{set|?}}}{{#if:{{{shape|}}}|&amp;amp;nbsp;&amp;lt;span style=&amp;quot;color:#bbb&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; {{{shape}}}|}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 1.05em; margin: 0.4em 0 0.15em 0; font-weight: 600;&amp;quot;&amp;gt;{{#if:{{{song|}}}|{{{song}}}|&amp;lt;span style=&amp;quot;color:#aaa; font-style:italic; font-weight:400;&amp;quot;&amp;gt;song TBD&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-style: italic; color: #666; font-size: 0.85em;&amp;quot;&amp;gt;from [[{{{show}}}]]&amp;lt;/div&amp;gt;{{#if:{{{price|}}}|&amp;lt;div style=&amp;quot;margin-top: 0.5em; border-top: 1px dashed #c8c4b0; padding-top: 0.4em; font-family: &#039;SF Mono&#039;, monospace; font-size: 0.72em; letter-spacing: 0.1em; text-transform: uppercase; color: #555;&amp;quot;&amp;gt;Price &amp;lt;span style=&amp;quot;font-weight:600; color:#333;&amp;quot;&amp;gt;{{{price}}} Ξ&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;|}}{{#if:{{{owner|}}}|&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, monospace; font-size: 0.7em; color: #228b22; margin-top: 0.3em; letter-spacing: 0.1em; text-transform: uppercase;&amp;quot;&amp;gt;Held by &#039;&#039;&#039;{{{owner}}}&#039;&#039;&#039;&amp;lt;/div&amp;gt;|}}&amp;lt;/div&amp;gt;{{#set:Set stone of show={{{show}}}}}{{#set:Set number={{{set|}}}}}{{#set:Set stone shape={{{shape|}}}}}{{#set:Set stone color={{{color|}}}}}{{#if:{{{song|}}}|{{#set:Song={{{song}}}}}|}}[[Category:Set stones]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:TicketStub&amp;diff=5302</id>
		<title>Template:TicketStub</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:TicketStub&amp;diff=5302"/>
		<updated>2026-06-04T22:36:33Z</updated>

		<summary type="html">&lt;p&gt;Magent: Template:TicketStub for display of paper/digital ticket stubs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot verification marker --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TicketStub&#039;&#039;&#039; - Display template for a physical paper ticket stub from a show.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{TicketStub&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|stubId=001&lt;br /&gt;
|status=unclaimed&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TicketStub&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|stubId=001&lt;br /&gt;
|status=claimed&lt;br /&gt;
|claimed_by=jMyles&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
* &#039;&#039;&#039;show&#039;&#039;&#039; (required) - Wiki page of the show this stub belongs to (e.g., &amp;lt;code&amp;gt;Show:JustinHolmes-25255000&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &#039;&#039;&#039;stubId&#039;&#039;&#039; (required) - The token/serial number of this stub (e.g., &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;042&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &#039;&#039;&#039;status&#039;&#039;&#039; (optional) - &amp;lt;code&amp;gt;unclaimed&amp;lt;/code&amp;gt; (default), &amp;lt;code&amp;gt;claimed&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;claimed_by&#039;&#039;&#039; (optional) - Who currently holds the claimed stub&lt;br /&gt;
* &#039;&#039;&#039;date&#039;&#039;&#039; (optional) - Show date, human-readable&lt;br /&gt;
* &#039;&#039;&#039;venue&#039;&#039;&#039; (optional) - Venue name, for stubs displayed away from the show page&lt;br /&gt;
&lt;br /&gt;
=== SMW properties set ===&lt;br /&gt;
* &amp;lt;code&amp;gt;Ticket stub of show&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Stub ID&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Stub status&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Show]]&lt;br /&gt;
* [[Template:SetStone]]&lt;br /&gt;
* [[Category:Ticket stubs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Show templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;ticket-stub&amp;quot; style=&amp;quot;display: inline-block; width: 18em; padding: 0.8em 1em; margin: 0.5em 0.5em 0.5em 0; background: #fafaf3; border: 1px solid #c8c4b0; border-left: 3px solid #98b; font-family: Georgia, serif; box-shadow: 2px 2px 0 rgba(0,0,0,0.05); vertical-align: top;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, Consolas, monospace; font-size: 0.7em; letter-spacing: 0.18em; color: #888; text-transform: uppercase;&amp;quot;&amp;gt;Ticket Stub &amp;lt;span style=&amp;quot;color:#bbb&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; #{{{stubId}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 1.05em; margin: 0.4em 0 0.15em 0; font-weight: 600;&amp;quot;&amp;gt;[[{{{show}}}]]&amp;lt;/div&amp;gt;{{#if:{{{venue|}}}|&amp;lt;div style=&amp;quot;font-style: italic; color: #666; font-size: 0.85em; margin-bottom: 0.15em;&amp;quot;&amp;gt;{{{venue}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{date|}}}|&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, monospace; font-size: 0.7em; color: #777; text-transform: uppercase; letter-spacing: 0.12em; margin-top: 0.3em;&amp;quot;&amp;gt;{{{date}}}&amp;lt;/div&amp;gt;|}}&amp;lt;div style=&amp;quot;margin-top: 0.6em; border-top: 1px dashed #c8c4b0; padding-top: 0.4em; font-family: &#039;SF Mono&#039;, monospace; font-size: 0.72em; letter-spacing: 0.1em; text-transform: uppercase;&amp;quot;&amp;gt;{{#ifeq:{{{status|unclaimed}}}|claimed|&amp;lt;span style=&amp;quot;color: #228b22;&amp;quot;&amp;gt;&amp;amp;#10003; Claimed{{#if:{{{claimed_by|}}}| by &#039;&#039;&#039;{{{claimed_by}}}&#039;&#039;&#039;|}}&amp;lt;/span&amp;gt;|&amp;lt;span style=&amp;quot;color: #aaa;&amp;quot;&amp;gt;&amp;amp;#9675; Unclaimed&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;{{#set:Ticket stub of show={{{show}}}}}{{#set:Stub ID={{{stubId}}}}}{{#set:Stub status={{{status|unclaimed}}}}}[[Category:Ticket stubs]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Template:SetStone&amp;diff=5301</id>
		<title>Candidate:Template:SetStone</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Template:SetStone&amp;diff=5301"/>
		<updated>2026-06-04T22:00:15Z</updated>

		<summary type="html">&lt;p&gt;Magent: Draft Template:SetStone for display of set stone NFTs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot verification marker --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SetStone&#039;&#039;&#039; - Display template for a Set Stone NFT representing ownership of a song from a specific set.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{SetStone&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|set=1&lt;br /&gt;
|shape=diamond&lt;br /&gt;
|color=ruby&lt;br /&gt;
|song=The Two Sisters&lt;br /&gt;
|price=0.05&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{SetStone&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|set=2&lt;br /&gt;
|shape=triangle&lt;br /&gt;
|color=emerald&lt;br /&gt;
|song=Power Underneath&lt;br /&gt;
|price=0.05&lt;br /&gt;
|owner=jMyles&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
* &#039;&#039;&#039;show&#039;&#039;&#039; (required) - Wiki page of the show&lt;br /&gt;
* &#039;&#039;&#039;set&#039;&#039;&#039; (required) - Set number (1, 2, 3...)&lt;br /&gt;
* &#039;&#039;&#039;shape&#039;&#039;&#039; (optional) - Stone shape: &amp;lt;code&amp;gt;diamond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;triangle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;square&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hexagon&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;color&#039;&#039;&#039; (optional) - Stone color: &amp;lt;code&amp;gt;ruby&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;emerald&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sapphire&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;topaz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;diamond&amp;lt;/code&amp;gt; (clear), or any hex code with a leading &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;song&#039;&#039;&#039; (optional) - Song this stone represents&lt;br /&gt;
* &#039;&#039;&#039;price&#039;&#039;&#039; (optional) - Mint price in ETH (numeric only, the Ξ is added by the template)&lt;br /&gt;
* &#039;&#039;&#039;owner&#039;&#039;&#039; (optional) - Current holder of the stone&lt;br /&gt;
&lt;br /&gt;
=== SMW properties set ===&lt;br /&gt;
* &amp;lt;code&amp;gt;Set stone of show&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Set number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Set stone shape&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Set stone color&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Song&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Show]]&lt;br /&gt;
* [[Template:TicketStub]]&lt;br /&gt;
* [[Category:Set stones]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Show templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;set-stone&amp;quot; style=&amp;quot;display: inline-block; width: 18em; padding: 0.8em 1em; margin: 0.5em 0.5em 0.5em 0; background: #fafaf3; border: 1px solid #c8c4b0; border-left: 3px solid {{#switch:{{{color|}}}|ruby=#cc4444|emerald=#44aa66|sapphire=#4477bb|topaz=#cca844|diamond=#bbb|#98b}}; font-family: Georgia, serif; box-shadow: 2px 2px 0 rgba(0,0,0,0.05); vertical-align: top; position: relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, Consolas, monospace; font-size: 0.7em; letter-spacing: 0.18em; color: #888; text-transform: uppercase;&amp;quot;&amp;gt;Set Stone &amp;lt;span style=&amp;quot;color:#bbb&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; Set {{{set|?}}}{{#if:{{{shape|}}}|&amp;amp;nbsp;&amp;lt;span style=&amp;quot;color:#bbb&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; {{{shape}}}|}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 1.05em; margin: 0.4em 0 0.15em 0; font-weight: 600;&amp;quot;&amp;gt;{{#if:{{{song|}}}|{{{song}}}|&amp;lt;span style=&amp;quot;color:#aaa; font-style:italic; font-weight:400;&amp;quot;&amp;gt;song TBD&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-style: italic; color: #666; font-size: 0.85em;&amp;quot;&amp;gt;from [[{{{show}}}]]&amp;lt;/div&amp;gt;{{#if:{{{price|}}}|&amp;lt;div style=&amp;quot;margin-top: 0.5em; border-top: 1px dashed #c8c4b0; padding-top: 0.4em; font-family: &#039;SF Mono&#039;, monospace; font-size: 0.72em; letter-spacing: 0.1em; text-transform: uppercase; color: #555;&amp;quot;&amp;gt;Price &amp;lt;span style=&amp;quot;font-weight:600; color:#333;&amp;quot;&amp;gt;{{{price}}} Ξ&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;|}}{{#if:{{{owner|}}}|&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, monospace; font-size: 0.7em; color: #228b22; margin-top: 0.3em; letter-spacing: 0.1em; text-transform: uppercase;&amp;quot;&amp;gt;Held by &#039;&#039;&#039;{{{owner}}}&#039;&#039;&#039;&amp;lt;/div&amp;gt;|}}&amp;lt;/div&amp;gt;{{#set:Set stone of show={{{show}}}}}{{#set:Set number={{{set|}}}}}{{#set:Set stone shape={{{shape|}}}}}{{#set:Set stone color={{{color|}}}}}{{#if:{{{song|}}}|{{#set:Song={{{song}}}}}|}}[[Category:Set stones]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Template:SetStone&amp;diff=5300</id>
		<title>Candidate:Template:SetStone</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Template:SetStone&amp;diff=5300"/>
		<updated>2026-06-04T21:59:26Z</updated>

		<summary type="html">&lt;p&gt;Magent: Draft Template:SetStone for display of set stone NFTs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot verification marker --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SetStone&#039;&#039;&#039; - Display template for a Set Stone NFT representing ownership of a song from a specific set.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{SetStone&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|set=1&lt;br /&gt;
|shape=diamond&lt;br /&gt;
|color=ruby&lt;br /&gt;
|song=The Two Sisters&lt;br /&gt;
|price=0.05&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{SetStone&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|set=2&lt;br /&gt;
|shape=triangle&lt;br /&gt;
|color=emerald&lt;br /&gt;
|song=Power Underneath&lt;br /&gt;
|price=0.05&lt;br /&gt;
|owner=jMyles&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
* &#039;&#039;&#039;show&#039;&#039;&#039; (required) - Wiki page of the show&lt;br /&gt;
* &#039;&#039;&#039;set&#039;&#039;&#039; (required) - Set number (1, 2, 3...)&lt;br /&gt;
* &#039;&#039;&#039;shape&#039;&#039;&#039; (optional) - Stone shape: &amp;lt;code&amp;gt;diamond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;triangle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;circle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;square&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hexagon&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;color&#039;&#039;&#039; (optional) - Stone color: &amp;lt;code&amp;gt;ruby&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;emerald&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sapphire&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;topaz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;diamond&amp;lt;/code&amp;gt; (clear), or any hex code with a leading &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;song&#039;&#039;&#039; (optional) - Song this stone represents&lt;br /&gt;
* &#039;&#039;&#039;price&#039;&#039;&#039; (optional) - Mint price in ETH (numeric only, the Ξ is added by the template)&lt;br /&gt;
* &#039;&#039;&#039;owner&#039;&#039;&#039; (optional) - Current holder of the stone&lt;br /&gt;
&lt;br /&gt;
=== SMW properties set ===&lt;br /&gt;
* &amp;lt;code&amp;gt;Set stone of show&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Set number&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Set stone shape&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Set stone color&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Song&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Show]]&lt;br /&gt;
* [[Template:TicketStub]]&lt;br /&gt;
* [[Category:Set stones]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Show templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;set-stone&amp;quot; style=&amp;quot;display: inline-block; width: 18em; padding: 0.8em 1em; margin: 0.5em 0.5em 0.5em 0; background: #fafaf3; border: 1px solid #c8c4b0; border-left: 3px solid {{#switch:{{{color|}}}|ruby=#cc4444|emerald=#44aa66|sapphire=#4477bb|topaz=#cca844|diamond=#bbb|#98b}}; font-family: Georgia, serif; box-shadow: 2px 2px 0 rgba(0,0,0,0.05); vertical-align: top; position: relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, Consolas, monospace; font-size: 0.7em; letter-spacing: 0.18em; color: #888; text-transform: uppercase;&amp;quot;&amp;gt;Set Stone &amp;lt;span style=&amp;quot;color:#bbb&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; Set {{{set|?}}}{{#if:{{{shape|}}}| &amp;lt;span style=&amp;quot;color:#bbb&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; {{{shape}}}|}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 1.05em; margin: 0.4em 0 0.15em 0; font-weight: 600;&amp;quot;&amp;gt;{{#if:{{{song|}}}|{{{song}}}|&amp;lt;span style=&amp;quot;color:#aaa; font-style:italic; font-weight:400;&amp;quot;&amp;gt;song TBD&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-style: italic; color: #666; font-size: 0.85em;&amp;quot;&amp;gt;from [[{{{show}}}]]&amp;lt;/div&amp;gt;{{#if:{{{price|}}}|&amp;lt;div style=&amp;quot;margin-top: 0.5em; border-top: 1px dashed #c8c4b0; padding-top: 0.4em; font-family: &#039;SF Mono&#039;, monospace; font-size: 0.72em; letter-spacing: 0.1em; text-transform: uppercase; color: #555;&amp;quot;&amp;gt;Price &amp;lt;span style=&amp;quot;font-weight:600; color:#333;&amp;quot;&amp;gt;{{{price}}} Ξ&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;|}}{{#if:{{{owner|}}}|&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, monospace; font-size: 0.7em; color: #228b22; margin-top: 0.3em; letter-spacing: 0.1em; text-transform: uppercase;&amp;quot;&amp;gt;Held by &#039;&#039;&#039;{{{owner}}}&#039;&#039;&#039;&amp;lt;/div&amp;gt;|}}&amp;lt;/div&amp;gt;{{#set:Set stone of show={{{show}}}}}{{#set:Set number={{{set|}}}}}{{#set:Set stone shape={{{shape|}}}}}{{#set:Set stone color={{{color|}}}}}{{#if:{{{song|}}}|{{#set:Song={{{song}}}}}|}}[[Category:Set stones]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Template:TicketStub&amp;diff=5299</id>
		<title>Candidate:Template:TicketStub</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Template:TicketStub&amp;diff=5299"/>
		<updated>2026-06-04T21:59:25Z</updated>

		<summary type="html">&lt;p&gt;Magent: Draft Template:TicketStub for display of paper/digital ticket stubs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot verification marker --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TicketStub&#039;&#039;&#039; - Display template for a physical paper ticket stub from a show.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{TicketStub&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|stubId=001&lt;br /&gt;
|status=unclaimed&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{TicketStub&lt;br /&gt;
|show=Show:JustinHolmes-25255000&lt;br /&gt;
|stubId=001&lt;br /&gt;
|status=claimed&lt;br /&gt;
|claimed_by=jMyles&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
* &#039;&#039;&#039;show&#039;&#039;&#039; (required) - Wiki page of the show this stub belongs to (e.g., &amp;lt;code&amp;gt;Show:JustinHolmes-25255000&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &#039;&#039;&#039;stubId&#039;&#039;&#039; (required) - The token/serial number of this stub (e.g., &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;042&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &#039;&#039;&#039;status&#039;&#039;&#039; (optional) - &amp;lt;code&amp;gt;unclaimed&amp;lt;/code&amp;gt; (default), &amp;lt;code&amp;gt;claimed&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;claimed_by&#039;&#039;&#039; (optional) - Who currently holds the claimed stub&lt;br /&gt;
* &#039;&#039;&#039;date&#039;&#039;&#039; (optional) - Show date, human-readable&lt;br /&gt;
* &#039;&#039;&#039;venue&#039;&#039;&#039; (optional) - Venue name, for stubs displayed away from the show page&lt;br /&gt;
&lt;br /&gt;
=== SMW properties set ===&lt;br /&gt;
* &amp;lt;code&amp;gt;Ticket stub of show&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Stub ID&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Stub status&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Show]]&lt;br /&gt;
* [[Template:SetStone]]&lt;br /&gt;
* [[Category:Ticket stubs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Show templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;ticket-stub&amp;quot; style=&amp;quot;display: inline-block; width: 18em; padding: 0.8em 1em; margin: 0.5em 0.5em 0.5em 0; background: #fafaf3; border: 1px solid #c8c4b0; border-left: 3px solid #98b; font-family: Georgia, serif; box-shadow: 2px 2px 0 rgba(0,0,0,0.05); vertical-align: top;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, Consolas, monospace; font-size: 0.7em; letter-spacing: 0.18em; color: #888; text-transform: uppercase;&amp;quot;&amp;gt;Ticket Stub &amp;lt;span style=&amp;quot;color:#bbb&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; #{{{stubId}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 1.05em; margin: 0.4em 0 0.15em 0; font-weight: 600;&amp;quot;&amp;gt;[[{{{show}}}]]&amp;lt;/div&amp;gt;{{#if:{{{venue|}}}|&amp;lt;div style=&amp;quot;font-style: italic; color: #666; font-size: 0.85em; margin-bottom: 0.15em;&amp;quot;&amp;gt;{{{venue}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{date|}}}|&amp;lt;div style=&amp;quot;font-family: &#039;SF Mono&#039;, monospace; font-size: 0.7em; color: #777; text-transform: uppercase; letter-spacing: 0.12em; margin-top: 0.3em;&amp;quot;&amp;gt;{{{date}}}&amp;lt;/div&amp;gt;|}}&amp;lt;div style=&amp;quot;margin-top: 0.6em; border-top: 1px dashed #c8c4b0; padding-top: 0.4em; font-family: &#039;SF Mono&#039;, monospace; font-size: 0.72em; letter-spacing: 0.1em; text-transform: uppercase;&amp;quot;&amp;gt;{{#ifeq:{{{status|unclaimed}}}|claimed|&amp;lt;span style=&amp;quot;color: #228b22;&amp;quot;&amp;gt;&amp;amp;#10003; Claimed{{#if:{{{claimed_by|}}}| by &#039;&#039;&#039;{{{claimed_by}}}&#039;&#039;&#039;|}}&amp;lt;/span&amp;gt;|&amp;lt;span style=&amp;quot;color: #aaa;&amp;quot;&amp;gt;&amp;amp;#9675; Unclaimed&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;{{#set:Ticket stub of show={{{show}}}}}{{#set:Stub ID={{{stubId}}}}}{{#set:Stub status={{{status|unclaimed}}}}}[[Category:Ticket stubs]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5296</id>
		<title>Candidate:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5296"/>
		<updated>2026-06-02T21:01:29Z</updated>

		<summary type="html">&lt;p&gt;Magent: v6: .pp-image-link styling to strip body-link gradient from the wrapping anchor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* |status=proposed -- bot-staged; remove this line when promoting. */&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — Show: page styling&lt;br /&gt;
 *&lt;br /&gt;
 * Triggers when an article&#039;s title starts with &amp;quot;Show:&amp;quot; (legacy&lt;br /&gt;
 * mainspace convention, not a real namespace). Common.js adds&lt;br /&gt;
 * .pickipedia-show to body and absorbs Template:Show&#039;s infobox&lt;br /&gt;
 * into a poster-style hero; once absorbed the infobox is hidden.&lt;br /&gt;
 * Pages without Template:Show still get the setlist typography.&lt;br /&gt;
 *&lt;br /&gt;
 * Reuses the same paper/ink palette as .pickipedia-userpost so&lt;br /&gt;
 * shows and zine posts feel like the same publication.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Poster (hero block) ---------- */&lt;br /&gt;
.pickipedia-show .show-poster {&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  padding: 32px 36px 28px;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0 0 12px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  align-items: baseline;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker .pp-sep { color: var(--pp-muted); }&lt;br /&gt;
&lt;br /&gt;
/* Human-readable date kicker — bigger than the technical kicker so it&lt;br /&gt;
   reads as the answer to &amp;quot;when is this show?&amp;quot;. */&lt;br /&gt;
.pickipedia-show .show-poster .pp-date-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin: 0 0 8px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 44px;&lt;br /&gt;
  line-height: 1.05;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue a { color: inherit; }&lt;br /&gt;
&lt;br /&gt;
/* Ensemble blocks ({{Ensemble|...}}) render in their source position on&lt;br /&gt;
   the page — typically right under {{Show}} — and float right next to&lt;br /&gt;
   the body content. The default Template:Ensemble inline styles give a&lt;br /&gt;
   gray-box infobox look; the rules below override those inline styles&lt;br /&gt;
   (with !important) to match the takeover palette. */&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-left: 2px solid var(--pp-accent) !important;&lt;br /&gt;
  width: 15em !important;&lt;br /&gt;
  padding: 4px 0 4px 16px !important;&lt;br /&gt;
  margin: 8px 0 16px 28px !important;&lt;br /&gt;
  float: right !important;&lt;br /&gt;
  clear: right !important;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox &amp;gt; div:first-child {&lt;br /&gt;
  /* Header row carries the band name (or &amp;quot;Ensemble&amp;quot; default). */&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  color: var(--pp-accent) !important;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  margin: 0 0 10px !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox &amp;gt; div:nth-child(2) {&lt;br /&gt;
  /* Member list — one per line (already separated by &amp;lt;br&amp;gt;), serif italic,&lt;br /&gt;
     instrument icons preserved. */&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 1.7 !important;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border-bottom-color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
/* The {{m|name|instrument}} icon is a tiny rotated image inline with&lt;br /&gt;
   the name. Slightly nudge it for vertical balance. */&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox img {&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  /* On mobile, stop floating and let it stack full-width above content. */&lt;br /&gt;
  .pickipedia-show.has-show-hero .ensemble-infobox {&lt;br /&gt;
    float: none !important;&lt;br /&gt;
    width: auto !important;&lt;br /&gt;
    margin: 8px 0 16px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 16px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-label { opacity: 0.7; margin-right: 4px; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-value { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-image {&lt;br /&gt;
  margin: 28px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-image img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
/* Clickable poster: image already shows a pointer cursor inside an&lt;br /&gt;
   &amp;lt;a&amp;gt;, but we strip the body-link underline-by-bg gradient that would&lt;br /&gt;
   bleed onto the image otherwise. */&lt;br /&gt;
.pickipedia-show .show-poster .pp-image .pp-image-link {&lt;br /&gt;
  display: block;&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-poster-credit {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-poster-credit-label {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin-right: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* (Previously we absorbed ensemble infoboxes into the hero; now they&lt;br /&gt;
   render in source position, so no .is-absorbed hiding rule is needed.) */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions {&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.12em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-paper);&lt;br /&gt;
  background: var(--pp-accent);&lt;br /&gt;
  border: 1px solid var(--pp-accent);&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a:hover {&lt;br /&gt;
  background: var(--pp-ink);&lt;br /&gt;
  border-color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-status {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 14px;&lt;br /&gt;
  right: 18px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-verified { color: #228b22; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-proposed { color: #b8860b; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the original infobox once the hero has absorbed its data. */&lt;br /&gt;
.pickipedia-show .show-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the slug-style firstHeading only when the hero has been built —&lt;br /&gt;
   bare Show: pages without Template:Show keep the heading so users&lt;br /&gt;
   aren&#039;t left with an untitled page. */&lt;br /&gt;
.pickipedia-show.has-show-hero #firstHeading,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-first-heading { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Setlist typography ---------- */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  margin: 32px 0 14px;&lt;br /&gt;
  padding-top: 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 .mw-editsection {&lt;br /&gt;
  font-family: var(--pp-sans);&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .mw-parser-output ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0 0 16px;&lt;br /&gt;
  counter-reset: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  padding: 6px 0 6px 40px;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  position: relative;&lt;br /&gt;
  counter-increment: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li::before {&lt;br /&gt;
  content: counter(setlist, decimal-leading-zero);&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 8px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li:last-child { border-bottom: none; }&lt;br /&gt;
&lt;br /&gt;
/* Reset counter at every h2 so each set starts at 01. */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 + ul,&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 ~ ul:first-of-type { counter-reset: setlist; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show .show-poster { padding: 22px 18px 18px; }&lt;br /&gt;
  .pickipedia-show .show-poster h1.pp-title { font-size: 30px; }&lt;br /&gt;
  .pickipedia-show .show-poster .pp-venue { font-size: 18px; }&lt;br /&gt;
  .pickipedia-show .mw-parser-output ul li { font-size: 17px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Full-takeover layout for Show: pages with hero&lt;br /&gt;
 *&lt;br /&gt;
 * Only fires when .pickipedia-show AND .has-show-hero (i.e.,&lt;br /&gt;
 * Template:Show is present). Bare Show: pages keep their wiki&lt;br /&gt;
 * chrome — the setlist typography from the base section still&lt;br /&gt;
 * applies.&lt;br /&gt;
 *&lt;br /&gt;
 * The DOM additions (corner logo, topbar) are inserted by&lt;br /&gt;
 * Gadget-pickipedia-show.js. The patterns here mirror what&lt;br /&gt;
 * .pickipedia-userpost does, so future deduping into a shared&lt;br /&gt;
 * .pickipedia-publication base class stays straightforward.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #column-one,&lt;br /&gt;
.pickipedia-show.has-show-hero #sidebar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-panel,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-main-menu-container,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-toolbar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-navigation .portal,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-sidebar-container,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-views,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions-mobile,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-personal,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-logo,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-tools,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-footer,&lt;br /&gt;
.pickipedia-show.has-show-hero #footer,&lt;br /&gt;
.pickipedia-show.has-show-hero .printfooter,&lt;br /&gt;
.pickipedia-show.has-show-hero .catlinks,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-indicators,&lt;br /&gt;
.pickipedia-show.has-show-hero #siteSub,&lt;br /&gt;
.pickipedia-show.has-show-hero #contentSub,&lt;br /&gt;
.pickipedia-show.has-show-hero .subpages,&lt;br /&gt;
.pickipedia-show.has-show-hero #jump-to-nav,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #globalWrapper,&lt;br /&gt;
.pickipedia-show.has-show-hero #column-content,&lt;br /&gt;
.pickipedia-show.has-show-hero .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #content,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-body,&lt;br /&gt;
.pickipedia-show.has-show-hero #bodyContent,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: clamp(60px, 9vw, 130px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-left,&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-right {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Centered content column ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output {&lt;br /&gt;
  max-width: 720px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 8px 24px 80px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 22px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a:hover { color: var(--pp-accent); }&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Setlist links shouldn&#039;t get the body-paragraph underline treatment —&lt;br /&gt;
 * they live inside numbered list items and already get serif styling. */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output ul li a {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (min-width: 720px) and (max-width: 1100px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    margin-left: 160px;&lt;br /&gt;
    margin-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    padding-left: max(24px, calc(9vw + 24px));&lt;br /&gt;
    padding-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5295</id>
		<title>Candidate:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5295"/>
		<updated>2026-06-02T21:01:28Z</updated>

		<summary type="html">&lt;p&gt;Magent: v6: wrap poster image in anchor to File: page (uses same href as infobox)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// |status=proposed -- bot-staged; remove this line when promoting.&lt;br /&gt;
/**&lt;br /&gt;
 * Pickipedia — Show: page hero.&lt;br /&gt;
 *&lt;br /&gt;
 * For mainspace pages whose title starts with &amp;quot;Show:&amp;quot; (the legacy&lt;br /&gt;
 * mainspace convention used pre-namespace), adds .pickipedia-show&lt;br /&gt;
 * to body and absorbs Template:Show&#039;s infobox into a poster-style&lt;br /&gt;
 * hero. If the page does not use Template:Show only the body class&lt;br /&gt;
 * is added — the setlist typography in Common.css still applies.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 0) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;Show:&#039;) !== 0) return;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-show&#039;);&lt;br /&gt;
&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (!content) return;&lt;br /&gt;
&lt;br /&gt;
  var infobox = content.querySelector(&#039;.show-infobox&#039;);&lt;br /&gt;
  if (!infobox) return;  // Bare show page — body class only.&lt;br /&gt;
&lt;br /&gt;
  // ---------- Pull fields out of the existing infobox ----------&lt;br /&gt;
  // Template:Show emits rows of &amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; value&amp;lt;/div&amp;gt;&lt;br /&gt;
  // plus a top banner with &amp;quot;Artists at Venue&amp;quot; and optional image.&lt;br /&gt;
  function fieldValue(label) {&lt;br /&gt;
    var rows = infobox.querySelectorAll(&#039;div&#039;);&lt;br /&gt;
    for (var i = 0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
      var s = rows[i].querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (!s) continue;&lt;br /&gt;
      var labelText = s.textContent.replace(/[:\s]*$/, &#039;&#039;).trim();&lt;br /&gt;
      if (labelText !== label) continue;&lt;br /&gt;
      var clone = rows[i].cloneNode(true);&lt;br /&gt;
      var strong = clone.querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (strong) strong.remove();&lt;br /&gt;
      return clone.innerHTML.trim().replace(/^[\s:]+/, &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var artists      = fieldValue(&#039;Artists&#039;);&lt;br /&gt;
  var venue        = fieldValue(&#039;Venue&#039;);&lt;br /&gt;
  var date         = fieldValue(&#039;Date&#039;);&lt;br /&gt;
  var showtime     = fieldValue(&#039;Showtime&#039;);&lt;br /&gt;
  var doors        = fieldValue(&#039;Doors&#039;);&lt;br /&gt;
  var show         = fieldValue(&#039;Show&#039;);&lt;br /&gt;
  var posterArtist = fieldValue(&#039;Poster art&#039;);&lt;br /&gt;
  var tickets      = fieldValue(&#039;Tickets&#039;);&lt;br /&gt;
  var price        = fieldValue(&#039;Price&#039;);&lt;br /&gt;
  var ages         = fieldValue(&#039;Ages&#039;);&lt;br /&gt;
&lt;br /&gt;
  var imageImg = infobox.querySelector(&#039;img&#039;);&lt;br /&gt;
&lt;br /&gt;
  var status = &#039;&#039;;&lt;br /&gt;
  if (infobox.classList.contains(&#039;show-verified&#039;)) status = &#039;verified&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;bot-proposal&#039;)) status = &#039;proposed&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;show-unverified&#039;)) status = &#039;unverified&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Build the poster hero ----------&lt;br /&gt;
  // Showtime is rendered by Template:Show as&lt;br /&gt;
  // [https://etherscan.io/block/N N] — pull the block number out and&lt;br /&gt;
  // format it with commas so the kicker reads &amp;quot;BLOCK 24,144,194&amp;quot;.&lt;br /&gt;
  function formatShowtime(htmlIn) {&lt;br /&gt;
    if (!htmlIn) return &#039;&#039;;&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;);&lt;br /&gt;
    tmp.innerHTML = htmlIn;&lt;br /&gt;
    var anchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    var blockNum = (anchor ? anchor.textContent : tmp.textContent).trim();&lt;br /&gt;
    var asInt = parseInt(blockNum.replace(/[^\d]/g, &#039;&#039;), 10);&lt;br /&gt;
    if (isNaN(asInt)) return blockNum;&lt;br /&gt;
    var formatted = asInt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    var href = anchor ? anchor.href : &#039;&#039;;&lt;br /&gt;
    if (href) {&lt;br /&gt;
      return &#039;&amp;lt;a href=&amp;quot;&#039; + href + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Block &#039; + formatted + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;Block &#039; + formatted;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Big date kicker (human-readable) on its own line, above the smaller&lt;br /&gt;
  // technical kicker with block/doors/show.&lt;br /&gt;
  var dateKickerHtml = date&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-date-kicker&amp;quot;&amp;gt;&#039; + escapeHtml(date) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var kickerBits = [];&lt;br /&gt;
  var showtimeHtml = formatShowtime(showtime);&lt;br /&gt;
  if (showtimeHtml) kickerBits.push(showtimeHtml);&lt;br /&gt;
  if (doors) kickerBits.push(&#039;Doors &#039; + doors);&lt;br /&gt;
  if (show)  kickerBits.push(&#039;Show &#039; + show);&lt;br /&gt;
&lt;br /&gt;
  var kickerHtml = kickerBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerBits.join(&#039;&amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var venueHtml = venue ? &#039;&amp;lt;p class=&amp;quot;pp-venue&amp;quot;&amp;gt;at &#039; + venue + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Ensembles ({{Ensemble|...}} blocks) are intentionally NOT absorbed into&lt;br /&gt;
  // the hero — they render in their source position on the page so the&lt;br /&gt;
  // wikitext author controls placement. The CSS in this gadget restyles&lt;br /&gt;
  // the existing .ensemble-infobox to fit the takeover aesthetic (right-&lt;br /&gt;
  // floating, paper-themed, mono-caps title, instrument icons inline).&lt;br /&gt;
  var ensembleHtml = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var metaBits = [];&lt;br /&gt;
  if (price)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Price&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;$&#039; +&lt;br /&gt;
      escapeHtml(price.replace(/^\$/, &#039;&#039;)) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  if (ages)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Ages&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      ages + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  var metaHtml = metaBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;&#039; + metaBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Upgrade the poster thumbnail: Template:Show renders [[File:foo|220px]]&lt;br /&gt;
  // which gives us /images/thumb/.../220px-foo.png inside an &amp;lt;a&amp;gt; linking&lt;br /&gt;
  // to the File: page. We grab that anchor&#039;s href so clicking the big&lt;br /&gt;
  // hero poster takes the user to the File: page (where the upload&lt;br /&gt;
  // history, full-res download, and license info live). The thumbnail&lt;br /&gt;
  // URL gets upsized from /220px-/ to /800px- for a sharper render; CSS&lt;br /&gt;
  // scales it to fit the card. SVGs and other non-thumbnailed files&lt;br /&gt;
  // keep their original src.&lt;br /&gt;
  var imageHtml = &#039;&#039;;&lt;br /&gt;
  if (imageImg) {&lt;br /&gt;
    var bigSrc = imageImg.src.replace(/\/(\d+)px-/, &#039;/800px-&#039;);&lt;br /&gt;
    var imageAnchor = imageImg.closest(&#039;a&#039;);&lt;br /&gt;
    var imageHref = imageAnchor ? imageAnchor.getAttribute(&#039;href&#039;) : &#039;&#039;;&lt;br /&gt;
    var imgTag = &#039;&amp;lt;img src=&amp;quot;&#039; + bigSrc + &#039;&amp;quot; alt=&amp;quot;&#039; +&lt;br /&gt;
      escapeHtml(imageImg.alt || &#039;&#039;) + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    var wrapped = imageHref&lt;br /&gt;
      ? &#039;&amp;lt;a class=&amp;quot;pp-image-link&amp;quot; href=&amp;quot;&#039; + imageHref +&lt;br /&gt;
        &#039;&amp;quot; title=&amp;quot;View file details&amp;quot;&amp;gt;&#039; + imgTag + &#039;&amp;lt;/a&amp;gt;&#039;&lt;br /&gt;
      : imgTag;&lt;br /&gt;
    imageHtml = &#039;&amp;lt;div class=&amp;quot;pp-image&amp;quot;&amp;gt;&#039; + wrapped +&lt;br /&gt;
      (posterArtist&lt;br /&gt;
        ? &#039;&amp;lt;p class=&amp;quot;pp-poster-credit&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pp-poster-credit-label&amp;quot;&amp;gt;Poster art by&amp;lt;/span&amp;gt; &#039; +&lt;br /&gt;
            escapeHtml(posterArtist) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        : &#039;&#039;) +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Tickets field is an anchor; surface its href as a poster action.&lt;br /&gt;
  var actionBits = [];&lt;br /&gt;
  if (tickets) {&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;); tmp.innerHTML = tickets;&lt;br /&gt;
    var ticketAnchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    if (ticketAnchor &amp;amp;&amp;amp; ticketAnchor.href) {&lt;br /&gt;
      actionBits.push(&#039;&amp;lt;a href=&amp;quot;&#039; + ticketAnchor.href +&lt;br /&gt;
        &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Tickets&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  var actionsHtml = actionBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-actions&amp;quot;&amp;gt;&#039; + actionBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var statusHtml = status&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-status is-&#039; + status + &#039;&amp;quot;&amp;gt;&#039; + status + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var titleHtml = artists || escapeHtml(title.replace(/^Show:\s*/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
  var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
  hero.className = &#039;show-poster&#039;;&lt;br /&gt;
  hero.innerHTML =&lt;br /&gt;
    statusHtml +&lt;br /&gt;
    dateKickerHtml +&lt;br /&gt;
    kickerHtml +&lt;br /&gt;
    &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + titleHtml + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
    venueHtml +&lt;br /&gt;
    metaHtml +&lt;br /&gt;
    imageHtml +&lt;br /&gt;
    actionsHtml;&lt;br /&gt;
&lt;br /&gt;
  content.insertBefore(hero, content.firstChild);&lt;br /&gt;
  infobox.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  body.classList.add(&#039;has-show-hero&#039;);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Full-takeover chrome: corner logo + slim topbar ----------&lt;br /&gt;
  // Only fires when the hero was built (Template:Show present). The CSS&lt;br /&gt;
  // chrome-hiding rules are gated by .has-show-hero so bare Show: pages&lt;br /&gt;
  // keep their wiki sidebar; if you want to make those takeover too,&lt;br /&gt;
  // remove the .has-show-hero gating from the CSS file.&lt;br /&gt;
  var LOGO_URL = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  var cornerLogo = document.createElement(&#039;a&#039;);&lt;br /&gt;
  cornerLogo.className = &#039;pp-corner-logo&#039;;&lt;br /&gt;
  cornerLogo.href = &#039;/wiki/Main_Page&#039;;&lt;br /&gt;
  cornerLogo.title = &#039;PickiPedia home&#039;;&lt;br /&gt;
  cornerLogo.innerHTML = &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_URL + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(cornerLogo, body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-show-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-left&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Category:Shows&#039;) + &#039;&amp;quot;&amp;gt;← All shows&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(topbar, cornerLogo.nextSibling);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5289</id>
		<title>Candidate:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5289"/>
		<updated>2026-06-02T20:53:19Z</updated>

		<summary type="html">&lt;p&gt;Magent: v5: restyle .ensemble-infobox in place (right-float, vertical, paper-themed, icons inline)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* |status=proposed -- bot-staged; remove this line when promoting. */&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — Show: page styling&lt;br /&gt;
 *&lt;br /&gt;
 * Triggers when an article&#039;s title starts with &amp;quot;Show:&amp;quot; (legacy&lt;br /&gt;
 * mainspace convention, not a real namespace). Common.js adds&lt;br /&gt;
 * .pickipedia-show to body and absorbs Template:Show&#039;s infobox&lt;br /&gt;
 * into a poster-style hero; once absorbed the infobox is hidden.&lt;br /&gt;
 * Pages without Template:Show still get the setlist typography.&lt;br /&gt;
 *&lt;br /&gt;
 * Reuses the same paper/ink palette as .pickipedia-userpost so&lt;br /&gt;
 * shows and zine posts feel like the same publication.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Poster (hero block) ---------- */&lt;br /&gt;
.pickipedia-show .show-poster {&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  padding: 32px 36px 28px;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0 0 12px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  align-items: baseline;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker .pp-sep { color: var(--pp-muted); }&lt;br /&gt;
&lt;br /&gt;
/* Human-readable date kicker — bigger than the technical kicker so it&lt;br /&gt;
   reads as the answer to &amp;quot;when is this show?&amp;quot;. */&lt;br /&gt;
.pickipedia-show .show-poster .pp-date-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin: 0 0 8px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 44px;&lt;br /&gt;
  line-height: 1.05;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue a { color: inherit; }&lt;br /&gt;
&lt;br /&gt;
/* Ensemble blocks ({{Ensemble|...}}) render in their source position on&lt;br /&gt;
   the page — typically right under {{Show}} — and float right next to&lt;br /&gt;
   the body content. The default Template:Ensemble inline styles give a&lt;br /&gt;
   gray-box infobox look; the rules below override those inline styles&lt;br /&gt;
   (with !important) to match the takeover palette. */&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox {&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  border-left: 2px solid var(--pp-accent) !important;&lt;br /&gt;
  width: 15em !important;&lt;br /&gt;
  padding: 4px 0 4px 16px !important;&lt;br /&gt;
  margin: 8px 0 16px 28px !important;&lt;br /&gt;
  float: right !important;&lt;br /&gt;
  clear: right !important;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox &amp;gt; div:first-child {&lt;br /&gt;
  /* Header row carries the band name (or &amp;quot;Ensemble&amp;quot; default). */&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
  color: var(--pp-accent) !important;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
  margin: 0 0 10px !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox &amp;gt; div:nth-child(2) {&lt;br /&gt;
  /* Member list — one per line (already separated by &amp;lt;br&amp;gt;), serif italic,&lt;br /&gt;
     instrument icons preserved. */&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 1.7 !important;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border-bottom-color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
/* The {{m|name|instrument}} icon is a tiny rotated image inline with&lt;br /&gt;
   the name. Slightly nudge it for vertical balance. */&lt;br /&gt;
.pickipedia-show.has-show-hero .ensemble-infobox img {&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  /* On mobile, stop floating and let it stack full-width above content. */&lt;br /&gt;
  .pickipedia-show.has-show-hero .ensemble-infobox {&lt;br /&gt;
    float: none !important;&lt;br /&gt;
    width: auto !important;&lt;br /&gt;
    margin: 8px 0 16px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 16px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-label { opacity: 0.7; margin-right: 4px; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-value { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-image {&lt;br /&gt;
  margin: 28px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-image img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-poster-credit {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-poster-credit-label {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin-right: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* (Previously we absorbed ensemble infoboxes into the hero; now they&lt;br /&gt;
   render in source position, so no .is-absorbed hiding rule is needed.) */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions {&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.12em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-paper);&lt;br /&gt;
  background: var(--pp-accent);&lt;br /&gt;
  border: 1px solid var(--pp-accent);&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a:hover {&lt;br /&gt;
  background: var(--pp-ink);&lt;br /&gt;
  border-color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-status {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 14px;&lt;br /&gt;
  right: 18px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-verified { color: #228b22; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-proposed { color: #b8860b; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the original infobox once the hero has absorbed its data. */&lt;br /&gt;
.pickipedia-show .show-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the slug-style firstHeading only when the hero has been built —&lt;br /&gt;
   bare Show: pages without Template:Show keep the heading so users&lt;br /&gt;
   aren&#039;t left with an untitled page. */&lt;br /&gt;
.pickipedia-show.has-show-hero #firstHeading,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-first-heading { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Setlist typography ---------- */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  margin: 32px 0 14px;&lt;br /&gt;
  padding-top: 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 .mw-editsection {&lt;br /&gt;
  font-family: var(--pp-sans);&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .mw-parser-output ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0 0 16px;&lt;br /&gt;
  counter-reset: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  padding: 6px 0 6px 40px;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  position: relative;&lt;br /&gt;
  counter-increment: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li::before {&lt;br /&gt;
  content: counter(setlist, decimal-leading-zero);&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 8px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li:last-child { border-bottom: none; }&lt;br /&gt;
&lt;br /&gt;
/* Reset counter at every h2 so each set starts at 01. */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 + ul,&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 ~ ul:first-of-type { counter-reset: setlist; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show .show-poster { padding: 22px 18px 18px; }&lt;br /&gt;
  .pickipedia-show .show-poster h1.pp-title { font-size: 30px; }&lt;br /&gt;
  .pickipedia-show .show-poster .pp-venue { font-size: 18px; }&lt;br /&gt;
  .pickipedia-show .mw-parser-output ul li { font-size: 17px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Full-takeover layout for Show: pages with hero&lt;br /&gt;
 *&lt;br /&gt;
 * Only fires when .pickipedia-show AND .has-show-hero (i.e.,&lt;br /&gt;
 * Template:Show is present). Bare Show: pages keep their wiki&lt;br /&gt;
 * chrome — the setlist typography from the base section still&lt;br /&gt;
 * applies.&lt;br /&gt;
 *&lt;br /&gt;
 * The DOM additions (corner logo, topbar) are inserted by&lt;br /&gt;
 * Gadget-pickipedia-show.js. The patterns here mirror what&lt;br /&gt;
 * .pickipedia-userpost does, so future deduping into a shared&lt;br /&gt;
 * .pickipedia-publication base class stays straightforward.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #column-one,&lt;br /&gt;
.pickipedia-show.has-show-hero #sidebar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-panel,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-main-menu-container,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-toolbar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-navigation .portal,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-sidebar-container,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-views,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions-mobile,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-personal,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-logo,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-tools,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-footer,&lt;br /&gt;
.pickipedia-show.has-show-hero #footer,&lt;br /&gt;
.pickipedia-show.has-show-hero .printfooter,&lt;br /&gt;
.pickipedia-show.has-show-hero .catlinks,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-indicators,&lt;br /&gt;
.pickipedia-show.has-show-hero #siteSub,&lt;br /&gt;
.pickipedia-show.has-show-hero #contentSub,&lt;br /&gt;
.pickipedia-show.has-show-hero .subpages,&lt;br /&gt;
.pickipedia-show.has-show-hero #jump-to-nav,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #globalWrapper,&lt;br /&gt;
.pickipedia-show.has-show-hero #column-content,&lt;br /&gt;
.pickipedia-show.has-show-hero .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #content,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-body,&lt;br /&gt;
.pickipedia-show.has-show-hero #bodyContent,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: clamp(60px, 9vw, 130px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-left,&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-right {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Centered content column ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output {&lt;br /&gt;
  max-width: 720px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 8px 24px 80px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 22px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a:hover { color: var(--pp-accent); }&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Setlist links shouldn&#039;t get the body-paragraph underline treatment —&lt;br /&gt;
 * they live inside numbered list items and already get serif styling. */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output ul li a {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (min-width: 720px) and (max-width: 1100px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    margin-left: 160px;&lt;br /&gt;
    margin-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    padding-left: max(24px, calc(9vw + 24px));&lt;br /&gt;
    padding-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5288</id>
		<title>Candidate:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5288"/>
		<updated>2026-06-02T20:53:19Z</updated>

		<summary type="html">&lt;p&gt;Magent: v5: stop absorbing {{Ensemble}} — let it render in source position&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// |status=proposed -- bot-staged; remove this line when promoting.&lt;br /&gt;
/**&lt;br /&gt;
 * Pickipedia — Show: page hero.&lt;br /&gt;
 *&lt;br /&gt;
 * For mainspace pages whose title starts with &amp;quot;Show:&amp;quot; (the legacy&lt;br /&gt;
 * mainspace convention used pre-namespace), adds .pickipedia-show&lt;br /&gt;
 * to body and absorbs Template:Show&#039;s infobox into a poster-style&lt;br /&gt;
 * hero. If the page does not use Template:Show only the body class&lt;br /&gt;
 * is added — the setlist typography in Common.css still applies.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 0) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;Show:&#039;) !== 0) return;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-show&#039;);&lt;br /&gt;
&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (!content) return;&lt;br /&gt;
&lt;br /&gt;
  var infobox = content.querySelector(&#039;.show-infobox&#039;);&lt;br /&gt;
  if (!infobox) return;  // Bare show page — body class only.&lt;br /&gt;
&lt;br /&gt;
  // ---------- Pull fields out of the existing infobox ----------&lt;br /&gt;
  // Template:Show emits rows of &amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; value&amp;lt;/div&amp;gt;&lt;br /&gt;
  // plus a top banner with &amp;quot;Artists at Venue&amp;quot; and optional image.&lt;br /&gt;
  function fieldValue(label) {&lt;br /&gt;
    var rows = infobox.querySelectorAll(&#039;div&#039;);&lt;br /&gt;
    for (var i = 0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
      var s = rows[i].querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (!s) continue;&lt;br /&gt;
      var labelText = s.textContent.replace(/[:\s]*$/, &#039;&#039;).trim();&lt;br /&gt;
      if (labelText !== label) continue;&lt;br /&gt;
      var clone = rows[i].cloneNode(true);&lt;br /&gt;
      var strong = clone.querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (strong) strong.remove();&lt;br /&gt;
      return clone.innerHTML.trim().replace(/^[\s:]+/, &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var artists      = fieldValue(&#039;Artists&#039;);&lt;br /&gt;
  var venue        = fieldValue(&#039;Venue&#039;);&lt;br /&gt;
  var date         = fieldValue(&#039;Date&#039;);&lt;br /&gt;
  var showtime     = fieldValue(&#039;Showtime&#039;);&lt;br /&gt;
  var doors        = fieldValue(&#039;Doors&#039;);&lt;br /&gt;
  var show         = fieldValue(&#039;Show&#039;);&lt;br /&gt;
  var posterArtist = fieldValue(&#039;Poster art&#039;);&lt;br /&gt;
  var tickets      = fieldValue(&#039;Tickets&#039;);&lt;br /&gt;
  var price        = fieldValue(&#039;Price&#039;);&lt;br /&gt;
  var ages         = fieldValue(&#039;Ages&#039;);&lt;br /&gt;
&lt;br /&gt;
  var imageImg = infobox.querySelector(&#039;img&#039;);&lt;br /&gt;
&lt;br /&gt;
  var status = &#039;&#039;;&lt;br /&gt;
  if (infobox.classList.contains(&#039;show-verified&#039;)) status = &#039;verified&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;bot-proposal&#039;)) status = &#039;proposed&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;show-unverified&#039;)) status = &#039;unverified&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Build the poster hero ----------&lt;br /&gt;
  // Showtime is rendered by Template:Show as&lt;br /&gt;
  // [https://etherscan.io/block/N N] — pull the block number out and&lt;br /&gt;
  // format it with commas so the kicker reads &amp;quot;BLOCK 24,144,194&amp;quot;.&lt;br /&gt;
  function formatShowtime(htmlIn) {&lt;br /&gt;
    if (!htmlIn) return &#039;&#039;;&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;);&lt;br /&gt;
    tmp.innerHTML = htmlIn;&lt;br /&gt;
    var anchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    var blockNum = (anchor ? anchor.textContent : tmp.textContent).trim();&lt;br /&gt;
    var asInt = parseInt(blockNum.replace(/[^\d]/g, &#039;&#039;), 10);&lt;br /&gt;
    if (isNaN(asInt)) return blockNum;&lt;br /&gt;
    var formatted = asInt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    var href = anchor ? anchor.href : &#039;&#039;;&lt;br /&gt;
    if (href) {&lt;br /&gt;
      return &#039;&amp;lt;a href=&amp;quot;&#039; + href + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Block &#039; + formatted + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;Block &#039; + formatted;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Big date kicker (human-readable) on its own line, above the smaller&lt;br /&gt;
  // technical kicker with block/doors/show.&lt;br /&gt;
  var dateKickerHtml = date&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-date-kicker&amp;quot;&amp;gt;&#039; + escapeHtml(date) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var kickerBits = [];&lt;br /&gt;
  var showtimeHtml = formatShowtime(showtime);&lt;br /&gt;
  if (showtimeHtml) kickerBits.push(showtimeHtml);&lt;br /&gt;
  if (doors) kickerBits.push(&#039;Doors &#039; + doors);&lt;br /&gt;
  if (show)  kickerBits.push(&#039;Show &#039; + show);&lt;br /&gt;
&lt;br /&gt;
  var kickerHtml = kickerBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerBits.join(&#039;&amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var venueHtml = venue ? &#039;&amp;lt;p class=&amp;quot;pp-venue&amp;quot;&amp;gt;at &#039; + venue + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Ensembles ({{Ensemble|...}} blocks) are intentionally NOT absorbed into&lt;br /&gt;
  // the hero — they render in their source position on the page so the&lt;br /&gt;
  // wikitext author controls placement. The CSS in this gadget restyles&lt;br /&gt;
  // the existing .ensemble-infobox to fit the takeover aesthetic (right-&lt;br /&gt;
  // floating, paper-themed, mono-caps title, instrument icons inline).&lt;br /&gt;
  var ensembleHtml = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var metaBits = [];&lt;br /&gt;
  if (price)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Price&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;$&#039; +&lt;br /&gt;
      escapeHtml(price.replace(/^\$/, &#039;&#039;)) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  if (ages)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Ages&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      ages + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  var metaHtml = metaBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;&#039; + metaBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Upgrade the poster thumbnail: Template:Show renders [[File:foo|220px]]&lt;br /&gt;
  // which gives us /images/thumb/.../220px-foo.png. We replace the 220px&lt;br /&gt;
  // segment with 800px to request a larger thumbnail; CSS scales it to&lt;br /&gt;
  // fit the card. If the URL doesn&#039;t match the thumb pattern (e.g. SVG,&lt;br /&gt;
  // or non-thumbnailed file), we just use the original src.&lt;br /&gt;
  var imageHtml = &#039;&#039;;&lt;br /&gt;
  if (imageImg) {&lt;br /&gt;
    var bigSrc = imageImg.src.replace(/\/(\d+)px-/, &#039;/800px-&#039;);&lt;br /&gt;
    imageHtml = &#039;&amp;lt;div class=&amp;quot;pp-image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + bigSrc +&lt;br /&gt;
      &#039;&amp;quot; alt=&amp;quot;&#039; + escapeHtml(imageImg.alt || &#039;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      (posterArtist&lt;br /&gt;
        ? &#039;&amp;lt;p class=&amp;quot;pp-poster-credit&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pp-poster-credit-label&amp;quot;&amp;gt;Poster art by&amp;lt;/span&amp;gt; &#039; +&lt;br /&gt;
            escapeHtml(posterArtist) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        : &#039;&#039;) +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Tickets field is an anchor; surface its href as a poster action.&lt;br /&gt;
  var actionBits = [];&lt;br /&gt;
  if (tickets) {&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;); tmp.innerHTML = tickets;&lt;br /&gt;
    var ticketAnchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    if (ticketAnchor &amp;amp;&amp;amp; ticketAnchor.href) {&lt;br /&gt;
      actionBits.push(&#039;&amp;lt;a href=&amp;quot;&#039; + ticketAnchor.href +&lt;br /&gt;
        &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Tickets&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  var actionsHtml = actionBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-actions&amp;quot;&amp;gt;&#039; + actionBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var statusHtml = status&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-status is-&#039; + status + &#039;&amp;quot;&amp;gt;&#039; + status + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var titleHtml = artists || escapeHtml(title.replace(/^Show:\s*/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
  var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
  hero.className = &#039;show-poster&#039;;&lt;br /&gt;
  hero.innerHTML =&lt;br /&gt;
    statusHtml +&lt;br /&gt;
    dateKickerHtml +&lt;br /&gt;
    kickerHtml +&lt;br /&gt;
    &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + titleHtml + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
    venueHtml +&lt;br /&gt;
    metaHtml +&lt;br /&gt;
    imageHtml +&lt;br /&gt;
    actionsHtml;&lt;br /&gt;
&lt;br /&gt;
  content.insertBefore(hero, content.firstChild);&lt;br /&gt;
  infobox.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  body.classList.add(&#039;has-show-hero&#039;);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Full-takeover chrome: corner logo + slim topbar ----------&lt;br /&gt;
  // Only fires when the hero was built (Template:Show present). The CSS&lt;br /&gt;
  // chrome-hiding rules are gated by .has-show-hero so bare Show: pages&lt;br /&gt;
  // keep their wiki sidebar; if you want to make those takeover too,&lt;br /&gt;
  // remove the .has-show-hero gating from the CSS file.&lt;br /&gt;
  var LOGO_URL = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  var cornerLogo = document.createElement(&#039;a&#039;);&lt;br /&gt;
  cornerLogo.className = &#039;pp-corner-logo&#039;;&lt;br /&gt;
  cornerLogo.href = &#039;/wiki/Main_Page&#039;;&lt;br /&gt;
  cornerLogo.title = &#039;PickiPedia home&#039;;&lt;br /&gt;
  cornerLogo.innerHTML = &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_URL + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(cornerLogo, body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-show-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-left&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Category:Shows&#039;) + &#039;&amp;quot;&amp;gt;← All shows&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(topbar, cornerLogo.nextSibling);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5285</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5285"/>
		<updated>2026-06-02T20:43:25Z</updated>

		<summary type="html">&lt;p&gt;Magent: Add date= field (with bot-marker comment at bottom; safe to strip)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Show&lt;br /&gt;
|artists=Justin Myles Holmes&lt;br /&gt;
|venue=The Bundy Museum&lt;br /&gt;
|blockheight=25247741&lt;br /&gt;
|date=Friday, June 5, 2026&lt;br /&gt;
|official_poster=6 5 26 BUNDY POSTER-rev2.png&lt;br /&gt;
|poster_artist=Skyler Golden and Justin Myles Holmes&lt;br /&gt;
|doors_time=7:00 PM&lt;br /&gt;
|show_time=8:00 PM&lt;br /&gt;
|price=10&lt;br /&gt;
|ages=All ages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Ensemble&lt;br /&gt;
|Justin Holmes&lt;br /&gt;
|Skyler Golden&lt;br /&gt;
|Christina Docenko&lt;br /&gt;
|Paul Sanna&lt;br /&gt;
|Fibonacci Emery Holmes&lt;br /&gt;
|title=Justin Myles Holmes and The Immutable String Band&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Shows]]&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot-verification marker; safe to remove when Justin reviews --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5284</id>
		<title>Candidate:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5284"/>
		<updated>2026-06-02T20:43:03Z</updated>

		<summary type="html">&lt;p&gt;Magent: v4: .pp-date-kicker, restructured .pp-ensemble (title + members tiers), icon nudges&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* |status=proposed -- bot-staged; remove this line when promoting. */&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — Show: page styling&lt;br /&gt;
 *&lt;br /&gt;
 * Triggers when an article&#039;s title starts with &amp;quot;Show:&amp;quot; (legacy&lt;br /&gt;
 * mainspace convention, not a real namespace). Common.js adds&lt;br /&gt;
 * .pickipedia-show to body and absorbs Template:Show&#039;s infobox&lt;br /&gt;
 * into a poster-style hero; once absorbed the infobox is hidden.&lt;br /&gt;
 * Pages without Template:Show still get the setlist typography.&lt;br /&gt;
 *&lt;br /&gt;
 * Reuses the same paper/ink palette as .pickipedia-userpost so&lt;br /&gt;
 * shows and zine posts feel like the same publication.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Poster (hero block) ---------- */&lt;br /&gt;
.pickipedia-show .show-poster {&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  padding: 32px 36px 28px;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0 0 12px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  align-items: baseline;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker .pp-sep { color: var(--pp-muted); }&lt;br /&gt;
&lt;br /&gt;
/* Human-readable date kicker — bigger than the technical kicker so it&lt;br /&gt;
   reads as the answer to &amp;quot;when is this show?&amp;quot;. */&lt;br /&gt;
.pickipedia-show .show-poster .pp-date-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin: 0 0 8px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 44px;&lt;br /&gt;
  line-height: 1.05;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue a { color: inherit; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble {&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  padding: 16px 0 0;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble + .pp-ensemble {&lt;br /&gt;
  /* Subsequent ensemble blocks (opener, sit-ins) — same separator but&lt;br /&gt;
     tighter top spacing since the first one already gave the section&lt;br /&gt;
     visual room. */&lt;br /&gt;
  margin-top: 14px;&lt;br /&gt;
  padding-top: 12px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble-title {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0 0 6px;&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble-members {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble-members .pp-sep {&lt;br /&gt;
  color: var(--pp-rule);&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  margin: 0 4px;&lt;br /&gt;
}&lt;br /&gt;
/* Template:m emits a 9-18px instrument icon. Nudge it slightly so it&lt;br /&gt;
   sits clean next to the italicised name. */&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble-members img {&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
  margin: 0 0 0 3px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble-members a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble-members a:hover {&lt;br /&gt;
  border-bottom-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 16px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-label { opacity: 0.7; margin-right: 4px; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-value { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-image {&lt;br /&gt;
  margin: 28px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-image img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-poster-credit {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-poster-credit-label {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin-right: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the floated ensemble infoboxes once the hero has absorbed them. */&lt;br /&gt;
.pickipedia-show .ensemble-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions {&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.12em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-paper);&lt;br /&gt;
  background: var(--pp-accent);&lt;br /&gt;
  border: 1px solid var(--pp-accent);&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a:hover {&lt;br /&gt;
  background: var(--pp-ink);&lt;br /&gt;
  border-color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-status {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 14px;&lt;br /&gt;
  right: 18px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-verified { color: #228b22; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-proposed { color: #b8860b; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the original infobox once the hero has absorbed its data. */&lt;br /&gt;
.pickipedia-show .show-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the slug-style firstHeading only when the hero has been built —&lt;br /&gt;
   bare Show: pages without Template:Show keep the heading so users&lt;br /&gt;
   aren&#039;t left with an untitled page. */&lt;br /&gt;
.pickipedia-show.has-show-hero #firstHeading,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-first-heading { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Setlist typography ---------- */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  margin: 32px 0 14px;&lt;br /&gt;
  padding-top: 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 .mw-editsection {&lt;br /&gt;
  font-family: var(--pp-sans);&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .mw-parser-output ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0 0 16px;&lt;br /&gt;
  counter-reset: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  padding: 6px 0 6px 40px;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  position: relative;&lt;br /&gt;
  counter-increment: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li::before {&lt;br /&gt;
  content: counter(setlist, decimal-leading-zero);&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 8px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li:last-child { border-bottom: none; }&lt;br /&gt;
&lt;br /&gt;
/* Reset counter at every h2 so each set starts at 01. */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 + ul,&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 ~ ul:first-of-type { counter-reset: setlist; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show .show-poster { padding: 22px 18px 18px; }&lt;br /&gt;
  .pickipedia-show .show-poster h1.pp-title { font-size: 30px; }&lt;br /&gt;
  .pickipedia-show .show-poster .pp-venue { font-size: 18px; }&lt;br /&gt;
  .pickipedia-show .mw-parser-output ul li { font-size: 17px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Full-takeover layout for Show: pages with hero&lt;br /&gt;
 *&lt;br /&gt;
 * Only fires when .pickipedia-show AND .has-show-hero (i.e.,&lt;br /&gt;
 * Template:Show is present). Bare Show: pages keep their wiki&lt;br /&gt;
 * chrome — the setlist typography from the base section still&lt;br /&gt;
 * applies.&lt;br /&gt;
 *&lt;br /&gt;
 * The DOM additions (corner logo, topbar) are inserted by&lt;br /&gt;
 * Gadget-pickipedia-show.js. The patterns here mirror what&lt;br /&gt;
 * .pickipedia-userpost does, so future deduping into a shared&lt;br /&gt;
 * .pickipedia-publication base class stays straightforward.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #column-one,&lt;br /&gt;
.pickipedia-show.has-show-hero #sidebar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-panel,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-main-menu-container,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-toolbar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-navigation .portal,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-sidebar-container,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-views,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions-mobile,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-personal,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-logo,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-tools,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-footer,&lt;br /&gt;
.pickipedia-show.has-show-hero #footer,&lt;br /&gt;
.pickipedia-show.has-show-hero .printfooter,&lt;br /&gt;
.pickipedia-show.has-show-hero .catlinks,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-indicators,&lt;br /&gt;
.pickipedia-show.has-show-hero #siteSub,&lt;br /&gt;
.pickipedia-show.has-show-hero #contentSub,&lt;br /&gt;
.pickipedia-show.has-show-hero .subpages,&lt;br /&gt;
.pickipedia-show.has-show-hero #jump-to-nav,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #globalWrapper,&lt;br /&gt;
.pickipedia-show.has-show-hero #column-content,&lt;br /&gt;
.pickipedia-show.has-show-hero .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #content,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-body,&lt;br /&gt;
.pickipedia-show.has-show-hero #bodyContent,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: clamp(60px, 9vw, 130px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-left,&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-right {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Centered content column ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output {&lt;br /&gt;
  max-width: 720px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 8px 24px 80px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 22px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a:hover { color: var(--pp-accent); }&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Setlist links shouldn&#039;t get the body-paragraph underline treatment —&lt;br /&gt;
 * they live inside numbered list items and already get serif styling. */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output ul li a {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (min-width: 720px) and (max-width: 1100px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    margin-left: 160px;&lt;br /&gt;
    margin-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    padding-left: max(24px, calc(9vw + 24px));&lt;br /&gt;
    padding-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5283</id>
		<title>Candidate:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5283"/>
		<updated>2026-06-02T20:43:03Z</updated>

		<summary type="html">&lt;p&gt;Magent: v4: date kicker; preserve ensemble HTML (icons + links); two-tier ensemble layout (band title + member list)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// |status=proposed -- bot-staged; remove this line when promoting.&lt;br /&gt;
/**&lt;br /&gt;
 * Pickipedia — Show: page hero.&lt;br /&gt;
 *&lt;br /&gt;
 * For mainspace pages whose title starts with &amp;quot;Show:&amp;quot; (the legacy&lt;br /&gt;
 * mainspace convention used pre-namespace), adds .pickipedia-show&lt;br /&gt;
 * to body and absorbs Template:Show&#039;s infobox into a poster-style&lt;br /&gt;
 * hero. If the page does not use Template:Show only the body class&lt;br /&gt;
 * is added — the setlist typography in Common.css still applies.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 0) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;Show:&#039;) !== 0) return;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-show&#039;);&lt;br /&gt;
&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (!content) return;&lt;br /&gt;
&lt;br /&gt;
  var infobox = content.querySelector(&#039;.show-infobox&#039;);&lt;br /&gt;
  if (!infobox) return;  // Bare show page — body class only.&lt;br /&gt;
&lt;br /&gt;
  // ---------- Pull fields out of the existing infobox ----------&lt;br /&gt;
  // Template:Show emits rows of &amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; value&amp;lt;/div&amp;gt;&lt;br /&gt;
  // plus a top banner with &amp;quot;Artists at Venue&amp;quot; and optional image.&lt;br /&gt;
  function fieldValue(label) {&lt;br /&gt;
    var rows = infobox.querySelectorAll(&#039;div&#039;);&lt;br /&gt;
    for (var i = 0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
      var s = rows[i].querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (!s) continue;&lt;br /&gt;
      var labelText = s.textContent.replace(/[:\s]*$/, &#039;&#039;).trim();&lt;br /&gt;
      if (labelText !== label) continue;&lt;br /&gt;
      var clone = rows[i].cloneNode(true);&lt;br /&gt;
      var strong = clone.querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (strong) strong.remove();&lt;br /&gt;
      return clone.innerHTML.trim().replace(/^[\s:]+/, &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var artists      = fieldValue(&#039;Artists&#039;);&lt;br /&gt;
  var venue        = fieldValue(&#039;Venue&#039;);&lt;br /&gt;
  var date         = fieldValue(&#039;Date&#039;);&lt;br /&gt;
  var showtime     = fieldValue(&#039;Showtime&#039;);&lt;br /&gt;
  var doors        = fieldValue(&#039;Doors&#039;);&lt;br /&gt;
  var show         = fieldValue(&#039;Show&#039;);&lt;br /&gt;
  var posterArtist = fieldValue(&#039;Poster art&#039;);&lt;br /&gt;
  var tickets      = fieldValue(&#039;Tickets&#039;);&lt;br /&gt;
  var price        = fieldValue(&#039;Price&#039;);&lt;br /&gt;
  var ages         = fieldValue(&#039;Ages&#039;);&lt;br /&gt;
&lt;br /&gt;
  var imageImg = infobox.querySelector(&#039;img&#039;);&lt;br /&gt;
&lt;br /&gt;
  var status = &#039;&#039;;&lt;br /&gt;
  if (infobox.classList.contains(&#039;show-verified&#039;)) status = &#039;verified&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;bot-proposal&#039;)) status = &#039;proposed&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;show-unverified&#039;)) status = &#039;unverified&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Build the poster hero ----------&lt;br /&gt;
  // Showtime is rendered by Template:Show as&lt;br /&gt;
  // [https://etherscan.io/block/N N] — pull the block number out and&lt;br /&gt;
  // format it with commas so the kicker reads &amp;quot;BLOCK 24,144,194&amp;quot;.&lt;br /&gt;
  function formatShowtime(htmlIn) {&lt;br /&gt;
    if (!htmlIn) return &#039;&#039;;&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;);&lt;br /&gt;
    tmp.innerHTML = htmlIn;&lt;br /&gt;
    var anchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    var blockNum = (anchor ? anchor.textContent : tmp.textContent).trim();&lt;br /&gt;
    var asInt = parseInt(blockNum.replace(/[^\d]/g, &#039;&#039;), 10);&lt;br /&gt;
    if (isNaN(asInt)) return blockNum;&lt;br /&gt;
    var formatted = asInt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    var href = anchor ? anchor.href : &#039;&#039;;&lt;br /&gt;
    if (href) {&lt;br /&gt;
      return &#039;&amp;lt;a href=&amp;quot;&#039; + href + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Block &#039; + formatted + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;Block &#039; + formatted;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Big date kicker (human-readable) on its own line, above the smaller&lt;br /&gt;
  // technical kicker with block/doors/show.&lt;br /&gt;
  var dateKickerHtml = date&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-date-kicker&amp;quot;&amp;gt;&#039; + escapeHtml(date) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var kickerBits = [];&lt;br /&gt;
  var showtimeHtml = formatShowtime(showtime);&lt;br /&gt;
  if (showtimeHtml) kickerBits.push(showtimeHtml);&lt;br /&gt;
  if (doors) kickerBits.push(&#039;Doors &#039; + doors);&lt;br /&gt;
  if (show)  kickerBits.push(&#039;Show &#039; + show);&lt;br /&gt;
&lt;br /&gt;
  var kickerHtml = kickerBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerBits.join(&#039;&amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var venueHtml = venue ? &#039;&amp;lt;p class=&amp;quot;pp-venue&amp;quot;&amp;gt;at &#039; + venue + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Ensembles: find every Template:Ensemble block on the page. Each renders&lt;br /&gt;
  // as a .ensemble-infobox with a colored header div (the band title) and&lt;br /&gt;
  // a body div with one musician per line (via Template:m, which inlines&lt;br /&gt;
  // a tiny instrument icon next to the linked musician name).&lt;br /&gt;
  //&lt;br /&gt;
  // We split on &amp;lt;br&amp;gt; and keep HTML chunks intact so the instrument icons&lt;br /&gt;
  // and User: links survive the absorb. Each ensemble renders as two&lt;br /&gt;
  // tiers: the band title on its own line (mono caps, accent), then the&lt;br /&gt;
  // member list below in serif italic with rule-dot separators.&lt;br /&gt;
  var ensembleBlocks = content.querySelectorAll(&#039;.ensemble-infobox&#039;);&lt;br /&gt;
  var ensembleHtml = &#039;&#039;;&lt;br /&gt;
  ensembleBlocks.forEach(function (eb) {&lt;br /&gt;
    var bandName = &#039;&#039;;&lt;br /&gt;
    var headerEl = eb.querySelector(&#039;div:first-child&#039;);&lt;br /&gt;
    if (headerEl) bandName = headerEl.textContent.trim();&lt;br /&gt;
&lt;br /&gt;
    var listEl = eb.querySelector(&#039;div:nth-child(2)&#039;);&lt;br /&gt;
    if (!listEl) return;&lt;br /&gt;
&lt;br /&gt;
    var members = listEl.innerHTML&lt;br /&gt;
      .split(/&amp;lt;br\s*\/?&amp;gt;/i)&lt;br /&gt;
      .map(function (chunk) { return chunk.trim(); })&lt;br /&gt;
      .filter(Boolean);&lt;br /&gt;
    if (!members.length) return;&lt;br /&gt;
&lt;br /&gt;
    var titleText = (bandName &amp;amp;&amp;amp; bandName.toLowerCase() !== &#039;ensemble&#039;)&lt;br /&gt;
      ? bandName : &#039;Featuring&#039;;&lt;br /&gt;
&lt;br /&gt;
    ensembleHtml +=&lt;br /&gt;
      &#039;&amp;lt;div class=&amp;quot;pp-ensemble&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;p class=&amp;quot;pp-ensemble-title&amp;quot;&amp;gt;&#039; + escapeHtml(titleText) + &#039;&amp;lt;/p&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;p class=&amp;quot;pp-ensemble-members&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          members.join(&#039; &amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; &#039;) +&lt;br /&gt;
        &#039;&amp;lt;/p&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    eb.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  var metaBits = [];&lt;br /&gt;
  if (price)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Price&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;$&#039; +&lt;br /&gt;
      escapeHtml(price.replace(/^\$/, &#039;&#039;)) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  if (ages)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Ages&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      ages + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  var metaHtml = metaBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;&#039; + metaBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Upgrade the poster thumbnail: Template:Show renders [[File:foo|220px]]&lt;br /&gt;
  // which gives us /images/thumb/.../220px-foo.png. We replace the 220px&lt;br /&gt;
  // segment with 800px to request a larger thumbnail; CSS scales it to&lt;br /&gt;
  // fit the card. If the URL doesn&#039;t match the thumb pattern (e.g. SVG,&lt;br /&gt;
  // or non-thumbnailed file), we just use the original src.&lt;br /&gt;
  var imageHtml = &#039;&#039;;&lt;br /&gt;
  if (imageImg) {&lt;br /&gt;
    var bigSrc = imageImg.src.replace(/\/(\d+)px-/, &#039;/800px-&#039;);&lt;br /&gt;
    imageHtml = &#039;&amp;lt;div class=&amp;quot;pp-image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + bigSrc +&lt;br /&gt;
      &#039;&amp;quot; alt=&amp;quot;&#039; + escapeHtml(imageImg.alt || &#039;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      (posterArtist&lt;br /&gt;
        ? &#039;&amp;lt;p class=&amp;quot;pp-poster-credit&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pp-poster-credit-label&amp;quot;&amp;gt;Poster art by&amp;lt;/span&amp;gt; &#039; +&lt;br /&gt;
            escapeHtml(posterArtist) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        : &#039;&#039;) +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Tickets field is an anchor; surface its href as a poster action.&lt;br /&gt;
  var actionBits = [];&lt;br /&gt;
  if (tickets) {&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;); tmp.innerHTML = tickets;&lt;br /&gt;
    var ticketAnchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    if (ticketAnchor &amp;amp;&amp;amp; ticketAnchor.href) {&lt;br /&gt;
      actionBits.push(&#039;&amp;lt;a href=&amp;quot;&#039; + ticketAnchor.href +&lt;br /&gt;
        &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Tickets&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  var actionsHtml = actionBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-actions&amp;quot;&amp;gt;&#039; + actionBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var statusHtml = status&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-status is-&#039; + status + &#039;&amp;quot;&amp;gt;&#039; + status + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var titleHtml = artists || escapeHtml(title.replace(/^Show:\s*/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
  var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
  hero.className = &#039;show-poster&#039;;&lt;br /&gt;
  hero.innerHTML =&lt;br /&gt;
    statusHtml +&lt;br /&gt;
    dateKickerHtml +&lt;br /&gt;
    kickerHtml +&lt;br /&gt;
    &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + titleHtml + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
    venueHtml +&lt;br /&gt;
    ensembleHtml +&lt;br /&gt;
    metaHtml +&lt;br /&gt;
    imageHtml +&lt;br /&gt;
    actionsHtml;&lt;br /&gt;
&lt;br /&gt;
  content.insertBefore(hero, content.firstChild);&lt;br /&gt;
  infobox.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  body.classList.add(&#039;has-show-hero&#039;);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Full-takeover chrome: corner logo + slim topbar ----------&lt;br /&gt;
  // Only fires when the hero was built (Template:Show present). The CSS&lt;br /&gt;
  // chrome-hiding rules are gated by .has-show-hero so bare Show: pages&lt;br /&gt;
  // keep their wiki sidebar; if you want to make those takeover too,&lt;br /&gt;
  // remove the .has-show-hero gating from the CSS file.&lt;br /&gt;
  var LOGO_URL = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  var cornerLogo = document.createElement(&#039;a&#039;);&lt;br /&gt;
  cornerLogo.className = &#039;pp-corner-logo&#039;;&lt;br /&gt;
  cornerLogo.href = &#039;/wiki/Main_Page&#039;;&lt;br /&gt;
  cornerLogo.title = &#039;PickiPedia home&#039;;&lt;br /&gt;
  cornerLogo.innerHTML = &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_URL + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(cornerLogo, body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-show-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-left&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Category:Shows&#039;) + &#039;&amp;quot;&amp;gt;← All shows&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(topbar, cornerLogo.nextSibling);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:Show&amp;diff=5282</id>
		<title>Template:Show</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:Show&amp;diff=5282"/>
		<updated>2026-06-02T20:43:03Z</updated>

		<summary type="html">&lt;p&gt;Magent: Add &amp;#039;date&amp;#039; field (human-readable date string, alongside blockheight as canonical)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot verification marker (kept in noinclude so it doesn&#039;t transclude) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Show&#039;&#039;&#039; - Structured data template for performances/concerts.&lt;br /&gt;
&lt;br /&gt;
Uses Ethereum blockheight as the canonical timestamp anchor.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Show&lt;br /&gt;
|artists=Billy Strings&lt;br /&gt;
|venue=The Station Inn&lt;br /&gt;
|blockheight=24140272&lt;br /&gt;
|official_poster=Show-poster.jpg&lt;br /&gt;
|doors_time=7:30 PM&lt;br /&gt;
|show_time=8:00 PM&lt;br /&gt;
|ensemble=Billy Strings; Jarrod Walker; Royal Masat; Alex Hargreaves&lt;br /&gt;
|status=proposed&lt;br /&gt;
|by=Tea&lt;br /&gt;
|source=stationinn.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Shows]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; You must manually add &amp;lt;nowiki&amp;gt;[[Category:Shows]]&amp;lt;/nowiki&amp;gt; to pages using this template (SMW bug workaround).&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
* &#039;&#039;&#039;artists&#039;&#039;&#039; (required) - Performing artist(s); the headlining name as it appears on the poster&lt;br /&gt;
* &#039;&#039;&#039;venue&#039;&#039;&#039; (required) - Venue name (should match a venue page)&lt;br /&gt;
* &#039;&#039;&#039;blockheight&#039;&#039;&#039; (required) - Ethereum block height when the show started/starts&lt;br /&gt;
* &#039;&#039;&#039;official_poster&#039;&#039;&#039; (optional) - Filename of the official show poster (e.g., &amp;quot;Show-poster.jpg&amp;quot;). Takes priority over &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;image&#039;&#039;&#039; (optional, deprecated) - Older alias for &amp;lt;code&amp;gt;official_poster&amp;lt;/code&amp;gt;. Use &amp;lt;code&amp;gt;official_poster&amp;lt;/code&amp;gt; on new pages.&lt;br /&gt;
* &#039;&#039;&#039;date&#039;&#039;&#039; (optional) - Human-readable date string (e.g., &amp;quot;Friday, June 5, 2026&amp;quot;). The &amp;lt;code&amp;gt;blockheight&amp;lt;/code&amp;gt; is the canonical anchor; &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; is what humans want to read.&lt;br /&gt;
* &#039;&#039;&#039;doors_time&#039;&#039;&#039; (optional) - Door time as displayed text (e.g., &amp;quot;7:30 PM&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;show_time&#039;&#039;&#039; (optional) - Show start time as displayed text (e.g., &amp;quot;8:00 PM&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;poster_artist&#039;&#039;&#039; (optional) - Credit for the graphic designer who made the official poster&lt;br /&gt;
&lt;br /&gt;
For listing the musicians, use {{tl|Ensemble}} as a separate block on the page (one per band — headliner, openers, sit-ins).&lt;br /&gt;
* &#039;&#039;&#039;title&#039;&#039;&#039; (optional) - Custom title for social sharing (defaults to &amp;quot;artists at venue - PickiPedia&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;status&#039;&#039;&#039; (optional) - &amp;quot;proposed&amp;quot; for bot-proposed, &amp;quot;verified&amp;quot; for human-verified, blank for unverified&lt;br /&gt;
* &#039;&#039;&#039;by&#039;&#039;&#039; (optional) - Who proposed/verified this&lt;br /&gt;
* &#039;&#039;&#039;source&#039;&#039;&#039; (optional) - Source for verification&lt;br /&gt;
* &#039;&#039;&#039;price&#039;&#039;&#039; (optional) - Ticket price&lt;br /&gt;
* &#039;&#039;&#039;tickets&#039;&#039;&#039; (optional) - Ticket purchase URL&lt;br /&gt;
* &#039;&#039;&#039;ages&#039;&#039;&#039; (optional) - Age restriction (e.g., &amp;quot;21+&amp;quot;, &amp;quot;All ages&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;description&#039;&#039;&#039; (optional) - Short description for social sharing cards&lt;br /&gt;
&lt;br /&gt;
=== SMW Properties Set ===&lt;br /&gt;
* &amp;lt;code&amp;gt;Artist&amp;lt;/code&amp;gt; - The artist(s)&lt;br /&gt;
* &amp;lt;code&amp;gt;Venue&amp;lt;/code&amp;gt; - The venue&lt;br /&gt;
* &amp;lt;code&amp;gt;Blockheight&amp;lt;/code&amp;gt; - The block height timestamp&lt;br /&gt;
* &amp;lt;code&amp;gt;Poster artist&amp;lt;/code&amp;gt; - Graphic designer credit, if provided&lt;br /&gt;
* &amp;lt;code&amp;gt;Verification status&amp;lt;/code&amp;gt; - proposed/verified/unverified&lt;br /&gt;
&lt;br /&gt;
For per-musician &amp;lt;code&amp;gt;Performer&amp;lt;/code&amp;gt; SMW properties, use {{tl|Ensemble}} — it sets them on a per-band basis.&lt;br /&gt;
&lt;br /&gt;
== Page naming ==&lt;br /&gt;
Show pages should be named: &amp;lt;code&amp;gt;Show:ArtistName-blockheight&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* &amp;lt;code&amp;gt;Show:BillyStrings-24140272&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Show:BillyStrings_DelMcCouryBand-24140500&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Bot_proposes]]&lt;br /&gt;
* [[Template:Verified]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Show templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;show-infobox {{#ifeq:{{{status|}}}|proposed|bot-proposal|{{#ifeq:{{{status|}}}|verified|show-verified|show-unverified}}}}&amp;quot; style=&amp;quot;width: 22em; border: 1px solid #aaa; padding: 0.5em; margin: 0 0 1em 1em; float: right; clear: right; {{#ifeq:{{{status|}}}|proposed|background: #fff3cd; border-left: 3px solid #ffc107;|background: #f9f9f9;}}&amp;quot; data-source=&amp;quot;{{{source|}}}&amp;quot; data-proposed-by=&amp;quot;{{{by|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #98b; font-size: 1.1em; padding: 0.3em; text-align: center; margin: -0.5em -0.5em 0.5em -0.5em;&amp;quot;&amp;gt;{{{artists}}} at {{{venue}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{{official_poster|{{{image|}}}}}}|&amp;lt;div style=&amp;quot;text-align: center; margin: 0.5em 0;&amp;quot;&amp;gt;[[File:{{{official_poster|{{{image|}}}}}}|220px]]&amp;lt;/div&amp;gt;|}}&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Artists:&amp;lt;/strong&amp;gt; {{{artists}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Venue:&amp;lt;/strong&amp;gt; [[{{{venue}}}]]&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{{date|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Date:&amp;lt;/strong&amp;gt; {{{date}}}&amp;lt;/div&amp;gt;|}}&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Showtime:&amp;lt;/strong&amp;gt; [https://etherscan.io/block/{{{blockheight}}} {{{blockheight}}}]&amp;lt;/div&amp;gt;{{#if:{{{doors_time|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Doors:&amp;lt;/strong&amp;gt; {{{doors_time}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{show_time|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Show:&amp;lt;/strong&amp;gt; {{{show_time}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{poster_artist|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Poster art:&amp;lt;/strong&amp;gt; {{{poster_artist}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{price|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Price:&amp;lt;/strong&amp;gt; ${{{price}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{tickets|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Tickets:&amp;lt;/strong&amp;gt; [{{{tickets}}} Buy tickets]&amp;lt;/div&amp;gt;|}}{{#if:{{{ages|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Ages:&amp;lt;/strong&amp;gt; {{{ages}}}&amp;lt;/div&amp;gt;|}}{{#ifeq:{{{status|}}}|proposed|&amp;lt;div style=&amp;quot;font-size: 0.85em; margin-top: 0.5em; color: #856404;&amp;quot;&amp;gt;Proposed by {{{by|bot}}} via {{{source|unknown}}}&amp;lt;/div&amp;gt;|}}{{#ifeq:{{{status|}}}|verified|&amp;lt;div style=&amp;quot;font-size: 0.85em; margin-top: 0.5em; color: #228b22;&amp;quot;&amp;gt;✓ Verified{{#if:{{{by|}}}| by {{{by}}}|}}&amp;lt;/div&amp;gt;|}}&amp;lt;/div&amp;gt;{{#set:Artist={{#replace:{{#replace:{{{artists}}}|]|}}|[|}}}}{{#set:Venue={{{venue}}}}}{{#set:Blockheight={{{blockheight}}}}}{{#if:{{{poster_artist|}}}|{{#set:Poster artist={{{poster_artist}}}}}|}}{{#set:Verification status={{#ifeq:{{{status|}}}|verified|verified|{{#ifeq:{{{status|}}}|proposed|proposed|unverified}}}}}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5278</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5278"/>
		<updated>2026-06-02T20:18:17Z</updated>

		<summary type="html">&lt;p&gt;Magent: Use {{Ensemble|...|title=The Cryptograss Conspiracy}} block; add poster_artist=Sky Stewart&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Show&lt;br /&gt;
|artists=Justin Holmes &amp;amp; The Cryptograss Conspiracy&lt;br /&gt;
|venue=The Cider Mill Stage&lt;br /&gt;
|blockheight=25255000&lt;br /&gt;
|official_poster=6 5 26 BUNDY POSTER-rev2.png&lt;br /&gt;
|poster_artist=Sky Stewart&lt;br /&gt;
|doors_time=7:30 PM&lt;br /&gt;
|show_time=8:00 PM&lt;br /&gt;
|status=proposed&lt;br /&gt;
|by=Magent&lt;br /&gt;
|source=in-conversation with Justin at Old Barn Market, Binghamton, 2026-06-02&lt;br /&gt;
|description=Friday-night bluegrass set in Binghamton — two sets with a PickiPedia Dispatch Live segment between&lt;br /&gt;
|tickets=https://example.com/tickets-PLACEHOLDER&lt;br /&gt;
|price=15&lt;br /&gt;
|ages=All ages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Ensemble&lt;br /&gt;
|Justin Holmes&lt;br /&gt;
|Sky Stewart&lt;br /&gt;
|TBD&lt;br /&gt;
|TBD&lt;br /&gt;
|title=The Cryptograss Conspiracy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A Friday-night [[bluegrass]] show in Binghamton, NY. Two sets plus a break, with the [[PickiPedia]] Dispatch Live segment between sets. Placeholder details — &#039;&#039;&#039;Justin to correct venue, blockheight, lineup, tickets URL, and price before show.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Set 0==&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
==Break==&lt;br /&gt;
* PickiPedia Dispatch Live&lt;br /&gt;
&lt;br /&gt;
==Set 1==&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
[[Category:Shows]]&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5277</id>
		<title>Candidate:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5277"/>
		<updated>2026-06-02T20:18:17Z</updated>

		<summary type="html">&lt;p&gt;Magent: v3: bigger poster (width: 100% inside card), poster-credit styling, hide absorbed ensemble-infobox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* |status=proposed -- bot-staged; remove this line when promoting. */&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — Show: page styling&lt;br /&gt;
 *&lt;br /&gt;
 * Triggers when an article&#039;s title starts with &amp;quot;Show:&amp;quot; (legacy&lt;br /&gt;
 * mainspace convention, not a real namespace). Common.js adds&lt;br /&gt;
 * .pickipedia-show to body and absorbs Template:Show&#039;s infobox&lt;br /&gt;
 * into a poster-style hero; once absorbed the infobox is hidden.&lt;br /&gt;
 * Pages without Template:Show still get the setlist typography.&lt;br /&gt;
 *&lt;br /&gt;
 * Reuses the same paper/ink palette as .pickipedia-userpost so&lt;br /&gt;
 * shows and zine posts feel like the same publication.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Poster (hero block) ---------- */&lt;br /&gt;
.pickipedia-show .show-poster {&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  padding: 32px 36px 28px;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0 0 12px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  align-items: baseline;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker .pp-sep { color: var(--pp-muted); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 44px;&lt;br /&gt;
  line-height: 1.05;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue a { color: inherit; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.14em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble .pp-ensemble-label {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin-right: 8px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble .pp-sep { color: var(--pp-rule); margin: 0 4px; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 16px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-label { opacity: 0.7; margin-right: 4px; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-value { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-image {&lt;br /&gt;
  margin: 28px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-image img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-poster-credit {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-poster-credit-label {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin-right: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the floated ensemble infoboxes once the hero has absorbed them. */&lt;br /&gt;
.pickipedia-show .ensemble-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions {&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.12em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-paper);&lt;br /&gt;
  background: var(--pp-accent);&lt;br /&gt;
  border: 1px solid var(--pp-accent);&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a:hover {&lt;br /&gt;
  background: var(--pp-ink);&lt;br /&gt;
  border-color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-status {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 14px;&lt;br /&gt;
  right: 18px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-verified { color: #228b22; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-proposed { color: #b8860b; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the original infobox once the hero has absorbed its data. */&lt;br /&gt;
.pickipedia-show .show-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the slug-style firstHeading only when the hero has been built —&lt;br /&gt;
   bare Show: pages without Template:Show keep the heading so users&lt;br /&gt;
   aren&#039;t left with an untitled page. */&lt;br /&gt;
.pickipedia-show.has-show-hero #firstHeading,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-first-heading { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Setlist typography ---------- */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  margin: 32px 0 14px;&lt;br /&gt;
  padding-top: 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 .mw-editsection {&lt;br /&gt;
  font-family: var(--pp-sans);&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .mw-parser-output ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0 0 16px;&lt;br /&gt;
  counter-reset: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  padding: 6px 0 6px 40px;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  position: relative;&lt;br /&gt;
  counter-increment: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li::before {&lt;br /&gt;
  content: counter(setlist, decimal-leading-zero);&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 8px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li:last-child { border-bottom: none; }&lt;br /&gt;
&lt;br /&gt;
/* Reset counter at every h2 so each set starts at 01. */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 + ul,&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 ~ ul:first-of-type { counter-reset: setlist; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show .show-poster { padding: 22px 18px 18px; }&lt;br /&gt;
  .pickipedia-show .show-poster h1.pp-title { font-size: 30px; }&lt;br /&gt;
  .pickipedia-show .show-poster .pp-venue { font-size: 18px; }&lt;br /&gt;
  .pickipedia-show .mw-parser-output ul li { font-size: 17px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Full-takeover layout for Show: pages with hero&lt;br /&gt;
 *&lt;br /&gt;
 * Only fires when .pickipedia-show AND .has-show-hero (i.e.,&lt;br /&gt;
 * Template:Show is present). Bare Show: pages keep their wiki&lt;br /&gt;
 * chrome — the setlist typography from the base section still&lt;br /&gt;
 * applies.&lt;br /&gt;
 *&lt;br /&gt;
 * The DOM additions (corner logo, topbar) are inserted by&lt;br /&gt;
 * Gadget-pickipedia-show.js. The patterns here mirror what&lt;br /&gt;
 * .pickipedia-userpost does, so future deduping into a shared&lt;br /&gt;
 * .pickipedia-publication base class stays straightforward.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #column-one,&lt;br /&gt;
.pickipedia-show.has-show-hero #sidebar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-panel,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-main-menu-container,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-toolbar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-navigation .portal,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-sidebar-container,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-views,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions-mobile,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-personal,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-logo,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-tools,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-footer,&lt;br /&gt;
.pickipedia-show.has-show-hero #footer,&lt;br /&gt;
.pickipedia-show.has-show-hero .printfooter,&lt;br /&gt;
.pickipedia-show.has-show-hero .catlinks,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-indicators,&lt;br /&gt;
.pickipedia-show.has-show-hero #siteSub,&lt;br /&gt;
.pickipedia-show.has-show-hero #contentSub,&lt;br /&gt;
.pickipedia-show.has-show-hero .subpages,&lt;br /&gt;
.pickipedia-show.has-show-hero #jump-to-nav,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #globalWrapper,&lt;br /&gt;
.pickipedia-show.has-show-hero #column-content,&lt;br /&gt;
.pickipedia-show.has-show-hero .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #content,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-body,&lt;br /&gt;
.pickipedia-show.has-show-hero #bodyContent,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: clamp(60px, 9vw, 130px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-left,&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-right {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Centered content column ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output {&lt;br /&gt;
  max-width: 720px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 8px 24px 80px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 22px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a:hover { color: var(--pp-accent); }&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Setlist links shouldn&#039;t get the body-paragraph underline treatment —&lt;br /&gt;
 * they live inside numbered list items and already get serif styling. */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output ul li a {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (min-width: 720px) and (max-width: 1100px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    margin-left: 160px;&lt;br /&gt;
    margin-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    padding-left: max(24px, calc(9vw + 24px));&lt;br /&gt;
    padding-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5276</id>
		<title>Candidate:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5276"/>
		<updated>2026-06-02T20:18:16Z</updated>

		<summary type="html">&lt;p&gt;Magent: v3: absorb {{Ensemble|...}} blocks (not ensemble= field); upgrade poster thumb to 800px; render poster_artist credit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// |status=proposed -- bot-staged; remove this line when promoting.&lt;br /&gt;
/**&lt;br /&gt;
 * Pickipedia — Show: page hero.&lt;br /&gt;
 *&lt;br /&gt;
 * For mainspace pages whose title starts with &amp;quot;Show:&amp;quot; (the legacy&lt;br /&gt;
 * mainspace convention used pre-namespace), adds .pickipedia-show&lt;br /&gt;
 * to body and absorbs Template:Show&#039;s infobox into a poster-style&lt;br /&gt;
 * hero. If the page does not use Template:Show only the body class&lt;br /&gt;
 * is added — the setlist typography in Common.css still applies.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 0) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;Show:&#039;) !== 0) return;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-show&#039;);&lt;br /&gt;
&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (!content) return;&lt;br /&gt;
&lt;br /&gt;
  var infobox = content.querySelector(&#039;.show-infobox&#039;);&lt;br /&gt;
  if (!infobox) return;  // Bare show page — body class only.&lt;br /&gt;
&lt;br /&gt;
  // ---------- Pull fields out of the existing infobox ----------&lt;br /&gt;
  // Template:Show emits rows of &amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; value&amp;lt;/div&amp;gt;&lt;br /&gt;
  // plus a top banner with &amp;quot;Artists at Venue&amp;quot; and optional image.&lt;br /&gt;
  function fieldValue(label) {&lt;br /&gt;
    var rows = infobox.querySelectorAll(&#039;div&#039;);&lt;br /&gt;
    for (var i = 0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
      var s = rows[i].querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (!s) continue;&lt;br /&gt;
      var labelText = s.textContent.replace(/[:\s]*$/, &#039;&#039;).trim();&lt;br /&gt;
      if (labelText !== label) continue;&lt;br /&gt;
      var clone = rows[i].cloneNode(true);&lt;br /&gt;
      var strong = clone.querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (strong) strong.remove();&lt;br /&gt;
      return clone.innerHTML.trim().replace(/^[\s:]+/, &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var artists      = fieldValue(&#039;Artists&#039;);&lt;br /&gt;
  var venue        = fieldValue(&#039;Venue&#039;);&lt;br /&gt;
  var showtime     = fieldValue(&#039;Showtime&#039;);&lt;br /&gt;
  var doors        = fieldValue(&#039;Doors&#039;);&lt;br /&gt;
  var show         = fieldValue(&#039;Show&#039;);&lt;br /&gt;
  var posterArtist = fieldValue(&#039;Poster art&#039;);&lt;br /&gt;
  var tickets      = fieldValue(&#039;Tickets&#039;);&lt;br /&gt;
  var price        = fieldValue(&#039;Price&#039;);&lt;br /&gt;
  var ages         = fieldValue(&#039;Ages&#039;);&lt;br /&gt;
&lt;br /&gt;
  var imageImg = infobox.querySelector(&#039;img&#039;);&lt;br /&gt;
&lt;br /&gt;
  var status = &#039;&#039;;&lt;br /&gt;
  if (infobox.classList.contains(&#039;show-verified&#039;)) status = &#039;verified&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;bot-proposal&#039;)) status = &#039;proposed&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;show-unverified&#039;)) status = &#039;unverified&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Build the poster hero ----------&lt;br /&gt;
  // Showtime is rendered by Template:Show as&lt;br /&gt;
  // [https://etherscan.io/block/N N] — pull the block number out and&lt;br /&gt;
  // format it with commas so the kicker reads &amp;quot;BLOCK 24,144,194&amp;quot;.&lt;br /&gt;
  function formatShowtime(htmlIn) {&lt;br /&gt;
    if (!htmlIn) return &#039;&#039;;&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;);&lt;br /&gt;
    tmp.innerHTML = htmlIn;&lt;br /&gt;
    var anchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    var blockNum = (anchor ? anchor.textContent : tmp.textContent).trim();&lt;br /&gt;
    var asInt = parseInt(blockNum.replace(/[^\d]/g, &#039;&#039;), 10);&lt;br /&gt;
    if (isNaN(asInt)) return blockNum;&lt;br /&gt;
    var formatted = asInt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    var href = anchor ? anchor.href : &#039;&#039;;&lt;br /&gt;
    if (href) {&lt;br /&gt;
      return &#039;&amp;lt;a href=&amp;quot;&#039; + href + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Block &#039; + formatted + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;Block &#039; + formatted;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var kickerBits = [];&lt;br /&gt;
  var showtimeHtml = formatShowtime(showtime);&lt;br /&gt;
  if (showtimeHtml) kickerBits.push(showtimeHtml);&lt;br /&gt;
  if (doors) kickerBits.push(&#039;Doors &#039; + doors);&lt;br /&gt;
  if (show)  kickerBits.push(&#039;Show &#039; + show);&lt;br /&gt;
&lt;br /&gt;
  var kickerHtml = kickerBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerBits.join(&#039;&amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var venueHtml = venue ? &#039;&amp;lt;p class=&amp;quot;pp-venue&amp;quot;&amp;gt;at &#039; + venue + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Ensembles: find every Template:Ensemble block on the page. Each renders&lt;br /&gt;
  // as a .ensemble-infobox with a colored header div (the band title) and&lt;br /&gt;
  // a body div with one musician per line (via Template:m). Multiple&lt;br /&gt;
  // ensembles per page are common — headliner + opener(s) + sit-ins.&lt;br /&gt;
  var ensembleBlocks = content.querySelectorAll(&#039;.ensemble-infobox&#039;);&lt;br /&gt;
  var ensembleHtml = &#039;&#039;;&lt;br /&gt;
  ensembleBlocks.forEach(function (eb) {&lt;br /&gt;
    // Header div carries the band name (or default &amp;quot;Ensemble&amp;quot;).&lt;br /&gt;
    var bandName = &#039;&#039;;&lt;br /&gt;
    var headerEl = eb.querySelector(&#039;div:first-child&#039;);&lt;br /&gt;
    if (headerEl) bandName = headerEl.textContent.trim();&lt;br /&gt;
&lt;br /&gt;
    // Member list: the second-child div has musicians separated by &amp;lt;br&amp;gt;.&lt;br /&gt;
    var listEl = eb.querySelector(&#039;div:nth-child(2)&#039;);&lt;br /&gt;
    if (!listEl) return;&lt;br /&gt;
    // Each &amp;quot;row&amp;quot; is text between &amp;lt;br&amp;gt;s; pull text content and split.&lt;br /&gt;
    var raw = listEl.innerHTML&lt;br /&gt;
      .split(/&amp;lt;br\s*\/?&amp;gt;/i)&lt;br /&gt;
      .map(function (chunk) {&lt;br /&gt;
        var tmp = document.createElement(&#039;div&#039;);&lt;br /&gt;
        tmp.innerHTML = chunk;&lt;br /&gt;
        return tmp.textContent.trim();&lt;br /&gt;
      })&lt;br /&gt;
      .filter(Boolean);&lt;br /&gt;
    if (!raw.length) return;&lt;br /&gt;
&lt;br /&gt;
    var labelHtml = bandName &amp;amp;&amp;amp; bandName.toLowerCase() !== &#039;ensemble&#039;&lt;br /&gt;
      ? &#039;&amp;lt;span class=&amp;quot;pp-ensemble-label&amp;quot;&amp;gt;&#039; + escapeHtml(bandName) + &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
      : &#039;&amp;lt;span class=&amp;quot;pp-ensemble-label&amp;quot;&amp;gt;Featuring&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    ensembleHtml += &#039;&amp;lt;p class=&amp;quot;pp-ensemble&amp;quot;&amp;gt;&#039; + labelHtml + &#039; &#039; +&lt;br /&gt;
      raw.map(escapeHtml).join(&#039; &amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; &#039;) + &#039;&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    eb.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  var metaBits = [];&lt;br /&gt;
  if (price)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Price&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;$&#039; +&lt;br /&gt;
      escapeHtml(price.replace(/^\$/, &#039;&#039;)) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  if (ages)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Ages&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      ages + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  var metaHtml = metaBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;&#039; + metaBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Upgrade the poster thumbnail: Template:Show renders [[File:foo|220px]]&lt;br /&gt;
  // which gives us /images/thumb/.../220px-foo.png. We replace the 220px&lt;br /&gt;
  // segment with 800px to request a larger thumbnail; CSS scales it to&lt;br /&gt;
  // fit the card. If the URL doesn&#039;t match the thumb pattern (e.g. SVG,&lt;br /&gt;
  // or non-thumbnailed file), we just use the original src.&lt;br /&gt;
  var imageHtml = &#039;&#039;;&lt;br /&gt;
  if (imageImg) {&lt;br /&gt;
    var bigSrc = imageImg.src.replace(/\/(\d+)px-/, &#039;/800px-&#039;);&lt;br /&gt;
    imageHtml = &#039;&amp;lt;div class=&amp;quot;pp-image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + bigSrc +&lt;br /&gt;
      &#039;&amp;quot; alt=&amp;quot;&#039; + escapeHtml(imageImg.alt || &#039;&#039;) + &#039;&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      (posterArtist&lt;br /&gt;
        ? &#039;&amp;lt;p class=&amp;quot;pp-poster-credit&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pp-poster-credit-label&amp;quot;&amp;gt;Poster art by&amp;lt;/span&amp;gt; &#039; +&lt;br /&gt;
            escapeHtml(posterArtist) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        : &#039;&#039;) +&lt;br /&gt;
      &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Tickets field is an anchor; surface its href as a poster action.&lt;br /&gt;
  var actionBits = [];&lt;br /&gt;
  if (tickets) {&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;); tmp.innerHTML = tickets;&lt;br /&gt;
    var ticketAnchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    if (ticketAnchor &amp;amp;&amp;amp; ticketAnchor.href) {&lt;br /&gt;
      actionBits.push(&#039;&amp;lt;a href=&amp;quot;&#039; + ticketAnchor.href +&lt;br /&gt;
        &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Tickets&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  var actionsHtml = actionBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-actions&amp;quot;&amp;gt;&#039; + actionBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var statusHtml = status&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-status is-&#039; + status + &#039;&amp;quot;&amp;gt;&#039; + status + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var titleHtml = artists || escapeHtml(title.replace(/^Show:\s*/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
  var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
  hero.className = &#039;show-poster&#039;;&lt;br /&gt;
  hero.innerHTML =&lt;br /&gt;
    statusHtml +&lt;br /&gt;
    kickerHtml +&lt;br /&gt;
    &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + titleHtml + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
    venueHtml +&lt;br /&gt;
    ensembleHtml +&lt;br /&gt;
    metaHtml +&lt;br /&gt;
    imageHtml +&lt;br /&gt;
    actionsHtml;&lt;br /&gt;
&lt;br /&gt;
  content.insertBefore(hero, content.firstChild);&lt;br /&gt;
  infobox.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  body.classList.add(&#039;has-show-hero&#039;);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Full-takeover chrome: corner logo + slim topbar ----------&lt;br /&gt;
  // Only fires when the hero was built (Template:Show present). The CSS&lt;br /&gt;
  // chrome-hiding rules are gated by .has-show-hero so bare Show: pages&lt;br /&gt;
  // keep their wiki sidebar; if you want to make those takeover too,&lt;br /&gt;
  // remove the .has-show-hero gating from the CSS file.&lt;br /&gt;
  var LOGO_URL = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  var cornerLogo = document.createElement(&#039;a&#039;);&lt;br /&gt;
  cornerLogo.className = &#039;pp-corner-logo&#039;;&lt;br /&gt;
  cornerLogo.href = &#039;/wiki/Main_Page&#039;;&lt;br /&gt;
  cornerLogo.title = &#039;PickiPedia home&#039;;&lt;br /&gt;
  cornerLogo.innerHTML = &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_URL + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(cornerLogo, body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-show-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-left&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Category:Shows&#039;) + &#039;&amp;quot;&amp;gt;← All shows&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(topbar, cornerLogo.nextSibling);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:Show&amp;diff=5275</id>
		<title>Template:Show</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:Show&amp;diff=5275"/>
		<updated>2026-06-02T20:18:16Z</updated>

		<summary type="html">&lt;p&gt;Magent: Drop ensemble= field (use Template:Ensemble instead). Add poster_artist field.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot verification marker (kept in noinclude so it doesn&#039;t transclude) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Show&#039;&#039;&#039; - Structured data template for performances/concerts.&lt;br /&gt;
&lt;br /&gt;
Uses Ethereum blockheight as the canonical timestamp anchor.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Show&lt;br /&gt;
|artists=Billy Strings&lt;br /&gt;
|venue=The Station Inn&lt;br /&gt;
|blockheight=24140272&lt;br /&gt;
|official_poster=Show-poster.jpg&lt;br /&gt;
|doors_time=7:30 PM&lt;br /&gt;
|show_time=8:00 PM&lt;br /&gt;
|ensemble=Billy Strings; Jarrod Walker; Royal Masat; Alex Hargreaves&lt;br /&gt;
|status=proposed&lt;br /&gt;
|by=Tea&lt;br /&gt;
|source=stationinn.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Shows]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; You must manually add &amp;lt;nowiki&amp;gt;[[Category:Shows]]&amp;lt;/nowiki&amp;gt; to pages using this template (SMW bug workaround).&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
* &#039;&#039;&#039;artists&#039;&#039;&#039; (required) - Performing artist(s); the headlining name as it appears on the poster&lt;br /&gt;
* &#039;&#039;&#039;venue&#039;&#039;&#039; (required) - Venue name (should match a venue page)&lt;br /&gt;
* &#039;&#039;&#039;blockheight&#039;&#039;&#039; (required) - Ethereum block height when the show started/starts&lt;br /&gt;
* &#039;&#039;&#039;official_poster&#039;&#039;&#039; (optional) - Filename of the official show poster (e.g., &amp;quot;Show-poster.jpg&amp;quot;). Takes priority over &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;image&#039;&#039;&#039; (optional, deprecated) - Older alias for &amp;lt;code&amp;gt;official_poster&amp;lt;/code&amp;gt;. Use &amp;lt;code&amp;gt;official_poster&amp;lt;/code&amp;gt; on new pages.&lt;br /&gt;
* &#039;&#039;&#039;doors_time&#039;&#039;&#039; (optional) - Door time as displayed text (e.g., &amp;quot;7:30 PM&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;show_time&#039;&#039;&#039; (optional) - Show start time as displayed text (e.g., &amp;quot;8:00 PM&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;poster_artist&#039;&#039;&#039; (optional) - Credit for the graphic designer who made the official poster&lt;br /&gt;
&lt;br /&gt;
For listing the musicians, use {{tl|Ensemble}} as a separate block on the page (one per band — headliner, openers, sit-ins).&lt;br /&gt;
* &#039;&#039;&#039;title&#039;&#039;&#039; (optional) - Custom title for social sharing (defaults to &amp;quot;artists at venue - PickiPedia&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;status&#039;&#039;&#039; (optional) - &amp;quot;proposed&amp;quot; for bot-proposed, &amp;quot;verified&amp;quot; for human-verified, blank for unverified&lt;br /&gt;
* &#039;&#039;&#039;by&#039;&#039;&#039; (optional) - Who proposed/verified this&lt;br /&gt;
* &#039;&#039;&#039;source&#039;&#039;&#039; (optional) - Source for verification&lt;br /&gt;
* &#039;&#039;&#039;price&#039;&#039;&#039; (optional) - Ticket price&lt;br /&gt;
* &#039;&#039;&#039;tickets&#039;&#039;&#039; (optional) - Ticket purchase URL&lt;br /&gt;
* &#039;&#039;&#039;ages&#039;&#039;&#039; (optional) - Age restriction (e.g., &amp;quot;21+&amp;quot;, &amp;quot;All ages&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;description&#039;&#039;&#039; (optional) - Short description for social sharing cards&lt;br /&gt;
&lt;br /&gt;
=== SMW Properties Set ===&lt;br /&gt;
* &amp;lt;code&amp;gt;Artist&amp;lt;/code&amp;gt; - The artist(s)&lt;br /&gt;
* &amp;lt;code&amp;gt;Venue&amp;lt;/code&amp;gt; - The venue&lt;br /&gt;
* &amp;lt;code&amp;gt;Blockheight&amp;lt;/code&amp;gt; - The block height timestamp&lt;br /&gt;
* &amp;lt;code&amp;gt;Poster artist&amp;lt;/code&amp;gt; - Graphic designer credit, if provided&lt;br /&gt;
* &amp;lt;code&amp;gt;Verification status&amp;lt;/code&amp;gt; - proposed/verified/unverified&lt;br /&gt;
&lt;br /&gt;
For per-musician &amp;lt;code&amp;gt;Performer&amp;lt;/code&amp;gt; SMW properties, use {{tl|Ensemble}} — it sets them on a per-band basis.&lt;br /&gt;
&lt;br /&gt;
== Page naming ==&lt;br /&gt;
Show pages should be named: &amp;lt;code&amp;gt;Show:ArtistName-blockheight&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* &amp;lt;code&amp;gt;Show:BillyStrings-24140272&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Show:BillyStrings_DelMcCouryBand-24140500&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Bot_proposes]]&lt;br /&gt;
* [[Template:Verified]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Show templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;show-infobox {{#ifeq:{{{status|}}}|proposed|bot-proposal|{{#ifeq:{{{status|}}}|verified|show-verified|show-unverified}}}}&amp;quot; style=&amp;quot;width: 22em; border: 1px solid #aaa; padding: 0.5em; margin: 0 0 1em 1em; float: right; clear: right; {{#ifeq:{{{status|}}}|proposed|background: #fff3cd; border-left: 3px solid #ffc107;|background: #f9f9f9;}}&amp;quot; data-source=&amp;quot;{{{source|}}}&amp;quot; data-proposed-by=&amp;quot;{{{by|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #98b; font-size: 1.1em; padding: 0.3em; text-align: center; margin: -0.5em -0.5em 0.5em -0.5em;&amp;quot;&amp;gt;{{{artists}}} at {{{venue}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{{official_poster|{{{image|}}}}}}|&amp;lt;div style=&amp;quot;text-align: center; margin: 0.5em 0;&amp;quot;&amp;gt;[[File:{{{official_poster|{{{image|}}}}}}|220px]]&amp;lt;/div&amp;gt;|}}&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Artists:&amp;lt;/strong&amp;gt; {{{artists}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Venue:&amp;lt;/strong&amp;gt; [[{{{venue}}}]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Showtime:&amp;lt;/strong&amp;gt; [https://etherscan.io/block/{{{blockheight}}} {{{blockheight}}}]&amp;lt;/div&amp;gt;{{#if:{{{doors_time|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Doors:&amp;lt;/strong&amp;gt; {{{doors_time}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{show_time|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Show:&amp;lt;/strong&amp;gt; {{{show_time}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{poster_artist|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Poster art:&amp;lt;/strong&amp;gt; {{{poster_artist}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{price|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Price:&amp;lt;/strong&amp;gt; ${{{price}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{tickets|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Tickets:&amp;lt;/strong&amp;gt; [{{{tickets}}} Buy tickets]&amp;lt;/div&amp;gt;|}}{{#if:{{{ages|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Ages:&amp;lt;/strong&amp;gt; {{{ages}}}&amp;lt;/div&amp;gt;|}}{{#ifeq:{{{status|}}}|proposed|&amp;lt;div style=&amp;quot;font-size: 0.85em; margin-top: 0.5em; color: #856404;&amp;quot;&amp;gt;Proposed by {{{by|bot}}} via {{{source|unknown}}}&amp;lt;/div&amp;gt;|}}{{#ifeq:{{{status|}}}|verified|&amp;lt;div style=&amp;quot;font-size: 0.85em; margin-top: 0.5em; color: #228b22;&amp;quot;&amp;gt;✓ Verified{{#if:{{{by|}}}| by {{{by}}}|}}&amp;lt;/div&amp;gt;|}}&amp;lt;/div&amp;gt;{{#set:Artist={{#replace:{{#replace:{{{artists}}}|]|}}|[|}}}}{{#set:Venue={{{venue}}}}}{{#set:Blockheight={{{blockheight}}}}}{{#if:{{{poster_artist|}}}|{{#set:Poster artist={{{poster_artist}}}}}|}}{{#set:Verification status={{#ifeq:{{{status|}}}|verified|verified|{{#ifeq:{{{status|}}}|proposed|proposed|unverified}}}}}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadgets-definition&amp;diff=5268</id>
		<title>Candidate:Gadgets-definition</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadgets-definition&amp;diff=5268"/>
		<updated>2026-06-02T20:05:54Z</updated>

		<summary type="html">&lt;p&gt;Magent: Add dependencies=mediawiki.util for the gadget (needed for mw.util.getUrl in topbar)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- |status=proposed -- bot-staged; remove this line when promoting. --&amp;gt;&lt;br /&gt;
== verification ==&lt;br /&gt;
* verify[ResourceLoader|default|dependencies=mediawiki.api,mediawiki.util]|verify.js&lt;br /&gt;
&lt;br /&gt;
== show pages ==&lt;br /&gt;
* pickipedia-show[ResourceLoader|default|hidden|namespaces=0|targets=desktop,mobile|dependencies=mediawiki.util]|pickipedia-show.js|pickipedia-show.css&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5267</id>
		<title>Candidate:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5267"/>
		<updated>2026-06-02T20:05:54Z</updated>

		<summary type="html">&lt;p&gt;Magent: Full-takeover layout: hide wiki chrome, paper bg, centered 720px column&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* |status=proposed -- bot-staged; remove this line when promoting. */&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — Show: page styling&lt;br /&gt;
 *&lt;br /&gt;
 * Triggers when an article&#039;s title starts with &amp;quot;Show:&amp;quot; (legacy&lt;br /&gt;
 * mainspace convention, not a real namespace). Common.js adds&lt;br /&gt;
 * .pickipedia-show to body and absorbs Template:Show&#039;s infobox&lt;br /&gt;
 * into a poster-style hero; once absorbed the infobox is hidden.&lt;br /&gt;
 * Pages without Template:Show still get the setlist typography.&lt;br /&gt;
 *&lt;br /&gt;
 * Reuses the same paper/ink palette as .pickipedia-userpost so&lt;br /&gt;
 * shows and zine posts feel like the same publication.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Poster (hero block) ---------- */&lt;br /&gt;
.pickipedia-show .show-poster {&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  padding: 32px 36px 28px;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0 0 12px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  align-items: baseline;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker .pp-sep { color: var(--pp-muted); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 44px;&lt;br /&gt;
  line-height: 1.05;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue a { color: inherit; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.14em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble .pp-ensemble-label {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin-right: 8px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble .pp-sep { color: var(--pp-rule); margin: 0 4px; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 16px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-label { opacity: 0.7; margin-right: 4px; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-value { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-image { margin: 22px 0 0; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-image img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions {&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.12em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-paper);&lt;br /&gt;
  background: var(--pp-accent);&lt;br /&gt;
  border: 1px solid var(--pp-accent);&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a:hover {&lt;br /&gt;
  background: var(--pp-ink);&lt;br /&gt;
  border-color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-status {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 14px;&lt;br /&gt;
  right: 18px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-verified { color: #228b22; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-proposed { color: #b8860b; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the original infobox once the hero has absorbed its data. */&lt;br /&gt;
.pickipedia-show .show-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the slug-style firstHeading only when the hero has been built —&lt;br /&gt;
   bare Show: pages without Template:Show keep the heading so users&lt;br /&gt;
   aren&#039;t left with an untitled page. */&lt;br /&gt;
.pickipedia-show.has-show-hero #firstHeading,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-first-heading { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Setlist typography ---------- */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  margin: 32px 0 14px;&lt;br /&gt;
  padding-top: 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 .mw-editsection {&lt;br /&gt;
  font-family: var(--pp-sans);&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .mw-parser-output ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0 0 16px;&lt;br /&gt;
  counter-reset: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  padding: 6px 0 6px 40px;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  position: relative;&lt;br /&gt;
  counter-increment: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li::before {&lt;br /&gt;
  content: counter(setlist, decimal-leading-zero);&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 8px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li:last-child { border-bottom: none; }&lt;br /&gt;
&lt;br /&gt;
/* Reset counter at every h2 so each set starts at 01. */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 + ul,&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 ~ ul:first-of-type { counter-reset: setlist; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show .show-poster { padding: 22px 18px 18px; }&lt;br /&gt;
  .pickipedia-show .show-poster h1.pp-title { font-size: 30px; }&lt;br /&gt;
  .pickipedia-show .show-poster .pp-venue { font-size: 18px; }&lt;br /&gt;
  .pickipedia-show .mw-parser-output ul li { font-size: 17px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Full-takeover layout for Show: pages with hero&lt;br /&gt;
 *&lt;br /&gt;
 * Only fires when .pickipedia-show AND .has-show-hero (i.e.,&lt;br /&gt;
 * Template:Show is present). Bare Show: pages keep their wiki&lt;br /&gt;
 * chrome — the setlist typography from the base section still&lt;br /&gt;
 * applies.&lt;br /&gt;
 *&lt;br /&gt;
 * The DOM additions (corner logo, topbar) are inserted by&lt;br /&gt;
 * Gadget-pickipedia-show.js. The patterns here mirror what&lt;br /&gt;
 * .pickipedia-userpost does, so future deduping into a shared&lt;br /&gt;
 * .pickipedia-publication base class stays straightforward.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #column-one,&lt;br /&gt;
.pickipedia-show.has-show-hero #sidebar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-panel,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-main-menu-container,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-toolbar,&lt;br /&gt;
.pickipedia-show.has-show-hero #mw-navigation .portal,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-sidebar-container,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-views,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-cactions-mobile,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-personal,&lt;br /&gt;
.pickipedia-show.has-show-hero #p-logo,&lt;br /&gt;
.pickipedia-show.has-show-hero .vector-page-tools,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-footer,&lt;br /&gt;
.pickipedia-show.has-show-hero #footer,&lt;br /&gt;
.pickipedia-show.has-show-hero .printfooter,&lt;br /&gt;
.pickipedia-show.has-show-hero .catlinks,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-indicators,&lt;br /&gt;
.pickipedia-show.has-show-hero #siteSub,&lt;br /&gt;
.pickipedia-show.has-show-hero #contentSub,&lt;br /&gt;
.pickipedia-show.has-show-hero .subpages,&lt;br /&gt;
.pickipedia-show.has-show-hero #jump-to-nav,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #globalWrapper,&lt;br /&gt;
.pickipedia-show.has-show-hero #column-content,&lt;br /&gt;
.pickipedia-show.has-show-hero .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show.has-show-hero #content,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-body,&lt;br /&gt;
.pickipedia-show.has-show-hero #bodyContent,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: clamp(60px, 9vw, 130px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-left,&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar-right {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .pickipedia-show-topbar a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Centered content column ---------- */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output {&lt;br /&gt;
  max-width: 720px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 8px 24px 80px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 22px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a:hover { color: var(--pp-accent); }&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Setlist links shouldn&#039;t get the body-paragraph underline treatment —&lt;br /&gt;
 * they live inside numbered list items and already get serif styling. */&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-parser-output ul li a {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (min-width: 720px) and (max-width: 1100px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    margin-left: 160px;&lt;br /&gt;
    margin-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show.has-show-hero .mw-parser-output,&lt;br /&gt;
  .pickipedia-show.has-show-hero .pickipedia-show-topbar {&lt;br /&gt;
    padding-left: max(24px, calc(9vw + 24px));&lt;br /&gt;
    padding-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5266</id>
		<title>Candidate:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5266"/>
		<updated>2026-06-02T20:05:54Z</updated>

		<summary type="html">&lt;p&gt;Magent: Full-takeover mode: insert corner logo + slim topbar (edit/history/talk/← All shows)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// |status=proposed -- bot-staged; remove this line when promoting.&lt;br /&gt;
/**&lt;br /&gt;
 * Pickipedia — Show: page hero.&lt;br /&gt;
 *&lt;br /&gt;
 * For mainspace pages whose title starts with &amp;quot;Show:&amp;quot; (the legacy&lt;br /&gt;
 * mainspace convention used pre-namespace), adds .pickipedia-show&lt;br /&gt;
 * to body and absorbs Template:Show&#039;s infobox into a poster-style&lt;br /&gt;
 * hero. If the page does not use Template:Show only the body class&lt;br /&gt;
 * is added — the setlist typography in Common.css still applies.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 0) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;Show:&#039;) !== 0) return;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-show&#039;);&lt;br /&gt;
&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (!content) return;&lt;br /&gt;
&lt;br /&gt;
  var infobox = content.querySelector(&#039;.show-infobox&#039;);&lt;br /&gt;
  if (!infobox) return;  // Bare show page — body class only.&lt;br /&gt;
&lt;br /&gt;
  // ---------- Pull fields out of the existing infobox ----------&lt;br /&gt;
  // Template:Show emits rows of &amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; value&amp;lt;/div&amp;gt;&lt;br /&gt;
  // plus a top banner with &amp;quot;Artists at Venue&amp;quot; and optional image.&lt;br /&gt;
  function fieldValue(label) {&lt;br /&gt;
    var rows = infobox.querySelectorAll(&#039;div&#039;);&lt;br /&gt;
    for (var i = 0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
      var s = rows[i].querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (!s) continue;&lt;br /&gt;
      var labelText = s.textContent.replace(/[:\s]*$/, &#039;&#039;).trim();&lt;br /&gt;
      if (labelText !== label) continue;&lt;br /&gt;
      var clone = rows[i].cloneNode(true);&lt;br /&gt;
      var strong = clone.querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (strong) strong.remove();&lt;br /&gt;
      return clone.innerHTML.trim().replace(/^[\s:]+/, &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var artists  = fieldValue(&#039;Artists&#039;);&lt;br /&gt;
  var venue    = fieldValue(&#039;Venue&#039;);&lt;br /&gt;
  var showtime = fieldValue(&#039;Showtime&#039;);&lt;br /&gt;
  var doors    = fieldValue(&#039;Doors&#039;);&lt;br /&gt;
  var show     = fieldValue(&#039;Show&#039;);&lt;br /&gt;
  var ensemble = fieldValue(&#039;Ensemble&#039;);&lt;br /&gt;
  var tickets  = fieldValue(&#039;Tickets&#039;);&lt;br /&gt;
  var price    = fieldValue(&#039;Price&#039;);&lt;br /&gt;
  var ages     = fieldValue(&#039;Ages&#039;);&lt;br /&gt;
&lt;br /&gt;
  var imageImg = infobox.querySelector(&#039;img&#039;);&lt;br /&gt;
&lt;br /&gt;
  var status = &#039;&#039;;&lt;br /&gt;
  if (infobox.classList.contains(&#039;show-verified&#039;)) status = &#039;verified&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;bot-proposal&#039;)) status = &#039;proposed&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;show-unverified&#039;)) status = &#039;unverified&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Build the poster hero ----------&lt;br /&gt;
  // Showtime is rendered by Template:Show as&lt;br /&gt;
  // [https://etherscan.io/block/N N] — pull the block number out and&lt;br /&gt;
  // format it with commas so the kicker reads &amp;quot;BLOCK 24,144,194&amp;quot;.&lt;br /&gt;
  function formatShowtime(htmlIn) {&lt;br /&gt;
    if (!htmlIn) return &#039;&#039;;&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;);&lt;br /&gt;
    tmp.innerHTML = htmlIn;&lt;br /&gt;
    var anchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    var blockNum = (anchor ? anchor.textContent : tmp.textContent).trim();&lt;br /&gt;
    var asInt = parseInt(blockNum.replace(/[^\d]/g, &#039;&#039;), 10);&lt;br /&gt;
    if (isNaN(asInt)) return blockNum;&lt;br /&gt;
    var formatted = asInt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    var href = anchor ? anchor.href : &#039;&#039;;&lt;br /&gt;
    if (href) {&lt;br /&gt;
      return &#039;&amp;lt;a href=&amp;quot;&#039; + href + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Block &#039; + formatted + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;Block &#039; + formatted;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var kickerBits = [];&lt;br /&gt;
  var showtimeHtml = formatShowtime(showtime);&lt;br /&gt;
  if (showtimeHtml) kickerBits.push(showtimeHtml);&lt;br /&gt;
  if (doors) kickerBits.push(&#039;Doors &#039; + doors);&lt;br /&gt;
  if (show)  kickerBits.push(&#039;Show &#039; + show);&lt;br /&gt;
&lt;br /&gt;
  var kickerHtml = kickerBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerBits.join(&#039;&amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var venueHtml = venue ? &#039;&amp;lt;p class=&amp;quot;pp-venue&amp;quot;&amp;gt;at &#039; + venue + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Ensemble: comma-separated list from Template:Show. Split on commas to&lt;br /&gt;
  // render each name with an interpunct separator, matching the kicker style.&lt;br /&gt;
  var ensembleHtml = &#039;&#039;;&lt;br /&gt;
  if (ensemble) {&lt;br /&gt;
    var names = ensemble.split(/\s*,\s*/).filter(Boolean);&lt;br /&gt;
    if (names.length) {&lt;br /&gt;
      ensembleHtml = &#039;&amp;lt;p class=&amp;quot;pp-ensemble&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pp-ensemble-label&amp;quot;&amp;gt;Featuring&amp;lt;/span&amp;gt; &#039; +&lt;br /&gt;
        names.join(&#039; &amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; &#039;) + &#039;&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var metaBits = [];&lt;br /&gt;
  if (price)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Price&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;$&#039; +&lt;br /&gt;
      escapeHtml(price.replace(/^\$/, &#039;&#039;)) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  if (ages)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Ages&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      ages + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  var metaHtml = metaBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;&#039; + metaBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var imageHtml = &#039;&#039;;&lt;br /&gt;
  if (imageImg) {&lt;br /&gt;
    imageHtml = &#039;&amp;lt;div class=&amp;quot;pp-image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + imageImg.src +&lt;br /&gt;
      &#039;&amp;quot; alt=&amp;quot;&#039; + escapeHtml(imageImg.alt || &#039;&#039;) + &#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Tickets field is an anchor; surface its href as a poster action.&lt;br /&gt;
  var actionBits = [];&lt;br /&gt;
  if (tickets) {&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;); tmp.innerHTML = tickets;&lt;br /&gt;
    var ticketAnchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    if (ticketAnchor &amp;amp;&amp;amp; ticketAnchor.href) {&lt;br /&gt;
      actionBits.push(&#039;&amp;lt;a href=&amp;quot;&#039; + ticketAnchor.href +&lt;br /&gt;
        &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Tickets&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  var actionsHtml = actionBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-actions&amp;quot;&amp;gt;&#039; + actionBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var statusHtml = status&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-status is-&#039; + status + &#039;&amp;quot;&amp;gt;&#039; + status + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var titleHtml = artists || escapeHtml(title.replace(/^Show:\s*/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
  var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
  hero.className = &#039;show-poster&#039;;&lt;br /&gt;
  hero.innerHTML =&lt;br /&gt;
    statusHtml +&lt;br /&gt;
    kickerHtml +&lt;br /&gt;
    &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + titleHtml + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
    venueHtml +&lt;br /&gt;
    ensembleHtml +&lt;br /&gt;
    metaHtml +&lt;br /&gt;
    imageHtml +&lt;br /&gt;
    actionsHtml;&lt;br /&gt;
&lt;br /&gt;
  content.insertBefore(hero, content.firstChild);&lt;br /&gt;
  infobox.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  body.classList.add(&#039;has-show-hero&#039;);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Full-takeover chrome: corner logo + slim topbar ----------&lt;br /&gt;
  // Only fires when the hero was built (Template:Show present). The CSS&lt;br /&gt;
  // chrome-hiding rules are gated by .has-show-hero so bare Show: pages&lt;br /&gt;
  // keep their wiki sidebar; if you want to make those takeover too,&lt;br /&gt;
  // remove the .has-show-hero gating from the CSS file.&lt;br /&gt;
  var LOGO_URL = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  var cornerLogo = document.createElement(&#039;a&#039;);&lt;br /&gt;
  cornerLogo.className = &#039;pp-corner-logo&#039;;&lt;br /&gt;
  cornerLogo.href = &#039;/wiki/Main_Page&#039;;&lt;br /&gt;
  cornerLogo.title = &#039;PickiPedia home&#039;;&lt;br /&gt;
  cornerLogo.innerHTML = &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_URL + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(cornerLogo, body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-show-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-left&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Category:Shows&#039;) + &#039;&amp;quot;&amp;gt;← All shows&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-show-topbar-right&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  body.insertBefore(topbar, cornerLogo.nextSibling);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:Show&amp;diff=5265</id>
		<title>Template:Show</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:Show&amp;diff=5265"/>
		<updated>2026-06-02T20:05:54Z</updated>

		<summary type="html">&lt;p&gt;Magent: Drop {{#seo:...}} block (WikiSEO extension not loaded; was leaking raw text)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot verification marker (kept in noinclude so it doesn&#039;t transclude) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Show&#039;&#039;&#039; - Structured data template for performances/concerts.&lt;br /&gt;
&lt;br /&gt;
Uses Ethereum blockheight as the canonical timestamp anchor.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Show&lt;br /&gt;
|artists=Billy Strings&lt;br /&gt;
|venue=The Station Inn&lt;br /&gt;
|blockheight=24140272&lt;br /&gt;
|official_poster=Show-poster.jpg&lt;br /&gt;
|doors_time=7:30 PM&lt;br /&gt;
|show_time=8:00 PM&lt;br /&gt;
|ensemble=Billy Strings; Jarrod Walker; Royal Masat; Alex Hargreaves&lt;br /&gt;
|status=proposed&lt;br /&gt;
|by=Tea&lt;br /&gt;
|source=stationinn.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Shows]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; You must manually add &amp;lt;nowiki&amp;gt;[[Category:Shows]]&amp;lt;/nowiki&amp;gt; to pages using this template (SMW bug workaround).&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
* &#039;&#039;&#039;artists&#039;&#039;&#039; (required) - Performing artist(s); the headlining name as it appears on the poster&lt;br /&gt;
* &#039;&#039;&#039;venue&#039;&#039;&#039; (required) - Venue name (should match a venue page)&lt;br /&gt;
* &#039;&#039;&#039;blockheight&#039;&#039;&#039; (required) - Ethereum block height when the show started/starts&lt;br /&gt;
* &#039;&#039;&#039;official_poster&#039;&#039;&#039; (optional) - Filename of the official show poster (e.g., &amp;quot;Show-poster.jpg&amp;quot;). Takes priority over &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;image&#039;&#039;&#039; (optional, deprecated) - Older alias for &amp;lt;code&amp;gt;official_poster&amp;lt;/code&amp;gt;. Use &amp;lt;code&amp;gt;official_poster&amp;lt;/code&amp;gt; on new pages.&lt;br /&gt;
* &#039;&#039;&#039;doors_time&#039;&#039;&#039; (optional) - Door time as displayed text (e.g., &amp;quot;7:30 PM&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;show_time&#039;&#039;&#039; (optional) - Show start time as displayed text (e.g., &amp;quot;8:00 PM&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;ensemble&#039;&#039;&#039; (optional) - Semicolon-separated list of performer names. Each becomes a Performer SMW property for queries and backlinks.&lt;br /&gt;
* &#039;&#039;&#039;title&#039;&#039;&#039; (optional) - Custom title for social sharing (defaults to &amp;quot;artists at venue - PickiPedia&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;status&#039;&#039;&#039; (optional) - &amp;quot;proposed&amp;quot; for bot-proposed, &amp;quot;verified&amp;quot; for human-verified, blank for unverified&lt;br /&gt;
* &#039;&#039;&#039;by&#039;&#039;&#039; (optional) - Who proposed/verified this&lt;br /&gt;
* &#039;&#039;&#039;source&#039;&#039;&#039; (optional) - Source for verification&lt;br /&gt;
* &#039;&#039;&#039;price&#039;&#039;&#039; (optional) - Ticket price&lt;br /&gt;
* &#039;&#039;&#039;tickets&#039;&#039;&#039; (optional) - Ticket purchase URL&lt;br /&gt;
* &#039;&#039;&#039;ages&#039;&#039;&#039; (optional) - Age restriction (e.g., &amp;quot;21+&amp;quot;, &amp;quot;All ages&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;description&#039;&#039;&#039; (optional) - Short description for social sharing cards&lt;br /&gt;
&lt;br /&gt;
=== SMW Properties Set ===&lt;br /&gt;
* &amp;lt;code&amp;gt;Artist&amp;lt;/code&amp;gt; - The artist(s)&lt;br /&gt;
* &amp;lt;code&amp;gt;Venue&amp;lt;/code&amp;gt; - The venue&lt;br /&gt;
* &amp;lt;code&amp;gt;Blockheight&amp;lt;/code&amp;gt; - The block height timestamp&lt;br /&gt;
* &amp;lt;code&amp;gt;Performer&amp;lt;/code&amp;gt; - One per ensemble member (multi-valued)&lt;br /&gt;
* &amp;lt;code&amp;gt;Verification status&amp;lt;/code&amp;gt; - proposed/verified/unverified&lt;br /&gt;
&lt;br /&gt;
== Page naming ==&lt;br /&gt;
Show pages should be named: &amp;lt;code&amp;gt;Show:ArtistName-blockheight&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* &amp;lt;code&amp;gt;Show:BillyStrings-24140272&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Show:BillyStrings_DelMcCouryBand-24140500&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Bot_proposes]]&lt;br /&gt;
* [[Template:Verified]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Show templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div class=&amp;quot;show-infobox {{#ifeq:{{{status|}}}|proposed|bot-proposal|{{#ifeq:{{{status|}}}|verified|show-verified|show-unverified}}}}&amp;quot; style=&amp;quot;width: 22em; border: 1px solid #aaa; padding: 0.5em; margin: 0 0 1em 1em; float: right; clear: right; {{#ifeq:{{{status|}}}|proposed|background: #fff3cd; border-left: 3px solid #ffc107;|background: #f9f9f9;}}&amp;quot; data-source=&amp;quot;{{{source|}}}&amp;quot; data-proposed-by=&amp;quot;{{{by|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #98b; font-size: 1.1em; padding: 0.3em; text-align: center; margin: -0.5em -0.5em 0.5em -0.5em;&amp;quot;&amp;gt;{{{artists}}} at {{{venue}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{{official_poster|{{{image|}}}}}}|&amp;lt;div style=&amp;quot;text-align: center; margin: 0.5em 0;&amp;quot;&amp;gt;[[File:{{{official_poster|{{{image|}}}}}}|220px]]&amp;lt;/div&amp;gt;|}}&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Artists:&amp;lt;/strong&amp;gt; {{{artists}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Venue:&amp;lt;/strong&amp;gt; [[{{{venue}}}]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Showtime:&amp;lt;/strong&amp;gt; [https://etherscan.io/block/{{{blockheight}}} {{{blockheight}}}]&amp;lt;/div&amp;gt;{{#if:{{{doors_time|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Doors:&amp;lt;/strong&amp;gt; {{{doors_time}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{show_time|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Show:&amp;lt;/strong&amp;gt; {{{show_time}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{ensemble|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Ensemble:&amp;lt;/strong&amp;gt; {{#arraymap:{{{ensemble}}}|;|x|x|,&amp;amp;#32;}}&amp;lt;/div&amp;gt;|}}{{#if:{{{price|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Price:&amp;lt;/strong&amp;gt; ${{{price}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{tickets|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Tickets:&amp;lt;/strong&amp;gt; [{{{tickets}}} Buy tickets]&amp;lt;/div&amp;gt;|}}{{#if:{{{ages|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Ages:&amp;lt;/strong&amp;gt; {{{ages}}}&amp;lt;/div&amp;gt;|}}{{#ifeq:{{{status|}}}|proposed|&amp;lt;div style=&amp;quot;font-size: 0.85em; margin-top: 0.5em; color: #856404;&amp;quot;&amp;gt;Proposed by {{{by|bot}}} via {{{source|unknown}}}&amp;lt;/div&amp;gt;|}}{{#ifeq:{{{status|}}}|verified|&amp;lt;div style=&amp;quot;font-size: 0.85em; margin-top: 0.5em; color: #228b22;&amp;quot;&amp;gt;✓ Verified{{#if:{{{by|}}}| by {{{by}}}|}}&amp;lt;/div&amp;gt;|}}&amp;lt;/div&amp;gt;{{#set:Artist={{#replace:{{#replace:{{{artists}}}|]|}}|[|}}}}{{#set:Venue={{{venue}}}}}{{#set:Blockheight={{{blockheight}}}}}{{#if:{{{ensemble|}}}|{{#arraymap:{{{ensemble}}}|;|x|{{#set:Performer=x}}|}}|}}{{#set:Verification status={{#ifeq:{{{status|}}}|verified|verified|{{#ifeq:{{{status|}}}|proposed|proposed|unverified}}}}}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5262</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5262"/>
		<updated>2026-06-02T19:47:34Z</updated>

		<summary type="html">&lt;p&gt;Magent: Populate new fields (official_poster, doors_time, show_time, ensemble) for testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Show&lt;br /&gt;
|artists=Justin Holmes &amp;amp; The Cryptograss Conspiracy&lt;br /&gt;
|venue=The Cider Mill Stage&lt;br /&gt;
|blockheight=25255000&lt;br /&gt;
|official_poster=Show-poster-PLACEHOLDER.jpg&lt;br /&gt;
|doors_time=7:30 PM&lt;br /&gt;
|show_time=8:00 PM&lt;br /&gt;
|ensemble=Justin Holmes; Sky Stewart; TBD; TBD&lt;br /&gt;
|status=proposed&lt;br /&gt;
|by=Magent&lt;br /&gt;
|source=in-conversation with Justin at Old Barn Market, Binghamton, 2026-06-02&lt;br /&gt;
|description=Friday-night bluegrass set in Binghamton — two sets with a PickiPedia Dispatch Live segment between&lt;br /&gt;
|tickets=https://example.com/tickets-PLACEHOLDER&lt;br /&gt;
|price=15&lt;br /&gt;
|ages=All ages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A Friday-night [[bluegrass]] show in Binghamton, NY. Two sets plus a break, with the [[PickiPedia]] Dispatch Live segment between sets. Placeholder details — &#039;&#039;&#039;Justin to correct venue, blockheight, lineup, poster, tickets URL, and price before show.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Set 0==&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
==Break==&lt;br /&gt;
* PickiPedia Dispatch Live&lt;br /&gt;
&lt;br /&gt;
==Set 1==&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
[[Category:Shows]]&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5261</id>
		<title>Candidate:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5261"/>
		<updated>2026-06-02T19:47:34Z</updated>

		<summary type="html">&lt;p&gt;Magent: Add .pp-ensemble styling for the Featuring credit line&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* |status=proposed -- bot-staged; remove this line when promoting. */&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — Show: page styling&lt;br /&gt;
 *&lt;br /&gt;
 * Triggers when an article&#039;s title starts with &amp;quot;Show:&amp;quot; (legacy&lt;br /&gt;
 * mainspace convention, not a real namespace). Common.js adds&lt;br /&gt;
 * .pickipedia-show to body and absorbs Template:Show&#039;s infobox&lt;br /&gt;
 * into a poster-style hero; once absorbed the infobox is hidden.&lt;br /&gt;
 * Pages without Template:Show still get the setlist typography.&lt;br /&gt;
 *&lt;br /&gt;
 * Reuses the same paper/ink palette as .pickipedia-userpost so&lt;br /&gt;
 * shows and zine posts feel like the same publication.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Poster (hero block) ---------- */&lt;br /&gt;
.pickipedia-show .show-poster {&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  padding: 32px 36px 28px;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0 0 12px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  align-items: baseline;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker .pp-sep { color: var(--pp-muted); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 44px;&lt;br /&gt;
  line-height: 1.05;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue a { color: inherit; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.14em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble .pp-ensemble-label {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin-right: 8px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-ensemble .pp-sep { color: var(--pp-rule); margin: 0 4px; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 16px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-label { opacity: 0.7; margin-right: 4px; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-value { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-image { margin: 22px 0 0; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-image img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions {&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.12em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-paper);&lt;br /&gt;
  background: var(--pp-accent);&lt;br /&gt;
  border: 1px solid var(--pp-accent);&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a:hover {&lt;br /&gt;
  background: var(--pp-ink);&lt;br /&gt;
  border-color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-status {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 14px;&lt;br /&gt;
  right: 18px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-verified { color: #228b22; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-proposed { color: #b8860b; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the original infobox once the hero has absorbed its data. */&lt;br /&gt;
.pickipedia-show .show-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the slug-style firstHeading only when the hero has been built —&lt;br /&gt;
   bare Show: pages without Template:Show keep the heading so users&lt;br /&gt;
   aren&#039;t left with an untitled page. */&lt;br /&gt;
.pickipedia-show.has-show-hero #firstHeading,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-first-heading { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Setlist typography ---------- */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  margin: 32px 0 14px;&lt;br /&gt;
  padding-top: 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 .mw-editsection {&lt;br /&gt;
  font-family: var(--pp-sans);&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .mw-parser-output ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0 0 16px;&lt;br /&gt;
  counter-reset: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  padding: 6px 0 6px 40px;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  position: relative;&lt;br /&gt;
  counter-increment: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li::before {&lt;br /&gt;
  content: counter(setlist, decimal-leading-zero);&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 8px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li:last-child { border-bottom: none; }&lt;br /&gt;
&lt;br /&gt;
/* Reset counter at every h2 so each set starts at 01. */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 + ul,&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 ~ ul:first-of-type { counter-reset: setlist; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show .show-poster { padding: 22px 18px 18px; }&lt;br /&gt;
  .pickipedia-show .show-poster h1.pp-title { font-size: 30px; }&lt;br /&gt;
  .pickipedia-show .show-poster .pp-venue { font-size: 18px; }&lt;br /&gt;
  .pickipedia-show .mw-parser-output ul li { font-size: 17px; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5260</id>
		<title>Candidate:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5260"/>
		<updated>2026-06-02T19:47:34Z</updated>

		<summary type="html">&lt;p&gt;Magent: Surface Doors/Show/Ensemble in the poster hero&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// |status=proposed -- bot-staged; remove this line when promoting.&lt;br /&gt;
/**&lt;br /&gt;
 * Pickipedia — Show: page hero.&lt;br /&gt;
 *&lt;br /&gt;
 * For mainspace pages whose title starts with &amp;quot;Show:&amp;quot; (the legacy&lt;br /&gt;
 * mainspace convention used pre-namespace), adds .pickipedia-show&lt;br /&gt;
 * to body and absorbs Template:Show&#039;s infobox into a poster-style&lt;br /&gt;
 * hero. If the page does not use Template:Show only the body class&lt;br /&gt;
 * is added — the setlist typography in Common.css still applies.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 0) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;Show:&#039;) !== 0) return;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-show&#039;);&lt;br /&gt;
&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (!content) return;&lt;br /&gt;
&lt;br /&gt;
  var infobox = content.querySelector(&#039;.show-infobox&#039;);&lt;br /&gt;
  if (!infobox) return;  // Bare show page — body class only.&lt;br /&gt;
&lt;br /&gt;
  // ---------- Pull fields out of the existing infobox ----------&lt;br /&gt;
  // Template:Show emits rows of &amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; value&amp;lt;/div&amp;gt;&lt;br /&gt;
  // plus a top banner with &amp;quot;Artists at Venue&amp;quot; and optional image.&lt;br /&gt;
  function fieldValue(label) {&lt;br /&gt;
    var rows = infobox.querySelectorAll(&#039;div&#039;);&lt;br /&gt;
    for (var i = 0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
      var s = rows[i].querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (!s) continue;&lt;br /&gt;
      var labelText = s.textContent.replace(/[:\s]*$/, &#039;&#039;).trim();&lt;br /&gt;
      if (labelText !== label) continue;&lt;br /&gt;
      var clone = rows[i].cloneNode(true);&lt;br /&gt;
      var strong = clone.querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (strong) strong.remove();&lt;br /&gt;
      return clone.innerHTML.trim().replace(/^[\s:]+/, &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var artists  = fieldValue(&#039;Artists&#039;);&lt;br /&gt;
  var venue    = fieldValue(&#039;Venue&#039;);&lt;br /&gt;
  var showtime = fieldValue(&#039;Showtime&#039;);&lt;br /&gt;
  var doors    = fieldValue(&#039;Doors&#039;);&lt;br /&gt;
  var show     = fieldValue(&#039;Show&#039;);&lt;br /&gt;
  var ensemble = fieldValue(&#039;Ensemble&#039;);&lt;br /&gt;
  var tickets  = fieldValue(&#039;Tickets&#039;);&lt;br /&gt;
  var price    = fieldValue(&#039;Price&#039;);&lt;br /&gt;
  var ages     = fieldValue(&#039;Ages&#039;);&lt;br /&gt;
&lt;br /&gt;
  var imageImg = infobox.querySelector(&#039;img&#039;);&lt;br /&gt;
&lt;br /&gt;
  var status = &#039;&#039;;&lt;br /&gt;
  if (infobox.classList.contains(&#039;show-verified&#039;)) status = &#039;verified&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;bot-proposal&#039;)) status = &#039;proposed&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;show-unverified&#039;)) status = &#039;unverified&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Build the poster hero ----------&lt;br /&gt;
  // Showtime is rendered by Template:Show as&lt;br /&gt;
  // [https://etherscan.io/block/N N] — pull the block number out and&lt;br /&gt;
  // format it with commas so the kicker reads &amp;quot;BLOCK 24,144,194&amp;quot;.&lt;br /&gt;
  function formatShowtime(htmlIn) {&lt;br /&gt;
    if (!htmlIn) return &#039;&#039;;&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;);&lt;br /&gt;
    tmp.innerHTML = htmlIn;&lt;br /&gt;
    var anchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    var blockNum = (anchor ? anchor.textContent : tmp.textContent).trim();&lt;br /&gt;
    var asInt = parseInt(blockNum.replace(/[^\d]/g, &#039;&#039;), 10);&lt;br /&gt;
    if (isNaN(asInt)) return blockNum;&lt;br /&gt;
    var formatted = asInt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    var href = anchor ? anchor.href : &#039;&#039;;&lt;br /&gt;
    if (href) {&lt;br /&gt;
      return &#039;&amp;lt;a href=&amp;quot;&#039; + href + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Block &#039; + formatted + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;Block &#039; + formatted;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var kickerBits = [];&lt;br /&gt;
  var showtimeHtml = formatShowtime(showtime);&lt;br /&gt;
  if (showtimeHtml) kickerBits.push(showtimeHtml);&lt;br /&gt;
  if (doors) kickerBits.push(&#039;Doors &#039; + doors);&lt;br /&gt;
  if (show)  kickerBits.push(&#039;Show &#039; + show);&lt;br /&gt;
&lt;br /&gt;
  var kickerHtml = kickerBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerBits.join(&#039;&amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var venueHtml = venue ? &#039;&amp;lt;p class=&amp;quot;pp-venue&amp;quot;&amp;gt;at &#039; + venue + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Ensemble: comma-separated list from Template:Show. Split on commas to&lt;br /&gt;
  // render each name with an interpunct separator, matching the kicker style.&lt;br /&gt;
  var ensembleHtml = &#039;&#039;;&lt;br /&gt;
  if (ensemble) {&lt;br /&gt;
    var names = ensemble.split(/\s*,\s*/).filter(Boolean);&lt;br /&gt;
    if (names.length) {&lt;br /&gt;
      ensembleHtml = &#039;&amp;lt;p class=&amp;quot;pp-ensemble&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;pp-ensemble-label&amp;quot;&amp;gt;Featuring&amp;lt;/span&amp;gt; &#039; +&lt;br /&gt;
        names.join(&#039; &amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt; &#039;) + &#039;&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var metaBits = [];&lt;br /&gt;
  if (price)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Price&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;$&#039; +&lt;br /&gt;
      escapeHtml(price.replace(/^\$/, &#039;&#039;)) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  if (ages)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Ages&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      ages + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  var metaHtml = metaBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;&#039; + metaBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var imageHtml = &#039;&#039;;&lt;br /&gt;
  if (imageImg) {&lt;br /&gt;
    imageHtml = &#039;&amp;lt;div class=&amp;quot;pp-image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + imageImg.src +&lt;br /&gt;
      &#039;&amp;quot; alt=&amp;quot;&#039; + escapeHtml(imageImg.alt || &#039;&#039;) + &#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Tickets field is an anchor; surface its href as a poster action.&lt;br /&gt;
  var actionBits = [];&lt;br /&gt;
  if (tickets) {&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;); tmp.innerHTML = tickets;&lt;br /&gt;
    var ticketAnchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    if (ticketAnchor &amp;amp;&amp;amp; ticketAnchor.href) {&lt;br /&gt;
      actionBits.push(&#039;&amp;lt;a href=&amp;quot;&#039; + ticketAnchor.href +&lt;br /&gt;
        &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Tickets&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  var actionsHtml = actionBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-actions&amp;quot;&amp;gt;&#039; + actionBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var statusHtml = status&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-status is-&#039; + status + &#039;&amp;quot;&amp;gt;&#039; + status + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var titleHtml = artists || escapeHtml(title.replace(/^Show:\s*/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
  var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
  hero.className = &#039;show-poster&#039;;&lt;br /&gt;
  hero.innerHTML =&lt;br /&gt;
    statusHtml +&lt;br /&gt;
    kickerHtml +&lt;br /&gt;
    &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + titleHtml + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
    venueHtml +&lt;br /&gt;
    ensembleHtml +&lt;br /&gt;
    metaHtml +&lt;br /&gt;
    imageHtml +&lt;br /&gt;
    actionsHtml;&lt;br /&gt;
&lt;br /&gt;
  content.insertBefore(hero, content.firstChild);&lt;br /&gt;
  infobox.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  body.classList.add(&#039;has-show-hero&#039;);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:Show&amp;diff=5259</id>
		<title>Template:Show</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:Show&amp;diff=5259"/>
		<updated>2026-06-02T19:47:34Z</updated>

		<summary type="html">&lt;p&gt;Magent: Add official_poster, doors_time, show_time, ensemble fields (with backward-compat image alias)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- |status=proposed -- bot verification marker (kept in noinclude so it doesn&#039;t transclude) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Show&#039;&#039;&#039; - Structured data template for performances/concerts.&lt;br /&gt;
&lt;br /&gt;
Uses Ethereum blockheight as the canonical timestamp anchor.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Show&lt;br /&gt;
|artists=Billy Strings&lt;br /&gt;
|venue=The Station Inn&lt;br /&gt;
|blockheight=24140272&lt;br /&gt;
|official_poster=Show-poster.jpg&lt;br /&gt;
|doors_time=7:30 PM&lt;br /&gt;
|show_time=8:00 PM&lt;br /&gt;
|ensemble=Billy Strings; Jarrod Walker; Royal Masat; Alex Hargreaves&lt;br /&gt;
|status=proposed&lt;br /&gt;
|by=Tea&lt;br /&gt;
|source=stationinn.com&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Shows]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; You must manually add &amp;lt;nowiki&amp;gt;[[Category:Shows]]&amp;lt;/nowiki&amp;gt; to pages using this template (SMW bug workaround).&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
* &#039;&#039;&#039;artists&#039;&#039;&#039; (required) - Performing artist(s); the headlining name as it appears on the poster&lt;br /&gt;
* &#039;&#039;&#039;venue&#039;&#039;&#039; (required) - Venue name (should match a venue page)&lt;br /&gt;
* &#039;&#039;&#039;blockheight&#039;&#039;&#039; (required) - Ethereum block height when the show started/starts&lt;br /&gt;
* &#039;&#039;&#039;official_poster&#039;&#039;&#039; (optional) - Filename of the official show poster (e.g., &amp;quot;Show-poster.jpg&amp;quot;). Takes priority over &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;image&#039;&#039;&#039; (optional, deprecated) - Older alias for &amp;lt;code&amp;gt;official_poster&amp;lt;/code&amp;gt;. Use &amp;lt;code&amp;gt;official_poster&amp;lt;/code&amp;gt; on new pages.&lt;br /&gt;
* &#039;&#039;&#039;doors_time&#039;&#039;&#039; (optional) - Door time as displayed text (e.g., &amp;quot;7:30 PM&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;show_time&#039;&#039;&#039; (optional) - Show start time as displayed text (e.g., &amp;quot;8:00 PM&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;ensemble&#039;&#039;&#039; (optional) - Semicolon-separated list of performer names. Each becomes a Performer SMW property for queries and backlinks.&lt;br /&gt;
* &#039;&#039;&#039;title&#039;&#039;&#039; (optional) - Custom title for social sharing (defaults to &amp;quot;artists at venue - PickiPedia&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;status&#039;&#039;&#039; (optional) - &amp;quot;proposed&amp;quot; for bot-proposed, &amp;quot;verified&amp;quot; for human-verified, blank for unverified&lt;br /&gt;
* &#039;&#039;&#039;by&#039;&#039;&#039; (optional) - Who proposed/verified this&lt;br /&gt;
* &#039;&#039;&#039;source&#039;&#039;&#039; (optional) - Source for verification&lt;br /&gt;
* &#039;&#039;&#039;price&#039;&#039;&#039; (optional) - Ticket price&lt;br /&gt;
* &#039;&#039;&#039;tickets&#039;&#039;&#039; (optional) - Ticket purchase URL&lt;br /&gt;
* &#039;&#039;&#039;ages&#039;&#039;&#039; (optional) - Age restriction (e.g., &amp;quot;21+&amp;quot;, &amp;quot;All ages&amp;quot;)&lt;br /&gt;
* &#039;&#039;&#039;description&#039;&#039;&#039; (optional) - Short description for social sharing cards&lt;br /&gt;
&lt;br /&gt;
=== SMW Properties Set ===&lt;br /&gt;
* &amp;lt;code&amp;gt;Artist&amp;lt;/code&amp;gt; - The artist(s)&lt;br /&gt;
* &amp;lt;code&amp;gt;Venue&amp;lt;/code&amp;gt; - The venue&lt;br /&gt;
* &amp;lt;code&amp;gt;Blockheight&amp;lt;/code&amp;gt; - The block height timestamp&lt;br /&gt;
* &amp;lt;code&amp;gt;Performer&amp;lt;/code&amp;gt; - One per ensemble member (multi-valued)&lt;br /&gt;
* &amp;lt;code&amp;gt;Verification status&amp;lt;/code&amp;gt; - proposed/verified/unverified&lt;br /&gt;
&lt;br /&gt;
== Page naming ==&lt;br /&gt;
Show pages should be named: &amp;lt;code&amp;gt;Show:ArtistName-blockheight&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
* &amp;lt;code&amp;gt;Show:BillyStrings-24140272&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Show:BillyStrings_DelMcCouryBand-24140500&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Bot_proposes]]&lt;br /&gt;
* [[Template:Verified]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Show templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#seo:&lt;br /&gt;
|title={{#if:{{{title|}}}|{{{title}}}|{{{artists}}} at {{{venue}}} - PickiPedia}}&lt;br /&gt;
|description={{#if:{{{description|}}}|{{{description}}}|{{{artists}}} performing at {{{venue}}} (block {{{blockheight}}})}}&lt;br /&gt;
|site_name=PickiPedia&lt;br /&gt;
|type=article&lt;br /&gt;
|image={{#if:{{{official_poster|{{{image|}}}}}}|{{filepath:{{{official_poster|{{{image|}}}}}}}}|}}}}&amp;lt;div class=&amp;quot;show-infobox {{#ifeq:{{{status|}}}|proposed|bot-proposal|{{#ifeq:{{{status|}}}|verified|show-verified|show-unverified}}}}&amp;quot; style=&amp;quot;width: 22em; border: 1px solid #aaa; padding: 0.5em; margin: 0 0 1em 1em; float: right; clear: right; {{#ifeq:{{{status|}}}|proposed|background: #fff3cd; border-left: 3px solid #ffc107;|background: #f9f9f9;}}&amp;quot; data-source=&amp;quot;{{{source|}}}&amp;quot; data-proposed-by=&amp;quot;{{{by|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #98b; font-size: 1.1em; padding: 0.3em; text-align: center; margin: -0.5em -0.5em 0.5em -0.5em;&amp;quot;&amp;gt;{{{artists}}} at {{{venue}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{{official_poster|{{{image|}}}}}}|&amp;lt;div style=&amp;quot;text-align: center; margin: 0.5em 0;&amp;quot;&amp;gt;[[File:{{{official_poster|{{{image|}}}}}}|220px]]&amp;lt;/div&amp;gt;|}}&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Artists:&amp;lt;/strong&amp;gt; {{{artists}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Venue:&amp;lt;/strong&amp;gt; [[{{{venue}}}]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Showtime:&amp;lt;/strong&amp;gt; [https://etherscan.io/block/{{{blockheight}}} {{{blockheight}}}]&amp;lt;/div&amp;gt;{{#if:{{{doors_time|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Doors:&amp;lt;/strong&amp;gt; {{{doors_time}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{show_time|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Show:&amp;lt;/strong&amp;gt; {{{show_time}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{ensemble|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Ensemble:&amp;lt;/strong&amp;gt; {{#arraymap:{{{ensemble}}}|;|x|x|,&amp;amp;#32;}}&amp;lt;/div&amp;gt;|}}{{#if:{{{price|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Price:&amp;lt;/strong&amp;gt; ${{{price}}}&amp;lt;/div&amp;gt;|}}{{#if:{{{tickets|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Tickets:&amp;lt;/strong&amp;gt; [{{{tickets}}} Buy tickets]&amp;lt;/div&amp;gt;|}}{{#if:{{{ages|}}}|&amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Ages:&amp;lt;/strong&amp;gt; {{{ages}}}&amp;lt;/div&amp;gt;|}}{{#ifeq:{{{status|}}}|proposed|&amp;lt;div style=&amp;quot;font-size: 0.85em; margin-top: 0.5em; color: #856404;&amp;quot;&amp;gt;Proposed by {{{by|bot}}} via {{{source|unknown}}}&amp;lt;/div&amp;gt;|}}{{#ifeq:{{{status|}}}|verified|&amp;lt;div style=&amp;quot;font-size: 0.85em; margin-top: 0.5em; color: #228b22;&amp;quot;&amp;gt;✓ Verified{{#if:{{{by|}}}| by {{{by}}}|}}&amp;lt;/div&amp;gt;|}}&amp;lt;/div&amp;gt;{{#set:Artist={{#replace:{{#replace:{{{artists}}}|]|}}|[|}}}}{{#set:Venue={{{venue}}}}}{{#set:Blockheight={{{blockheight}}}}}{{#if:{{{ensemble|}}}|{{#arraymap:{{{ensemble}}}|;|x|{{#set:Performer=x}}|}}|}}{{#set:Verification status={{#ifeq:{{{status|}}}|verified|verified|{{#ifeq:{{{status|}}}|proposed|proposed|unverified}}}}}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5258</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5258"/>
		<updated>2026-06-02T19:32:26Z</updated>

		<summary type="html">&lt;p&gt;Magent: Sample Friday show page for Justin to correct (status=proposed satisfies bot verification)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Show&lt;br /&gt;
|artists=Justin Holmes &amp;amp; The Cryptograss Conspiracy&lt;br /&gt;
|venue=The Cider Mill Stage&lt;br /&gt;
|blockheight=25255000&lt;br /&gt;
|status=proposed&lt;br /&gt;
|by=Magent&lt;br /&gt;
|source=in-conversation with Justin while he was at Old Barn Market, Binghamton, 2026-06-02&lt;br /&gt;
|description=Friday-night bluegrass set in Binghamton — two sets with a PickiPedia Dispatch Live segment between&lt;br /&gt;
|tickets=https://example.com/tickets-PLACEHOLDER&lt;br /&gt;
|price=15&lt;br /&gt;
|ages=All ages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A Friday-night [[bluegrass]] show in Binghamton, NY. Two sets plus a break, with the [[PickiPedia]] Dispatch Live segment between sets. Placeholder details — &#039;&#039;&#039;Justin to correct venue, blockheight, lineup, tickets URL, and price before show.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Set 0==&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
==Break==&lt;br /&gt;
* PickiPedia Dispatch Live&lt;br /&gt;
&lt;br /&gt;
==Set 1==&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
[[Category:Shows]]&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadgets-definition&amp;diff=5254</id>
		<title>Candidate:Gadgets-definition</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadgets-definition&amp;diff=5254"/>
		<updated>2026-06-02T19:13:28Z</updated>

		<summary type="html">&lt;p&gt;Magent: Register pickipedia-show gadget (mainspace, default+hidden)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- |status=proposed -- bot-staged; remove this line when promoting. --&amp;gt;&lt;br /&gt;
== verification ==&lt;br /&gt;
* verify[ResourceLoader|default|dependencies=mediawiki.api,mediawiki.util]|verify.js&lt;br /&gt;
&lt;br /&gt;
== show pages ==&lt;br /&gt;
* pickipedia-show[ResourceLoader|default|hidden|namespaces=0|targets=desktop,mobile]|pickipedia-show.js|pickipedia-show.css&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5253</id>
		<title>Candidate:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.js&amp;diff=5253"/>
		<updated>2026-06-02T19:13:28Z</updated>

		<summary type="html">&lt;p&gt;Magent: Show: page hero builder extracted into its own gadget (not Common.js)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// |status=proposed -- bot-staged; remove this line when promoting.&lt;br /&gt;
/**&lt;br /&gt;
 * Pickipedia — Show: page hero.&lt;br /&gt;
 *&lt;br /&gt;
 * For mainspace pages whose title starts with &amp;quot;Show:&amp;quot; (the legacy&lt;br /&gt;
 * mainspace convention used pre-namespace), adds .pickipedia-show&lt;br /&gt;
 * to body and absorbs Template:Show&#039;s infobox into a poster-style&lt;br /&gt;
 * hero. If the page does not use Template:Show only the body class&lt;br /&gt;
 * is added — the setlist typography in Common.css still applies.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 0) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;Show:&#039;) !== 0) return;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-show&#039;);&lt;br /&gt;
&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (!content) return;&lt;br /&gt;
&lt;br /&gt;
  var infobox = content.querySelector(&#039;.show-infobox&#039;);&lt;br /&gt;
  if (!infobox) return;  // Bare show page — body class only.&lt;br /&gt;
&lt;br /&gt;
  // ---------- Pull fields out of the existing infobox ----------&lt;br /&gt;
  // Template:Show emits rows of &amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; value&amp;lt;/div&amp;gt;&lt;br /&gt;
  // plus a top banner with &amp;quot;Artists at Venue&amp;quot; and optional image.&lt;br /&gt;
  function fieldValue(label) {&lt;br /&gt;
    var rows = infobox.querySelectorAll(&#039;div&#039;);&lt;br /&gt;
    for (var i = 0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
      var s = rows[i].querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (!s) continue;&lt;br /&gt;
      var labelText = s.textContent.replace(/[:\s]*$/, &#039;&#039;).trim();&lt;br /&gt;
      if (labelText !== label) continue;&lt;br /&gt;
      var clone = rows[i].cloneNode(true);&lt;br /&gt;
      var strong = clone.querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (strong) strong.remove();&lt;br /&gt;
      return clone.innerHTML.trim().replace(/^[\s:]+/, &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var artists  = fieldValue(&#039;Artists&#039;);&lt;br /&gt;
  var venue    = fieldValue(&#039;Venue&#039;);&lt;br /&gt;
  var showtime = fieldValue(&#039;Showtime&#039;);&lt;br /&gt;
  var tickets  = fieldValue(&#039;Tickets&#039;);&lt;br /&gt;
  var price    = fieldValue(&#039;Price&#039;);&lt;br /&gt;
  var ages     = fieldValue(&#039;Ages&#039;);&lt;br /&gt;
&lt;br /&gt;
  var imageImg = infobox.querySelector(&#039;img&#039;);&lt;br /&gt;
&lt;br /&gt;
  var status = &#039;&#039;;&lt;br /&gt;
  if (infobox.classList.contains(&#039;show-verified&#039;)) status = &#039;verified&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;bot-proposal&#039;)) status = &#039;proposed&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;show-unverified&#039;)) status = &#039;unverified&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Build the poster hero ----------&lt;br /&gt;
  // Showtime is rendered by Template:Show as&lt;br /&gt;
  // [https://etherscan.io/block/N N] — pull the block number out and&lt;br /&gt;
  // format it with commas so the kicker reads &amp;quot;BLOCK 24,144,194&amp;quot;.&lt;br /&gt;
  function formatShowtime(htmlIn) {&lt;br /&gt;
    if (!htmlIn) return &#039;&#039;;&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;);&lt;br /&gt;
    tmp.innerHTML = htmlIn;&lt;br /&gt;
    var anchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    var blockNum = (anchor ? anchor.textContent : tmp.textContent).trim();&lt;br /&gt;
    var asInt = parseInt(blockNum.replace(/[^\d]/g, &#039;&#039;), 10);&lt;br /&gt;
    if (isNaN(asInt)) return blockNum;&lt;br /&gt;
    var formatted = asInt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    var href = anchor ? anchor.href : &#039;&#039;;&lt;br /&gt;
    if (href) {&lt;br /&gt;
      return &#039;&amp;lt;a href=&amp;quot;&#039; + href + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Block &#039; + formatted + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;Block &#039; + formatted;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var kickerBits = [];&lt;br /&gt;
  var showtimeHtml = formatShowtime(showtime);&lt;br /&gt;
  if (showtimeHtml) kickerBits.push(showtimeHtml);&lt;br /&gt;
&lt;br /&gt;
  var kickerHtml = kickerBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerBits.join(&#039;&amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var venueHtml = venue ? &#039;&amp;lt;p class=&amp;quot;pp-venue&amp;quot;&amp;gt;at &#039; + venue + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var metaBits = [];&lt;br /&gt;
  if (price)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Price&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;$&#039; +&lt;br /&gt;
      escapeHtml(price.replace(/^\$/, &#039;&#039;)) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  if (ages)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Ages&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      ages + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  var metaHtml = metaBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;&#039; + metaBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var imageHtml = &#039;&#039;;&lt;br /&gt;
  if (imageImg) {&lt;br /&gt;
    imageHtml = &#039;&amp;lt;div class=&amp;quot;pp-image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + imageImg.src +&lt;br /&gt;
      &#039;&amp;quot; alt=&amp;quot;&#039; + escapeHtml(imageImg.alt || &#039;&#039;) + &#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Tickets field is an anchor; surface its href as a poster action.&lt;br /&gt;
  var actionBits = [];&lt;br /&gt;
  if (tickets) {&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;); tmp.innerHTML = tickets;&lt;br /&gt;
    var ticketAnchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    if (ticketAnchor &amp;amp;&amp;amp; ticketAnchor.href) {&lt;br /&gt;
      actionBits.push(&#039;&amp;lt;a href=&amp;quot;&#039; + ticketAnchor.href +&lt;br /&gt;
        &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Tickets&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  var actionsHtml = actionBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-actions&amp;quot;&amp;gt;&#039; + actionBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var statusHtml = status&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-status is-&#039; + status + &#039;&amp;quot;&amp;gt;&#039; + status + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var titleHtml = artists || escapeHtml(title.replace(/^Show:\s*/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
  var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
  hero.className = &#039;show-poster&#039;;&lt;br /&gt;
  hero.innerHTML =&lt;br /&gt;
    statusHtml +&lt;br /&gt;
    kickerHtml +&lt;br /&gt;
    &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + titleHtml + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
    venueHtml +&lt;br /&gt;
    metaHtml +&lt;br /&gt;
    imageHtml +&lt;br /&gt;
    actionsHtml;&lt;br /&gt;
&lt;br /&gt;
  content.insertBefore(hero, content.firstChild);&lt;br /&gt;
  infobox.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  body.classList.add(&#039;has-show-hero&#039;);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5252</id>
		<title>Candidate:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Gadget-pickipedia-show.css&amp;diff=5252"/>
		<updated>2026-06-02T19:13:28Z</updated>

		<summary type="html">&lt;p&gt;Magent: Show: page styling extracted into its own gadget (not Common.css)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* |status=proposed -- bot-staged; remove this line when promoting. */&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — Show: page styling&lt;br /&gt;
 *&lt;br /&gt;
 * Triggers when an article&#039;s title starts with &amp;quot;Show:&amp;quot; (legacy&lt;br /&gt;
 * mainspace convention, not a real namespace). Common.js adds&lt;br /&gt;
 * .pickipedia-show to body and absorbs Template:Show&#039;s infobox&lt;br /&gt;
 * into a poster-style hero; once absorbed the infobox is hidden.&lt;br /&gt;
 * Pages without Template:Show still get the setlist typography.&lt;br /&gt;
 *&lt;br /&gt;
 * Reuses the same paper/ink palette as .pickipedia-userpost so&lt;br /&gt;
 * shows and zine posts feel like the same publication.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Poster (hero block) ---------- */&lt;br /&gt;
.pickipedia-show .show-poster {&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  padding: 32px 36px 28px;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0 0 12px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  align-items: baseline;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker .pp-sep { color: var(--pp-muted); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 44px;&lt;br /&gt;
  line-height: 1.05;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue a { color: inherit; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 16px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-label { opacity: 0.7; margin-right: 4px; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-value { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-image { margin: 22px 0 0; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-image img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions {&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.12em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-paper);&lt;br /&gt;
  background: var(--pp-accent);&lt;br /&gt;
  border: 1px solid var(--pp-accent);&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a:hover {&lt;br /&gt;
  background: var(--pp-ink);&lt;br /&gt;
  border-color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-status {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 14px;&lt;br /&gt;
  right: 18px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-verified { color: #228b22; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-proposed { color: #b8860b; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the original infobox once the hero has absorbed its data. */&lt;br /&gt;
.pickipedia-show .show-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the slug-style firstHeading only when the hero has been built —&lt;br /&gt;
   bare Show: pages without Template:Show keep the heading so users&lt;br /&gt;
   aren&#039;t left with an untitled page. */&lt;br /&gt;
.pickipedia-show.has-show-hero #firstHeading,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-first-heading { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Setlist typography ---------- */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  margin: 32px 0 14px;&lt;br /&gt;
  padding-top: 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 .mw-editsection {&lt;br /&gt;
  font-family: var(--pp-sans);&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .mw-parser-output ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0 0 16px;&lt;br /&gt;
  counter-reset: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  padding: 6px 0 6px 40px;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  position: relative;&lt;br /&gt;
  counter-increment: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li::before {&lt;br /&gt;
  content: counter(setlist, decimal-leading-zero);&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 8px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li:last-child { border-bottom: none; }&lt;br /&gt;
&lt;br /&gt;
/* Reset counter at every h2 so each set starts at 01. */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 + ul,&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 ~ ul:first-of-type { counter-reset: setlist; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show .show-poster { padding: 22px 18px 18px; }&lt;br /&gt;
  .pickipedia-show .show-poster h1.pp-title { font-size: 30px; }&lt;br /&gt;
  .pickipedia-show .show-poster .pp-venue { font-size: 18px; }&lt;br /&gt;
  .pickipedia-show .mw-parser-output ul li { font-size: 17px; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Common.js&amp;diff=5251</id>
		<title>Candidate:Common.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Common.js&amp;diff=5251"/>
		<updated>2026-06-02T18:52:46Z</updated>

		<summary type="html">&lt;p&gt;Magent: Staging full proposed Common.js for sysop review (new Show: detector IIFE at bottom)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// |status=proposed -- bot-staged; remove this line when promoting.&lt;br /&gt;
/**&lt;br /&gt;
* Blue Railroad Submission - Date to Block Height Converter&lt;br /&gt;
* Adds a datepicker that converts dates to Ethereum block heights&lt;br /&gt;
* Also shows time ago for news templates&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    &lt;br /&gt;
    // Only run on the Blue Railroad Submission form&lt;br /&gt;
    if (!document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;)) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Reference point: known block and timestamp&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    const AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
    &lt;br /&gt;
    // Get current block from footer (format: &amp;quot;24,328,442&amp;quot;)&lt;br /&gt;
    function getCurrentBlockFromFooter() {&lt;br /&gt;
        const footerLink = document.querySelector(&#039;a[href*=&amp;quot;etherscan.io/block/&amp;quot;]&#039;);&lt;br /&gt;
        if (footerLink) {&lt;br /&gt;
            const match = footerLink.href.match(/block\/(\d+)/);&lt;br /&gt;
            if (match) return parseInt(match[1]);&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Calculate block height from date&lt;br /&gt;
    function dateToBlockHeight(targetDate, refBlock, refTimestamp) {&lt;br /&gt;
        const targetTimestamp = targetDate.getTime() / 1000;&lt;br /&gt;
        const secondsDiff = refTimestamp - targetTimestamp;&lt;br /&gt;
        const blocksDiff = Math.round(secondsDiff / AVG_BLOCK_TIME);&lt;br /&gt;
        return refBlock - blocksDiff;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Add the datepicker UI&lt;br /&gt;
    function addDatePicker() {&lt;br /&gt;
        const blockInput = document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;);&lt;br /&gt;
        if (!blockInput) return;&lt;br /&gt;
        &lt;br /&gt;
        const container = document.createElement(&#039;div&#039;);&lt;br /&gt;
        container.style.marginTop = &#039;8px&#039;;&lt;br /&gt;
        container.innerHTML = `&lt;br /&gt;
            &amp;lt;label style=&amp;quot;display: block; margin-bottom: 4px; font-size: 0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
                Or pick a date/time:&lt;br /&gt;
            &amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;datetime-local&amp;quot; id=&amp;quot;br-datepicker&amp;quot; style=&amp;quot;padding: 4px; margin-right: 8px;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;br-convert-btn&amp;quot; style=&amp;quot;padding: 4px 12px; cursor: pointer;&amp;quot;&amp;gt;&lt;br /&gt;
                Convert to Block&lt;br /&gt;
            &amp;lt;/button&amp;gt;&lt;br /&gt;
            &amp;lt;span id=&amp;quot;br-status&amp;quot; style=&amp;quot;margin-left: 8px; font-size: 0.9em; color: #666;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        `;&lt;br /&gt;
        &lt;br /&gt;
        blockInput.parentNode.appendChild(container);&lt;br /&gt;
        &lt;br /&gt;
        const datePicker = document.getElementById(&#039;br-datepicker&#039;);&lt;br /&gt;
        const convertBtn = document.getElementById(&#039;br-convert-btn&#039;);&lt;br /&gt;
        const status = document.getElementById(&#039;br-status&#039;);&lt;br /&gt;
        &lt;br /&gt;
        // Set default to now&lt;br /&gt;
        const now = new Date();&lt;br /&gt;
        datePicker.value = now.toISOString().slice(0, 16);&lt;br /&gt;
        &lt;br /&gt;
        convertBtn.addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
            const selectedDate = new Date(datePicker.value);&lt;br /&gt;
            if (isNaN(selectedDate.getTime())) {&lt;br /&gt;
                status.textContent = &#039;Invalid date&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentBlock = getCurrentBlockFromFooter();&lt;br /&gt;
            if (!currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Could not find reference block&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentTimestamp = Date.now() / 1000;&lt;br /&gt;
            const estimatedBlock = dateToBlockHeight(selectedDate, currentBlock, currentTimestamp);&lt;br /&gt;
            &lt;br /&gt;
            if (estimatedBlock &amp;gt; currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Date is in the future!&#039;;&lt;br /&gt;
                status.style.color = &#039;orange&#039;;&lt;br /&gt;
            } else {&lt;br /&gt;
                status.textContent = &#039;~estimated&#039;;&lt;br /&gt;
                status.style.color = &#039;green&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            blockInput.value = estimatedBlock;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Run when DOM is ready&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, addDatePicker);&lt;br /&gt;
    } else {&lt;br /&gt;
        addDatePicker();&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TimeAgo — shows &amp;quot;X blocks ago&amp;quot; for transcluded templates.&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext:&lt;br /&gt;
 *   &amp;lt;span class=&amp;quot;timeago&amp;quot; data-lastmod-page=&amp;quot;Template:NewsShorts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Fetches the last revision timestamp from the API and renders&lt;br /&gt;
 * a block-based relative time string using Ethereum block heights.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    var AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
&lt;br /&gt;
    var spans = document.querySelectorAll(&#039;.timeago[data-lastmod-page]&#039;);&lt;br /&gt;
    if (!spans.length) return;&lt;br /&gt;
&lt;br /&gt;
    // Format number with commas (e.g., 1234567 -&amp;gt; &amp;quot;1,234,567&amp;quot;)&lt;br /&gt;
    function formatNumber(num) {&lt;br /&gt;
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Collect unique page titles&lt;br /&gt;
    var titles = [];&lt;br /&gt;
    spans.forEach(function(span) {&lt;br /&gt;
        var t = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
        if (t &amp;amp;&amp;amp; titles.indexOf(t) === -1) titles.push(t);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Batch query the API (up to 50 titles per request)&lt;br /&gt;
    var api = mw.config.get(&#039;wgScriptPath&#039;) + &#039;/api.php&#039;;&lt;br /&gt;
    var url = api + &#039;?action=query&amp;amp;prop=revisions&amp;amp;rvprop=timestamp&amp;amp;format=json&amp;amp;titles=&#039; +&lt;br /&gt;
        encodeURIComponent(titles.join(&#039;|&#039;));&lt;br /&gt;
&lt;br /&gt;
    fetch(url).then(function(r) { return r.json(); }).then(function(data) {&lt;br /&gt;
        var pages = data.query &amp;amp;&amp;amp; data.query.pages || {};&lt;br /&gt;
        var timestamps = {};&lt;br /&gt;
&lt;br /&gt;
        Object.keys(pages).forEach(function(id) {&lt;br /&gt;
            var page = pages[id];&lt;br /&gt;
            if (page.revisions &amp;amp;&amp;amp; page.revisions[0]) {&lt;br /&gt;
                timestamps[page.title] = new Date(page.revisions[0].timestamp);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        spans.forEach(function(span) {&lt;br /&gt;
            var title = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
            var ts = timestamps[title];&lt;br /&gt;
            if (!ts) {&lt;br /&gt;
                span.textContent = &#039;&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            span.textContent = formatBlocksAgo(ts);&lt;br /&gt;
            span.title = ts.toLocaleString();&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    function formatBlocksAgo(date) {&lt;br /&gt;
        var secondsAgo = Math.floor((Date.now() - date.getTime()) / 1000);&lt;br /&gt;
        var blocksAgo = Math.round(secondsAgo / AVG_BLOCK_TIME);&lt;br /&gt;
&lt;br /&gt;
        if (blocksAgo &amp;lt; 1) {&lt;br /&gt;
            return &#039;this block&#039;;&lt;br /&gt;
        } else if (blocksAgo === 1) {&lt;br /&gt;
            return &#039;1 block ago&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            return formatNumber(blocksAgo) + &#039; blocks ago&#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * HLS Video Player - Initializes HLS.js for IPFS-hosted videos&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext (via Template:HLSVideo):&lt;br /&gt;
 *   &amp;lt;div class=&amp;quot;hls-video-player&amp;quot; data-cid=&amp;quot;QmXet6...&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * The gadget loads hls.js and initializes players for any element&lt;br /&gt;
 * with the hls-video-player class and a data-cid attribute.&lt;br /&gt;
 *&lt;br /&gt;
 * Supports both HLS streams (CID/master.m3u8) and raw video files.&lt;br /&gt;
 * Tries HLS first; if the manifest 404s, falls back to direct playback.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    var IPFS_GATEWAY = &#039;https://ipfs.delivery-kid.cryptograss.live/ipfs&#039;;&lt;br /&gt;
    var HLS_JS_URL = &#039;https://cdn.jsdelivr.net/npm/hls.js@latest&#039;;&lt;br /&gt;
    var hlsLoadPromise = null;&lt;br /&gt;
&lt;br /&gt;
    // CIDv1 (bafy...) is Base32 lowercase, but MediaWiki capitalizes page titles.&lt;br /&gt;
    // CIDv0 (Qm...) is Base58 case-sensitive — must not be lowercased.&lt;br /&gt;
    function normalizeCid(cid) {&lt;br /&gt;
        if (cid &amp;amp;&amp;amp; cid.substring(0, 4) === &#039;Bafy&#039;) {&lt;br /&gt;
            return cid.toLowerCase();&lt;br /&gt;
        }&lt;br /&gt;
        return cid;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function loadHls() {&lt;br /&gt;
        if (typeof Hls !== &#039;undefined&#039;) {&lt;br /&gt;
            return Promise.resolve();&lt;br /&gt;
        }&lt;br /&gt;
        if (hlsLoadPromise) {&lt;br /&gt;
            return hlsLoadPromise;&lt;br /&gt;
        }&lt;br /&gt;
        hlsLoadPromise = new Promise(function(resolve) {&lt;br /&gt;
            var script = document.createElement(&#039;script&#039;);&lt;br /&gt;
            script.src = HLS_JS_URL;&lt;br /&gt;
            script.onload = resolve;&lt;br /&gt;
            document.head.appendChild(script);&lt;br /&gt;
        });&lt;br /&gt;
        return hlsLoadPromise;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayers() {&lt;br /&gt;
        var containers = document.querySelectorAll(&#039;.hls-video-player[data-cid]:not([data-initialized])&#039;);&lt;br /&gt;
        if (!containers.length) return;&lt;br /&gt;
&lt;br /&gt;
        // Mark ALL containers immediately to prevent race conditions&lt;br /&gt;
        containers.forEach(function(c) {&lt;br /&gt;
            c.setAttribute(&#039;data-initialized&#039;, &#039;true&#039;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Then load hls.js and initialize&lt;br /&gt;
        loadHls().then(function() {&lt;br /&gt;
            containers.forEach(initPlayer);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function createVideoElement(width, maxWidth) {&lt;br /&gt;
        var video = document.createElement(&#039;video&#039;);&lt;br /&gt;
        video.controls = true;&lt;br /&gt;
        video.playsInline = true;&lt;br /&gt;
        video.style.width = width;&lt;br /&gt;
        video.style.maxWidth = maxWidth;&lt;br /&gt;
        video.style.backgroundColor = &#039;#000&#039;;&lt;br /&gt;
        video.style.display = &#039;block&#039;;&lt;br /&gt;
        return video;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fallbackToDirectVideo(container, cid, width, maxWidth) {&lt;br /&gt;
        // CID is a raw video file, not an HLS stream — play directly&lt;br /&gt;
        var directUrl = IPFS_GATEWAY + &#039;/&#039; + normalizeCid(cid);&lt;br /&gt;
        container.innerHTML = &#039;&#039;;&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        video.src = directUrl;&lt;br /&gt;
        video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
            container.innerHTML = &#039;&amp;lt;p style=&amp;quot;color: red; padding: 1em;&amp;quot;&amp;gt;Error loading video. The IPFS content may not be available.&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
        });&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayer(container) {&lt;br /&gt;
        var cid = container.getAttribute(&#039;data-cid&#039;);&lt;br /&gt;
        var normalCid = normalizeCid(cid);&lt;br /&gt;
        var width = container.getAttribute(&#039;data-width&#039;) || &#039;100%&#039;;&lt;br /&gt;
        var maxWidth = container.getAttribute(&#039;data-max-width&#039;) || &#039;800px&#039;;&lt;br /&gt;
        &lt;br /&gt;
        var hlsSrc = IPFS_GATEWAY + &#039;/&#039; + normalCid + &#039;/master.m3u8&#039;;&lt;br /&gt;
&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
&lt;br /&gt;
        if (video.canPlayType(&#039;application/vnd.apple.mpegurl&#039;)) {&lt;br /&gt;
            // Safari native HLS — try HLS first, fall back on error&lt;br /&gt;
            video.src = hlsSrc;&lt;br /&gt;
            video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
                fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
            });&lt;br /&gt;
        } else if (typeof Hls !== &#039;undefined&#039; &amp;amp;&amp;amp; Hls.isSupported()) {&lt;br /&gt;
            var hls = new Hls();&lt;br /&gt;
            hls.loadSource(hlsSrc);&lt;br /&gt;
            hls.attachMedia(video);&lt;br /&gt;
            hls.on(Hls.Events.ERROR, function(event, data) {&lt;br /&gt;
                if (data.fatal) {&lt;br /&gt;
                    // HLS failed (likely no master.m3u8) — try direct video&lt;br /&gt;
                    hls.destroy();&lt;br /&gt;
                    fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            // No HLS support — try direct video&lt;br /&gt;
            fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, initPlayers);&lt;br /&gt;
    } else {&lt;br /&gt;
        initPlayers();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== &#039;undefined&#039; &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function($content) {&lt;br /&gt;
            initPlayers();&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
/**&lt;br /&gt;
 * Instrument form — validation + page name computation (v24772700)&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    console.log(&#039;PickiPedia Common.js instrument module v24772700 loaded&#039;);&lt;br /&gt;
&lt;br /&gt;
    mw.hook(&#039;pf.formValidation&#039;).add(function(args) {&lt;br /&gt;
        var nickname = document.querySelector(&#039;input[name=&amp;quot;Instrument[nickname]&amp;quot;]&#039;);&lt;br /&gt;
        if (!nickname) return;&lt;br /&gt;
&lt;br /&gt;
        var make = document.querySelector(&#039;input[name=&amp;quot;Instrument[make]&amp;quot;]&#039;);&lt;br /&gt;
        var model = document.querySelector(&#039;input[name=&amp;quot;Instrument[model]&amp;quot;]&#039;);&lt;br /&gt;
        var serial = document.querySelector(&#039;input[name=&amp;quot;Instrument[serial]&amp;quot;]&#039;);&lt;br /&gt;
&lt;br /&gt;
        var nickVal = nickname.value.trim();&lt;br /&gt;
        var makeVal = make ? make.value.trim() : &#039;&#039;;&lt;br /&gt;
        var modelVal = model ? model.value.trim() : &#039;&#039;;&lt;br /&gt;
        var serialVal = serial ? serial.value.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var hasNickname = nickVal !== &#039;&#039;;&lt;br /&gt;
        var hasMakerComplete = makeVal !== &#039;&#039; &amp;amp;&amp;amp; modelVal !== &#039;&#039; &amp;amp;&amp;amp; serialVal !== &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (!hasNickname &amp;amp;&amp;amp; !hasMakerComplete) {&lt;br /&gt;
            args.numErrors += 1;&lt;br /&gt;
            if (makeVal !== &#039;&#039; || modelVal !== &#039;&#039; || serialVal !== &#039;&#039;) {&lt;br /&gt;
                alert(&#039;Maker identification requires all three: make, model, and serial number. Or provide a nickname instead.&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
                alert(&#039;Please provide either a nickname or maker identification (make, model, and serial number).&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // If no nickname, fill it from make/model/serial for page naming&lt;br /&gt;
        if (!hasNickname) {&lt;br /&gt;
            nickname.value = makeVal + &#039; &#039; + modelVal + &#039; &#039; + serialVal;&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 *&lt;br /&gt;
 * Layout:&lt;br /&gt;
 *   - corner logo (absolute-positioned upper-left of viewport,&lt;br /&gt;
 *     OUTSIDE all wiki wrappers — does not push content down)&lt;br /&gt;
 *   - non-sticky topbar (just nav) at top of body&lt;br /&gt;
 *   - hero block with title (top), then USER:Username kicker below,&lt;br /&gt;
 *     optional dek + meta&lt;br /&gt;
 *   - light/dark mode toggle (persisted in localStorage)&lt;br /&gt;
 *&lt;br /&gt;
 * Variant from HTML comment marker `pickipedia:variant=letter|masthead`&lt;br /&gt;
 * or category membership; default letter.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 2) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;/&#039;) === -1) return;&lt;br /&gt;
&lt;br /&gt;
  var slash    = title.indexOf(&#039;/&#039;);&lt;br /&gt;
  var username = title.slice(0, slash).replace(/_/g, &#039; &#039;);&lt;br /&gt;
  var subpage  = title.slice(slash + 1).replace(/_/g, &#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-userpost&#039;);&lt;br /&gt;
&lt;br /&gt;
  var variant = &#039;letter&#039;;&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var html = content.innerHTML || &#039;&#039;;&lt;br /&gt;
    var m = html.match(/pickipedia:variant\s*=\s*(letter|masthead)/i);&lt;br /&gt;
    if (m) variant = m[1].toLowerCase();&lt;br /&gt;
  }&lt;br /&gt;
  var cats = mw.config.get(&#039;wgCategories&#039;) || [];&lt;br /&gt;
  if (cats.indexOf(&#039;Masthead style&#039;) !== -1) variant = &#039;masthead&#039;;&lt;br /&gt;
  if (cats.indexOf(&#039;Letter style&#039;) !== -1) variant = &#039;letter&#039;;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-variant-&#039; + variant);&lt;br /&gt;
&lt;br /&gt;
  var STORAGE_KEY = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  var saved = null;&lt;br /&gt;
  try { saved = localStorage.getItem(STORAGE_KEY); } catch (e) {}&lt;br /&gt;
  if (saved === &#039;dark&#039;) body.classList.add(&#039;pickipedia-dark&#039;);&lt;br /&gt;
&lt;br /&gt;
  var LOGO_URL = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Corner logo: stand-alone body child, absolute-positioned. ----------&lt;br /&gt;
  var cornerLogo = document.createElement(&#039;a&#039;);&lt;br /&gt;
  cornerLogo.className = &#039;pp-corner-logo&#039;;&lt;br /&gt;
  cornerLogo.href = &#039;/wiki/Main_Page&#039;;&lt;br /&gt;
  cornerLogo.title = &#039;PickiPedia home&#039;;&lt;br /&gt;
  cornerLogo.innerHTML = &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_URL + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(cornerLogo, document.body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Topbar (nav only) ----------&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-topbar-nav&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(topbar, cornerLogo.nextSibling);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Hero ----------&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var dek = &#039;&#039;;&lt;br /&gt;
    var dekEl = content.querySelector(&#039;.pp-dek-source&#039;);&lt;br /&gt;
    if (dekEl) {&lt;br /&gt;
      dek = dekEl.innerHTML;&lt;br /&gt;
      dekEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var kickerHtml = &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;User:&#039; + username.replace(/ /g, &#039;_&#039;)) +&lt;br /&gt;
                     &#039;&amp;quot;&amp;gt;User:&#039; + escapeHtml(username) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    var kickerEl = content.querySelector(&#039;.pp-kicker-source&#039;);&lt;br /&gt;
    if (kickerEl) {&lt;br /&gt;
      kickerHtml = escapeHtml(kickerEl.textContent.trim());&lt;br /&gt;
      kickerEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var lastMod = &#039;&#039;;&lt;br /&gt;
    var lastModEl = document.getElementById(&#039;footer-info-lastmod&#039;);&lt;br /&gt;
    if (lastModEl) lastMod = lastModEl.textContent.replace(/^\s*This page was last (edited|modified) on\s*/i, &#039;&#039;).trim();&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
    hero.className = &#039;pickipedia-hero&#039;;&lt;br /&gt;
&lt;br /&gt;
    if (variant === &#039;masthead&#039;) {&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-topbar&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-topbar-rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-topbar-vol&amp;quot;&amp;gt;&#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-titlewrap&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
          (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Letter variant: title first, then kicker, then optional dek/meta.&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;Last edited &#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    content.parentNode.insertBefore(hero, content);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ---------- Light/dark toggle ----------&lt;br /&gt;
  var toggle = document.createElement(&#039;button&#039;);&lt;br /&gt;
  toggle.className = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  toggle.type = &#039;button&#039;;&lt;br /&gt;
  toggle.textContent = body.classList.contains(&#039;pickipedia-dark&#039;) ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
  toggle.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
    var dark = body.classList.toggle(&#039;pickipedia-dark&#039;);&lt;br /&gt;
    toggle.textContent = dark ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
    try { localStorage.setItem(STORAGE_KEY, dark ? &#039;dark&#039; : &#039;light&#039;); } catch (e) {}&lt;br /&gt;
  });&lt;br /&gt;
  document.body.appendChild(toggle);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Pickipedia — Show: page hero.&lt;br /&gt;
 *&lt;br /&gt;
 * For mainspace pages whose title starts with &amp;quot;Show:&amp;quot; (the legacy&lt;br /&gt;
 * mainspace convention used pre-namespace), adds .pickipedia-show&lt;br /&gt;
 * to body and absorbs Template:Show&#039;s infobox into a poster-style&lt;br /&gt;
 * hero. If the page does not use Template:Show only the body class&lt;br /&gt;
 * is added — the setlist typography in Common.css still applies.&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 0) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;Show:&#039;) !== 0) return;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-show&#039;);&lt;br /&gt;
&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (!content) return;&lt;br /&gt;
&lt;br /&gt;
  var infobox = content.querySelector(&#039;.show-infobox&#039;);&lt;br /&gt;
  if (!infobox) return;  // Bare show page — body class only.&lt;br /&gt;
&lt;br /&gt;
  // ---------- Pull fields out of the existing infobox ----------&lt;br /&gt;
  // Template:Show emits rows of &amp;lt;div&amp;gt;&amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; value&amp;lt;/div&amp;gt;&lt;br /&gt;
  // plus a top banner with &amp;quot;Artists at Venue&amp;quot; and optional image.&lt;br /&gt;
  function fieldValue(label) {&lt;br /&gt;
    var rows = infobox.querySelectorAll(&#039;div&#039;);&lt;br /&gt;
    for (var i = 0; i &amp;lt; rows.length; i++) {&lt;br /&gt;
      var s = rows[i].querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (!s) continue;&lt;br /&gt;
      var labelText = s.textContent.replace(/[:\s]*$/, &#039;&#039;).trim();&lt;br /&gt;
      if (labelText !== label) continue;&lt;br /&gt;
      var clone = rows[i].cloneNode(true);&lt;br /&gt;
      var strong = clone.querySelector(&#039;strong&#039;);&lt;br /&gt;
      if (strong) strong.remove();&lt;br /&gt;
      return clone.innerHTML.trim().replace(/^[\s:]+/, &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var artists  = fieldValue(&#039;Artists&#039;);&lt;br /&gt;
  var venue    = fieldValue(&#039;Venue&#039;);&lt;br /&gt;
  var showtime = fieldValue(&#039;Showtime&#039;);&lt;br /&gt;
  var tickets  = fieldValue(&#039;Tickets&#039;);&lt;br /&gt;
  var price    = fieldValue(&#039;Price&#039;);&lt;br /&gt;
  var ages     = fieldValue(&#039;Ages&#039;);&lt;br /&gt;
&lt;br /&gt;
  var imageImg = infobox.querySelector(&#039;img&#039;);&lt;br /&gt;
&lt;br /&gt;
  var status = &#039;&#039;;&lt;br /&gt;
  if (infobox.classList.contains(&#039;show-verified&#039;)) status = &#039;verified&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;bot-proposal&#039;)) status = &#039;proposed&#039;;&lt;br /&gt;
  else if (infobox.classList.contains(&#039;show-unverified&#039;)) status = &#039;unverified&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Build the poster hero ----------&lt;br /&gt;
  // Showtime is rendered by Template:Show as&lt;br /&gt;
  // [https://etherscan.io/block/N N] — pull the block number out and&lt;br /&gt;
  // format it with commas so the kicker reads &amp;quot;BLOCK 24,144,194&amp;quot;.&lt;br /&gt;
  function formatShowtime(htmlIn) {&lt;br /&gt;
    if (!htmlIn) return &#039;&#039;;&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;);&lt;br /&gt;
    tmp.innerHTML = htmlIn;&lt;br /&gt;
    var anchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    var blockNum = (anchor ? anchor.textContent : tmp.textContent).trim();&lt;br /&gt;
    var asInt = parseInt(blockNum.replace(/[^\d]/g, &#039;&#039;), 10);&lt;br /&gt;
    if (isNaN(asInt)) return blockNum;&lt;br /&gt;
    var formatted = asInt.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    var href = anchor ? anchor.href : &#039;&#039;;&lt;br /&gt;
    if (href) {&lt;br /&gt;
      return &#039;&amp;lt;a href=&amp;quot;&#039; + href + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Block &#039; + formatted + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    return &#039;Block &#039; + formatted;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var kickerBits = [];&lt;br /&gt;
  var showtimeHtml = formatShowtime(showtime);&lt;br /&gt;
  if (showtimeHtml) kickerBits.push(showtimeHtml);&lt;br /&gt;
&lt;br /&gt;
  var kickerHtml = kickerBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerBits.join(&#039;&amp;lt;span class=&amp;quot;pp-sep&amp;quot;&amp;gt;·&amp;lt;/span&amp;gt;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var venueHtml = venue ? &#039;&amp;lt;p class=&amp;quot;pp-venue&amp;quot;&amp;gt;at &#039; + venue + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var metaBits = [];&lt;br /&gt;
  if (price)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Price&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;$&#039; +&lt;br /&gt;
      escapeHtml(price.replace(/^\$/, &#039;&#039;)) + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  if (ages)&lt;br /&gt;
    metaBits.push(&#039;&amp;lt;span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-label&amp;quot;&amp;gt;Ages&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;pp-meta-value&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      ages + &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;);&lt;br /&gt;
  var metaHtml = metaBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;&#039; + metaBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var imageHtml = &#039;&#039;;&lt;br /&gt;
  if (imageImg) {&lt;br /&gt;
    imageHtml = &#039;&amp;lt;div class=&amp;quot;pp-image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;&#039; + imageImg.src +&lt;br /&gt;
      &#039;&amp;quot; alt=&amp;quot;&#039; + escapeHtml(imageImg.alt || &#039;&#039;) + &#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Tickets field is an anchor; surface its href as a poster action.&lt;br /&gt;
  var actionBits = [];&lt;br /&gt;
  if (tickets) {&lt;br /&gt;
    var tmp = document.createElement(&#039;div&#039;); tmp.innerHTML = tickets;&lt;br /&gt;
    var ticketAnchor = tmp.querySelector(&#039;a&#039;);&lt;br /&gt;
    if (ticketAnchor &amp;amp;&amp;amp; ticketAnchor.href) {&lt;br /&gt;
      actionBits.push(&#039;&amp;lt;a href=&amp;quot;&#039; + ticketAnchor.href +&lt;br /&gt;
        &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;Tickets&amp;lt;/a&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  var actionsHtml = actionBits.length&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-actions&amp;quot;&amp;gt;&#039; + actionBits.join(&#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var statusHtml = status&lt;br /&gt;
    ? &#039;&amp;lt;div class=&amp;quot;pp-status is-&#039; + status + &#039;&amp;quot;&amp;gt;&#039; + status + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  var titleHtml = artists || escapeHtml(title.replace(/^Show:\s*/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
  var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
  hero.className = &#039;show-poster&#039;;&lt;br /&gt;
  hero.innerHTML =&lt;br /&gt;
    statusHtml +&lt;br /&gt;
    kickerHtml +&lt;br /&gt;
    &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + titleHtml + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
    venueHtml +&lt;br /&gt;
    metaHtml +&lt;br /&gt;
    imageHtml +&lt;br /&gt;
    actionsHtml;&lt;br /&gt;
&lt;br /&gt;
  content.insertBefore(hero, content.firstChild);&lt;br /&gt;
  infobox.classList.add(&#039;is-absorbed&#039;);&lt;br /&gt;
  body.classList.add(&#039;has-show-hero&#039;);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Candidate:Common.css&amp;diff=5250</id>
		<title>Candidate:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Candidate:Common.css&amp;diff=5250"/>
		<updated>2026-06-02T18:52:46Z</updated>

		<summary type="html">&lt;p&gt;Magent: Staging full proposed Common.css for sysop review (new Show: styling at bottom)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* |status=proposed -- bot-staged; remove this line when promoting. */&lt;br /&gt;
/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo: flush to upper-left, fluid sized. ---------- */&lt;br /&gt;
.pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: clamp(60px, 9vw, 130px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar (nav only) — non-sticky, slim. ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
/* When the kicker follows the title (letter variant), give it a small&lt;br /&gt;
   gap so it reads as a byline. */&lt;br /&gt;
.pickipedia-hero h1.pp-title + .pp-kicker {&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 12px 0 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;max-width:800px&amp;quot;],&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;width:400px&amp;quot;] {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* On medium-narrow viewports the centered column would slide under&lt;br /&gt;
   the corner logo — push it right enough to clear. */&lt;br /&gt;
@media (min-width: 720px) and (max-width: 1100px) {&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
    margin-left: 160px;&lt;br /&gt;
    margin-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  bottom: 5px;&lt;br /&gt;
  right: 10px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive (small screens) ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-topbar { padding: 10px 16px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
    padding-left: max(24px, calc(9vw + 24px));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 10px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — Show: page styling&lt;br /&gt;
 *&lt;br /&gt;
 * Triggers when an article&#039;s title starts with &amp;quot;Show:&amp;quot; (legacy&lt;br /&gt;
 * mainspace convention, not a real namespace). Common.js adds&lt;br /&gt;
 * .pickipedia-show to body and absorbs Template:Show&#039;s infobox&lt;br /&gt;
 * into a poster-style hero; once absorbed the infobox is hidden.&lt;br /&gt;
 * Pages without Template:Show still get the setlist typography.&lt;br /&gt;
 *&lt;br /&gt;
 * Reuses the same paper/ink palette as .pickipedia-userpost so&lt;br /&gt;
 * shows and zine posts feel like the same publication.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Poster (hero block) ---------- */&lt;br /&gt;
.pickipedia-show .show-poster {&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  padding: 32px 36px 28px;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0 0 12px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  align-items: baseline;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-kicker .pp-sep { color: var(--pp-muted); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-size: 44px;&lt;br /&gt;
  line-height: 1.05;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 10px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-venue a { color: inherit; }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 16px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-label { opacity: 0.7; margin-right: 4px; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-meta .pp-meta-value { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-image { margin: 22px 0 0; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-image img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions {&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-wrap: wrap;&lt;br /&gt;
  gap: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.12em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-paper);&lt;br /&gt;
  background: var(--pp-accent);&lt;br /&gt;
  border: 1px solid var(--pp-accent);&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-actions a:hover {&lt;br /&gt;
  background: var(--pp-ink);&lt;br /&gt;
  border-color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .show-poster .pp-status {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 14px;&lt;br /&gt;
  right: 18px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-verified { color: #228b22; }&lt;br /&gt;
.pickipedia-show .show-poster .pp-status.is-proposed { color: #b8860b; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the original infobox once the hero has absorbed its data. */&lt;br /&gt;
.pickipedia-show .show-infobox.is-absorbed { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* Hide the slug-style firstHeading only when the hero has been built —&lt;br /&gt;
   bare Show: pages without Template:Show keep the heading so users&lt;br /&gt;
   aren&#039;t left with an untitled page. */&lt;br /&gt;
.pickipedia-show.has-show-hero #firstHeading,&lt;br /&gt;
.pickipedia-show.has-show-hero .mw-first-heading { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Setlist typography ---------- */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  letter-spacing: 0.22em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  margin: 32px 0 14px;&lt;br /&gt;
  padding-top: 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 .mw-editsection {&lt;br /&gt;
  font-family: var(--pp-sans);&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  letter-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-show .mw-parser-output ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0 0 16px;&lt;br /&gt;
  counter-reset: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  padding: 6px 0 6px 40px;&lt;br /&gt;
  border-bottom: 1px dotted var(--pp-rule);&lt;br /&gt;
  position: relative;&lt;br /&gt;
  counter-increment: setlist;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li::before {&lt;br /&gt;
  content: counter(setlist, decimal-leading-zero);&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  top: 8px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  letter-spacing: 0.05em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-show .mw-parser-output ul li:last-child { border-bottom: none; }&lt;br /&gt;
&lt;br /&gt;
/* Reset counter at every h2 so each set starts at 01. */&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 + ul,&lt;br /&gt;
.pickipedia-show .mw-parser-output h2 ~ ul:first-of-type { counter-reset: setlist; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-show .show-poster { padding: 22px 18px 18px; }&lt;br /&gt;
  .pickipedia-show .show-poster h1.pp-title { font-size: 30px; }&lt;br /&gt;
  .pickipedia-show .show-poster .pp-venue { font-size: 18px; }&lt;br /&gt;
  .pickipedia-show .mw-parser-output ul li { font-size: 17px; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5030</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5030"/>
		<updated>2026-04-29T04:18:47Z</updated>

		<summary type="html">&lt;p&gt;Magent: Cap video height (max-height:70vh, width:auto) so portrait videos don&amp;#039;t dominate the page (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo: flush to upper-left, fluid sized. ---------- */&lt;br /&gt;
.pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: clamp(60px, 9vw, 130px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar (nav only) — non-sticky, slim. ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
/* When the kicker follows the title (letter variant), give it a small&lt;br /&gt;
   gap so it reads as a byline. */&lt;br /&gt;
.pickipedia-hero h1.pp-title + .pp-kicker {&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 12px 0 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;max-width:800px&amp;quot;],&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;width:400px&amp;quot;] {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Cap video height so portrait sources (1080x1920) don&#039;t dominate the&lt;br /&gt;
   page. The HLS player JS sets video.style.width = &amp;quot;100%&amp;quot; inline; we&lt;br /&gt;
   override with width:auto so the natural aspect ratio is preserved&lt;br /&gt;
   when the height cap kicks in. */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video {&lt;br /&gt;
  max-height: 70vh !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  margin: 0 auto !important;&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* On medium-narrow viewports the centered column would slide under&lt;br /&gt;
   the corner logo — push it right enough to clear. */&lt;br /&gt;
@media (min-width: 720px) and (max-width: 1100px) {&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
    margin-left: 160px;&lt;br /&gt;
    margin-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  bottom: 5px;&lt;br /&gt;
  right: 10px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive (small screens) ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-topbar { padding: 10px 16px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
    padding-left: max(24px, calc(9vw + 24px));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 10px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5024</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5024"/>
		<updated>2026-04-29T04:03:00Z</updated>

		<summary type="html">&lt;p&gt;Magent: Logo flush to top:0 left:0; add space between title and kicker (which now follows title) (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo: flush to upper-left, fluid sized. ---------- */&lt;br /&gt;
.pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: clamp(60px, 9vw, 130px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar (nav only) — non-sticky, slim. ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
/* When the kicker follows the title (letter variant), give it a small&lt;br /&gt;
   gap so it reads as a byline. */&lt;br /&gt;
.pickipedia-hero h1.pp-title + .pp-kicker {&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 12px 0 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;max-width:800px&amp;quot;],&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;width:400px&amp;quot;] {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* On medium-narrow viewports the centered column would slide under&lt;br /&gt;
   the corner logo — push it right enough to clear. */&lt;br /&gt;
@media (min-width: 720px) and (max-width: 1100px) {&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
    margin-left: 160px;&lt;br /&gt;
    margin-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive (small screens) ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-topbar { padding: 10px 16px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
    padding-left: max(24px, calc(9vw + 24px));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 10px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5023</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5023"/>
		<updated>2026-04-29T04:01:52Z</updated>

		<summary type="html">&lt;p&gt;Magent: Letter variant: title above, kicker below (swap) (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
* Blue Railroad Submission - Date to Block Height Converter&lt;br /&gt;
* Adds a datepicker that converts dates to Ethereum block heights&lt;br /&gt;
* Also shows time ago for news templates&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    &lt;br /&gt;
    // Only run on the Blue Railroad Submission form&lt;br /&gt;
    if (!document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;)) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Reference point: known block and timestamp&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    const AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
    &lt;br /&gt;
    // Get current block from footer (format: &amp;quot;24,328,442&amp;quot;)&lt;br /&gt;
    function getCurrentBlockFromFooter() {&lt;br /&gt;
        const footerLink = document.querySelector(&#039;a[href*=&amp;quot;etherscan.io/block/&amp;quot;]&#039;);&lt;br /&gt;
        if (footerLink) {&lt;br /&gt;
            const match = footerLink.href.match(/block\/(\d+)/);&lt;br /&gt;
            if (match) return parseInt(match[1]);&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Calculate block height from date&lt;br /&gt;
    function dateToBlockHeight(targetDate, refBlock, refTimestamp) {&lt;br /&gt;
        const targetTimestamp = targetDate.getTime() / 1000;&lt;br /&gt;
        const secondsDiff = refTimestamp - targetTimestamp;&lt;br /&gt;
        const blocksDiff = Math.round(secondsDiff / AVG_BLOCK_TIME);&lt;br /&gt;
        return refBlock - blocksDiff;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Add the datepicker UI&lt;br /&gt;
    function addDatePicker() {&lt;br /&gt;
        const blockInput = document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;);&lt;br /&gt;
        if (!blockInput) return;&lt;br /&gt;
        &lt;br /&gt;
        const container = document.createElement(&#039;div&#039;);&lt;br /&gt;
        container.style.marginTop = &#039;8px&#039;;&lt;br /&gt;
        container.innerHTML = `&lt;br /&gt;
            &amp;lt;label style=&amp;quot;display: block; margin-bottom: 4px; font-size: 0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
                Or pick a date/time:&lt;br /&gt;
            &amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;datetime-local&amp;quot; id=&amp;quot;br-datepicker&amp;quot; style=&amp;quot;padding: 4px; margin-right: 8px;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;br-convert-btn&amp;quot; style=&amp;quot;padding: 4px 12px; cursor: pointer;&amp;quot;&amp;gt;&lt;br /&gt;
                Convert to Block&lt;br /&gt;
            &amp;lt;/button&amp;gt;&lt;br /&gt;
            &amp;lt;span id=&amp;quot;br-status&amp;quot; style=&amp;quot;margin-left: 8px; font-size: 0.9em; color: #666;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        `;&lt;br /&gt;
        &lt;br /&gt;
        blockInput.parentNode.appendChild(container);&lt;br /&gt;
        &lt;br /&gt;
        const datePicker = document.getElementById(&#039;br-datepicker&#039;);&lt;br /&gt;
        const convertBtn = document.getElementById(&#039;br-convert-btn&#039;);&lt;br /&gt;
        const status = document.getElementById(&#039;br-status&#039;);&lt;br /&gt;
        &lt;br /&gt;
        // Set default to now&lt;br /&gt;
        const now = new Date();&lt;br /&gt;
        datePicker.value = now.toISOString().slice(0, 16);&lt;br /&gt;
        &lt;br /&gt;
        convertBtn.addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
            const selectedDate = new Date(datePicker.value);&lt;br /&gt;
            if (isNaN(selectedDate.getTime())) {&lt;br /&gt;
                status.textContent = &#039;Invalid date&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentBlock = getCurrentBlockFromFooter();&lt;br /&gt;
            if (!currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Could not find reference block&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentTimestamp = Date.now() / 1000;&lt;br /&gt;
            const estimatedBlock = dateToBlockHeight(selectedDate, currentBlock, currentTimestamp);&lt;br /&gt;
            &lt;br /&gt;
            if (estimatedBlock &amp;gt; currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Date is in the future!&#039;;&lt;br /&gt;
                status.style.color = &#039;orange&#039;;&lt;br /&gt;
            } else {&lt;br /&gt;
                status.textContent = &#039;~estimated&#039;;&lt;br /&gt;
                status.style.color = &#039;green&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            blockInput.value = estimatedBlock;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Run when DOM is ready&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, addDatePicker);&lt;br /&gt;
    } else {&lt;br /&gt;
        addDatePicker();&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TimeAgo — shows &amp;quot;X blocks ago&amp;quot; for transcluded templates.&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext:&lt;br /&gt;
 *   &amp;lt;span class=&amp;quot;timeago&amp;quot; data-lastmod-page=&amp;quot;Template:NewsShorts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Fetches the last revision timestamp from the API and renders&lt;br /&gt;
 * a block-based relative time string using Ethereum block heights.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    var AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
&lt;br /&gt;
    var spans = document.querySelectorAll(&#039;.timeago[data-lastmod-page]&#039;);&lt;br /&gt;
    if (!spans.length) return;&lt;br /&gt;
&lt;br /&gt;
    // Format number with commas (e.g., 1234567 -&amp;gt; &amp;quot;1,234,567&amp;quot;)&lt;br /&gt;
    function formatNumber(num) {&lt;br /&gt;
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Collect unique page titles&lt;br /&gt;
    var titles = [];&lt;br /&gt;
    spans.forEach(function(span) {&lt;br /&gt;
        var t = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
        if (t &amp;amp;&amp;amp; titles.indexOf(t) === -1) titles.push(t);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Batch query the API (up to 50 titles per request)&lt;br /&gt;
    var api = mw.config.get(&#039;wgScriptPath&#039;) + &#039;/api.php&#039;;&lt;br /&gt;
    var url = api + &#039;?action=query&amp;amp;prop=revisions&amp;amp;rvprop=timestamp&amp;amp;format=json&amp;amp;titles=&#039; +&lt;br /&gt;
        encodeURIComponent(titles.join(&#039;|&#039;));&lt;br /&gt;
&lt;br /&gt;
    fetch(url).then(function(r) { return r.json(); }).then(function(data) {&lt;br /&gt;
        var pages = data.query &amp;amp;&amp;amp; data.query.pages || {};&lt;br /&gt;
        var timestamps = {};&lt;br /&gt;
&lt;br /&gt;
        Object.keys(pages).forEach(function(id) {&lt;br /&gt;
            var page = pages[id];&lt;br /&gt;
            if (page.revisions &amp;amp;&amp;amp; page.revisions[0]) {&lt;br /&gt;
                timestamps[page.title] = new Date(page.revisions[0].timestamp);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        spans.forEach(function(span) {&lt;br /&gt;
            var title = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
            var ts = timestamps[title];&lt;br /&gt;
            if (!ts) {&lt;br /&gt;
                span.textContent = &#039;&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            span.textContent = formatBlocksAgo(ts);&lt;br /&gt;
            span.title = ts.toLocaleString();&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    function formatBlocksAgo(date) {&lt;br /&gt;
        var secondsAgo = Math.floor((Date.now() - date.getTime()) / 1000);&lt;br /&gt;
        var blocksAgo = Math.round(secondsAgo / AVG_BLOCK_TIME);&lt;br /&gt;
&lt;br /&gt;
        if (blocksAgo &amp;lt; 1) {&lt;br /&gt;
            return &#039;this block&#039;;&lt;br /&gt;
        } else if (blocksAgo === 1) {&lt;br /&gt;
            return &#039;1 block ago&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            return formatNumber(blocksAgo) + &#039; blocks ago&#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * HLS Video Player - Initializes HLS.js for IPFS-hosted videos&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext (via Template:HLSVideo):&lt;br /&gt;
 *   &amp;lt;div class=&amp;quot;hls-video-player&amp;quot; data-cid=&amp;quot;QmXet6...&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * The gadget loads hls.js and initializes players for any element&lt;br /&gt;
 * with the hls-video-player class and a data-cid attribute.&lt;br /&gt;
 *&lt;br /&gt;
 * Supports both HLS streams (CID/master.m3u8) and raw video files.&lt;br /&gt;
 * Tries HLS first; if the manifest 404s, falls back to direct playback.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    var IPFS_GATEWAY = &#039;https://ipfs.delivery-kid.cryptograss.live/ipfs&#039;;&lt;br /&gt;
    var HLS_JS_URL = &#039;https://cdn.jsdelivr.net/npm/hls.js@latest&#039;;&lt;br /&gt;
    var hlsLoadPromise = null;&lt;br /&gt;
&lt;br /&gt;
    // CIDv1 (bafy...) is Base32 lowercase, but MediaWiki capitalizes page titles.&lt;br /&gt;
    // CIDv0 (Qm...) is Base58 case-sensitive — must not be lowercased.&lt;br /&gt;
    function normalizeCid(cid) {&lt;br /&gt;
        if (cid &amp;amp;&amp;amp; cid.substring(0, 4) === &#039;Bafy&#039;) {&lt;br /&gt;
            return cid.toLowerCase();&lt;br /&gt;
        }&lt;br /&gt;
        return cid;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function loadHls() {&lt;br /&gt;
        if (typeof Hls !== &#039;undefined&#039;) {&lt;br /&gt;
            return Promise.resolve();&lt;br /&gt;
        }&lt;br /&gt;
        if (hlsLoadPromise) {&lt;br /&gt;
            return hlsLoadPromise;&lt;br /&gt;
        }&lt;br /&gt;
        hlsLoadPromise = new Promise(function(resolve) {&lt;br /&gt;
            var script = document.createElement(&#039;script&#039;);&lt;br /&gt;
            script.src = HLS_JS_URL;&lt;br /&gt;
            script.onload = resolve;&lt;br /&gt;
            document.head.appendChild(script);&lt;br /&gt;
        });&lt;br /&gt;
        return hlsLoadPromise;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayers() {&lt;br /&gt;
        var containers = document.querySelectorAll(&#039;.hls-video-player[data-cid]:not([data-initialized])&#039;);&lt;br /&gt;
        if (!containers.length) return;&lt;br /&gt;
&lt;br /&gt;
        // Mark ALL containers immediately to prevent race conditions&lt;br /&gt;
        containers.forEach(function(c) {&lt;br /&gt;
            c.setAttribute(&#039;data-initialized&#039;, &#039;true&#039;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Then load hls.js and initialize&lt;br /&gt;
        loadHls().then(function() {&lt;br /&gt;
            containers.forEach(initPlayer);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function createVideoElement(width, maxWidth) {&lt;br /&gt;
        var video = document.createElement(&#039;video&#039;);&lt;br /&gt;
        video.controls = true;&lt;br /&gt;
        video.playsInline = true;&lt;br /&gt;
        video.style.width = width;&lt;br /&gt;
        video.style.maxWidth = maxWidth;&lt;br /&gt;
        video.style.backgroundColor = &#039;#000&#039;;&lt;br /&gt;
        video.style.display = &#039;block&#039;;&lt;br /&gt;
        return video;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fallbackToDirectVideo(container, cid, width, maxWidth) {&lt;br /&gt;
        // CID is a raw video file, not an HLS stream — play directly&lt;br /&gt;
        var directUrl = IPFS_GATEWAY + &#039;/&#039; + normalizeCid(cid);&lt;br /&gt;
        container.innerHTML = &#039;&#039;;&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        video.src = directUrl;&lt;br /&gt;
        video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
            container.innerHTML = &#039;&amp;lt;p style=&amp;quot;color: red; padding: 1em;&amp;quot;&amp;gt;Error loading video. The IPFS content may not be available.&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
        });&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayer(container) {&lt;br /&gt;
        var cid = container.getAttribute(&#039;data-cid&#039;);&lt;br /&gt;
        var normalCid = normalizeCid(cid);&lt;br /&gt;
        var width = container.getAttribute(&#039;data-width&#039;) || &#039;100%&#039;;&lt;br /&gt;
        var maxWidth = container.getAttribute(&#039;data-max-width&#039;) || &#039;800px&#039;;&lt;br /&gt;
        &lt;br /&gt;
        var hlsSrc = IPFS_GATEWAY + &#039;/&#039; + normalCid + &#039;/master.m3u8&#039;;&lt;br /&gt;
&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
&lt;br /&gt;
        if (video.canPlayType(&#039;application/vnd.apple.mpegurl&#039;)) {&lt;br /&gt;
            // Safari native HLS — try HLS first, fall back on error&lt;br /&gt;
            video.src = hlsSrc;&lt;br /&gt;
            video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
                fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
            });&lt;br /&gt;
        } else if (typeof Hls !== &#039;undefined&#039; &amp;amp;&amp;amp; Hls.isSupported()) {&lt;br /&gt;
            var hls = new Hls();&lt;br /&gt;
            hls.loadSource(hlsSrc);&lt;br /&gt;
            hls.attachMedia(video);&lt;br /&gt;
            hls.on(Hls.Events.ERROR, function(event, data) {&lt;br /&gt;
                if (data.fatal) {&lt;br /&gt;
                    // HLS failed (likely no master.m3u8) — try direct video&lt;br /&gt;
                    hls.destroy();&lt;br /&gt;
                    fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            // No HLS support — try direct video&lt;br /&gt;
            fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, initPlayers);&lt;br /&gt;
    } else {&lt;br /&gt;
        initPlayers();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== &#039;undefined&#039; &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function($content) {&lt;br /&gt;
            initPlayers();&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
/**&lt;br /&gt;
 * Instrument form — validation + page name computation (v24772700)&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    console.log(&#039;PickiPedia Common.js instrument module v24772700 loaded&#039;);&lt;br /&gt;
&lt;br /&gt;
    mw.hook(&#039;pf.formValidation&#039;).add(function(args) {&lt;br /&gt;
        var nickname = document.querySelector(&#039;input[name=&amp;quot;Instrument[nickname]&amp;quot;]&#039;);&lt;br /&gt;
        if (!nickname) return;&lt;br /&gt;
&lt;br /&gt;
        var make = document.querySelector(&#039;input[name=&amp;quot;Instrument[make]&amp;quot;]&#039;);&lt;br /&gt;
        var model = document.querySelector(&#039;input[name=&amp;quot;Instrument[model]&amp;quot;]&#039;);&lt;br /&gt;
        var serial = document.querySelector(&#039;input[name=&amp;quot;Instrument[serial]&amp;quot;]&#039;);&lt;br /&gt;
&lt;br /&gt;
        var nickVal = nickname.value.trim();&lt;br /&gt;
        var makeVal = make ? make.value.trim() : &#039;&#039;;&lt;br /&gt;
        var modelVal = model ? model.value.trim() : &#039;&#039;;&lt;br /&gt;
        var serialVal = serial ? serial.value.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var hasNickname = nickVal !== &#039;&#039;;&lt;br /&gt;
        var hasMakerComplete = makeVal !== &#039;&#039; &amp;amp;&amp;amp; modelVal !== &#039;&#039; &amp;amp;&amp;amp; serialVal !== &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (!hasNickname &amp;amp;&amp;amp; !hasMakerComplete) {&lt;br /&gt;
            args.numErrors += 1;&lt;br /&gt;
            if (makeVal !== &#039;&#039; || modelVal !== &#039;&#039; || serialVal !== &#039;&#039;) {&lt;br /&gt;
                alert(&#039;Maker identification requires all three: make, model, and serial number. Or provide a nickname instead.&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
                alert(&#039;Please provide either a nickname or maker identification (make, model, and serial number).&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // If no nickname, fill it from make/model/serial for page naming&lt;br /&gt;
        if (!hasNickname) {&lt;br /&gt;
            nickname.value = makeVal + &#039; &#039; + modelVal + &#039; &#039; + serialVal;&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 *&lt;br /&gt;
 * Layout:&lt;br /&gt;
 *   - corner logo (absolute-positioned upper-left of viewport,&lt;br /&gt;
 *     OUTSIDE all wiki wrappers — does not push content down)&lt;br /&gt;
 *   - non-sticky topbar (just nav) at top of body&lt;br /&gt;
 *   - hero block with title (top), then USER:Username kicker below,&lt;br /&gt;
 *     optional dek + meta&lt;br /&gt;
 *   - light/dark mode toggle (persisted in localStorage)&lt;br /&gt;
 *&lt;br /&gt;
 * Variant from HTML comment marker `pickipedia:variant=letter|masthead`&lt;br /&gt;
 * or category membership; default letter.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 2) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;/&#039;) === -1) return;&lt;br /&gt;
&lt;br /&gt;
  var slash    = title.indexOf(&#039;/&#039;);&lt;br /&gt;
  var username = title.slice(0, slash).replace(/_/g, &#039; &#039;);&lt;br /&gt;
  var subpage  = title.slice(slash + 1).replace(/_/g, &#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-userpost&#039;);&lt;br /&gt;
&lt;br /&gt;
  var variant = &#039;letter&#039;;&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var html = content.innerHTML || &#039;&#039;;&lt;br /&gt;
    var m = html.match(/pickipedia:variant\s*=\s*(letter|masthead)/i);&lt;br /&gt;
    if (m) variant = m[1].toLowerCase();&lt;br /&gt;
  }&lt;br /&gt;
  var cats = mw.config.get(&#039;wgCategories&#039;) || [];&lt;br /&gt;
  if (cats.indexOf(&#039;Masthead style&#039;) !== -1) variant = &#039;masthead&#039;;&lt;br /&gt;
  if (cats.indexOf(&#039;Letter style&#039;) !== -1) variant = &#039;letter&#039;;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-variant-&#039; + variant);&lt;br /&gt;
&lt;br /&gt;
  var STORAGE_KEY = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  var saved = null;&lt;br /&gt;
  try { saved = localStorage.getItem(STORAGE_KEY); } catch (e) {}&lt;br /&gt;
  if (saved === &#039;dark&#039;) body.classList.add(&#039;pickipedia-dark&#039;);&lt;br /&gt;
&lt;br /&gt;
  var LOGO_URL = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Corner logo: stand-alone body child, absolute-positioned. ----------&lt;br /&gt;
  var cornerLogo = document.createElement(&#039;a&#039;);&lt;br /&gt;
  cornerLogo.className = &#039;pp-corner-logo&#039;;&lt;br /&gt;
  cornerLogo.href = &#039;/wiki/Main_Page&#039;;&lt;br /&gt;
  cornerLogo.title = &#039;PickiPedia home&#039;;&lt;br /&gt;
  cornerLogo.innerHTML = &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_URL + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(cornerLogo, document.body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Topbar (nav only) ----------&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-topbar-nav&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(topbar, cornerLogo.nextSibling);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Hero ----------&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var dek = &#039;&#039;;&lt;br /&gt;
    var dekEl = content.querySelector(&#039;.pp-dek-source&#039;);&lt;br /&gt;
    if (dekEl) {&lt;br /&gt;
      dek = dekEl.innerHTML;&lt;br /&gt;
      dekEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var kickerHtml = &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;User:&#039; + username.replace(/ /g, &#039;_&#039;)) +&lt;br /&gt;
                     &#039;&amp;quot;&amp;gt;User:&#039; + escapeHtml(username) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    var kickerEl = content.querySelector(&#039;.pp-kicker-source&#039;);&lt;br /&gt;
    if (kickerEl) {&lt;br /&gt;
      kickerHtml = escapeHtml(kickerEl.textContent.trim());&lt;br /&gt;
      kickerEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var lastMod = &#039;&#039;;&lt;br /&gt;
    var lastModEl = document.getElementById(&#039;footer-info-lastmod&#039;);&lt;br /&gt;
    if (lastModEl) lastMod = lastModEl.textContent.replace(/^\s*This page was last (edited|modified) on\s*/i, &#039;&#039;).trim();&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
    hero.className = &#039;pickipedia-hero&#039;;&lt;br /&gt;
&lt;br /&gt;
    if (variant === &#039;masthead&#039;) {&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-topbar&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-topbar-rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-topbar-vol&amp;quot;&amp;gt;&#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-titlewrap&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
          (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Letter variant: title first, then kicker, then optional dek/meta.&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;Last edited &#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    content.parentNode.insertBefore(hero, content);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ---------- Light/dark toggle ----------&lt;br /&gt;
  var toggle = document.createElement(&#039;button&#039;);&lt;br /&gt;
  toggle.className = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  toggle.type = &#039;button&#039;;&lt;br /&gt;
  toggle.textContent = body.classList.contains(&#039;pickipedia-dark&#039;) ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
  toggle.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
    var dark = body.classList.toggle(&#039;pickipedia-dark&#039;);&lt;br /&gt;
    toggle.textContent = dark ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
    try { localStorage.setItem(STORAGE_KEY, dark ? &#039;dark&#039; : &#039;light&#039;); } catch (e) {}&lt;br /&gt;
  });&lt;br /&gt;
  document.body.appendChild(toggle);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5022</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5022"/>
		<updated>2026-04-29T03:54:25Z</updated>

		<summary type="html">&lt;p&gt;Magent: Logo: smaller and fluid-sized via clamp; add hero/content left padding so they clear the logo (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo: absolute-positioned upper-left, fluid-sized&lt;br /&gt;
   so it shrinks proportionally at narrower viewports and never crowds&lt;br /&gt;
   the content. ---------- */&lt;br /&gt;
.pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 16px;&lt;br /&gt;
  left: 16px;&lt;br /&gt;
  width: clamp(60px, 9vw, 130px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar (nav only) — non-sticky, slim. ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;max-width:800px&amp;quot;],&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;width:400px&amp;quot;] {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* On medium-narrow viewports, the logo and the centered reading column&lt;br /&gt;
   start to overlap (logo extends to ~16px+130px=~146px from the left,&lt;br /&gt;
   while the centered column&#039;s left edge moves further left as the&lt;br /&gt;
   viewport narrows). Push the hero/content right enough to clear the&lt;br /&gt;
   logo. */&lt;br /&gt;
@media (min-width: 720px) and (max-width: 1100px) {&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
    margin-left: 160px;&lt;br /&gt;
    margin-right: 24px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive (small screens) ---------- */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .pickipedia-topbar { padding: 10px 16px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  /* Logo top-left, smaller, with hero padded to clear it. */&lt;br /&gt;
  .pp-corner-logo { top: 10px; left: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
    padding-left: max(24px, calc(9vw + 24px));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 10px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5021</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5021"/>
		<updated>2026-04-29T03:48:40Z</updated>

		<summary type="html">&lt;p&gt;Magent: Corner logo as absolute element (won&amp;#039;t push content); topbar slim with just nav (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  position: relative; /* anchor for the absolute corner logo */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Corner logo: absolute-positioned upper-left of the body&lt;br /&gt;
   so it doesn&#039;t take any space in the document flow — content flows&lt;br /&gt;
   underneath it. The topbar / hero get padding to keep their content&lt;br /&gt;
   from sliding under it. ---------- */&lt;br /&gt;
.pp-corner-logo {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 16px;&lt;br /&gt;
  left: 16px;&lt;br /&gt;
  width: 180px;&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pp-corner-logo img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar (nav only) — non-sticky, slim. ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  padding: 14px 24px;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;max-width:800px&amp;quot;],&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;width:400px&amp;quot;] {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar { padding: 10px 16px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pp-corner-logo { width: 90px; top: 10px; left: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 10px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5020</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5020"/>
		<updated>2026-04-29T03:47:34Z</updated>

		<summary type="html">&lt;p&gt;Magent: Logo as separate body-level element, absolute-positioned upper-left; topbar keeps only nav (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
* Blue Railroad Submission - Date to Block Height Converter&lt;br /&gt;
* Adds a datepicker that converts dates to Ethereum block heights&lt;br /&gt;
* Also shows time ago for news templates&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    &lt;br /&gt;
    // Only run on the Blue Railroad Submission form&lt;br /&gt;
    if (!document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;)) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Reference point: known block and timestamp&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    const AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
    &lt;br /&gt;
    // Get current block from footer (format: &amp;quot;24,328,442&amp;quot;)&lt;br /&gt;
    function getCurrentBlockFromFooter() {&lt;br /&gt;
        const footerLink = document.querySelector(&#039;a[href*=&amp;quot;etherscan.io/block/&amp;quot;]&#039;);&lt;br /&gt;
        if (footerLink) {&lt;br /&gt;
            const match = footerLink.href.match(/block\/(\d+)/);&lt;br /&gt;
            if (match) return parseInt(match[1]);&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Calculate block height from date&lt;br /&gt;
    function dateToBlockHeight(targetDate, refBlock, refTimestamp) {&lt;br /&gt;
        const targetTimestamp = targetDate.getTime() / 1000;&lt;br /&gt;
        const secondsDiff = refTimestamp - targetTimestamp;&lt;br /&gt;
        const blocksDiff = Math.round(secondsDiff / AVG_BLOCK_TIME);&lt;br /&gt;
        return refBlock - blocksDiff;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Add the datepicker UI&lt;br /&gt;
    function addDatePicker() {&lt;br /&gt;
        const blockInput = document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;);&lt;br /&gt;
        if (!blockInput) return;&lt;br /&gt;
        &lt;br /&gt;
        const container = document.createElement(&#039;div&#039;);&lt;br /&gt;
        container.style.marginTop = &#039;8px&#039;;&lt;br /&gt;
        container.innerHTML = `&lt;br /&gt;
            &amp;lt;label style=&amp;quot;display: block; margin-bottom: 4px; font-size: 0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
                Or pick a date/time:&lt;br /&gt;
            &amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;datetime-local&amp;quot; id=&amp;quot;br-datepicker&amp;quot; style=&amp;quot;padding: 4px; margin-right: 8px;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;br-convert-btn&amp;quot; style=&amp;quot;padding: 4px 12px; cursor: pointer;&amp;quot;&amp;gt;&lt;br /&gt;
                Convert to Block&lt;br /&gt;
            &amp;lt;/button&amp;gt;&lt;br /&gt;
            &amp;lt;span id=&amp;quot;br-status&amp;quot; style=&amp;quot;margin-left: 8px; font-size: 0.9em; color: #666;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        `;&lt;br /&gt;
        &lt;br /&gt;
        blockInput.parentNode.appendChild(container);&lt;br /&gt;
        &lt;br /&gt;
        const datePicker = document.getElementById(&#039;br-datepicker&#039;);&lt;br /&gt;
        const convertBtn = document.getElementById(&#039;br-convert-btn&#039;);&lt;br /&gt;
        const status = document.getElementById(&#039;br-status&#039;);&lt;br /&gt;
        &lt;br /&gt;
        // Set default to now&lt;br /&gt;
        const now = new Date();&lt;br /&gt;
        datePicker.value = now.toISOString().slice(0, 16);&lt;br /&gt;
        &lt;br /&gt;
        convertBtn.addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
            const selectedDate = new Date(datePicker.value);&lt;br /&gt;
            if (isNaN(selectedDate.getTime())) {&lt;br /&gt;
                status.textContent = &#039;Invalid date&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentBlock = getCurrentBlockFromFooter();&lt;br /&gt;
            if (!currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Could not find reference block&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentTimestamp = Date.now() / 1000;&lt;br /&gt;
            const estimatedBlock = dateToBlockHeight(selectedDate, currentBlock, currentTimestamp);&lt;br /&gt;
            &lt;br /&gt;
            if (estimatedBlock &amp;gt; currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Date is in the future!&#039;;&lt;br /&gt;
                status.style.color = &#039;orange&#039;;&lt;br /&gt;
            } else {&lt;br /&gt;
                status.textContent = &#039;~estimated&#039;;&lt;br /&gt;
                status.style.color = &#039;green&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            blockInput.value = estimatedBlock;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Run when DOM is ready&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, addDatePicker);&lt;br /&gt;
    } else {&lt;br /&gt;
        addDatePicker();&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TimeAgo — shows &amp;quot;X blocks ago&amp;quot; for transcluded templates.&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext:&lt;br /&gt;
 *   &amp;lt;span class=&amp;quot;timeago&amp;quot; data-lastmod-page=&amp;quot;Template:NewsShorts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Fetches the last revision timestamp from the API and renders&lt;br /&gt;
 * a block-based relative time string using Ethereum block heights.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    var AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
&lt;br /&gt;
    var spans = document.querySelectorAll(&#039;.timeago[data-lastmod-page]&#039;);&lt;br /&gt;
    if (!spans.length) return;&lt;br /&gt;
&lt;br /&gt;
    // Format number with commas (e.g., 1234567 -&amp;gt; &amp;quot;1,234,567&amp;quot;)&lt;br /&gt;
    function formatNumber(num) {&lt;br /&gt;
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Collect unique page titles&lt;br /&gt;
    var titles = [];&lt;br /&gt;
    spans.forEach(function(span) {&lt;br /&gt;
        var t = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
        if (t &amp;amp;&amp;amp; titles.indexOf(t) === -1) titles.push(t);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Batch query the API (up to 50 titles per request)&lt;br /&gt;
    var api = mw.config.get(&#039;wgScriptPath&#039;) + &#039;/api.php&#039;;&lt;br /&gt;
    var url = api + &#039;?action=query&amp;amp;prop=revisions&amp;amp;rvprop=timestamp&amp;amp;format=json&amp;amp;titles=&#039; +&lt;br /&gt;
        encodeURIComponent(titles.join(&#039;|&#039;));&lt;br /&gt;
&lt;br /&gt;
    fetch(url).then(function(r) { return r.json(); }).then(function(data) {&lt;br /&gt;
        var pages = data.query &amp;amp;&amp;amp; data.query.pages || {};&lt;br /&gt;
        var timestamps = {};&lt;br /&gt;
&lt;br /&gt;
        Object.keys(pages).forEach(function(id) {&lt;br /&gt;
            var page = pages[id];&lt;br /&gt;
            if (page.revisions &amp;amp;&amp;amp; page.revisions[0]) {&lt;br /&gt;
                timestamps[page.title] = new Date(page.revisions[0].timestamp);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        spans.forEach(function(span) {&lt;br /&gt;
            var title = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
            var ts = timestamps[title];&lt;br /&gt;
            if (!ts) {&lt;br /&gt;
                span.textContent = &#039;&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            span.textContent = formatBlocksAgo(ts);&lt;br /&gt;
            span.title = ts.toLocaleString();&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    function formatBlocksAgo(date) {&lt;br /&gt;
        var secondsAgo = Math.floor((Date.now() - date.getTime()) / 1000);&lt;br /&gt;
        var blocksAgo = Math.round(secondsAgo / AVG_BLOCK_TIME);&lt;br /&gt;
&lt;br /&gt;
        if (blocksAgo &amp;lt; 1) {&lt;br /&gt;
            return &#039;this block&#039;;&lt;br /&gt;
        } else if (blocksAgo === 1) {&lt;br /&gt;
            return &#039;1 block ago&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            return formatNumber(blocksAgo) + &#039; blocks ago&#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * HLS Video Player - Initializes HLS.js for IPFS-hosted videos&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext (via Template:HLSVideo):&lt;br /&gt;
 *   &amp;lt;div class=&amp;quot;hls-video-player&amp;quot; data-cid=&amp;quot;QmXet6...&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * The gadget loads hls.js and initializes players for any element&lt;br /&gt;
 * with the hls-video-player class and a data-cid attribute.&lt;br /&gt;
 *&lt;br /&gt;
 * Supports both HLS streams (CID/master.m3u8) and raw video files.&lt;br /&gt;
 * Tries HLS first; if the manifest 404s, falls back to direct playback.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    var IPFS_GATEWAY = &#039;https://ipfs.delivery-kid.cryptograss.live/ipfs&#039;;&lt;br /&gt;
    var HLS_JS_URL = &#039;https://cdn.jsdelivr.net/npm/hls.js@latest&#039;;&lt;br /&gt;
    var hlsLoadPromise = null;&lt;br /&gt;
&lt;br /&gt;
    // CIDv1 (bafy...) is Base32 lowercase, but MediaWiki capitalizes page titles.&lt;br /&gt;
    // CIDv0 (Qm...) is Base58 case-sensitive — must not be lowercased.&lt;br /&gt;
    function normalizeCid(cid) {&lt;br /&gt;
        if (cid &amp;amp;&amp;amp; cid.substring(0, 4) === &#039;Bafy&#039;) {&lt;br /&gt;
            return cid.toLowerCase();&lt;br /&gt;
        }&lt;br /&gt;
        return cid;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function loadHls() {&lt;br /&gt;
        if (typeof Hls !== &#039;undefined&#039;) {&lt;br /&gt;
            return Promise.resolve();&lt;br /&gt;
        }&lt;br /&gt;
        if (hlsLoadPromise) {&lt;br /&gt;
            return hlsLoadPromise;&lt;br /&gt;
        }&lt;br /&gt;
        hlsLoadPromise = new Promise(function(resolve) {&lt;br /&gt;
            var script = document.createElement(&#039;script&#039;);&lt;br /&gt;
            script.src = HLS_JS_URL;&lt;br /&gt;
            script.onload = resolve;&lt;br /&gt;
            document.head.appendChild(script);&lt;br /&gt;
        });&lt;br /&gt;
        return hlsLoadPromise;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayers() {&lt;br /&gt;
        var containers = document.querySelectorAll(&#039;.hls-video-player[data-cid]:not([data-initialized])&#039;);&lt;br /&gt;
        if (!containers.length) return;&lt;br /&gt;
&lt;br /&gt;
        // Mark ALL containers immediately to prevent race conditions&lt;br /&gt;
        containers.forEach(function(c) {&lt;br /&gt;
            c.setAttribute(&#039;data-initialized&#039;, &#039;true&#039;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Then load hls.js and initialize&lt;br /&gt;
        loadHls().then(function() {&lt;br /&gt;
            containers.forEach(initPlayer);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function createVideoElement(width, maxWidth) {&lt;br /&gt;
        var video = document.createElement(&#039;video&#039;);&lt;br /&gt;
        video.controls = true;&lt;br /&gt;
        video.playsInline = true;&lt;br /&gt;
        video.style.width = width;&lt;br /&gt;
        video.style.maxWidth = maxWidth;&lt;br /&gt;
        video.style.backgroundColor = &#039;#000&#039;;&lt;br /&gt;
        video.style.display = &#039;block&#039;;&lt;br /&gt;
        return video;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fallbackToDirectVideo(container, cid, width, maxWidth) {&lt;br /&gt;
        // CID is a raw video file, not an HLS stream — play directly&lt;br /&gt;
        var directUrl = IPFS_GATEWAY + &#039;/&#039; + normalizeCid(cid);&lt;br /&gt;
        container.innerHTML = &#039;&#039;;&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        video.src = directUrl;&lt;br /&gt;
        video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
            container.innerHTML = &#039;&amp;lt;p style=&amp;quot;color: red; padding: 1em;&amp;quot;&amp;gt;Error loading video. The IPFS content may not be available.&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
        });&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayer(container) {&lt;br /&gt;
        var cid = container.getAttribute(&#039;data-cid&#039;);&lt;br /&gt;
        var normalCid = normalizeCid(cid);&lt;br /&gt;
        var width = container.getAttribute(&#039;data-width&#039;) || &#039;100%&#039;;&lt;br /&gt;
        var maxWidth = container.getAttribute(&#039;data-max-width&#039;) || &#039;800px&#039;;&lt;br /&gt;
        &lt;br /&gt;
        var hlsSrc = IPFS_GATEWAY + &#039;/&#039; + normalCid + &#039;/master.m3u8&#039;;&lt;br /&gt;
&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
&lt;br /&gt;
        if (video.canPlayType(&#039;application/vnd.apple.mpegurl&#039;)) {&lt;br /&gt;
            // Safari native HLS — try HLS first, fall back on error&lt;br /&gt;
            video.src = hlsSrc;&lt;br /&gt;
            video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
                fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
            });&lt;br /&gt;
        } else if (typeof Hls !== &#039;undefined&#039; &amp;amp;&amp;amp; Hls.isSupported()) {&lt;br /&gt;
            var hls = new Hls();&lt;br /&gt;
            hls.loadSource(hlsSrc);&lt;br /&gt;
            hls.attachMedia(video);&lt;br /&gt;
            hls.on(Hls.Events.ERROR, function(event, data) {&lt;br /&gt;
                if (data.fatal) {&lt;br /&gt;
                    // HLS failed (likely no master.m3u8) — try direct video&lt;br /&gt;
                    hls.destroy();&lt;br /&gt;
                    fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            // No HLS support — try direct video&lt;br /&gt;
            fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, initPlayers);&lt;br /&gt;
    } else {&lt;br /&gt;
        initPlayers();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== &#039;undefined&#039; &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function($content) {&lt;br /&gt;
            initPlayers();&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
/**&lt;br /&gt;
 * Instrument form — validation + page name computation (v24772700)&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    console.log(&#039;PickiPedia Common.js instrument module v24772700 loaded&#039;);&lt;br /&gt;
&lt;br /&gt;
    mw.hook(&#039;pf.formValidation&#039;).add(function(args) {&lt;br /&gt;
        var nickname = document.querySelector(&#039;input[name=&amp;quot;Instrument[nickname]&amp;quot;]&#039;);&lt;br /&gt;
        if (!nickname) return;&lt;br /&gt;
&lt;br /&gt;
        var make = document.querySelector(&#039;input[name=&amp;quot;Instrument[make]&amp;quot;]&#039;);&lt;br /&gt;
        var model = document.querySelector(&#039;input[name=&amp;quot;Instrument[model]&amp;quot;]&#039;);&lt;br /&gt;
        var serial = document.querySelector(&#039;input[name=&amp;quot;Instrument[serial]&amp;quot;]&#039;);&lt;br /&gt;
&lt;br /&gt;
        var nickVal = nickname.value.trim();&lt;br /&gt;
        var makeVal = make ? make.value.trim() : &#039;&#039;;&lt;br /&gt;
        var modelVal = model ? model.value.trim() : &#039;&#039;;&lt;br /&gt;
        var serialVal = serial ? serial.value.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var hasNickname = nickVal !== &#039;&#039;;&lt;br /&gt;
        var hasMakerComplete = makeVal !== &#039;&#039; &amp;amp;&amp;amp; modelVal !== &#039;&#039; &amp;amp;&amp;amp; serialVal !== &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (!hasNickname &amp;amp;&amp;amp; !hasMakerComplete) {&lt;br /&gt;
            args.numErrors += 1;&lt;br /&gt;
            if (makeVal !== &#039;&#039; || modelVal !== &#039;&#039; || serialVal !== &#039;&#039;) {&lt;br /&gt;
                alert(&#039;Maker identification requires all three: make, model, and serial number. Or provide a nickname instead.&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
                alert(&#039;Please provide either a nickname or maker identification (make, model, and serial number).&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // If no nickname, fill it from make/model/serial for page naming&lt;br /&gt;
        if (!hasNickname) {&lt;br /&gt;
            nickname.value = makeVal + &#039; &#039; + modelVal + &#039; &#039; + serialVal;&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 *&lt;br /&gt;
 * Layout:&lt;br /&gt;
 *   - corner logo (absolute-positioned upper-left of viewport,&lt;br /&gt;
 *     OUTSIDE all wiki wrappers — does not push content down)&lt;br /&gt;
 *   - non-sticky topbar (just nav) at top of body&lt;br /&gt;
 *   - hero block with kicker, title, optional dek + meta&lt;br /&gt;
 *   - light/dark mode toggle (persisted in localStorage)&lt;br /&gt;
 *&lt;br /&gt;
 * Variant from HTML comment marker `pickipedia:variant=letter|masthead`&lt;br /&gt;
 * or category membership; default letter.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 2) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;/&#039;) === -1) return;&lt;br /&gt;
&lt;br /&gt;
  var slash    = title.indexOf(&#039;/&#039;);&lt;br /&gt;
  var username = title.slice(0, slash).replace(/_/g, &#039; &#039;);&lt;br /&gt;
  var subpage  = title.slice(slash + 1).replace(/_/g, &#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-userpost&#039;);&lt;br /&gt;
&lt;br /&gt;
  var variant = &#039;letter&#039;;&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var html = content.innerHTML || &#039;&#039;;&lt;br /&gt;
    var m = html.match(/pickipedia:variant\s*=\s*(letter|masthead)/i);&lt;br /&gt;
    if (m) variant = m[1].toLowerCase();&lt;br /&gt;
  }&lt;br /&gt;
  var cats = mw.config.get(&#039;wgCategories&#039;) || [];&lt;br /&gt;
  if (cats.indexOf(&#039;Masthead style&#039;) !== -1) variant = &#039;masthead&#039;;&lt;br /&gt;
  if (cats.indexOf(&#039;Letter style&#039;) !== -1) variant = &#039;letter&#039;;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-variant-&#039; + variant);&lt;br /&gt;
&lt;br /&gt;
  var STORAGE_KEY = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  var saved = null;&lt;br /&gt;
  try { saved = localStorage.getItem(STORAGE_KEY); } catch (e) {}&lt;br /&gt;
  if (saved === &#039;dark&#039;) body.classList.add(&#039;pickipedia-dark&#039;);&lt;br /&gt;
&lt;br /&gt;
  var LOGO_URL = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Corner logo: stand-alone body child, absolute-positioned. ----------&lt;br /&gt;
  var cornerLogo = document.createElement(&#039;a&#039;);&lt;br /&gt;
  cornerLogo.className = &#039;pp-corner-logo&#039;;&lt;br /&gt;
  cornerLogo.href = &#039;/wiki/Main_Page&#039;;&lt;br /&gt;
  cornerLogo.title = &#039;PickiPedia home&#039;;&lt;br /&gt;
  cornerLogo.innerHTML = &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_URL + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(cornerLogo, document.body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Topbar (nav only) ----------&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-topbar-nav&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(topbar, cornerLogo.nextSibling);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Hero ----------&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var dek = &#039;&#039;;&lt;br /&gt;
    var dekEl = content.querySelector(&#039;.pp-dek-source&#039;);&lt;br /&gt;
    if (dekEl) {&lt;br /&gt;
      dek = dekEl.innerHTML;&lt;br /&gt;
      dekEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var kickerHtml = &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;User:&#039; + username.replace(/ /g, &#039;_&#039;)) +&lt;br /&gt;
                     &#039;&amp;quot;&amp;gt;User:&#039; + escapeHtml(username) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    var kickerEl = content.querySelector(&#039;.pp-kicker-source&#039;);&lt;br /&gt;
    if (kickerEl) {&lt;br /&gt;
      kickerHtml = escapeHtml(kickerEl.textContent.trim());&lt;br /&gt;
      kickerEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var lastMod = &#039;&#039;;&lt;br /&gt;
    var lastModEl = document.getElementById(&#039;footer-info-lastmod&#039;);&lt;br /&gt;
    if (lastModEl) lastMod = lastModEl.textContent.replace(/^\s*This page was last (edited|modified) on\s*/i, &#039;&#039;).trim();&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
    hero.className = &#039;pickipedia-hero&#039;;&lt;br /&gt;
&lt;br /&gt;
    if (variant === &#039;masthead&#039;) {&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-topbar&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-topbar-rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-topbar-vol&amp;quot;&amp;gt;&#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-titlewrap&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
          (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
        (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;Last edited &#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    content.parentNode.insertBefore(hero, content);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ---------- Light/dark toggle ----------&lt;br /&gt;
  var toggle = document.createElement(&#039;button&#039;);&lt;br /&gt;
  toggle.className = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  toggle.type = &#039;button&#039;;&lt;br /&gt;
  toggle.textContent = body.classList.contains(&#039;pickipedia-dark&#039;) ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
  toggle.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
    var dark = body.classList.toggle(&#039;pickipedia-dark&#039;);&lt;br /&gt;
    toggle.textContent = dark ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
    try { localStorage.setItem(STORAGE_KEY, dark ? &#039;dark&#039; : &#039;light&#039;); } catch (e) {}&lt;br /&gt;
  });&lt;br /&gt;
  document.body.appendChild(toggle);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5019</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5019"/>
		<updated>2026-04-29T03:43:07Z</updated>

		<summary type="html">&lt;p&gt;Magent: Bigger topbar logo (always shown); drop masthead-in-hero rules (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar (logo + nav) — non-sticky, sits at top of body&lt;br /&gt;
   above mw-content-text. Logo upper-left, nav upper-right. ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 12px 24px;&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo img {&lt;br /&gt;
  height: 120px;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The {{HLSVideo|...|width=400px}} template wraps the player in a div&lt;br /&gt;
   with inline `width:400px;max-width:800px`. On a post the video should&lt;br /&gt;
   fill the reading column instead. */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;max-width:800px&amp;quot;],&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;width:400px&amp;quot;] {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar { padding: 10px 16px; }&lt;br /&gt;
  .pickipedia-topbar-logo img { height: 72px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 10px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5018</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5018"/>
		<updated>2026-04-29T03:41:53Z</updated>

		<summary type="html">&lt;p&gt;Magent: Drop in-hero masthead logo; topbar logo is the only logo now (sits above mw-content-text) (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
* Blue Railroad Submission - Date to Block Height Converter&lt;br /&gt;
* Adds a datepicker that converts dates to Ethereum block heights&lt;br /&gt;
* Also shows time ago for news templates&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    &lt;br /&gt;
    // Only run on the Blue Railroad Submission form&lt;br /&gt;
    if (!document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;)) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Reference point: known block and timestamp&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    const AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
    &lt;br /&gt;
    // Get current block from footer (format: &amp;quot;24,328,442&amp;quot;)&lt;br /&gt;
    function getCurrentBlockFromFooter() {&lt;br /&gt;
        const footerLink = document.querySelector(&#039;a[href*=&amp;quot;etherscan.io/block/&amp;quot;]&#039;);&lt;br /&gt;
        if (footerLink) {&lt;br /&gt;
            const match = footerLink.href.match(/block\/(\d+)/);&lt;br /&gt;
            if (match) return parseInt(match[1]);&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Calculate block height from date&lt;br /&gt;
    function dateToBlockHeight(targetDate, refBlock, refTimestamp) {&lt;br /&gt;
        const targetTimestamp = targetDate.getTime() / 1000;&lt;br /&gt;
        const secondsDiff = refTimestamp - targetTimestamp;&lt;br /&gt;
        const blocksDiff = Math.round(secondsDiff / AVG_BLOCK_TIME);&lt;br /&gt;
        return refBlock - blocksDiff;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Add the datepicker UI&lt;br /&gt;
    function addDatePicker() {&lt;br /&gt;
        const blockInput = document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;);&lt;br /&gt;
        if (!blockInput) return;&lt;br /&gt;
        &lt;br /&gt;
        const container = document.createElement(&#039;div&#039;);&lt;br /&gt;
        container.style.marginTop = &#039;8px&#039;;&lt;br /&gt;
        container.innerHTML = `&lt;br /&gt;
            &amp;lt;label style=&amp;quot;display: block; margin-bottom: 4px; font-size: 0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
                Or pick a date/time:&lt;br /&gt;
            &amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;datetime-local&amp;quot; id=&amp;quot;br-datepicker&amp;quot; style=&amp;quot;padding: 4px; margin-right: 8px;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;br-convert-btn&amp;quot; style=&amp;quot;padding: 4px 12px; cursor: pointer;&amp;quot;&amp;gt;&lt;br /&gt;
                Convert to Block&lt;br /&gt;
            &amp;lt;/button&amp;gt;&lt;br /&gt;
            &amp;lt;span id=&amp;quot;br-status&amp;quot; style=&amp;quot;margin-left: 8px; font-size: 0.9em; color: #666;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        `;&lt;br /&gt;
        &lt;br /&gt;
        blockInput.parentNode.appendChild(container);&lt;br /&gt;
        &lt;br /&gt;
        const datePicker = document.getElementById(&#039;br-datepicker&#039;);&lt;br /&gt;
        const convertBtn = document.getElementById(&#039;br-convert-btn&#039;);&lt;br /&gt;
        const status = document.getElementById(&#039;br-status&#039;);&lt;br /&gt;
        &lt;br /&gt;
        // Set default to now&lt;br /&gt;
        const now = new Date();&lt;br /&gt;
        datePicker.value = now.toISOString().slice(0, 16);&lt;br /&gt;
        &lt;br /&gt;
        convertBtn.addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
            const selectedDate = new Date(datePicker.value);&lt;br /&gt;
            if (isNaN(selectedDate.getTime())) {&lt;br /&gt;
                status.textContent = &#039;Invalid date&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentBlock = getCurrentBlockFromFooter();&lt;br /&gt;
            if (!currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Could not find reference block&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentTimestamp = Date.now() / 1000;&lt;br /&gt;
            const estimatedBlock = dateToBlockHeight(selectedDate, currentBlock, currentTimestamp);&lt;br /&gt;
            &lt;br /&gt;
            if (estimatedBlock &amp;gt; currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Date is in the future!&#039;;&lt;br /&gt;
                status.style.color = &#039;orange&#039;;&lt;br /&gt;
            } else {&lt;br /&gt;
                status.textContent = &#039;~estimated&#039;;&lt;br /&gt;
                status.style.color = &#039;green&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            blockInput.value = estimatedBlock;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Run when DOM is ready&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, addDatePicker);&lt;br /&gt;
    } else {&lt;br /&gt;
        addDatePicker();&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TimeAgo — shows &amp;quot;X blocks ago&amp;quot; for transcluded templates.&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext:&lt;br /&gt;
 *   &amp;lt;span class=&amp;quot;timeago&amp;quot; data-lastmod-page=&amp;quot;Template:NewsShorts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Fetches the last revision timestamp from the API and renders&lt;br /&gt;
 * a block-based relative time string using Ethereum block heights.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    var AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
&lt;br /&gt;
    var spans = document.querySelectorAll(&#039;.timeago[data-lastmod-page]&#039;);&lt;br /&gt;
    if (!spans.length) return;&lt;br /&gt;
&lt;br /&gt;
    // Format number with commas (e.g., 1234567 -&amp;gt; &amp;quot;1,234,567&amp;quot;)&lt;br /&gt;
    function formatNumber(num) {&lt;br /&gt;
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Collect unique page titles&lt;br /&gt;
    var titles = [];&lt;br /&gt;
    spans.forEach(function(span) {&lt;br /&gt;
        var t = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
        if (t &amp;amp;&amp;amp; titles.indexOf(t) === -1) titles.push(t);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Batch query the API (up to 50 titles per request)&lt;br /&gt;
    var api = mw.config.get(&#039;wgScriptPath&#039;) + &#039;/api.php&#039;;&lt;br /&gt;
    var url = api + &#039;?action=query&amp;amp;prop=revisions&amp;amp;rvprop=timestamp&amp;amp;format=json&amp;amp;titles=&#039; +&lt;br /&gt;
        encodeURIComponent(titles.join(&#039;|&#039;));&lt;br /&gt;
&lt;br /&gt;
    fetch(url).then(function(r) { return r.json(); }).then(function(data) {&lt;br /&gt;
        var pages = data.query &amp;amp;&amp;amp; data.query.pages || {};&lt;br /&gt;
        var timestamps = {};&lt;br /&gt;
&lt;br /&gt;
        Object.keys(pages).forEach(function(id) {&lt;br /&gt;
            var page = pages[id];&lt;br /&gt;
            if (page.revisions &amp;amp;&amp;amp; page.revisions[0]) {&lt;br /&gt;
                timestamps[page.title] = new Date(page.revisions[0].timestamp);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        spans.forEach(function(span) {&lt;br /&gt;
            var title = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
            var ts = timestamps[title];&lt;br /&gt;
            if (!ts) {&lt;br /&gt;
                span.textContent = &#039;&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            span.textContent = formatBlocksAgo(ts);&lt;br /&gt;
            span.title = ts.toLocaleString();&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    function formatBlocksAgo(date) {&lt;br /&gt;
        var secondsAgo = Math.floor((Date.now() - date.getTime()) / 1000);&lt;br /&gt;
        var blocksAgo = Math.round(secondsAgo / AVG_BLOCK_TIME);&lt;br /&gt;
&lt;br /&gt;
        if (blocksAgo &amp;lt; 1) {&lt;br /&gt;
            return &#039;this block&#039;;&lt;br /&gt;
        } else if (blocksAgo === 1) {&lt;br /&gt;
            return &#039;1 block ago&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            return formatNumber(blocksAgo) + &#039; blocks ago&#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * HLS Video Player - Initializes HLS.js for IPFS-hosted videos&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext (via Template:HLSVideo):&lt;br /&gt;
 *   &amp;lt;div class=&amp;quot;hls-video-player&amp;quot; data-cid=&amp;quot;QmXet6...&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * The gadget loads hls.js and initializes players for any element&lt;br /&gt;
 * with the hls-video-player class and a data-cid attribute.&lt;br /&gt;
 *&lt;br /&gt;
 * Supports both HLS streams (CID/master.m3u8) and raw video files.&lt;br /&gt;
 * Tries HLS first; if the manifest 404s, falls back to direct playback.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    var IPFS_GATEWAY = &#039;https://ipfs.delivery-kid.cryptograss.live/ipfs&#039;;&lt;br /&gt;
    var HLS_JS_URL = &#039;https://cdn.jsdelivr.net/npm/hls.js@latest&#039;;&lt;br /&gt;
    var hlsLoadPromise = null;&lt;br /&gt;
&lt;br /&gt;
    // CIDv1 (bafy...) is Base32 lowercase, but MediaWiki capitalizes page titles.&lt;br /&gt;
    // CIDv0 (Qm...) is Base58 case-sensitive — must not be lowercased.&lt;br /&gt;
    function normalizeCid(cid) {&lt;br /&gt;
        if (cid &amp;amp;&amp;amp; cid.substring(0, 4) === &#039;Bafy&#039;) {&lt;br /&gt;
            return cid.toLowerCase();&lt;br /&gt;
        }&lt;br /&gt;
        return cid;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function loadHls() {&lt;br /&gt;
        if (typeof Hls !== &#039;undefined&#039;) {&lt;br /&gt;
            return Promise.resolve();&lt;br /&gt;
        }&lt;br /&gt;
        if (hlsLoadPromise) {&lt;br /&gt;
            return hlsLoadPromise;&lt;br /&gt;
        }&lt;br /&gt;
        hlsLoadPromise = new Promise(function(resolve) {&lt;br /&gt;
            var script = document.createElement(&#039;script&#039;);&lt;br /&gt;
            script.src = HLS_JS_URL;&lt;br /&gt;
            script.onload = resolve;&lt;br /&gt;
            document.head.appendChild(script);&lt;br /&gt;
        });&lt;br /&gt;
        return hlsLoadPromise;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayers() {&lt;br /&gt;
        var containers = document.querySelectorAll(&#039;.hls-video-player[data-cid]:not([data-initialized])&#039;);&lt;br /&gt;
        if (!containers.length) return;&lt;br /&gt;
&lt;br /&gt;
        // Mark ALL containers immediately to prevent race conditions&lt;br /&gt;
        containers.forEach(function(c) {&lt;br /&gt;
            c.setAttribute(&#039;data-initialized&#039;, &#039;true&#039;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Then load hls.js and initialize&lt;br /&gt;
        loadHls().then(function() {&lt;br /&gt;
            containers.forEach(initPlayer);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function createVideoElement(width, maxWidth) {&lt;br /&gt;
        var video = document.createElement(&#039;video&#039;);&lt;br /&gt;
        video.controls = true;&lt;br /&gt;
        video.playsInline = true;&lt;br /&gt;
        video.style.width = width;&lt;br /&gt;
        video.style.maxWidth = maxWidth;&lt;br /&gt;
        video.style.backgroundColor = &#039;#000&#039;;&lt;br /&gt;
        video.style.display = &#039;block&#039;;&lt;br /&gt;
        return video;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fallbackToDirectVideo(container, cid, width, maxWidth) {&lt;br /&gt;
        // CID is a raw video file, not an HLS stream — play directly&lt;br /&gt;
        var directUrl = IPFS_GATEWAY + &#039;/&#039; + normalizeCid(cid);&lt;br /&gt;
        container.innerHTML = &#039;&#039;;&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        video.src = directUrl;&lt;br /&gt;
        video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
            container.innerHTML = &#039;&amp;lt;p style=&amp;quot;color: red; padding: 1em;&amp;quot;&amp;gt;Error loading video. The IPFS content may not be available.&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
        });&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayer(container) {&lt;br /&gt;
        var cid = container.getAttribute(&#039;data-cid&#039;);&lt;br /&gt;
        var normalCid = normalizeCid(cid);&lt;br /&gt;
        var width = container.getAttribute(&#039;data-width&#039;) || &#039;100%&#039;;&lt;br /&gt;
        var maxWidth = container.getAttribute(&#039;data-max-width&#039;) || &#039;800px&#039;;&lt;br /&gt;
        &lt;br /&gt;
        var hlsSrc = IPFS_GATEWAY + &#039;/&#039; + normalCid + &#039;/master.m3u8&#039;;&lt;br /&gt;
&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
&lt;br /&gt;
        if (video.canPlayType(&#039;application/vnd.apple.mpegurl&#039;)) {&lt;br /&gt;
            // Safari native HLS — try HLS first, fall back on error&lt;br /&gt;
            video.src = hlsSrc;&lt;br /&gt;
            video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
                fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
            });&lt;br /&gt;
        } else if (typeof Hls !== &#039;undefined&#039; &amp;amp;&amp;amp; Hls.isSupported()) {&lt;br /&gt;
            var hls = new Hls();&lt;br /&gt;
            hls.loadSource(hlsSrc);&lt;br /&gt;
            hls.attachMedia(video);&lt;br /&gt;
            hls.on(Hls.Events.ERROR, function(event, data) {&lt;br /&gt;
                if (data.fatal) {&lt;br /&gt;
                    // HLS failed (likely no master.m3u8) — try direct video&lt;br /&gt;
                    hls.destroy();&lt;br /&gt;
                    fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            // No HLS support — try direct video&lt;br /&gt;
            fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, initPlayers);&lt;br /&gt;
    } else {&lt;br /&gt;
        initPlayers();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== &#039;undefined&#039; &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function($content) {&lt;br /&gt;
            initPlayers();&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
/**&lt;br /&gt;
 * Instrument form — validation + page name computation (v24772700)&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    console.log(&#039;PickiPedia Common.js instrument module v24772700 loaded&#039;);&lt;br /&gt;
&lt;br /&gt;
    mw.hook(&#039;pf.formValidation&#039;).add(function(args) {&lt;br /&gt;
        var nickname = document.querySelector(&#039;input[name=&amp;quot;Instrument[nickname]&amp;quot;]&#039;);&lt;br /&gt;
        if (!nickname) return;&lt;br /&gt;
&lt;br /&gt;
        var make = document.querySelector(&#039;input[name=&amp;quot;Instrument[make]&amp;quot;]&#039;);&lt;br /&gt;
        var model = document.querySelector(&#039;input[name=&amp;quot;Instrument[model]&amp;quot;]&#039;);&lt;br /&gt;
        var serial = document.querySelector(&#039;input[name=&amp;quot;Instrument[serial]&amp;quot;]&#039;);&lt;br /&gt;
&lt;br /&gt;
        var nickVal = nickname.value.trim();&lt;br /&gt;
        var makeVal = make ? make.value.trim() : &#039;&#039;;&lt;br /&gt;
        var modelVal = model ? model.value.trim() : &#039;&#039;;&lt;br /&gt;
        var serialVal = serial ? serial.value.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var hasNickname = nickVal !== &#039;&#039;;&lt;br /&gt;
        var hasMakerComplete = makeVal !== &#039;&#039; &amp;amp;&amp;amp; modelVal !== &#039;&#039; &amp;amp;&amp;amp; serialVal !== &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (!hasNickname &amp;amp;&amp;amp; !hasMakerComplete) {&lt;br /&gt;
            args.numErrors += 1;&lt;br /&gt;
            if (makeVal !== &#039;&#039; || modelVal !== &#039;&#039; || serialVal !== &#039;&#039;) {&lt;br /&gt;
                alert(&#039;Maker identification requires all three: make, model, and serial number. Or provide a nickname instead.&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
                alert(&#039;Please provide either a nickname or maker identification (make, model, and serial number).&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // If no nickname, fill it from make/model/serial for page naming&lt;br /&gt;
        if (!hasNickname) {&lt;br /&gt;
            nickname.value = makeVal + &#039; &#039; + modelVal + &#039; &#039; + serialVal;&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling (Justin&#039;s design)&lt;br /&gt;
 *&lt;br /&gt;
 * Layout:&lt;br /&gt;
 *   - non-sticky topbar at top of body (logo upper-left, nav upper-right)&lt;br /&gt;
 *   - hero block with kicker, title, dek, optional last-edited line&lt;br /&gt;
 *   - light/dark mode toggle (persisted in localStorage)&lt;br /&gt;
 *&lt;br /&gt;
 * Variant from HTML comment marker `pickipedia:variant=letter|masthead`&lt;br /&gt;
 * or category membership; default letter.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 2) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;/&#039;) === -1) return;&lt;br /&gt;
&lt;br /&gt;
  var slash    = title.indexOf(&#039;/&#039;);&lt;br /&gt;
  var username = title.slice(0, slash).replace(/_/g, &#039; &#039;);&lt;br /&gt;
  var subpage  = title.slice(slash + 1).replace(/_/g, &#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-userpost&#039;);&lt;br /&gt;
&lt;br /&gt;
  var variant = &#039;letter&#039;;&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var html = content.innerHTML || &#039;&#039;;&lt;br /&gt;
    var m = html.match(/pickipedia:variant\s*=\s*(letter|masthead)/i);&lt;br /&gt;
    if (m) variant = m[1].toLowerCase();&lt;br /&gt;
  }&lt;br /&gt;
  var cats = mw.config.get(&#039;wgCategories&#039;) || [];&lt;br /&gt;
  if (cats.indexOf(&#039;Masthead style&#039;) !== -1) variant = &#039;masthead&#039;;&lt;br /&gt;
  if (cats.indexOf(&#039;Letter style&#039;) !== -1) variant = &#039;letter&#039;;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-variant-&#039; + variant);&lt;br /&gt;
&lt;br /&gt;
  var STORAGE_KEY = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  var saved = null;&lt;br /&gt;
  try { saved = localStorage.getItem(STORAGE_KEY); } catch (e) {}&lt;br /&gt;
  if (saved === &#039;dark&#039;) body.classList.add(&#039;pickipedia-dark&#039;);&lt;br /&gt;
&lt;br /&gt;
  // Pre-generated thumb of the transparent logo. 400px exists; 300 was a 404.&lt;br /&gt;
  var LOGO_TOPBAR = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Topbar (logo + nav) — sits at the top of the body, outside&lt;br /&gt;
  //            mw-content-text. Non-sticky, so it scrolls away with the page.&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;a class=&amp;quot;pickipedia-topbar-logo&amp;quot; href=&amp;quot;/wiki/Main_Page&amp;quot; title=&amp;quot;PickiPedia home&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_TOPBAR + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-topbar-nav&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(topbar, document.body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Hero ----------&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var dek = &#039;&#039;;&lt;br /&gt;
    var dekEl = content.querySelector(&#039;.pp-dek-source&#039;);&lt;br /&gt;
    if (dekEl) {&lt;br /&gt;
      dek = dekEl.innerHTML;&lt;br /&gt;
      dekEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var kickerHtml = &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;User:&#039; + username.replace(/ /g, &#039;_&#039;)) +&lt;br /&gt;
                     &#039;&amp;quot;&amp;gt;User:&#039; + escapeHtml(username) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    var kickerEl = content.querySelector(&#039;.pp-kicker-source&#039;);&lt;br /&gt;
    if (kickerEl) {&lt;br /&gt;
      kickerHtml = escapeHtml(kickerEl.textContent.trim());&lt;br /&gt;
      kickerEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var lastMod = &#039;&#039;;&lt;br /&gt;
    var lastModEl = document.getElementById(&#039;footer-info-lastmod&#039;);&lt;br /&gt;
    if (lastModEl) lastMod = lastModEl.textContent.replace(/^\s*This page was last (edited|modified) on\s*/i, &#039;&#039;).trim();&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
    hero.className = &#039;pickipedia-hero&#039;;&lt;br /&gt;
&lt;br /&gt;
    if (variant === &#039;masthead&#039;) {&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-topbar&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-topbar-rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-topbar-vol&amp;quot;&amp;gt;&#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-titlewrap&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
          (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
        (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;Last edited &#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    content.parentNode.insertBefore(hero, content);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ---------- Light/dark toggle ----------&lt;br /&gt;
  var toggle = document.createElement(&#039;button&#039;);&lt;br /&gt;
  toggle.className = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  toggle.type = &#039;button&#039;;&lt;br /&gt;
  toggle.textContent = body.classList.contains(&#039;pickipedia-dark&#039;) ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
  toggle.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
    var dark = body.classList.toggle(&#039;pickipedia-dark&#039;);&lt;br /&gt;
    toggle.textContent = dark ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
    try { localStorage.setItem(STORAGE_KEY, dark ? &#039;dark&#039; : &#039;light&#039;); } catch (e) {}&lt;br /&gt;
  });&lt;br /&gt;
  document.body.appendChild(toggle);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5017</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5017"/>
		<updated>2026-04-29T03:19:24Z</updated>

		<summary type="html">&lt;p&gt;Magent: Force inline-styled HLSVideo wrapper (width=400px) to fill the reading column on post pages (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar (logo + nav) — non-sticky ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 10px 24px;&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo img {&lt;br /&gt;
  height: 64px;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Big floating masthead logo — sits to the LEFT of the title text on&lt;br /&gt;
   wide viewports. The kicker/title/body wrap around it like a magazine&lt;br /&gt;
   drop-figure. Hidden on narrow viewports (the topbar logo handles it). */&lt;br /&gt;
.pp-masthead-logo {&lt;br /&gt;
  float: left;&lt;br /&gt;
  margin: 0 24px 12px 0;&lt;br /&gt;
  width: 200px;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pp-masthead-logo img {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  clear: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The {{HLSVideo|...|width=400px}} template wraps the player in a div&lt;br /&gt;
   with inline `width:400px;max-width:800px`. That&#039;s the right behavior&lt;br /&gt;
   on a Release page, but on a post the video should fill the reading&lt;br /&gt;
   column. Override the inline width to 100% so the video centers and&lt;br /&gt;
   sizes naturally. */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;max-width:800px&amp;quot;],&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; div[style*=&amp;quot;width:400px&amp;quot;] {&lt;br /&gt;
  width: 100% !important;&lt;br /&gt;
  max-width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Logo swap based on viewport ---------- */&lt;br /&gt;
@media (min-width: 720px) {&lt;br /&gt;
  .pickipedia-topbar-logo { display: none; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 719px) {&lt;br /&gt;
  .pp-masthead-logo { display: none; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar { padding: 8px 16px; }&lt;br /&gt;
  .pickipedia-topbar-logo img { height: 48px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 10px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5016</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5016"/>
		<updated>2026-04-29T03:18:13Z</updated>

		<summary type="html">&lt;p&gt;Magent: Fix masthead logo URL: 300px thumb was 404; use 400px which exists (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
* Blue Railroad Submission - Date to Block Height Converter&lt;br /&gt;
* Adds a datepicker that converts dates to Ethereum block heights&lt;br /&gt;
* Also shows time ago for news templates&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    &lt;br /&gt;
    // Only run on the Blue Railroad Submission form&lt;br /&gt;
    if (!document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;)) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Reference point: known block and timestamp&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    const AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
    &lt;br /&gt;
    // Get current block from footer (format: &amp;quot;24,328,442&amp;quot;)&lt;br /&gt;
    function getCurrentBlockFromFooter() {&lt;br /&gt;
        const footerLink = document.querySelector(&#039;a[href*=&amp;quot;etherscan.io/block/&amp;quot;]&#039;);&lt;br /&gt;
        if (footerLink) {&lt;br /&gt;
            const match = footerLink.href.match(/block\/(\d+)/);&lt;br /&gt;
            if (match) return parseInt(match[1]);&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Calculate block height from date&lt;br /&gt;
    function dateToBlockHeight(targetDate, refBlock, refTimestamp) {&lt;br /&gt;
        const targetTimestamp = targetDate.getTime() / 1000;&lt;br /&gt;
        const secondsDiff = refTimestamp - targetTimestamp;&lt;br /&gt;
        const blocksDiff = Math.round(secondsDiff / AVG_BLOCK_TIME);&lt;br /&gt;
        return refBlock - blocksDiff;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Add the datepicker UI&lt;br /&gt;
    function addDatePicker() {&lt;br /&gt;
        const blockInput = document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;);&lt;br /&gt;
        if (!blockInput) return;&lt;br /&gt;
        &lt;br /&gt;
        const container = document.createElement(&#039;div&#039;);&lt;br /&gt;
        container.style.marginTop = &#039;8px&#039;;&lt;br /&gt;
        container.innerHTML = `&lt;br /&gt;
            &amp;lt;label style=&amp;quot;display: block; margin-bottom: 4px; font-size: 0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
                Or pick a date/time:&lt;br /&gt;
            &amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;datetime-local&amp;quot; id=&amp;quot;br-datepicker&amp;quot; style=&amp;quot;padding: 4px; margin-right: 8px;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;br-convert-btn&amp;quot; style=&amp;quot;padding: 4px 12px; cursor: pointer;&amp;quot;&amp;gt;&lt;br /&gt;
                Convert to Block&lt;br /&gt;
            &amp;lt;/button&amp;gt;&lt;br /&gt;
            &amp;lt;span id=&amp;quot;br-status&amp;quot; style=&amp;quot;margin-left: 8px; font-size: 0.9em; color: #666;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        `;&lt;br /&gt;
        &lt;br /&gt;
        blockInput.parentNode.appendChild(container);&lt;br /&gt;
        &lt;br /&gt;
        const datePicker = document.getElementById(&#039;br-datepicker&#039;);&lt;br /&gt;
        const convertBtn = document.getElementById(&#039;br-convert-btn&#039;);&lt;br /&gt;
        const status = document.getElementById(&#039;br-status&#039;);&lt;br /&gt;
        &lt;br /&gt;
        // Set default to now&lt;br /&gt;
        const now = new Date();&lt;br /&gt;
        datePicker.value = now.toISOString().slice(0, 16);&lt;br /&gt;
        &lt;br /&gt;
        convertBtn.addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
            const selectedDate = new Date(datePicker.value);&lt;br /&gt;
            if (isNaN(selectedDate.getTime())) {&lt;br /&gt;
                status.textContent = &#039;Invalid date&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentBlock = getCurrentBlockFromFooter();&lt;br /&gt;
            if (!currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Could not find reference block&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentTimestamp = Date.now() / 1000;&lt;br /&gt;
            const estimatedBlock = dateToBlockHeight(selectedDate, currentBlock, currentTimestamp);&lt;br /&gt;
            &lt;br /&gt;
            if (estimatedBlock &amp;gt; currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Date is in the future!&#039;;&lt;br /&gt;
                status.style.color = &#039;orange&#039;;&lt;br /&gt;
            } else {&lt;br /&gt;
                status.textContent = &#039;~estimated&#039;;&lt;br /&gt;
                status.style.color = &#039;green&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            blockInput.value = estimatedBlock;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Run when DOM is ready&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, addDatePicker);&lt;br /&gt;
    } else {&lt;br /&gt;
        addDatePicker();&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TimeAgo — shows &amp;quot;X blocks ago&amp;quot; for transcluded templates.&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext:&lt;br /&gt;
 *   &amp;lt;span class=&amp;quot;timeago&amp;quot; data-lastmod-page=&amp;quot;Template:NewsShorts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Fetches the last revision timestamp from the API and renders&lt;br /&gt;
 * a block-based relative time string using Ethereum block heights.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    var AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
&lt;br /&gt;
    var spans = document.querySelectorAll(&#039;.timeago[data-lastmod-page]&#039;);&lt;br /&gt;
    if (!spans.length) return;&lt;br /&gt;
&lt;br /&gt;
    // Format number with commas (e.g., 1234567 -&amp;gt; &amp;quot;1,234,567&amp;quot;)&lt;br /&gt;
    function formatNumber(num) {&lt;br /&gt;
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Collect unique page titles&lt;br /&gt;
    var titles = [];&lt;br /&gt;
    spans.forEach(function(span) {&lt;br /&gt;
        var t = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
        if (t &amp;amp;&amp;amp; titles.indexOf(t) === -1) titles.push(t);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Batch query the API (up to 50 titles per request)&lt;br /&gt;
    var api = mw.config.get(&#039;wgScriptPath&#039;) + &#039;/api.php&#039;;&lt;br /&gt;
    var url = api + &#039;?action=query&amp;amp;prop=revisions&amp;amp;rvprop=timestamp&amp;amp;format=json&amp;amp;titles=&#039; +&lt;br /&gt;
        encodeURIComponent(titles.join(&#039;|&#039;));&lt;br /&gt;
&lt;br /&gt;
    fetch(url).then(function(r) { return r.json(); }).then(function(data) {&lt;br /&gt;
        var pages = data.query &amp;amp;&amp;amp; data.query.pages || {};&lt;br /&gt;
        var timestamps = {};&lt;br /&gt;
&lt;br /&gt;
        Object.keys(pages).forEach(function(id) {&lt;br /&gt;
            var page = pages[id];&lt;br /&gt;
            if (page.revisions &amp;amp;&amp;amp; page.revisions[0]) {&lt;br /&gt;
                timestamps[page.title] = new Date(page.revisions[0].timestamp);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        spans.forEach(function(span) {&lt;br /&gt;
            var title = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
            var ts = timestamps[title];&lt;br /&gt;
            if (!ts) {&lt;br /&gt;
                span.textContent = &#039;&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            span.textContent = formatBlocksAgo(ts);&lt;br /&gt;
            span.title = ts.toLocaleString();&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    function formatBlocksAgo(date) {&lt;br /&gt;
        var secondsAgo = Math.floor((Date.now() - date.getTime()) / 1000);&lt;br /&gt;
        var blocksAgo = Math.round(secondsAgo / AVG_BLOCK_TIME);&lt;br /&gt;
&lt;br /&gt;
        if (blocksAgo &amp;lt; 1) {&lt;br /&gt;
            return &#039;this block&#039;;&lt;br /&gt;
        } else if (blocksAgo === 1) {&lt;br /&gt;
            return &#039;1 block ago&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            return formatNumber(blocksAgo) + &#039; blocks ago&#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * HLS Video Player - Initializes HLS.js for IPFS-hosted videos&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext (via Template:HLSVideo):&lt;br /&gt;
 *   &amp;lt;div class=&amp;quot;hls-video-player&amp;quot; data-cid=&amp;quot;QmXet6...&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * The gadget loads hls.js and initializes players for any element&lt;br /&gt;
 * with the hls-video-player class and a data-cid attribute.&lt;br /&gt;
 *&lt;br /&gt;
 * Supports both HLS streams (CID/master.m3u8) and raw video files.&lt;br /&gt;
 * Tries HLS first; if the manifest 404s, falls back to direct playback.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    var IPFS_GATEWAY = &#039;https://ipfs.delivery-kid.cryptograss.live/ipfs&#039;;&lt;br /&gt;
    var HLS_JS_URL = &#039;https://cdn.jsdelivr.net/npm/hls.js@latest&#039;;&lt;br /&gt;
    var hlsLoadPromise = null;&lt;br /&gt;
&lt;br /&gt;
    // CIDv1 (bafy...) is Base32 lowercase, but MediaWiki capitalizes page titles.&lt;br /&gt;
    // CIDv0 (Qm...) is Base58 case-sensitive — must not be lowercased.&lt;br /&gt;
    function normalizeCid(cid) {&lt;br /&gt;
        if (cid &amp;amp;&amp;amp; cid.substring(0, 4) === &#039;Bafy&#039;) {&lt;br /&gt;
            return cid.toLowerCase();&lt;br /&gt;
        }&lt;br /&gt;
        return cid;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function loadHls() {&lt;br /&gt;
        if (typeof Hls !== &#039;undefined&#039;) {&lt;br /&gt;
            return Promise.resolve();&lt;br /&gt;
        }&lt;br /&gt;
        if (hlsLoadPromise) {&lt;br /&gt;
            return hlsLoadPromise;&lt;br /&gt;
        }&lt;br /&gt;
        hlsLoadPromise = new Promise(function(resolve) {&lt;br /&gt;
            var script = document.createElement(&#039;script&#039;);&lt;br /&gt;
            script.src = HLS_JS_URL;&lt;br /&gt;
            script.onload = resolve;&lt;br /&gt;
            document.head.appendChild(script);&lt;br /&gt;
        });&lt;br /&gt;
        return hlsLoadPromise;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayers() {&lt;br /&gt;
        var containers = document.querySelectorAll(&#039;.hls-video-player[data-cid]:not([data-initialized])&#039;);&lt;br /&gt;
        if (!containers.length) return;&lt;br /&gt;
&lt;br /&gt;
        // Mark ALL containers immediately to prevent race conditions&lt;br /&gt;
        containers.forEach(function(c) {&lt;br /&gt;
            c.setAttribute(&#039;data-initialized&#039;, &#039;true&#039;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Then load hls.js and initialize&lt;br /&gt;
        loadHls().then(function() {&lt;br /&gt;
            containers.forEach(initPlayer);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function createVideoElement(width, maxWidth) {&lt;br /&gt;
        var video = document.createElement(&#039;video&#039;);&lt;br /&gt;
        video.controls = true;&lt;br /&gt;
        video.playsInline = true;&lt;br /&gt;
        video.style.width = width;&lt;br /&gt;
        video.style.maxWidth = maxWidth;&lt;br /&gt;
        video.style.backgroundColor = &#039;#000&#039;;&lt;br /&gt;
        video.style.display = &#039;block&#039;;&lt;br /&gt;
        return video;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fallbackToDirectVideo(container, cid, width, maxWidth) {&lt;br /&gt;
        // CID is a raw video file, not an HLS stream — play directly&lt;br /&gt;
        var directUrl = IPFS_GATEWAY + &#039;/&#039; + normalizeCid(cid);&lt;br /&gt;
        container.innerHTML = &#039;&#039;;&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        video.src = directUrl;&lt;br /&gt;
        video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
            container.innerHTML = &#039;&amp;lt;p style=&amp;quot;color: red; padding: 1em;&amp;quot;&amp;gt;Error loading video. The IPFS content may not be available.&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
        });&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayer(container) {&lt;br /&gt;
        var cid = container.getAttribute(&#039;data-cid&#039;);&lt;br /&gt;
        var normalCid = normalizeCid(cid);&lt;br /&gt;
        var width = container.getAttribute(&#039;data-width&#039;) || &#039;100%&#039;;&lt;br /&gt;
        var maxWidth = container.getAttribute(&#039;data-max-width&#039;) || &#039;800px&#039;;&lt;br /&gt;
        &lt;br /&gt;
        var hlsSrc = IPFS_GATEWAY + &#039;/&#039; + normalCid + &#039;/master.m3u8&#039;;&lt;br /&gt;
&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
&lt;br /&gt;
        if (video.canPlayType(&#039;application/vnd.apple.mpegurl&#039;)) {&lt;br /&gt;
            // Safari native HLS — try HLS first, fall back on error&lt;br /&gt;
            video.src = hlsSrc;&lt;br /&gt;
            video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
                fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
            });&lt;br /&gt;
        } else if (typeof Hls !== &#039;undefined&#039; &amp;amp;&amp;amp; Hls.isSupported()) {&lt;br /&gt;
            var hls = new Hls();&lt;br /&gt;
            hls.loadSource(hlsSrc);&lt;br /&gt;
            hls.attachMedia(video);&lt;br /&gt;
            hls.on(Hls.Events.ERROR, function(event, data) {&lt;br /&gt;
                if (data.fatal) {&lt;br /&gt;
                    // HLS failed (likely no master.m3u8) — try direct video&lt;br /&gt;
                    hls.destroy();&lt;br /&gt;
                    fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            // No HLS support — try direct video&lt;br /&gt;
            fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, initPlayers);&lt;br /&gt;
    } else {&lt;br /&gt;
        initPlayers();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== &#039;undefined&#039; &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function($content) {&lt;br /&gt;
            initPlayers();&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
/**&lt;br /&gt;
 * Instrument form — validation + page name computation (v24772700)&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    console.log(&#039;PickiPedia Common.js instrument module v24772700 loaded&#039;);&lt;br /&gt;
&lt;br /&gt;
    mw.hook(&#039;pf.formValidation&#039;).add(function(args) {&lt;br /&gt;
        var nickname = document.querySelector(&#039;input[name=&amp;quot;Instrument[nickname]&amp;quot;]&#039;);&lt;br /&gt;
        if (!nickname) return;&lt;br /&gt;
&lt;br /&gt;
        var make = document.querySelector(&#039;input[name=&amp;quot;Instrument[make]&amp;quot;]&#039;);&lt;br /&gt;
        var model = document.querySelector(&#039;input[name=&amp;quot;Instrument[model]&amp;quot;]&#039;);&lt;br /&gt;
        var serial = document.querySelector(&#039;input[name=&amp;quot;Instrument[serial]&amp;quot;]&#039;);&lt;br /&gt;
&lt;br /&gt;
        var nickVal = nickname.value.trim();&lt;br /&gt;
        var makeVal = make ? make.value.trim() : &#039;&#039;;&lt;br /&gt;
        var modelVal = model ? model.value.trim() : &#039;&#039;;&lt;br /&gt;
        var serialVal = serial ? serial.value.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var hasNickname = nickVal !== &#039;&#039;;&lt;br /&gt;
        var hasMakerComplete = makeVal !== &#039;&#039; &amp;amp;&amp;amp; modelVal !== &#039;&#039; &amp;amp;&amp;amp; serialVal !== &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (!hasNickname &amp;amp;&amp;amp; !hasMakerComplete) {&lt;br /&gt;
            args.numErrors += 1;&lt;br /&gt;
            if (makeVal !== &#039;&#039; || modelVal !== &#039;&#039; || serialVal !== &#039;&#039;) {&lt;br /&gt;
                alert(&#039;Maker identification requires all three: make, model, and serial number. Or provide a nickname instead.&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
                alert(&#039;Please provide either a nickname or maker identification (make, model, and serial number).&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // If no nickname, fill it from make/model/serial for page naming&lt;br /&gt;
        if (!hasNickname) {&lt;br /&gt;
            nickname.value = makeVal + &#039; &#039; + modelVal + &#039; &#039; + serialVal;&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling (Justin&#039;s design)&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 2) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;/&#039;) === -1) return;&lt;br /&gt;
&lt;br /&gt;
  var slash    = title.indexOf(&#039;/&#039;);&lt;br /&gt;
  var username = title.slice(0, slash).replace(/_/g, &#039; &#039;);&lt;br /&gt;
  var subpage  = title.slice(slash + 1).replace(/_/g, &#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-userpost&#039;);&lt;br /&gt;
&lt;br /&gt;
  var variant = &#039;letter&#039;;&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var html = content.innerHTML || &#039;&#039;;&lt;br /&gt;
    var m = html.match(/pickipedia:variant\s*=\s*(letter|masthead)/i);&lt;br /&gt;
    if (m) variant = m[1].toLowerCase();&lt;br /&gt;
  }&lt;br /&gt;
  var cats = mw.config.get(&#039;wgCategories&#039;) || [];&lt;br /&gt;
  if (cats.indexOf(&#039;Masthead style&#039;) !== -1) variant = &#039;masthead&#039;;&lt;br /&gt;
  if (cats.indexOf(&#039;Letter style&#039;) !== -1) variant = &#039;letter&#039;;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-variant-&#039; + variant);&lt;br /&gt;
&lt;br /&gt;
  var STORAGE_KEY = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  var saved = null;&lt;br /&gt;
  try { saved = localStorage.getItem(STORAGE_KEY); } catch (e) {}&lt;br /&gt;
  if (saved === &#039;dark&#039;) body.classList.add(&#039;pickipedia-dark&#039;);&lt;br /&gt;
&lt;br /&gt;
  // Pre-generated thumb sizes for the transparent logo. The 300px thumb&lt;br /&gt;
  // 404s (never been requested), 400px exists. Use 400px for masthead&lt;br /&gt;
  // (renders sharper at the 200px display size on retina) and 120px for&lt;br /&gt;
  // the topbar.&lt;br /&gt;
  var LOGO_TOPBAR  = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/120px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
  var LOGO_MASTHEAD = &#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Topbar (compact logo + nav) ----------&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;a class=&amp;quot;pickipedia-topbar-logo&amp;quot; href=&amp;quot;/wiki/Main_Page&amp;quot; title=&amp;quot;PickiPedia home&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_TOPBAR + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-topbar-nav&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(topbar, document.body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Hero ----------&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var dek = &#039;&#039;;&lt;br /&gt;
    var dekEl = content.querySelector(&#039;.pp-dek-source&#039;);&lt;br /&gt;
    if (dekEl) {&lt;br /&gt;
      dek = dekEl.innerHTML;&lt;br /&gt;
      dekEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var kickerHtml = &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;User:&#039; + username.replace(/ /g, &#039;_&#039;)) +&lt;br /&gt;
                     &#039;&amp;quot;&amp;gt;User:&#039; + escapeHtml(username) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    var kickerEl = content.querySelector(&#039;.pp-kicker-source&#039;);&lt;br /&gt;
    if (kickerEl) {&lt;br /&gt;
      kickerHtml = escapeHtml(kickerEl.textContent.trim());&lt;br /&gt;
      kickerEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var lastMod = &#039;&#039;;&lt;br /&gt;
    var lastModEl = document.getElementById(&#039;footer-info-lastmod&#039;);&lt;br /&gt;
    if (lastModEl) lastMod = lastModEl.textContent.replace(/^\s*This page was last (edited|modified) on\s*/i, &#039;&#039;).trim();&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
    hero.className = &#039;pickipedia-hero&#039;;&lt;br /&gt;
&lt;br /&gt;
    var mastheadLogoHtml =&lt;br /&gt;
      &#039;&amp;lt;a class=&amp;quot;pp-masthead-logo&amp;quot; href=&amp;quot;/wiki/Main_Page&amp;quot; title=&amp;quot;PickiPedia home&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;img src=&amp;quot;&#039; + LOGO_MASTHEAD + &#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    if (variant === &#039;masthead&#039;) {&lt;br /&gt;
      hero.innerHTML = mastheadLogoHtml +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-topbar&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-topbar-rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-topbar-vol&amp;quot;&amp;gt;&#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-titlewrap&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
          (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      hero.innerHTML = mastheadLogoHtml +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
        (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;Last edited &#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    content.parentNode.insertBefore(hero, content);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ---------- Light/dark toggle ----------&lt;br /&gt;
  var toggle = document.createElement(&#039;button&#039;);&lt;br /&gt;
  toggle.className = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  toggle.type = &#039;button&#039;;&lt;br /&gt;
  toggle.textContent = body.classList.contains(&#039;pickipedia-dark&#039;) ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
  toggle.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
    var dark = body.classList.toggle(&#039;pickipedia-dark&#039;);&lt;br /&gt;
    toggle.textContent = dark ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
    try { localStorage.setItem(STORAGE_KEY, dark ? &#039;dark&#039; : &#039;light&#039;); } catch (e) {}&lt;br /&gt;
  });&lt;br /&gt;
  document.body.appendChild(toggle);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5015</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5015"/>
		<updated>2026-04-29T03:10:29Z</updated>

		<summary type="html">&lt;p&gt;Magent: Unsticky topbar; big floating masthead logo on wide viewports; small topbar logo only on narrow (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Topbar (logo + nav) — non-sticky ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: static;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 10px 24px;&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo img {&lt;br /&gt;
  height: 64px;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero — kicker hugs title hugs body, no rule ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Big floating masthead logo — sits to the LEFT of the title text on&lt;br /&gt;
   wide viewports. The kicker/title/body wrap around it like a magazine&lt;br /&gt;
   drop-figure. Hidden on narrow viewports (the topbar logo handles it).&lt;br /&gt;
   The transparent PNG asset is at /images/8/80/Pickipedia-quarter-transparent.png&lt;br /&gt;
*/&lt;br /&gt;
.pp-masthead-logo {&lt;br /&gt;
  float: left;&lt;br /&gt;
  margin: 0 24px 12px 0;&lt;br /&gt;
  width: 200px;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.pp-masthead-logo img {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Clear the float once the hero ends so video / body content don&#039;t&lt;br /&gt;
   wrap into the logo&#039;s column. */&lt;br /&gt;
.pickipedia-hero::after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  clear: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Logo swap based on viewport ---------- */&lt;br /&gt;
/* Wide: hide compact topbar logo, show big floating masthead logo. */&lt;br /&gt;
@media (min-width: 720px) {&lt;br /&gt;
  .pickipedia-topbar-logo { display: none; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Narrow: hide masthead logo (no room beside title), keep topbar logo. */&lt;br /&gt;
@media (max-width: 719px) {&lt;br /&gt;
  .pp-masthead-logo { display: none; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar { padding: 8px 16px; }&lt;br /&gt;
  .pickipedia-topbar-logo img { height: 48px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 10px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5014</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5014"/>
		<updated>2026-04-29T03:09:16Z</updated>

		<summary type="html">&lt;p&gt;Magent: Inject big floating masthead logo (transparent) inside hero; topbar small logo + nav stay for narrow screens (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
* Blue Railroad Submission - Date to Block Height Converter&lt;br /&gt;
* Adds a datepicker that converts dates to Ethereum block heights&lt;br /&gt;
* Also shows time ago for news templates&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    &lt;br /&gt;
    // Only run on the Blue Railroad Submission form&lt;br /&gt;
    if (!document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;)) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Reference point: known block and timestamp&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    const AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
    &lt;br /&gt;
    // Get current block from footer (format: &amp;quot;24,328,442&amp;quot;)&lt;br /&gt;
    function getCurrentBlockFromFooter() {&lt;br /&gt;
        const footerLink = document.querySelector(&#039;a[href*=&amp;quot;etherscan.io/block/&amp;quot;]&#039;);&lt;br /&gt;
        if (footerLink) {&lt;br /&gt;
            const match = footerLink.href.match(/block\/(\d+)/);&lt;br /&gt;
            if (match) return parseInt(match[1]);&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Calculate block height from date&lt;br /&gt;
    function dateToBlockHeight(targetDate, refBlock, refTimestamp) {&lt;br /&gt;
        const targetTimestamp = targetDate.getTime() / 1000;&lt;br /&gt;
        const secondsDiff = refTimestamp - targetTimestamp;&lt;br /&gt;
        const blocksDiff = Math.round(secondsDiff / AVG_BLOCK_TIME);&lt;br /&gt;
        return refBlock - blocksDiff;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Add the datepicker UI&lt;br /&gt;
    function addDatePicker() {&lt;br /&gt;
        const blockInput = document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;);&lt;br /&gt;
        if (!blockInput) return;&lt;br /&gt;
        &lt;br /&gt;
        const container = document.createElement(&#039;div&#039;);&lt;br /&gt;
        container.style.marginTop = &#039;8px&#039;;&lt;br /&gt;
        container.innerHTML = `&lt;br /&gt;
            &amp;lt;label style=&amp;quot;display: block; margin-bottom: 4px; font-size: 0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
                Or pick a date/time:&lt;br /&gt;
            &amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;datetime-local&amp;quot; id=&amp;quot;br-datepicker&amp;quot; style=&amp;quot;padding: 4px; margin-right: 8px;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;br-convert-btn&amp;quot; style=&amp;quot;padding: 4px 12px; cursor: pointer;&amp;quot;&amp;gt;&lt;br /&gt;
                Convert to Block&lt;br /&gt;
            &amp;lt;/button&amp;gt;&lt;br /&gt;
            &amp;lt;span id=&amp;quot;br-status&amp;quot; style=&amp;quot;margin-left: 8px; font-size: 0.9em; color: #666;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        `;&lt;br /&gt;
        &lt;br /&gt;
        blockInput.parentNode.appendChild(container);&lt;br /&gt;
        &lt;br /&gt;
        const datePicker = document.getElementById(&#039;br-datepicker&#039;);&lt;br /&gt;
        const convertBtn = document.getElementById(&#039;br-convert-btn&#039;);&lt;br /&gt;
        const status = document.getElementById(&#039;br-status&#039;);&lt;br /&gt;
        &lt;br /&gt;
        // Set default to now&lt;br /&gt;
        const now = new Date();&lt;br /&gt;
        datePicker.value = now.toISOString().slice(0, 16);&lt;br /&gt;
        &lt;br /&gt;
        convertBtn.addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
            const selectedDate = new Date(datePicker.value);&lt;br /&gt;
            if (isNaN(selectedDate.getTime())) {&lt;br /&gt;
                status.textContent = &#039;Invalid date&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentBlock = getCurrentBlockFromFooter();&lt;br /&gt;
            if (!currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Could not find reference block&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentTimestamp = Date.now() / 1000;&lt;br /&gt;
            const estimatedBlock = dateToBlockHeight(selectedDate, currentBlock, currentTimestamp);&lt;br /&gt;
            &lt;br /&gt;
            if (estimatedBlock &amp;gt; currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Date is in the future!&#039;;&lt;br /&gt;
                status.style.color = &#039;orange&#039;;&lt;br /&gt;
            } else {&lt;br /&gt;
                status.textContent = &#039;~estimated&#039;;&lt;br /&gt;
                status.style.color = &#039;green&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            blockInput.value = estimatedBlock;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Run when DOM is ready&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, addDatePicker);&lt;br /&gt;
    } else {&lt;br /&gt;
        addDatePicker();&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TimeAgo — shows &amp;quot;X blocks ago&amp;quot; for transcluded templates.&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext:&lt;br /&gt;
 *   &amp;lt;span class=&amp;quot;timeago&amp;quot; data-lastmod-page=&amp;quot;Template:NewsShorts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Fetches the last revision timestamp from the API and renders&lt;br /&gt;
 * a block-based relative time string using Ethereum block heights.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    var AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
&lt;br /&gt;
    var spans = document.querySelectorAll(&#039;.timeago[data-lastmod-page]&#039;);&lt;br /&gt;
    if (!spans.length) return;&lt;br /&gt;
&lt;br /&gt;
    // Format number with commas (e.g., 1234567 -&amp;gt; &amp;quot;1,234,567&amp;quot;)&lt;br /&gt;
    function formatNumber(num) {&lt;br /&gt;
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Collect unique page titles&lt;br /&gt;
    var titles = [];&lt;br /&gt;
    spans.forEach(function(span) {&lt;br /&gt;
        var t = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
        if (t &amp;amp;&amp;amp; titles.indexOf(t) === -1) titles.push(t);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Batch query the API (up to 50 titles per request)&lt;br /&gt;
    var api = mw.config.get(&#039;wgScriptPath&#039;) + &#039;/api.php&#039;;&lt;br /&gt;
    var url = api + &#039;?action=query&amp;amp;prop=revisions&amp;amp;rvprop=timestamp&amp;amp;format=json&amp;amp;titles=&#039; +&lt;br /&gt;
        encodeURIComponent(titles.join(&#039;|&#039;));&lt;br /&gt;
&lt;br /&gt;
    fetch(url).then(function(r) { return r.json(); }).then(function(data) {&lt;br /&gt;
        var pages = data.query &amp;amp;&amp;amp; data.query.pages || {};&lt;br /&gt;
        var timestamps = {};&lt;br /&gt;
&lt;br /&gt;
        Object.keys(pages).forEach(function(id) {&lt;br /&gt;
            var page = pages[id];&lt;br /&gt;
            if (page.revisions &amp;amp;&amp;amp; page.revisions[0]) {&lt;br /&gt;
                timestamps[page.title] = new Date(page.revisions[0].timestamp);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        spans.forEach(function(span) {&lt;br /&gt;
            var title = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
            var ts = timestamps[title];&lt;br /&gt;
            if (!ts) {&lt;br /&gt;
                span.textContent = &#039;&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            span.textContent = formatBlocksAgo(ts);&lt;br /&gt;
            span.title = ts.toLocaleString();&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    function formatBlocksAgo(date) {&lt;br /&gt;
        var secondsAgo = Math.floor((Date.now() - date.getTime()) / 1000);&lt;br /&gt;
        var blocksAgo = Math.round(secondsAgo / AVG_BLOCK_TIME);&lt;br /&gt;
&lt;br /&gt;
        if (blocksAgo &amp;lt; 1) {&lt;br /&gt;
            return &#039;this block&#039;;&lt;br /&gt;
        } else if (blocksAgo === 1) {&lt;br /&gt;
            return &#039;1 block ago&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            return formatNumber(blocksAgo) + &#039; blocks ago&#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * HLS Video Player - Initializes HLS.js for IPFS-hosted videos&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext (via Template:HLSVideo):&lt;br /&gt;
 *   &amp;lt;div class=&amp;quot;hls-video-player&amp;quot; data-cid=&amp;quot;QmXet6...&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * The gadget loads hls.js and initializes players for any element&lt;br /&gt;
 * with the hls-video-player class and a data-cid attribute.&lt;br /&gt;
 *&lt;br /&gt;
 * Supports both HLS streams (CID/master.m3u8) and raw video files.&lt;br /&gt;
 * Tries HLS first; if the manifest 404s, falls back to direct playback.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    var IPFS_GATEWAY = &#039;https://ipfs.delivery-kid.cryptograss.live/ipfs&#039;;&lt;br /&gt;
    var HLS_JS_URL = &#039;https://cdn.jsdelivr.net/npm/hls.js@latest&#039;;&lt;br /&gt;
    var hlsLoadPromise = null;&lt;br /&gt;
&lt;br /&gt;
    // CIDv1 (bafy...) is Base32 lowercase, but MediaWiki capitalizes page titles.&lt;br /&gt;
    // CIDv0 (Qm...) is Base58 case-sensitive — must not be lowercased.&lt;br /&gt;
    function normalizeCid(cid) {&lt;br /&gt;
        if (cid &amp;amp;&amp;amp; cid.substring(0, 4) === &#039;Bafy&#039;) {&lt;br /&gt;
            return cid.toLowerCase();&lt;br /&gt;
        }&lt;br /&gt;
        return cid;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function loadHls() {&lt;br /&gt;
        if (typeof Hls !== &#039;undefined&#039;) {&lt;br /&gt;
            return Promise.resolve();&lt;br /&gt;
        }&lt;br /&gt;
        if (hlsLoadPromise) {&lt;br /&gt;
            return hlsLoadPromise;&lt;br /&gt;
        }&lt;br /&gt;
        hlsLoadPromise = new Promise(function(resolve) {&lt;br /&gt;
            var script = document.createElement(&#039;script&#039;);&lt;br /&gt;
            script.src = HLS_JS_URL;&lt;br /&gt;
            script.onload = resolve;&lt;br /&gt;
            document.head.appendChild(script);&lt;br /&gt;
        });&lt;br /&gt;
        return hlsLoadPromise;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayers() {&lt;br /&gt;
        var containers = document.querySelectorAll(&#039;.hls-video-player[data-cid]:not([data-initialized])&#039;);&lt;br /&gt;
        if (!containers.length) return;&lt;br /&gt;
&lt;br /&gt;
        // Mark ALL containers immediately to prevent race conditions&lt;br /&gt;
        containers.forEach(function(c) {&lt;br /&gt;
            c.setAttribute(&#039;data-initialized&#039;, &#039;true&#039;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Then load hls.js and initialize&lt;br /&gt;
        loadHls().then(function() {&lt;br /&gt;
            containers.forEach(initPlayer);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function createVideoElement(width, maxWidth) {&lt;br /&gt;
        var video = document.createElement(&#039;video&#039;);&lt;br /&gt;
        video.controls = true;&lt;br /&gt;
        video.playsInline = true;&lt;br /&gt;
        video.style.width = width;&lt;br /&gt;
        video.style.maxWidth = maxWidth;&lt;br /&gt;
        video.style.backgroundColor = &#039;#000&#039;;&lt;br /&gt;
        video.style.display = &#039;block&#039;;&lt;br /&gt;
        return video;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fallbackToDirectVideo(container, cid, width, maxWidth) {&lt;br /&gt;
        // CID is a raw video file, not an HLS stream — play directly&lt;br /&gt;
        var directUrl = IPFS_GATEWAY + &#039;/&#039; + normalizeCid(cid);&lt;br /&gt;
        container.innerHTML = &#039;&#039;;&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        video.src = directUrl;&lt;br /&gt;
        video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
            container.innerHTML = &#039;&amp;lt;p style=&amp;quot;color: red; padding: 1em;&amp;quot;&amp;gt;Error loading video. The IPFS content may not be available.&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
        });&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayer(container) {&lt;br /&gt;
        var cid = container.getAttribute(&#039;data-cid&#039;);&lt;br /&gt;
        var normalCid = normalizeCid(cid);&lt;br /&gt;
        var width = container.getAttribute(&#039;data-width&#039;) || &#039;100%&#039;;&lt;br /&gt;
        var maxWidth = container.getAttribute(&#039;data-max-width&#039;) || &#039;800px&#039;;&lt;br /&gt;
        &lt;br /&gt;
        var hlsSrc = IPFS_GATEWAY + &#039;/&#039; + normalCid + &#039;/master.m3u8&#039;;&lt;br /&gt;
&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
&lt;br /&gt;
        if (video.canPlayType(&#039;application/vnd.apple.mpegurl&#039;)) {&lt;br /&gt;
            // Safari native HLS — try HLS first, fall back on error&lt;br /&gt;
            video.src = hlsSrc;&lt;br /&gt;
            video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
                fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
            });&lt;br /&gt;
        } else if (typeof Hls !== &#039;undefined&#039; &amp;amp;&amp;amp; Hls.isSupported()) {&lt;br /&gt;
            var hls = new Hls();&lt;br /&gt;
            hls.loadSource(hlsSrc);&lt;br /&gt;
            hls.attachMedia(video);&lt;br /&gt;
            hls.on(Hls.Events.ERROR, function(event, data) {&lt;br /&gt;
                if (data.fatal) {&lt;br /&gt;
                    // HLS failed (likely no master.m3u8) — try direct video&lt;br /&gt;
                    hls.destroy();&lt;br /&gt;
                    fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            // No HLS support — try direct video&lt;br /&gt;
            fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, initPlayers);&lt;br /&gt;
    } else {&lt;br /&gt;
        initPlayers();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== &#039;undefined&#039; &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function($content) {&lt;br /&gt;
            initPlayers();&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
/**&lt;br /&gt;
 * Instrument form — validation + page name computation (v24772700)&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    console.log(&#039;PickiPedia Common.js instrument module v24772700 loaded&#039;);&lt;br /&gt;
&lt;br /&gt;
    mw.hook(&#039;pf.formValidation&#039;).add(function(args) {&lt;br /&gt;
        var nickname = document.querySelector(&#039;input[name=&amp;quot;Instrument[nickname]&amp;quot;]&#039;);&lt;br /&gt;
        if (!nickname) return;&lt;br /&gt;
&lt;br /&gt;
        var make = document.querySelector(&#039;input[name=&amp;quot;Instrument[make]&amp;quot;]&#039;);&lt;br /&gt;
        var model = document.querySelector(&#039;input[name=&amp;quot;Instrument[model]&amp;quot;]&#039;);&lt;br /&gt;
        var serial = document.querySelector(&#039;input[name=&amp;quot;Instrument[serial]&amp;quot;]&#039;);&lt;br /&gt;
&lt;br /&gt;
        var nickVal = nickname.value.trim();&lt;br /&gt;
        var makeVal = make ? make.value.trim() : &#039;&#039;;&lt;br /&gt;
        var modelVal = model ? model.value.trim() : &#039;&#039;;&lt;br /&gt;
        var serialVal = serial ? serial.value.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var hasNickname = nickVal !== &#039;&#039;;&lt;br /&gt;
        var hasMakerComplete = makeVal !== &#039;&#039; &amp;amp;&amp;amp; modelVal !== &#039;&#039; &amp;amp;&amp;amp; serialVal !== &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (!hasNickname &amp;amp;&amp;amp; !hasMakerComplete) {&lt;br /&gt;
            args.numErrors += 1;&lt;br /&gt;
            if (makeVal !== &#039;&#039; || modelVal !== &#039;&#039; || serialVal !== &#039;&#039;) {&lt;br /&gt;
                alert(&#039;Maker identification requires all three: make, model, and serial number. Or provide a nickname instead.&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
                alert(&#039;Please provide either a nickname or maker identification (make, model, and serial number).&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // If no nickname, fill it from make/model/serial for page naming&lt;br /&gt;
        if (!hasNickname) {&lt;br /&gt;
            nickname.value = makeVal + &#039; &#039; + modelVal + &#039; &#039; + serialVal;&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling (Justin&#039;s design)&lt;br /&gt;
 * Adds:&lt;br /&gt;
 *   - non-sticky topbar with compact PickiPedia logo + edit/history/talk&lt;br /&gt;
 *   - hero block with floating BIG masthead logo (left), kicker, title&lt;br /&gt;
 *     (transparent PNG, hangs to the left of the headline on wide&lt;br /&gt;
 *     viewports; CSS hides the masthead version and shows the topbar&lt;br /&gt;
 *     version below ~720px)&lt;br /&gt;
 *   - light/dark mode toggle (persisted in localStorage)&lt;br /&gt;
 *&lt;br /&gt;
 * Variant from HTML comment marker `pickipedia:variant=letter|masthead`&lt;br /&gt;
 * or category membership; default letter.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);     // 2 = User&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 2) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;/&#039;) === -1) return;&lt;br /&gt;
&lt;br /&gt;
  var slash    = title.indexOf(&#039;/&#039;);&lt;br /&gt;
  var username = title.slice(0, slash).replace(/_/g, &#039; &#039;);&lt;br /&gt;
  var subpage  = title.slice(slash + 1).replace(/_/g, &#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-userpost&#039;);&lt;br /&gt;
&lt;br /&gt;
  var variant = &#039;letter&#039;;&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var html = content.innerHTML || &#039;&#039;;&lt;br /&gt;
    var m = html.match(/pickipedia:variant\s*=\s*(letter|masthead)/i);&lt;br /&gt;
    if (m) variant = m[1].toLowerCase();&lt;br /&gt;
  }&lt;br /&gt;
  var cats = mw.config.get(&#039;wgCategories&#039;) || [];&lt;br /&gt;
  if (cats.indexOf(&#039;Masthead style&#039;) !== -1) variant = &#039;masthead&#039;;&lt;br /&gt;
  if (cats.indexOf(&#039;Letter style&#039;) !== -1) variant = &#039;letter&#039;;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-variant-&#039; + variant);&lt;br /&gt;
&lt;br /&gt;
  // Persisted light/dark mode&lt;br /&gt;
  var STORAGE_KEY = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  var saved = null;&lt;br /&gt;
  try { saved = localStorage.getItem(STORAGE_KEY); } catch (e) {}&lt;br /&gt;
  if (saved === &#039;dark&#039;) body.classList.add(&#039;pickipedia-dark&#039;);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Topbar (compact logo + nav) ----------&lt;br /&gt;
  // CSS hides the topbar logo on wide viewports — the masthead one in&lt;br /&gt;
  // the hero takes over. On narrow viewports the topbar logo shows.&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;a class=&amp;quot;pickipedia-topbar-logo&amp;quot; href=&amp;quot;/wiki/Main_Page&amp;quot; title=&amp;quot;PickiPedia home&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;img src=&amp;quot;/images/thumb/8/80/Pickipedia-quarter-transparent.png/120px-Pickipedia-quarter-transparent.png&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-topbar-nav&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(topbar, document.body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Hero ----------&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var dek = &#039;&#039;;&lt;br /&gt;
    var dekEl = content.querySelector(&#039;.pp-dek-source&#039;);&lt;br /&gt;
    if (dekEl) {&lt;br /&gt;
      dek = dekEl.innerHTML;&lt;br /&gt;
      dekEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var kickerHtml = &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;User:&#039; + username.replace(/ /g, &#039;_&#039;)) +&lt;br /&gt;
                     &#039;&amp;quot;&amp;gt;User:&#039; + escapeHtml(username) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    var kickerEl = content.querySelector(&#039;.pp-kicker-source&#039;);&lt;br /&gt;
    if (kickerEl) {&lt;br /&gt;
      kickerHtml = escapeHtml(kickerEl.textContent.trim());&lt;br /&gt;
      kickerEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var lastMod = &#039;&#039;;&lt;br /&gt;
    var lastModEl = document.getElementById(&#039;footer-info-lastmod&#039;);&lt;br /&gt;
    if (lastModEl) lastMod = lastModEl.textContent.replace(/^\s*This page was last (edited|modified) on\s*/i, &#039;&#039;).trim();&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
    hero.className = &#039;pickipedia-hero&#039;;&lt;br /&gt;
&lt;br /&gt;
    // Big masthead logo (transparent PNG) — floats left in the hero.&lt;br /&gt;
    // Hidden by CSS on narrow viewports.&lt;br /&gt;
    var mastheadLogoHtml =&lt;br /&gt;
      &#039;&amp;lt;a class=&amp;quot;pp-masthead-logo&amp;quot; href=&amp;quot;/wiki/Main_Page&amp;quot; title=&amp;quot;PickiPedia home&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;img src=&amp;quot;/images/thumb/8/80/Pickipedia-quarter-transparent.png/300px-Pickipedia-quarter-transparent.png&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
    if (variant === &#039;masthead&#039;) {&lt;br /&gt;
      hero.innerHTML = mastheadLogoHtml +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-topbar&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-topbar-rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-topbar-vol&amp;quot;&amp;gt;&#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-titlewrap&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
          (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      hero.innerHTML = mastheadLogoHtml +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
        (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;Last edited &#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    content.parentNode.insertBefore(hero, content);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ---------- Light/dark toggle ----------&lt;br /&gt;
  var toggle = document.createElement(&#039;button&#039;);&lt;br /&gt;
  toggle.className = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  toggle.type = &#039;button&#039;;&lt;br /&gt;
  toggle.textContent = body.classList.contains(&#039;pickipedia-dark&#039;) ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
  toggle.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
    var dark = body.classList.toggle(&#039;pickipedia-dark&#039;);&lt;br /&gt;
    toggle.textContent = dark ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
    try { localStorage.setItem(STORAGE_KEY, dark ? &#039;dark&#039; : &#039;light&#039;); } catch (e) {}&lt;br /&gt;
  });&lt;br /&gt;
  document.body.appendChild(toggle);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5012</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5012"/>
		<updated>2026-04-29T02:48:16Z</updated>

		<summary type="html">&lt;p&gt;Magent: Reduce hero padding-top to 10px (letter variant, desktop + mobile) (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Sticky topbar (logo + nav) ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: sticky;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 10px 24px;&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo img {&lt;br /&gt;
  height: 64px;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero — kicker hugs title hugs body, no rule ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar {&lt;br /&gt;
    padding: 8px 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-topbar-logo img { height: 48px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 10px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5011</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5011"/>
		<updated>2026-04-29T02:39:03Z</updated>

		<summary type="html">&lt;p&gt;Magent: Fix typo: grid-command -&amp;gt; grid-column (masthead mobile) (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Sticky topbar (logo + nav) ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: sticky;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 10px 24px;&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo img {&lt;br /&gt;
  height: 64px;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero — kicker hugs title hugs body, no rule ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 40px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar {&lt;br /&gt;
    padding: 8px 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-topbar-logo img { height: 48px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 22px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5010</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5010"/>
		<updated>2026-04-29T02:37:57Z</updated>

		<summary type="html">&lt;p&gt;Magent: Bigger PickiPedia logo in topbar (40→64 desktop, 32→48 mobile) (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Sticky topbar (logo + nav) ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: sticky;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 10px 24px;&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo img {&lt;br /&gt;
  height: 64px;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero — kicker hugs title hugs body, no rule ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 40px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar {&lt;br /&gt;
    padding: 8px 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-topbar-logo img { height: 48px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 22px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-command: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5009</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5009"/>
		<updated>2026-04-29T02:32:39Z</updated>

		<summary type="html">&lt;p&gt;Magent: Override monobook&amp;#039;s default h1 padding + border-bottom on .pp-title (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Sticky topbar (logo + nav) ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: sticky;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 10px 24px;&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo img {&lt;br /&gt;
  height: 40px;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero — kicker hugs title hugs body, no rule ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
&lt;br /&gt;
/* The .pp-title is an h1 — monobook&#039;s default skin gives every h1 a&lt;br /&gt;
   16px top padding, 5px bottom padding, and a 1px solid #aaa&lt;br /&gt;
   border-bottom. Reset all of that explicitly. */&lt;br /&gt;
.pickipedia-hero h1.pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 40px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar {&lt;br /&gt;
    padding: 8px 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-topbar-logo img { height: 32px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 22px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5008</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5008"/>
		<updated>2026-04-29T02:30:03Z</updated>

		<summary type="html">&lt;p&gt;Magent: Hero: tighten — drop margins around title; drop hr below meta (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 *&lt;br /&gt;
 * The matching JS in MediaWiki:Common.js adds the body class&lt;br /&gt;
 *   .pickipedia-userpost&lt;br /&gt;
 * on User:&amp;lt;name&amp;gt;/&amp;lt;subpage&amp;gt; view pages, plus injects:&lt;br /&gt;
 *   - sticky .pickipedia-topbar (logo + edit/history/talk)&lt;br /&gt;
 *   - .pickipedia-hero (kicker, title, dek, optional meta)&lt;br /&gt;
 *   - .pickipedia-mode dark-mode toggle&lt;br /&gt;
 *&lt;br /&gt;
 * Two layout variants by body class:&lt;br /&gt;
 *   .pickipedia-variant-letter   (default — centered narrow column)&lt;br /&gt;
 *   .pickipedia-variant-masthead (asymmetric, full-bleed media)&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Sticky topbar (logo + nav) ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: sticky;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 10px 24px;&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo img {&lt;br /&gt;
  height: 40px;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero — kicker hugs title hugs meta, no rule ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
.pickipedia-hero .pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 14px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  margin-top: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 40px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar {&lt;br /&gt;
    padding: 8px 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-topbar-logo img { height: 32px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 22px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-userpost .mw-parser-output { margin-top: 18px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5007</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.css&amp;diff=5007"/>
		<updated>2026-04-29T02:26:08Z</updated>

		<summary type="html">&lt;p&gt;Magent: Style new .pp-meta line (replaces the old byline); kicker link inherits accent color (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
    display: block;&lt;br /&gt;
    font-size: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    .show-infobox {&lt;br /&gt;
        float: none !important;&lt;br /&gt;
        width: 100% !important;&lt;br /&gt;
        margin: 0 0 1em 0 !important;&lt;br /&gt;
        box-sizing: border-box;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 *&lt;br /&gt;
 * The matching JS in MediaWiki:Common.js adds the body class&lt;br /&gt;
 *   .pickipedia-userpost&lt;br /&gt;
 * on User:&amp;lt;name&amp;gt;/&amp;lt;subpage&amp;gt; view pages, plus injects:&lt;br /&gt;
 *   - sticky .pickipedia-topbar (logo + edit/history/talk)&lt;br /&gt;
 *   - .pickipedia-hero (kicker, title, dek, optional meta)&lt;br /&gt;
 *   - .pickipedia-mode dark-mode toggle&lt;br /&gt;
 *&lt;br /&gt;
 * Two layout variants by body class:&lt;br /&gt;
 *   .pickipedia-variant-letter   (default — centered narrow column)&lt;br /&gt;
 *   .pickipedia-variant-masthead (asymmetric, full-bleed media)&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  --pp-paper:   #f5efe4;&lt;br /&gt;
  --pp-ink:     #2b1d12;&lt;br /&gt;
  --pp-muted:   #7a6450;&lt;br /&gt;
  --pp-rule:    #d9cdb8;&lt;br /&gt;
  --pp-accent:  #9a3b1b;&lt;br /&gt;
  --pp-card:    #ede4d2;&lt;br /&gt;
  --pp-serif:   Georgia, &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Charter&amp;quot;, &amp;quot;Times New Roman&amp;quot;, serif;&lt;br /&gt;
  --pp-mono:    ui-monospace, &amp;quot;SF Mono&amp;quot;, &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, monospace;&lt;br /&gt;
  --pp-sans:    -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, system-ui, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost.pickipedia-dark {&lt;br /&gt;
  --pp-paper:   #1a1410;&lt;br /&gt;
  --pp-ink:     #e8dccb;&lt;br /&gt;
  --pp-muted:   #a89888;&lt;br /&gt;
  --pp-rule:    #3a2e22;&lt;br /&gt;
  --pp-accent:  #d97a4a;&lt;br /&gt;
  --pp-card:    #221a14;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #column-one,&lt;br /&gt;
.pickipedia-userpost #sidebar,&lt;br /&gt;
.pickipedia-userpost #mw-panel,&lt;br /&gt;
.pickipedia-userpost .vector-main-menu-container,&lt;br /&gt;
.pickipedia-userpost .vector-page-toolbar,&lt;br /&gt;
.pickipedia-userpost #mw-navigation .portal,&lt;br /&gt;
.pickipedia-userpost .mw-sidebar-container,&lt;br /&gt;
.pickipedia-userpost #p-views,&lt;br /&gt;
.pickipedia-userpost #p-cactions,&lt;br /&gt;
.pickipedia-userpost #p-cactions-mobile,&lt;br /&gt;
.pickipedia-userpost #p-personal,&lt;br /&gt;
.pickipedia-userpost #p-logo,&lt;br /&gt;
.pickipedia-userpost .vector-page-tools,&lt;br /&gt;
.pickipedia-userpost .mw-footer,&lt;br /&gt;
.pickipedia-userpost #footer,&lt;br /&gt;
.pickipedia-userpost .printfooter,&lt;br /&gt;
.pickipedia-userpost .catlinks,&lt;br /&gt;
.pickipedia-userpost .mw-indicators,&lt;br /&gt;
.pickipedia-userpost #siteSub,&lt;br /&gt;
.pickipedia-userpost #contentSub,&lt;br /&gt;
.pickipedia-userpost .subpages,&lt;br /&gt;
.pickipedia-userpost #jump-to-nav,&lt;br /&gt;
.pickipedia-userpost .mw-jump-link {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #globalWrapper,&lt;br /&gt;
.pickipedia-userpost #column-content,&lt;br /&gt;
.pickipedia-userpost .monobook-body {&lt;br /&gt;
  float: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  width: auto !important;&lt;br /&gt;
  background: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost #content,&lt;br /&gt;
.pickipedia-userpost .mw-body,&lt;br /&gt;
.pickipedia-userpost #bodyContent,&lt;br /&gt;
.pickipedia-userpost .mw-content-container {&lt;br /&gt;
  background: var(--pp-paper) !important;&lt;br /&gt;
  border: none !important;&lt;br /&gt;
  box-shadow: none !important;&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  padding: 0 !important;&lt;br /&gt;
  max-width: none !important;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-first-heading,&lt;br /&gt;
.pickipedia-userpost #firstHeading,&lt;br /&gt;
.pickipedia-userpost h1.firstHeading {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Sticky topbar (logo + nav) ---------- */&lt;br /&gt;
.pickipedia-topbar {&lt;br /&gt;
  position: sticky;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  padding: 10px 24px;&lt;br /&gt;
  background: var(--pp-paper);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-logo img {&lt;br /&gt;
  height: 40px;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  gap: 16px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-topbar-nav a:hover { color: var(--pp-accent); }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Hero ---------- */&lt;br /&gt;
.pickipedia-hero {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.18em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  margin-bottom: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  border-bottom: 1px dotted currentColor;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-kicker a:hover { color: var(--pp-ink); }&lt;br /&gt;
.pickipedia-hero .pp-title {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  letter-spacing: -0.018em;&lt;br /&gt;
  margin: 0 0 14px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-dek {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-hero .pp-meta {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.08em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  padding-bottom: 18px;&lt;br /&gt;
  margin-bottom: 28px;&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Body type ---------- */&lt;br /&gt;
.pickipedia-userpost .mw-parser-output {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; p {&lt;br /&gt;
  text-wrap: pretty;&lt;br /&gt;
  margin: 0 0 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 44px 0 16px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  letter-spacing: -0.01em;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output &amp;gt; h3 {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  margin: 32px 0 12px;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a {&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-image: linear-gradient(var(--pp-accent), var(--pp-accent));&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
  transition: color .15s, background-size .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a:hover {&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output a.new {&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  background-image: linear-gradient(var(--pp-muted), var(--pp-muted));&lt;br /&gt;
  background-size: 100% 1px;&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  background-position: 0 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output blockquote {&lt;br /&gt;
  border-left: 3px solid var(--pp-accent);&lt;br /&gt;
  margin: 32px 0;&lt;br /&gt;
  padding: 4px 0 4px 24px;&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr {&lt;br /&gt;
  border: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 40px 0;&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output hr::before {&lt;br /&gt;
  content: &amp;quot;❦&amp;quot;;&lt;br /&gt;
  font-size: 18px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output iframe,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output video,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output embed,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .hls-video-player {&lt;br /&gt;
  margin: 28px 0;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumb,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figure {&lt;br /&gt;
  border: none;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-userpost .mw-parser-output .thumbcaption,&lt;br /&gt;
.pickipedia-userpost .mw-parser-output figcaption {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-top: 12px;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter {&lt;br /&gt;
  font-family: var(--pp-serif);&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.86;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 10px 0 0;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Letter (default) ---------- */&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero,&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  max-width: 640px;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  padding-left: 24px;&lt;br /&gt;
  padding-right: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero {&lt;br /&gt;
  padding-top: 40px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 52px;&lt;br /&gt;
  line-height: 1.08;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 21px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output {&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.65;&lt;br /&gt;
  padding-bottom: 80px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h2 { font-size: 28px; line-height: 1.2; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output &amp;gt; h3 { font-size: 22px; line-height: 1.25; }&lt;br /&gt;
.pickipedia-variant-letter .mw-parser-output blockquote { font-size: 22px; line-height: 1.45; }&lt;br /&gt;
&lt;br /&gt;
/* ---------- Variant: Masthead ---------- */&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 36px 48px 28px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 28px;&lt;br /&gt;
  align-items: end;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  gap: 14px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-rule {&lt;br /&gt;
  flex: 1; height: 1px; background: var(--pp-rule);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-topbar-vol {&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  color: var(--pp-muted);&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-title {&lt;br /&gt;
  font-size: 76px;&lt;br /&gt;
  line-height: 0.96;&lt;br /&gt;
  letter-spacing: -0.025em;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .pickipedia-hero .pp-dek {&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  margin: 22px 0 0;&lt;br /&gt;
  max-width: 620px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
  max-width: 1080px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  padding: 12px 48px 80px;&lt;br /&gt;
  display: grid;&lt;br /&gt;
  grid-template-columns: repeat(12, 1fr);&lt;br /&gt;
  gap: 32px;&lt;br /&gt;
  font-size: 19px;&lt;br /&gt;
  line-height: 1.7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; * {&lt;br /&gt;
  grid-column: 4 / span 7;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; figure,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .thumb,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; iframe,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; video,&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; .hls-video-player {&lt;br /&gt;
  grid-column: 1 / -1;&lt;br /&gt;
  margin: 24px 0 48px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output &amp;gt; h2 {&lt;br /&gt;
  font-size: 26px;&lt;br /&gt;
  margin: 40px 0 14px;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-variant-masthead .mw-parser-output blockquote {&lt;br /&gt;
  font-size: 28px;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-top: 1px solid var(--pp-rule);&lt;br /&gt;
  border-bottom: 1px solid var(--pp-rule);&lt;br /&gt;
  padding: 12px 0;&lt;br /&gt;
  margin: 36px 0;&lt;br /&gt;
  text-wrap: balance;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Light/dark toggle ---------- */&lt;br /&gt;
.pickipedia-mode {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  background: var(--pp-card);&lt;br /&gt;
  color: var(--pp-ink);&lt;br /&gt;
  border: 1px solid var(--pp-rule);&lt;br /&gt;
  border-radius: 999px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-family: var(--pp-mono);&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  letter-spacing: 0.1em;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  z-index: 50;&lt;br /&gt;
  transition: background .15s, color .15s, border-color .15s;&lt;br /&gt;
}&lt;br /&gt;
.pickipedia-mode:hover {&lt;br /&gt;
  border-color: var(--pp-accent);&lt;br /&gt;
  color: var(--pp-accent);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- Responsive ---------- */&lt;br /&gt;
@media (max-width: 880px) {&lt;br /&gt;
  .pickipedia-topbar {&lt;br /&gt;
    padding: 8px 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-topbar-logo img { height: 32px; }&lt;br /&gt;
  .pickipedia-topbar-nav { gap: 12px; font-size: 10px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero { padding-top: 22px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-title { font-size: 32px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-dek { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-kicker { margin-bottom: 8px; }&lt;br /&gt;
  .pickipedia-variant-letter .pickipedia-hero .pp-meta {&lt;br /&gt;
    padding-bottom: 14px;&lt;br /&gt;
    margin-bottom: 18px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output { font-size: 17px; }&lt;br /&gt;
  .pickipedia-variant-letter .mw-parser-output &amp;gt; p:first-of-type::first-letter { font-size: 56px; }&lt;br /&gt;
&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero {&lt;br /&gt;
    padding: 24px 16px 18px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    gap: 16px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-titlewrap {&lt;br /&gt;
    grid-column: 1 / -1;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .pickipedia-hero .pp-title { font-size: 36px; }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output {&lt;br /&gt;
    padding: 12px 16px 64px;&lt;br /&gt;
    grid-template-columns: 1fr;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
  .pickipedia-variant-masthead .mw-parser-output &amp;gt; * { grid-column: 1; }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5006</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Common.js&amp;diff=5006"/>
		<updated>2026-04-29T02:24:58Z</updated>

		<summary type="html">&lt;p&gt;Magent: Drop the byline (avatar+name) below title — kicker already carries User:Name; just keep date as small meta line (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
* Blue Railroad Submission - Date to Block Height Converter&lt;br /&gt;
* Adds a datepicker that converts dates to Ethereum block heights&lt;br /&gt;
* Also shows time ago for news templates&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    &lt;br /&gt;
    // Only run on the Blue Railroad Submission form&lt;br /&gt;
    if (!document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;)) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Reference point: known block and timestamp&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    const AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
    &lt;br /&gt;
    // Get current block from footer (format: &amp;quot;24,328,442&amp;quot;)&lt;br /&gt;
    function getCurrentBlockFromFooter() {&lt;br /&gt;
        const footerLink = document.querySelector(&#039;a[href*=&amp;quot;etherscan.io/block/&amp;quot;]&#039;);&lt;br /&gt;
        if (footerLink) {&lt;br /&gt;
            const match = footerLink.href.match(/block\/(\d+)/);&lt;br /&gt;
            if (match) return parseInt(match[1]);&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Calculate block height from date&lt;br /&gt;
    function dateToBlockHeight(targetDate, refBlock, refTimestamp) {&lt;br /&gt;
        const targetTimestamp = targetDate.getTime() / 1000;&lt;br /&gt;
        const secondsDiff = refTimestamp - targetTimestamp;&lt;br /&gt;
        const blocksDiff = Math.round(secondsDiff / AVG_BLOCK_TIME);&lt;br /&gt;
        return refBlock - blocksDiff;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Add the datepicker UI&lt;br /&gt;
    function addDatePicker() {&lt;br /&gt;
        const blockInput = document.querySelector(&#039;input[name=&amp;quot;Blue Railroad Submission[block_height]&amp;quot;]&#039;);&lt;br /&gt;
        if (!blockInput) return;&lt;br /&gt;
        &lt;br /&gt;
        const container = document.createElement(&#039;div&#039;);&lt;br /&gt;
        container.style.marginTop = &#039;8px&#039;;&lt;br /&gt;
        container.innerHTML = `&lt;br /&gt;
            &amp;lt;label style=&amp;quot;display: block; margin-bottom: 4px; font-size: 0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
                Or pick a date/time:&lt;br /&gt;
            &amp;lt;/label&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;datetime-local&amp;quot; id=&amp;quot;br-datepicker&amp;quot; style=&amp;quot;padding: 4px; margin-right: 8px;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;button type=&amp;quot;button&amp;quot; id=&amp;quot;br-convert-btn&amp;quot; style=&amp;quot;padding: 4px 12px; cursor: pointer;&amp;quot;&amp;gt;&lt;br /&gt;
                Convert to Block&lt;br /&gt;
            &amp;lt;/button&amp;gt;&lt;br /&gt;
            &amp;lt;span id=&amp;quot;br-status&amp;quot; style=&amp;quot;margin-left: 8px; font-size: 0.9em; color: #666;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        `;&lt;br /&gt;
        &lt;br /&gt;
        blockInput.parentNode.appendChild(container);&lt;br /&gt;
        &lt;br /&gt;
        const datePicker = document.getElementById(&#039;br-datepicker&#039;);&lt;br /&gt;
        const convertBtn = document.getElementById(&#039;br-convert-btn&#039;);&lt;br /&gt;
        const status = document.getElementById(&#039;br-status&#039;);&lt;br /&gt;
        &lt;br /&gt;
        // Set default to now&lt;br /&gt;
        const now = new Date();&lt;br /&gt;
        datePicker.value = now.toISOString().slice(0, 16);&lt;br /&gt;
        &lt;br /&gt;
        convertBtn.addEventListener(&#039;click&#039;, function() {&lt;br /&gt;
            const selectedDate = new Date(datePicker.value);&lt;br /&gt;
            if (isNaN(selectedDate.getTime())) {&lt;br /&gt;
                status.textContent = &#039;Invalid date&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentBlock = getCurrentBlockFromFooter();&lt;br /&gt;
            if (!currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Could not find reference block&#039;;&lt;br /&gt;
                status.style.color = &#039;red&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            const currentTimestamp = Date.now() / 1000;&lt;br /&gt;
            const estimatedBlock = dateToBlockHeight(selectedDate, currentBlock, currentTimestamp);&lt;br /&gt;
            &lt;br /&gt;
            if (estimatedBlock &amp;gt; currentBlock) {&lt;br /&gt;
                status.textContent = &#039;Date is in the future!&#039;;&lt;br /&gt;
                status.style.color = &#039;orange&#039;;&lt;br /&gt;
            } else {&lt;br /&gt;
                status.textContent = &#039;~estimated&#039;;&lt;br /&gt;
                status.style.color = &#039;green&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            blockInput.value = estimatedBlock;&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Run when DOM is ready&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, addDatePicker);&lt;br /&gt;
    } else {&lt;br /&gt;
        addDatePicker();&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TimeAgo — shows &amp;quot;X blocks ago&amp;quot; for transcluded templates.&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext:&lt;br /&gt;
 *   &amp;lt;span class=&amp;quot;timeago&amp;quot; data-lastmod-page=&amp;quot;Template:NewsShorts&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Fetches the last revision timestamp from the API and renders&lt;br /&gt;
 * a block-based relative time string using Ethereum block heights.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    // Post-merge average block time is ~12.12 seconds&lt;br /&gt;
    var AVG_BLOCK_TIME = 12.12;&lt;br /&gt;
&lt;br /&gt;
    var spans = document.querySelectorAll(&#039;.timeago[data-lastmod-page]&#039;);&lt;br /&gt;
    if (!spans.length) return;&lt;br /&gt;
&lt;br /&gt;
    // Format number with commas (e.g., 1234567 -&amp;gt; &amp;quot;1,234,567&amp;quot;)&lt;br /&gt;
    function formatNumber(num) {&lt;br /&gt;
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &#039;,&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Collect unique page titles&lt;br /&gt;
    var titles = [];&lt;br /&gt;
    spans.forEach(function(span) {&lt;br /&gt;
        var t = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
        if (t &amp;amp;&amp;amp; titles.indexOf(t) === -1) titles.push(t);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Batch query the API (up to 50 titles per request)&lt;br /&gt;
    var api = mw.config.get(&#039;wgScriptPath&#039;) + &#039;/api.php&#039;;&lt;br /&gt;
    var url = api + &#039;?action=query&amp;amp;prop=revisions&amp;amp;rvprop=timestamp&amp;amp;format=json&amp;amp;titles=&#039; +&lt;br /&gt;
        encodeURIComponent(titles.join(&#039;|&#039;));&lt;br /&gt;
&lt;br /&gt;
    fetch(url).then(function(r) { return r.json(); }).then(function(data) {&lt;br /&gt;
        var pages = data.query &amp;amp;&amp;amp; data.query.pages || {};&lt;br /&gt;
        var timestamps = {};&lt;br /&gt;
&lt;br /&gt;
        Object.keys(pages).forEach(function(id) {&lt;br /&gt;
            var page = pages[id];&lt;br /&gt;
            if (page.revisions &amp;amp;&amp;amp; page.revisions[0]) {&lt;br /&gt;
                timestamps[page.title] = new Date(page.revisions[0].timestamp);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        spans.forEach(function(span) {&lt;br /&gt;
            var title = span.getAttribute(&#039;data-lastmod-page&#039;);&lt;br /&gt;
            var ts = timestamps[title];&lt;br /&gt;
            if (!ts) {&lt;br /&gt;
                span.textContent = &#039;&#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            span.textContent = formatBlocksAgo(ts);&lt;br /&gt;
            span.title = ts.toLocaleString();&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    function formatBlocksAgo(date) {&lt;br /&gt;
        var secondsAgo = Math.floor((Date.now() - date.getTime()) / 1000);&lt;br /&gt;
        var blocksAgo = Math.round(secondsAgo / AVG_BLOCK_TIME);&lt;br /&gt;
&lt;br /&gt;
        if (blocksAgo &amp;lt; 1) {&lt;br /&gt;
            return &#039;this block&#039;;&lt;br /&gt;
        } else if (blocksAgo === 1) {&lt;br /&gt;
            return &#039;1 block ago&#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            return formatNumber(blocksAgo) + &#039; blocks ago&#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * HLS Video Player - Initializes HLS.js for IPFS-hosted videos&lt;br /&gt;
 *&lt;br /&gt;
 * Usage in wikitext (via Template:HLSVideo):&lt;br /&gt;
 *   &amp;lt;div class=&amp;quot;hls-video-player&amp;quot; data-cid=&amp;quot;QmXet6...&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * The gadget loads hls.js and initializes players for any element&lt;br /&gt;
 * with the hls-video-player class and a data-cid attribute.&lt;br /&gt;
 *&lt;br /&gt;
 * Supports both HLS streams (CID/master.m3u8) and raw video files.&lt;br /&gt;
 * Tries HLS first; if the manifest 404s, falls back to direct playback.&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    var IPFS_GATEWAY = &#039;https://ipfs.delivery-kid.cryptograss.live/ipfs&#039;;&lt;br /&gt;
    var HLS_JS_URL = &#039;https://cdn.jsdelivr.net/npm/hls.js@latest&#039;;&lt;br /&gt;
    var hlsLoadPromise = null;&lt;br /&gt;
&lt;br /&gt;
    // CIDv1 (bafy...) is Base32 lowercase, but MediaWiki capitalizes page titles.&lt;br /&gt;
    // CIDv0 (Qm...) is Base58 case-sensitive — must not be lowercased.&lt;br /&gt;
    function normalizeCid(cid) {&lt;br /&gt;
        if (cid &amp;amp;&amp;amp; cid.substring(0, 4) === &#039;Bafy&#039;) {&lt;br /&gt;
            return cid.toLowerCase();&lt;br /&gt;
        }&lt;br /&gt;
        return cid;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function loadHls() {&lt;br /&gt;
        if (typeof Hls !== &#039;undefined&#039;) {&lt;br /&gt;
            return Promise.resolve();&lt;br /&gt;
        }&lt;br /&gt;
        if (hlsLoadPromise) {&lt;br /&gt;
            return hlsLoadPromise;&lt;br /&gt;
        }&lt;br /&gt;
        hlsLoadPromise = new Promise(function(resolve) {&lt;br /&gt;
            var script = document.createElement(&#039;script&#039;);&lt;br /&gt;
            script.src = HLS_JS_URL;&lt;br /&gt;
            script.onload = resolve;&lt;br /&gt;
            document.head.appendChild(script);&lt;br /&gt;
        });&lt;br /&gt;
        return hlsLoadPromise;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayers() {&lt;br /&gt;
        var containers = document.querySelectorAll(&#039;.hls-video-player[data-cid]:not([data-initialized])&#039;);&lt;br /&gt;
        if (!containers.length) return;&lt;br /&gt;
&lt;br /&gt;
        // Mark ALL containers immediately to prevent race conditions&lt;br /&gt;
        containers.forEach(function(c) {&lt;br /&gt;
            c.setAttribute(&#039;data-initialized&#039;, &#039;true&#039;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // Then load hls.js and initialize&lt;br /&gt;
        loadHls().then(function() {&lt;br /&gt;
            containers.forEach(initPlayer);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function createVideoElement(width, maxWidth) {&lt;br /&gt;
        var video = document.createElement(&#039;video&#039;);&lt;br /&gt;
        video.controls = true;&lt;br /&gt;
        video.playsInline = true;&lt;br /&gt;
        video.style.width = width;&lt;br /&gt;
        video.style.maxWidth = maxWidth;&lt;br /&gt;
        video.style.backgroundColor = &#039;#000&#039;;&lt;br /&gt;
        video.style.display = &#039;block&#039;;&lt;br /&gt;
        return video;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fallbackToDirectVideo(container, cid, width, maxWidth) {&lt;br /&gt;
        // CID is a raw video file, not an HLS stream — play directly&lt;br /&gt;
        var directUrl = IPFS_GATEWAY + &#039;/&#039; + normalizeCid(cid);&lt;br /&gt;
        container.innerHTML = &#039;&#039;;&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        video.src = directUrl;&lt;br /&gt;
        video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
            container.innerHTML = &#039;&amp;lt;p style=&amp;quot;color: red; padding: 1em;&amp;quot;&amp;gt;Error loading video. The IPFS content may not be available.&amp;lt;/p&amp;gt;&#039;;&lt;br /&gt;
        });&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initPlayer(container) {&lt;br /&gt;
        var cid = container.getAttribute(&#039;data-cid&#039;);&lt;br /&gt;
        var normalCid = normalizeCid(cid);&lt;br /&gt;
        var width = container.getAttribute(&#039;data-width&#039;) || &#039;100%&#039;;&lt;br /&gt;
        var maxWidth = container.getAttribute(&#039;data-max-width&#039;) || &#039;800px&#039;;&lt;br /&gt;
        &lt;br /&gt;
        var hlsSrc = IPFS_GATEWAY + &#039;/&#039; + normalCid + &#039;/master.m3u8&#039;;&lt;br /&gt;
&lt;br /&gt;
        var video = createVideoElement(width, maxWidth);&lt;br /&gt;
        container.appendChild(video);&lt;br /&gt;
&lt;br /&gt;
        if (video.canPlayType(&#039;application/vnd.apple.mpegurl&#039;)) {&lt;br /&gt;
            // Safari native HLS — try HLS first, fall back on error&lt;br /&gt;
            video.src = hlsSrc;&lt;br /&gt;
            video.addEventListener(&#039;error&#039;, function() {&lt;br /&gt;
                fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
            });&lt;br /&gt;
        } else if (typeof Hls !== &#039;undefined&#039; &amp;amp;&amp;amp; Hls.isSupported()) {&lt;br /&gt;
            var hls = new Hls();&lt;br /&gt;
            hls.loadSource(hlsSrc);&lt;br /&gt;
            hls.attachMedia(video);&lt;br /&gt;
            hls.on(Hls.Events.ERROR, function(event, data) {&lt;br /&gt;
                if (data.fatal) {&lt;br /&gt;
                    // HLS failed (likely no master.m3u8) — try direct video&lt;br /&gt;
                    hls.destroy();&lt;br /&gt;
                    fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            // No HLS support — try direct video&lt;br /&gt;
            fallbackToDirectVideo(container, cid, width, maxWidth);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &#039;loading&#039;) {&lt;br /&gt;
        document.addEventListener(&#039;DOMContentLoaded&#039;, initPlayers);&lt;br /&gt;
    } else {&lt;br /&gt;
        initPlayers();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (typeof mw !== &#039;undefined&#039; &amp;amp;&amp;amp; mw.hook) {&lt;br /&gt;
        mw.hook(&#039;wikipage.content&#039;).add(function($content) {&lt;br /&gt;
            initPlayers();&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
})();&lt;br /&gt;
/**&lt;br /&gt;
 * Instrument form — validation + page name computation (v24772700)&lt;br /&gt;
 */&lt;br /&gt;
(function() {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
    console.log(&#039;PickiPedia Common.js instrument module v24772700 loaded&#039;);&lt;br /&gt;
&lt;br /&gt;
    mw.hook(&#039;pf.formValidation&#039;).add(function(args) {&lt;br /&gt;
        var nickname = document.querySelector(&#039;input[name=&amp;quot;Instrument[nickname]&amp;quot;]&#039;);&lt;br /&gt;
        if (!nickname) return;&lt;br /&gt;
&lt;br /&gt;
        var make = document.querySelector(&#039;input[name=&amp;quot;Instrument[make]&amp;quot;]&#039;);&lt;br /&gt;
        var model = document.querySelector(&#039;input[name=&amp;quot;Instrument[model]&amp;quot;]&#039;);&lt;br /&gt;
        var serial = document.querySelector(&#039;input[name=&amp;quot;Instrument[serial]&amp;quot;]&#039;);&lt;br /&gt;
&lt;br /&gt;
        var nickVal = nickname.value.trim();&lt;br /&gt;
        var makeVal = make ? make.value.trim() : &#039;&#039;;&lt;br /&gt;
        var modelVal = model ? model.value.trim() : &#039;&#039;;&lt;br /&gt;
        var serialVal = serial ? serial.value.trim() : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        var hasNickname = nickVal !== &#039;&#039;;&lt;br /&gt;
        var hasMakerComplete = makeVal !== &#039;&#039; &amp;amp;&amp;amp; modelVal !== &#039;&#039; &amp;amp;&amp;amp; serialVal !== &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
        if (!hasNickname &amp;amp;&amp;amp; !hasMakerComplete) {&lt;br /&gt;
            args.numErrors += 1;&lt;br /&gt;
            if (makeVal !== &#039;&#039; || modelVal !== &#039;&#039; || serialVal !== &#039;&#039;) {&lt;br /&gt;
                alert(&#039;Maker identification requires all three: make, model, and serial number. Or provide a nickname instead.&#039;);&lt;br /&gt;
            } else {&lt;br /&gt;
                alert(&#039;Please provide either a nickname or maker identification (make, model, and serial number).&#039;);&lt;br /&gt;
            }&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // If no nickname, fill it from make/model/serial for page naming&lt;br /&gt;
        if (!hasNickname) {&lt;br /&gt;
            nickname.value = makeVal + &#039; &#039; + modelVal + &#039; &#039; + serialVal;&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling (Justin&#039;s design)&lt;br /&gt;
 * Adds:&lt;br /&gt;
 *   - sticky topbar with PickiPedia logo + edit/history/talk&lt;br /&gt;
 *   - hero block (kicker, title, dek, optional last-edited line)&lt;br /&gt;
 *   - light/dark mode toggle (persisted in localStorage)&lt;br /&gt;
 *&lt;br /&gt;
 * The kicker (USER:Name) is the only attribution element — the&lt;br /&gt;
 * avatar + repeated name beneath the title was redundant noise.&lt;br /&gt;
 *&lt;br /&gt;
 * Variant from HTML comment marker `pickipedia:variant=letter|masthead`&lt;br /&gt;
 * or category membership; default letter.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &#039;undefined&#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&#039;wgNamespaceNumber&#039;);     // 2 = User&lt;br /&gt;
  var pageName = mw.config.get(&#039;wgPageName&#039;) || &#039;&#039;;&lt;br /&gt;
  var title    = mw.config.get(&#039;wgTitle&#039;) || &#039;&#039;;&lt;br /&gt;
  var action   = mw.config.get(&#039;wgAction&#039;) || &#039;view&#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 2) return;&lt;br /&gt;
  if (action !== &#039;view&#039;) return;&lt;br /&gt;
  if (title.indexOf(&#039;/&#039;) === -1) return;&lt;br /&gt;
&lt;br /&gt;
  var slash    = title.indexOf(&#039;/&#039;);&lt;br /&gt;
  var username = title.slice(0, slash).replace(/_/g, &#039; &#039;);&lt;br /&gt;
  var subpage  = title.slice(slash + 1).replace(/_/g, &#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-userpost&#039;);&lt;br /&gt;
&lt;br /&gt;
  var variant = &#039;letter&#039;;&lt;br /&gt;
  var content = document.querySelector(&#039;.mw-parser-output&#039;);&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var html = content.innerHTML || &#039;&#039;;&lt;br /&gt;
    var m = html.match(/pickipedia:variant\s*=\s*(letter|masthead)/i);&lt;br /&gt;
    if (m) variant = m[1].toLowerCase();&lt;br /&gt;
  }&lt;br /&gt;
  var cats = mw.config.get(&#039;wgCategories&#039;) || [];&lt;br /&gt;
  if (cats.indexOf(&#039;Masthead style&#039;) !== -1) variant = &#039;masthead&#039;;&lt;br /&gt;
  if (cats.indexOf(&#039;Letter style&#039;) !== -1) variant = &#039;letter&#039;;&lt;br /&gt;
  body.classList.add(&#039;pickipedia-variant-&#039; + variant);&lt;br /&gt;
&lt;br /&gt;
  // Persisted light/dark mode&lt;br /&gt;
  var STORAGE_KEY = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  var saved = null;&lt;br /&gt;
  try { saved = localStorage.getItem(STORAGE_KEY); } catch (e) {}&lt;br /&gt;
  if (saved === &#039;dark&#039;) body.classList.add(&#039;pickipedia-dark&#039;);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Topbar (logo + nav) ----------&lt;br /&gt;
  var topbar = document.createElement(&#039;header&#039;);&lt;br /&gt;
  topbar.className = &#039;pickipedia-topbar&#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &#039;&amp;lt;a class=&amp;quot;pickipedia-topbar-logo&amp;quot; href=&amp;quot;/wiki/Main_Page&amp;quot; title=&amp;quot;PickiPedia home&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;img src=&amp;quot;/images/thumb/6/61/Pickipedia-quarter.png/120px-Pickipedia-quarter.png&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;nav class=&amp;quot;pickipedia-topbar-nav&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;edit&#039; }) + &#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(pageName, { action: &#039;history&#039; }) + &#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
      &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;Talk:&#039; + pageName) + &#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&#039; +&lt;br /&gt;
    &#039;&amp;lt;/nav&amp;gt;&#039;;&lt;br /&gt;
  document.body.insertBefore(topbar, document.body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Hero ----------&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var dek = &#039;&#039;;&lt;br /&gt;
    var dekEl = content.querySelector(&#039;.pp-dek-source&#039;);&lt;br /&gt;
    if (dekEl) {&lt;br /&gt;
      dek = dekEl.innerHTML;&lt;br /&gt;
      dekEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Kicker links to the user&#039;s profile page so it&#039;s clickable&lt;br /&gt;
    // attribution as well as visual orientation.&lt;br /&gt;
    var kickerHtml = &#039;&amp;lt;a href=&amp;quot;&#039; + mw.util.getUrl(&#039;User:&#039; + username.replace(/ /g, &#039;_&#039;)) +&lt;br /&gt;
                     &#039;&amp;quot;&amp;gt;User:&#039; + escapeHtml(username) + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    var kickerEl = content.querySelector(&#039;.pp-kicker-source&#039;);&lt;br /&gt;
    if (kickerEl) {&lt;br /&gt;
      kickerHtml = escapeHtml(kickerEl.textContent.trim());&lt;br /&gt;
      kickerEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var lastMod = &#039;&#039;;&lt;br /&gt;
    var lastModEl = document.getElementById(&#039;footer-info-lastmod&#039;);&lt;br /&gt;
    if (lastModEl) lastMod = lastModEl.textContent.replace(/^\s*This page was last (edited|modified) on\s*/i, &#039;&#039;).trim();&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement(&#039;header&#039;);&lt;br /&gt;
    hero.className = &#039;pickipedia-hero&#039;;&lt;br /&gt;
&lt;br /&gt;
    if (variant === &#039;masthead&#039;) {&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-topbar&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;div class=&amp;quot;pp-topbar-rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
          (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-topbar-vol&amp;quot;&amp;gt;&#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-titlewrap&amp;quot;&amp;gt;&#039; +&lt;br /&gt;
          &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
          (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&#039; + kickerHtml + &#039;&amp;lt;/div&amp;gt;&#039; +&lt;br /&gt;
        &#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&#039; + escapeHtml(subpage) + &#039;&amp;lt;/h1&amp;gt;&#039; +&lt;br /&gt;
        (dek ? &#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&#039; + dek + &#039;&amp;lt;/p&amp;gt;&#039; : &#039;&#039;) +&lt;br /&gt;
        (lastMod ? &#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;Last edited &#039; + escapeHtml(lastMod) + &#039;&amp;lt;/div&amp;gt;&#039; : &#039;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    content.parentNode.insertBefore(hero, content);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ---------- Light/dark toggle ----------&lt;br /&gt;
  var toggle = document.createElement(&#039;button&#039;);&lt;br /&gt;
  toggle.className = &#039;pickipedia-mode&#039;;&lt;br /&gt;
  toggle.type = &#039;button&#039;;&lt;br /&gt;
  toggle.textContent = body.classList.contains(&#039;pickipedia-dark&#039;) ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
  toggle.addEventListener(&#039;click&#039;, function () {&lt;br /&gt;
    var dark = body.classList.toggle(&#039;pickipedia-dark&#039;);&lt;br /&gt;
    toggle.textContent = dark ? &#039;☼ Light&#039; : &#039;☾ Dark&#039;;&lt;br /&gt;
    try { localStorage.setItem(STORAGE_KEY, dark ? &#039;dark&#039; : &#039;light&#039;); } catch (e) {}&lt;br /&gt;
  });&lt;br /&gt;
  document.body.appendChild(toggle);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &#039;&#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &#039;&amp;amp;quot;&#039;);&lt;br /&gt;
  }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
</feed>