<?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=JMyles</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=JMyles"/>
	<link rel="alternate" type="text/html" href="https://pickipedia.xyz/wiki/Special:Contributions/JMyles"/>
	<updated>2026-07-31T00:34:27Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=4masks&amp;diff=5374</id>
		<title>4masks</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=4masks&amp;diff=5374"/>
		<updated>2026-07-20T01:51:51Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:four-masks-temp.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Tracks are here (latest version, RC1): [[Release:QmUWtV7fG1K9pM5TQSf5c38vmh9MtU6p3VNQuzaxvYr6ep]]&lt;br /&gt;
&lt;br /&gt;
==Ensembles==&lt;br /&gt;
&#039;&#039;(Justin is listed first in each ensemble; the others are listed in an ordered by dev.urandom)&#039;&#039;&lt;br /&gt;
===Ensemble 21===&lt;br /&gt;
* Justin Myles Holmes&lt;br /&gt;
* Kyle Tuttle&lt;br /&gt;
* Maddie Denton&lt;br /&gt;
* Harry Clark&lt;br /&gt;
* Skyler Golden&lt;br /&gt;
&lt;br /&gt;
===Ensemble 34===&lt;br /&gt;
* Justin Myles Holmes&lt;br /&gt;
* Maddie Denton&lt;br /&gt;
* Harry Clark&lt;br /&gt;
* Skyler Golden&lt;br /&gt;
* Gaven Largent&lt;br /&gt;
&lt;br /&gt;
===Ensemble 55===&lt;br /&gt;
* Justin Myles Holmes&lt;br /&gt;
* John Mailander&lt;br /&gt;
* Samson Grisman&lt;br /&gt;
* Kaitlyn Raitz&lt;br /&gt;
* Harry Clark&lt;br /&gt;
* Cory Walker&lt;br /&gt;
&lt;br /&gt;
===Ensemble 89===&lt;br /&gt;
* Justin Myles Holmes&lt;br /&gt;
* David Grier&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Cory_Walker&amp;diff=5373</id>
		<title>Cory Walker</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Cory_Walker&amp;diff=5373"/>
		<updated>2026-07-19T21:42:40Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Cory Walker&lt;br /&gt;
|image=Cory_Walker_Ryman.png&lt;br /&gt;
|image_caption=Walker attempting to play his banjo at a [[wikipedia:Ryman Auditorium|renovated church]] in Tennessee&lt;br /&gt;
|does1=plays banjo in a band... [[East Nash Something]]&lt;br /&gt;
|does2=Is currently embarking on a hair-growth experiment to see if human hair can work as a makeshift 5th (G) string&lt;br /&gt;
|does3=Is working on a geography textbook entitled, &amp;quot;Anywhere banjo can come from, more banjo from that place.&amp;quot;&lt;br /&gt;
|location=Nashville, TN&lt;br /&gt;
|instruments=banjo&lt;br /&gt;
|show_instrument=banjo&lt;br /&gt;
|genres=bluegrass&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Major Life Events==&lt;br /&gt;
In 2024, Walker was nominated and confirmed to the prestigious post of &amp;quot;Customer of the Year&amp;quot; at Tacos y Mariscos Lindo Mexico in Madison, TN. For clarity: this was Tacos y Mariscos &#039;&#039;Lindo Mexico&#039;&#039;, not one of the inferior Tacos y Mariscos.{{verified|by JMyles}}&lt;br /&gt;
&lt;br /&gt;
[[File:Cory Loyd Walker Customer of the Year Award.jpg{{!}}thumb{{!}}left{{!}}Walker&#039;s Customer of the Year Award, displayed prominently at Tacos y Mariscos &#039;&#039;&#039;Lindo Mexico&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [https://www.eastnashgrass.com/ East Nash Grass Website]{{verified|by JMyles}}&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Rhiannon_Giddens&amp;diff=5372</id>
		<title>Rhiannon Giddens</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Rhiannon_Giddens&amp;diff=5372"/>
		<updated>2026-07-19T17:04:02Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;{{See wikipedia page}} {{MusicianInfo |show_instrument=banjo |scene=Galway }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{See wikipedia page}}&lt;br /&gt;
{{MusicianInfo&lt;br /&gt;
|show_instrument=banjo&lt;br /&gt;
|scene=Galway&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:NewsShorts&amp;diff=5371</id>
		<title>Template:NewsShorts</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:NewsShorts&amp;diff=5371"/>
		<updated>2026-07-19T17:02:23Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Wildfire smoke and lightning storms hound [[Grey Fox 2026]], prompting cancellation of headliner {{m|Rhiannon Giddens}} and closure of the main stage.  Giddens showed up at other stages and jams throughout the evening.&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Michael_Cleveland&amp;diff=5370</id>
		<title>Michael Cleveland</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Michael_Cleveland&amp;diff=5370"/>
		<updated>2026-07-19T16:14:56Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;{{See wikipedia page}} {{MusicianInfo |show_instrument=fiddle |scene=Nashville }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{See wikipedia page}}&lt;br /&gt;
{{MusicianInfo&lt;br /&gt;
|show_instrument=fiddle&lt;br /&gt;
|scene=Nashville&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:See_wikipedia_page&amp;diff=5369</id>
		<title>Template:See wikipedia page</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:See_wikipedia_page&amp;diff=5369"/>
		<updated>2026-07-19T16:14:48Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid black; padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Wikipedia-logo-v2.svg|60px|left]]&lt;br /&gt;
There is a &amp;lt;strong&amp;gt; [[wikipedia:{{PAGENAME}}|WikiPedia article on {{PAGENAME}}]]&amp;lt;/strong&amp;gt;.  This page is not meant to replace information found there, but instead to act as a vector for structured data and other unique information about {{PAGENAME}}.  Remember, [[PickiPedia:Is Not WikiPedia]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:NewsPhoto&amp;diff=5368</id>
		<title>Template:NewsPhoto</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:NewsPhoto&amp;diff=5368"/>
		<updated>2026-07-19T16:12:38Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Jason Carter and Michael Cleveland at Grey Fox 2026.jpg|300px|{{m|Jason Carter}} and {{m|Michael Cleveland}} light up the [[Grey Fox 2026]] dance stage, with {{m|Cody Looper}}, {{m|Josh Gooding}}, and {{m|Jake Stargel}}|left|thumb]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=File:Fibonacci_at_Grey_Fox_2026.MP.jpg&amp;diff=5367</id>
		<title>File:Fibonacci at Grey Fox 2026.MP.jpg</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=File:Fibonacci_at_Grey_Fox_2026.MP.jpg&amp;diff=5367"/>
		<updated>2026-07-19T15:58:21Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Uploaded a work by null from null with Media Uploader&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
&lt;br /&gt;
== Media information ==&lt;br /&gt;
* &#039;&#039;&#039;Date:&#039;&#039;&#039; &#039;&#039;unknown&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Source:&#039;&#039;&#039; &#039;&#039;unknown&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Author:&#039;&#039;&#039; &#039;&#039;unknown&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Location:&#039;&#039;&#039; &#039;&#039;unknown&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Jake_Stargel&amp;diff=5366</id>
		<title>Jake Stargel</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Jake_Stargel&amp;diff=5366"/>
		<updated>2026-07-17T18:01:53Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Jake Stargel&lt;br /&gt;
|image=Jake Stargel and Christian Ward in Colorado.png&lt;br /&gt;
|image_caption=Jake Stargel playing bass, with [[Christian Ward]] on fiddle.&lt;br /&gt;
|does1=is the current touring guitarist of [[wikipedia:Béla Fleck|Béla Fleck]]&#039;s [[wikipedia:My Bluegrass Heart|My Bluegrass Heart]]&lt;br /&gt;
|does2=has played on some ridiculously sick bluegrass video game music tracks, including the self-titled album from [[The Hitpoints]], and two Final Fantasy arrangements with [[Justin Myles Holmes]].  &lt;br /&gt;
|does3=has an extensive history of live shows, including playing with {{m|Jason Carter}} and {{m|Michael Cleveland}}, {{ShowInstrument|Sierra Hull}}, {{Band|Mountain Heart}}, and {{Band|Justin Holmes and The Immutable String Band}}.&lt;br /&gt;
|does4=engineers a lot of amazing records.  Works with [[David Grier]] and [[East Nash Grass]] a lot in this capacity.  &lt;br /&gt;
|show_instrument=guitar&lt;br /&gt;
|instruments=guitar, bass, mandolin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[File:Tony-rice-jake-stargel.png|right|thumb|200px|[[Jake Stargel]] with [[wikipedia:Tony Rice|Tony Rice]], during a performance with [[Mountain Heart]] at the 2010 [[Gettysburg Bluegrass Festival]].]]&lt;br /&gt;
&lt;br /&gt;
[[File:Jake Stargel 58957.png|right|thumb|200px|Jake Stargel playing [[Martin D-28 58957]].]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Jake_Stargel&amp;diff=5365</id>
		<title>Jake Stargel</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Jake_Stargel&amp;diff=5365"/>
		<updated>2026-07-17T17:56:48Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Jake Stargel&lt;br /&gt;
|image=Jake Stargel and Christian Ward in Colorado.png&lt;br /&gt;
|image_caption=Jake Stargel playing bass, with [[Christian Ward]] on fiddle.&lt;br /&gt;
|does1=is the current touring guitarist of [[wikipedia:Béla Fleck|Béla Fleck]]&#039;s [[wikipedia:My Bluegrass Heart|My Bluegrass Heart]]&lt;br /&gt;
|does2=has played on some ridiculously sick bluegrass video game music tracks, including the self-titled album from [[The Hitpoints]], and two Final Fantasy arrangements with [[Justin Myles Holmes]].  &lt;br /&gt;
|does3=has an extensive history of live shows, including playing with {{m|Jason Carter}} and {{m|Michael Cleveland}}, {{ShowInstrument|Sierra Hull}}, {{Band|Mountain Heart}}, and {{Band|Justin Holmes and The Immutable String Band}}.&lt;br /&gt;
|does4=engineers a lot of amazing records.  Works with [[David Grier]] and [[East Nash Grass]] a lot in this capacity.  &lt;br /&gt;
|show_instrument=guitar&lt;br /&gt;
|instruments=guitar, bass, mandolin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Jake Stargel 58957.png|right|thumb|200px|Jake Stargel playing [[Martin D-28 58957]].]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=File:Jake_Stargel_and_Christian_Ward_in_Colorado.png&amp;diff=5364</id>
		<title>File:Jake Stargel and Christian Ward in Colorado.png</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=File:Jake_Stargel_and_Christian_Ward_in_Colorado.png&amp;diff=5364"/>
		<updated>2026-07-17T17:54:19Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Uploaded a work by null from null with Media Uploader&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
Working on Bubak and Hungaricus in prepartion for a show with Justin Holmes and The Immutable String Band&lt;br /&gt;
&lt;br /&gt;
== Media information ==&lt;br /&gt;
* &#039;&#039;&#039;Date:&#039;&#039;&#039; 2023-03-03&lt;br /&gt;
* &#039;&#039;&#039;Source:&#039;&#039;&#039; &#039;&#039;unknown&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Author:&#039;&#039;&#039; &#039;&#039;unknown&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Location:&#039;&#039;&#039; &#039;&#039;unknown&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Jake_Stargel&amp;diff=5363</id>
		<title>Jake Stargel</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Jake_Stargel&amp;diff=5363"/>
		<updated>2026-07-17T17:46:54Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Jake Stargel&lt;br /&gt;
|does1=is the current touring guitarist of [[wikipedia:Béla Fleck|Béla Fleck]]&#039;s [[wikipedia:My Bluegrass Heart|My Bluegrass Heart]]&lt;br /&gt;
|does2=has played on some ridiculously sick bluegrass video game music tracks, including the self-titled album from [[The Hitpoints]], and two Final Fantasy arrangements with [[Justin Myles Holmes]].  &lt;br /&gt;
|does3=has an extensive history of live shows, including playing with {{m|Jason Carter}} and {{m|Michael Cleveland}}, {{ShowInstrument|Sierra Hull}}, {{Band|Mountain Heart}}, and {{Band|Justin Holmes and The Immutable String Band}}.&lt;br /&gt;
|does4=engineers a lot of amazing records.  Works with [[David Grier]] and [[East Nash Grass]] a lot in this capacity.  &lt;br /&gt;
|show_instrument=guitar&lt;br /&gt;
|instruments=guitar, bass, mandolin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[File:Jake Stargel 58957.png|right|thumb|200px|Jake Stargel playing [[Martin D-28 58957]].]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Jake_Stargel&amp;diff=5362</id>
		<title>Jake Stargel</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Jake_Stargel&amp;diff=5362"/>
		<updated>2026-07-17T17:45:23Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Jake Stargel&lt;br /&gt;
|does1=is the current touring guitarist of [[wikipedia:Béla Fleck|Béla Fleck]]&#039;s [[wikipedia:My Bluegrass Heart|My Bluegrass Heart]]&lt;br /&gt;
|does2=has played on some ridiculously sick bluegrass video game music tracks, including the self-titled album from [[The Hitpoints]], and two Final Fantasy arrangements with [[Justin Myles Holmes]].  &lt;br /&gt;
|does3=has an extensive history of live shows, including playing with {{m|Jason Carter}} and {{m|Michael Cleveland}}, {{ShowInstrument|Sierra Hull}}, {{Band|Mountain Heart}}, and {{Band|Justin Holmes and The Immutable String Band}}.&lt;br /&gt;
|does4=engineers a lot of amazing records.  Works with [[David Grier]] and [[East Nash Grass]] a lot in this capacity.  &lt;br /&gt;
|show_instrument=guitar&lt;br /&gt;
|instruments=guitar, bass, mandolin&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Grey_Fox_2026&amp;diff=5361</id>
		<title>Grey Fox 2026</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Grey_Fox_2026&amp;diff=5361"/>
		<updated>2026-07-17T14:12:50Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Grey fox 2026 smoke.jpg|right|thumb|400px|Smoke and haze were visible on Thursday evening.]]&lt;br /&gt;
&lt;br /&gt;
Grey Fox 2026 in an ongoing [[wikipedia:Grey Fox Bluegrass Festival]] held July 15-19, 2026.&lt;br /&gt;
&lt;br /&gt;
Grey Fox 2026 took place during the [[wikipedia:2026 Canadian wildfires|2026 Canadian wildfires]], which caused significant smoke and haz on the festival grounds, particularly during the opening days.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery perrow=4&amp;gt;&lt;br /&gt;
File:East Nash Grass at Grey Fox Bluegrass Festival 2026.jpg|East Nash Grass on Thursday afternoon at the Catskill stage.  From left to right: {{m|Cory Walker}}, {{m|Harry Clark}}, {{m|Maddie Denton}}, {{m|Carter Eddy}}, {{m|Frank Carter Rische}}&lt;br /&gt;
File:Grey fox 2026, smoke visible.jpg|Smoke and haze&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:NewsPhoto&amp;diff=5360</id>
		<title>Template:NewsPhoto</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:NewsPhoto&amp;diff=5360"/>
		<updated>2026-07-17T14:00:13Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Grey fox 2026 smoke.jpg|400px|[[Grey Fox 2026]] opens amidst wildfire smoke|left|thumb]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Carter_Eddy&amp;diff=5359</id>
		<title>Carter Eddy</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Carter_Eddy&amp;diff=5359"/>
		<updated>2026-07-17T13:04:30Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;{{MusicianInfo |name=Carter Eddy |show_instrument=bass |scene=Nashville }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Carter Eddy&lt;br /&gt;
|show_instrument=bass&lt;br /&gt;
|scene=Nashville&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Grey_Fox_2026&amp;diff=5358</id>
		<title>Grey Fox 2026</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Grey_Fox_2026&amp;diff=5358"/>
		<updated>2026-07-17T12:31:45Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Grey Fox 2026 in an ongoing [[wikipedia:Grey Fox Bluegrass Festival]] held July 15-19, 2026.&lt;br /&gt;
&lt;br /&gt;
[[File:East Nash Grass at Grey Fox Bluegrass Festival 2026.jpg|thumb|200px|East Nash Grass on Thursday afternoon at the Catskill stage.  From left to right: {{m|Cory Walker}}, {{m|Harry Clark}}, {{m|Maddie Denton}}, {{m|Carter Eddy}}, {{m|Frank Carter Rische}} ]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Frank_Carter_Rische&amp;diff=5357</id>
		<title>Frank Carter Rische</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Frank_Carter_Rische&amp;diff=5357"/>
		<updated>2026-07-16T23:54:02Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Frank Carter Rische&lt;br /&gt;
|show_instrument=guitar&lt;br /&gt;
|scene=Nashville&lt;br /&gt;
|does1=is the current touring guitarist in East Nash Grass.&lt;br /&gt;
|does2=has played with virtually every bluegrass band ever to play at [[Dee&#039;s Country Cocktail Lounge]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Envy expressed in the bluegrass community after ENG annointment===&lt;br /&gt;
When Carter Rische was named ENG&#039;s new touring guitarist, some (well, one) in the community expressed disdain that, while he&#039;s a perfect fit as a guitarist, he doesn&#039;t have a track record of making green fruit and vegetable puree on stage which fans might expect.&lt;br /&gt;
&lt;br /&gt;
{{HLSVideo|QmdrF7qb9zExAwHZtfVn8fUJFLFQxXs2PmHsWEUQj9FDN4|width=75px|align=right}}&lt;br /&gt;
&lt;br /&gt;
===Social Media===&lt;br /&gt;
* [https://www.instagram.com/brothertothewind/ Frank Carter Riche&#039;s Instagram]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Another_Jeff_/_Geoff&amp;diff=5356</id>
		<title>Another Jeff / Geoff</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Another_Jeff_/_Geoff&amp;diff=5356"/>
		<updated>2026-07-16T23:49:42Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Another Jeff / Geoff&amp;#039;&amp;#039;&amp;#039; is the name of the rotating bass player in East Nash Grass.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Another Jeff / Geoff&#039;&#039;&#039; is the name of the rotating bass player in [[East Nash Grass]].&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Grey_Fox_2026&amp;diff=5355</id>
		<title>Grey Fox 2026</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Grey_Fox_2026&amp;diff=5355"/>
		<updated>2026-07-16T23:49:05Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;Grey Fox 2026 in an ongoing wikipedia:Grey Fox Bluegrass Festival held July 15-19, 2026.  Frank Carter Rische}} &amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Grey Fox 2026 in an ongoing [[wikipedia:Grey Fox Bluegrass Festival]] held July 15-19, 2026.&lt;br /&gt;
&lt;br /&gt;
[[File:East Nash Grass at Grey Fox Bluegrass Festival 2026.jpg|thumb|200px|East Nash Grass on Thursday afternoon at the Catskill stage.  From left to right: {{m|Cory Walker}}, {{m|Harry Clark}}, {{m|Maddie Denton}}, {{m|Another Jeff / Geoff}}, {{m|Frank Carter Rische}} ]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:NewsShorts&amp;diff=5354</id>
		<title>Template:NewsShorts</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:NewsShorts&amp;diff=5354"/>
		<updated>2026-07-16T23:14:04Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Grey Fox 2026]] opens amidst wildfire smoke&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:NewsPhoto&amp;diff=5353</id>
		<title>Template:NewsPhoto</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:NewsPhoto&amp;diff=5353"/>
		<updated>2026-07-16T23:13:10Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:East Nash Grass at Grey Fox Bluegrass Festival 2026 (view from back of crowd).jpg|400px|[[Grey Fox 2026]] opens amidst wildfire smoke (pictured; East Nash Grass on Catskill stage|left|thumb]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Template:NewsPhoto&amp;diff=5352</id>
		<title>Template:NewsPhoto</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Template:NewsPhoto&amp;diff=5352"/>
		<updated>2026-07-16T23:12:41Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:East Nash Grass at Grey Fox Bluegrass Festival 2026 (view from back of crowd).jpg|400px|[[Grey Fox 2026]] opens amidst wildfire smoke (pictured; East Nash Grass on Catskill stage|thumb]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5306</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5306"/>
		<updated>2026-06-06T16:04:52Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Note: this show was previously projected at blockheight 25247741, but actually occurred at 25254342.&#039;&#039;&lt;br /&gt;
&lt;br /&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;
|status=verified&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;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25247741&amp;diff=5305</id>
		<title>Show:JustinHolmes-25247741</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25247741&amp;diff=5305"/>
		<updated>2026-06-06T16:02:25Z</updated>

		<summary type="html">&lt;p&gt;JMyles: JMyles moved page Show:JustinHolmes-25247741 to Show:JustinHolmes-25254342&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Show:JustinHolmes-25254342]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5304</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5304"/>
		<updated>2026-06-06T16:02:25Z</updated>

		<summary type="html">&lt;p&gt;JMyles: JMyles moved page Show:JustinHolmes-25247741 to Show:JustinHolmes-25254342&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;
|status=verified&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;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5298</id>
		<title>MediaWiki:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5298"/>
		<updated>2026-06-02T21:02:19Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5297</id>
		<title>MediaWiki:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5297"/>
		<updated>2026-06-02T21:02:02Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5294</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5294"/>
		<updated>2026-06-02T20:59:35Z</updated>

		<summary type="html">&lt;p&gt;JMyles: JMyles moved page Show:JustinHolmes-25255000 to Show:JustinHolmes-25247741 without leaving a redirect: corrected blockheight&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;
|status=verified&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;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5293</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5293"/>
		<updated>2026-06-02T20:59:10Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &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;
|status=verified&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;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5292</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5292"/>
		<updated>2026-06-02T20:56:02Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &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;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5291</id>
		<title>MediaWiki:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5291"/>
		<updated>2026-06-02T20:54:14Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5290</id>
		<title>MediaWiki:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5290"/>
		<updated>2026-06-02T20:53:56Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5287</id>
		<title>MediaWiki:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5287"/>
		<updated>2026-06-02T20:45:00Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5286</id>
		<title>MediaWiki:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5286"/>
		<updated>2026-06-02T20:44:42Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5281</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5281"/>
		<updated>2026-06-02T20:38:26Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &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;
|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;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5280</id>
		<title>MediaWiki:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5280"/>
		<updated>2026-06-02T20:21:55Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5279</id>
		<title>MediaWiki:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5279"/>
		<updated>2026-06-02T20:21:39Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Paul_Sanna&amp;diff=5274</id>
		<title>Paul Sanna</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Paul_Sanna&amp;diff=5274"/>
		<updated>2026-06-02T20:15:51Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;{{MusicianInfo |name=Paul Sanna |show_instrument=banjo |scene=Upstate NY }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Paul Sanna&lt;br /&gt;
|show_instrument=banjo&lt;br /&gt;
|scene=Upstate NY&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Christina_Docenko&amp;diff=5273</id>
		<title>Christina Docenko</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Christina_Docenko&amp;diff=5273"/>
		<updated>2026-06-02T20:15:31Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;{{MusicianInfo |name=Christina Docenko |show_instrument=fiddle |scene=Upstate NY }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Christina Docenko&lt;br /&gt;
|show_instrument=fiddle&lt;br /&gt;
|scene=Upstate NY&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5272</id>
		<title>Show:JustinHolmes-25254342</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Show:JustinHolmes-25254342&amp;diff=5272"/>
		<updated>2026-06-02T20:10:06Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &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;
|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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5271</id>
		<title>MediaWiki:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5271"/>
		<updated>2026-06-02T20:08:53Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5270</id>
		<title>MediaWiki:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5270"/>
		<updated>2026-06-02T20:08:17Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadgets-definition&amp;diff=5269</id>
		<title>MediaWiki:Gadgets-definition</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadgets-definition&amp;diff=5269"/>
		<updated>2026-06-02T20:07:37Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5264</id>
		<title>MediaWiki:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5264"/>
		<updated>2026-06-02T19:56:08Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5263</id>
		<title>MediaWiki:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5263"/>
		<updated>2026-06-02T19:55:40Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5257</id>
		<title>MediaWiki:Gadget-pickipedia-show.css</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.css&amp;diff=5257"/>
		<updated>2026-06-02T19:23:23Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;/* ============================================================  * Pickipedia — Show: page styling  *  * Triggers when an article&amp;#039;s title starts with &amp;quot;Show:&amp;quot; (legacy  * mainspace convention, not a real namespace). Common.js adds  * .pickipedia-show to body and absorbs Template:Show&amp;#039;s infobox  * into a poster-style hero; once absorbed the infobox is hidden.  * Pages without Template:Show still get the setlist typography.  *  * Reuses the same paper/ink palette as .picki...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5256</id>
		<title>MediaWiki:Gadget-pickipedia-show.js</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadget-pickipedia-show.js&amp;diff=5256"/>
		<updated>2026-06-02T19:22:47Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;/**  * Pickipedia — Show: page hero.  *  * For mainspace pages whose title starts with &amp;quot;Show:&amp;quot; (the legacy  * mainspace convention used pre-namespace), adds .pickipedia-show  * to body and absorbs Template:Show&amp;#039;s infobox into a poster-style  * hero. If the page does not use Template:Show only the body class  * is added — the setlist typography in Common.css still applies.  */ (function () {   &amp;#039;use strict&amp;#039;;    if (typeof mw === &amp;#039;undefined&amp;#039; || !mw.config) return;    va...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=MediaWiki:Gadgets-definition&amp;diff=5255</id>
		<title>MediaWiki:Gadgets-definition</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=MediaWiki:Gadgets-definition&amp;diff=5255"/>
		<updated>2026-06-02T19:22:15Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=ReleaseDraft:664c391a-b0f1-4628-b3d7-d593fdab5157&amp;diff=5224</id>
		<title>ReleaseDraft:664c391a-b0f1-4628-b3d7-d593fdab5157</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=ReleaseDraft:664c391a-b0f1-4628-b3d7-d593fdab5157&amp;diff=5224"/>
		<updated>2026-06-01T17:07:25Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Transcoding submitted: job coconut-1780333643-96432&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;draft_id: 664c391a-b0f1-4628-b3d7-d593fdab5157&lt;br /&gt;
type: video&lt;br /&gt;
source: special-deliver-video&lt;br /&gt;
commit: 2391c41&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25295449&lt;br /&gt;
content:&lt;br /&gt;
    title: learning terrapin outside Denver venue&lt;br /&gt;
    description: &amp;quot;&amp;quot;&lt;br /&gt;
    file_type: &amp;quot;&amp;quot;&lt;br /&gt;
    venue: &amp;quot;&amp;quot;&lt;br /&gt;
    performers:&lt;br /&gt;
files:&lt;br /&gt;
    -&lt;br /&gt;
        original_filename: learning-terrapin.mp4&lt;br /&gt;
        media_type: video&lt;br /&gt;
        format: MP4&lt;br /&gt;
        duration_seconds: 56.98&lt;br /&gt;
        width: 1920&lt;br /&gt;
        height: 1080&lt;br /&gt;
        size_bytes: 22225785&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
</feed>