<?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-06-14T19:57:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<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>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=ReleaseDraft:112de224-050d-4374-988f-4280424e2293&amp;diff=5220</id>
		<title>ReleaseDraft:112de224-050d-4374-988f-4280424e2293</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=ReleaseDraft:112de224-050d-4374-988f-4280424e2293&amp;diff=5220"/>
		<updated>2026-06-01T15:40:41Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Finalized: pinned to IPFS as QmRBbLmCUXHnM9yNULbzduAiDJM87yoSUrJpuaHZkvqdXY&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;draft_id: 112de224-050d-4374-988f-4280424e2293&lt;br /&gt;
type: blue-railroad&lt;br /&gt;
source: special-deliver-blue-railroad&lt;br /&gt;
commit: a31a4d5&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: 20839779&lt;br /&gt;
upload_blockheight: 25295570&lt;br /&gt;
status: finalized&lt;br /&gt;
final_cid: QmRBbLmCUXHnM9yNULbzduAiDJM87yoSUrJpuaHZkvqdXY&lt;br /&gt;
finalized_at: &amp;quot;2026-06-01T15:40:41.274Z&amp;quot;&lt;br /&gt;
content:&lt;br /&gt;
    exercise: Nine Pound Hammer (Pushups)&lt;br /&gt;
    file_type: video&lt;br /&gt;
files:&lt;br /&gt;
    -&lt;br /&gt;
        original_filename: PXL_20240928_000358640.mp4&lt;br /&gt;
        media_type: video&lt;br /&gt;
        format: MP4&lt;br /&gt;
        duration_seconds: 27.625556&lt;br /&gt;
        width: 1920&lt;br /&gt;
        height: 1080&lt;br /&gt;
        size_bytes: 70940322&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=ReleaseDraft:112de224-050d-4374-988f-4280424e2293&amp;diff=5218</id>
		<title>ReleaseDraft:112de224-050d-4374-988f-4280424e2293</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=ReleaseDraft:112de224-050d-4374-988f-4280424e2293&amp;diff=5218"/>
		<updated>2026-06-01T14:06:07Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Re-upload: Nine Pound Hammer (Pushups)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;draft_id: 112de224-050d-4374-988f-4280424e2293&lt;br /&gt;
type: blue-railroad&lt;br /&gt;
source: special-deliver-blue-railroad&lt;br /&gt;
commit: a31a4d5&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: 20839779&lt;br /&gt;
upload_blockheight: 25295570&lt;br /&gt;
content:&lt;br /&gt;
    exercise: Nine Pound Hammer (Pushups)&lt;br /&gt;
    file_type: video&lt;br /&gt;
files:&lt;br /&gt;
    -&lt;br /&gt;
        original_filename: PXL_20240928_000358640.mp4&lt;br /&gt;
        media_type: video&lt;br /&gt;
        format: MP4&lt;br /&gt;
        duration_seconds: 27.625556&lt;br /&gt;
        width: 1920&lt;br /&gt;
        height: 1080&lt;br /&gt;
        video_codec: H.265&lt;br /&gt;
        audio_codec: AAC&lt;br /&gt;
        size_bytes: 70940322&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=5216</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=5216"/>
		<updated>2026-06-01T13:35:03Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Re-upload: 1 file(s) uploaded&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;
        video_codec: H.265&lt;br /&gt;
        audio_codec: AAC&lt;br /&gt;
        size_bytes: 22225785&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Cryptograss&amp;diff=5215</id>
		<title>Cryptograss</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Cryptograss&amp;diff=5215"/>
		<updated>2026-06-01T02:42:24Z</updated>

		<summary type="html">&lt;p&gt;JMyles: /* Current Sprint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cryptograss is a [[Will-One-Day-Be-A-DAO]] focused on building pro-human (as distinct from [[User:JMyles/The Algorithm and The Muse|anti-AI]]) tools for release, distribution, publication, and monetization of straight-to-public-domain music.&lt;br /&gt;
&lt;br /&gt;
All Cryptograss tech is open source and written by musicians and serious music fans - none of the work is outsourced to engineering firms.&lt;br /&gt;
&lt;br /&gt;
==Cryptograsss Toolchain==&lt;br /&gt;
* [[Revealer]] - the first cryptograss tool, Revealer can automatically release a record or other project after a contribution goal is met onchain.&lt;br /&gt;
&lt;br /&gt;
* [[Chartifacts]] - a protocol for tokenizing the paper charts used at studio recording sessions, and making their metadata available to to other tools.&lt;br /&gt;
&lt;br /&gt;
* [[PickiPedia:About|PickiPedia]] - a wiki for both structured and unstructured knowledge about bluegrass, old time, and other traditional public domain music.  &lt;br /&gt;
&lt;br /&gt;
* [[The Oracle of Bluegrass Bacon]] - (named after [https://www.oracleofbacon.org/ The Oracle of Bacon], which is in turn named after [[WikiPedia:Six Degrees of Kevin Bacon|The Six Degrees of Kevin Bacon]], which is turn is named after [[Wikipedia:Six degrees of separation|The Six Degrees of Separation]]) - a database and query tool for examining the connections between pickers, albums, and shows in [[the traditional music connectome]].&lt;br /&gt;
&lt;br /&gt;
* [[Set Stones]] / [[Ticket Stubs]] - the primary live show merch, these are mintable only by show attendees and are displayed throughout the Cryptograss ecosystem anywhere the show is used as a vector to connect musicians or songs.&lt;br /&gt;
&lt;br /&gt;
* [[Rabbithole Player]] - a music player designed to use Chartifacts and The Oracle of Bluegrass Bacon to allow listeners to follow &amp;quot;rabbit holes&amp;quot; of particular pickers, records, shows, instrument makers, and other recording metadata.&lt;br /&gt;
&lt;br /&gt;
* [[Blue Railroad Train Squats]] - a series of NFTs which are manually awarded to people when they submit a video of themselves performing squats to [[Tony Rice]]&#039;s recording of [[Blue Railroad Train]] from his 1979 [[Manzanita (Tony Rice Album)|Manzanita]] record.  This tool is designed to help people gain experience handling and transferring NFTs in a low-stakes environment, and to promote fitness and wellness in the bluegrass scene.&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss Dice Protocol]] - a protocol to generate [[paper wallets]] using dice as a source of offline randomness.  Designed to facilitate conversation and community while generating paper wallets in an in-person environment.  The protocol was developed during the [[4masks]] sessions at [[Tunesmith Studios]], principally by Holmes, Golden, and [[Lisa Joy]].  It was then used to generate wallets held by many bluegrassers who have cryptograss.eth domain names, including [[Maddie Denton]], [[Harry Clark]], [[Cory Walker]], [[Jake Stargel]], and [[Vickie Vaughn]] (each of which can be found at &amp;lt;firstname&amp;gt;&amp;lt;lastname&amp;gt;.cryptograss.eth). &lt;br /&gt;
&lt;br /&gt;
* [[Magent]] - an MCP Server and database for informing LLM agents about the history of bluegrass and the traditional music connectome in order to build bluegrass-related projects.  Magent has a history of several thousands messages back and forth with Justin Holmes, during which it has learned about cryptograss goals and tagged important messages for later recall.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/cryptograss/arthel arthel] - named after Arthel &amp;quot;Doc&amp;quot; Watson, arthel is a codebase with facilities for building and deploying Revealer instances, Chartifacts, and other cryptograss artifacts.  arthel also has tools for end-to-end website builds, and is currently used to build justinholmes.com and cryptograss.live.&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss:Maybelle|maybelle]] - named after Maybelle Carter, maybelle is an integration and build server which updates all cryptograss-built projects with the latest chain data from Ethereum, Optimism, and Arbitrum.  maybelle has a public frontend showing the build status of cryptograss projects.&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss:Hunter|hunter]] - named after Robert Hunter, hunter is a development server which includes containers for individual development environments, designed to be used for either learning or engineering by bluegrassers.  Each container includes an instance of Magent, an instance of VSCode Server, runtimes for cryptograss web projects, and SSH and HTTPS routing for authentication and web previews.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The first project which evolved into a cryptograss tool was [[Revealer]], which was started at the [[EthBarcelona 2023]] hackathon by [[Justin Holmes]], [[R.J. Partington III]], [[Kieran Prasch]], and [[Kuba Hejhal]].  The project was, at that time, designed specifically to release Holmes&#039; debut bluegrass record, [[Vowel Sounds]], and won the [[Gnosis]] prize at the hackathon.&lt;br /&gt;
&lt;br /&gt;
In the following weeks, the group launched chat forums on Discord and Matrix, and held several conference calls leading up the album release.  In addition to the hackathon winners, these calls were joined by [[Skyler Golden]], [[Jakub Vysoky]], and [[Jake Stargel]], the latter of whom coined the term &#039;cryptograss&#039; during one of the calls.&lt;br /&gt;
&lt;br /&gt;
The Revealer contract - the group&#039;s first mainnet contract - was deployed on September 1, 2023, as &amp;lt;small&amp;gt;0xa812137EFf2B368d0B2880A39B609fB60c426850&amp;lt;/small&amp;gt; on the ethereum blockchain.  The contract required that 10 eth (at the time, about $38,000) be contributed in order for Vowel Sounds to be released.  This goal was accomplished in almost exactly 8 days.&lt;br /&gt;
&lt;br /&gt;
Subsequently, the calls continued and attention turned toward creating other tools and making those tools available to other musicians.&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
Currently, the wallet which owns cryptograss.eth is custodied by [[Justin Holmes]].  API keys, deploy keys, authorized SSH keys for maybelle, and other authorization material is held jointly by Holmes, [[R.J. Partington III]], [[Skyler Golden]], and [[Jake Stargel]].  Further DAO-ization is ahead.&lt;br /&gt;
&lt;br /&gt;
The following people have contributed code to cryptograss codebases (in approximate order of contribution volume):&lt;br /&gt;
&lt;br /&gt;
* [[Justin Holmes]]&lt;br /&gt;
* [[R.J. Partington III]]&lt;br /&gt;
* [[Skyler Golden]]&lt;br /&gt;
* [[Kieran Prasch]]&lt;br /&gt;
* [[Lisa Joy]]&lt;br /&gt;
* [[Kuba Hejhal]]&lt;br /&gt;
* [[Jake Stargel]]&lt;br /&gt;
* [[Jakub Vysoky]]&lt;br /&gt;
&lt;br /&gt;
==Recent Sprints==&lt;br /&gt;
* [[Cryptograss/Bison]]&lt;br /&gt;
* [[Cryptograss/Pronghorn]]&lt;br /&gt;
* [[Cryptograss/WaterBuffalo]]&lt;br /&gt;
* [[Cryptograss/Caribou]]&lt;br /&gt;
&lt;br /&gt;
==Current Sprint==&lt;br /&gt;
* [[Cryptograss/Horny Toad]]&lt;br /&gt;
&lt;br /&gt;
==Upcoming Sprints==&lt;br /&gt;
* TBA&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Cryptograss&amp;diff=5214</id>
		<title>Cryptograss</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Cryptograss&amp;diff=5214"/>
		<updated>2026-06-01T02:41:45Z</updated>

		<summary type="html">&lt;p&gt;JMyles: /* Recent Sprints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cryptograss is a [[Will-One-Day-Be-A-DAO]] focused on building pro-human (as distinct from [[User:JMyles/The Algorithm and The Muse|anti-AI]]) tools for release, distribution, publication, and monetization of straight-to-public-domain music.&lt;br /&gt;
&lt;br /&gt;
All Cryptograss tech is open source and written by musicians and serious music fans - none of the work is outsourced to engineering firms.&lt;br /&gt;
&lt;br /&gt;
==Cryptograsss Toolchain==&lt;br /&gt;
* [[Revealer]] - the first cryptograss tool, Revealer can automatically release a record or other project after a contribution goal is met onchain.&lt;br /&gt;
&lt;br /&gt;
* [[Chartifacts]] - a protocol for tokenizing the paper charts used at studio recording sessions, and making their metadata available to to other tools.&lt;br /&gt;
&lt;br /&gt;
* [[PickiPedia:About|PickiPedia]] - a wiki for both structured and unstructured knowledge about bluegrass, old time, and other traditional public domain music.  &lt;br /&gt;
&lt;br /&gt;
* [[The Oracle of Bluegrass Bacon]] - (named after [https://www.oracleofbacon.org/ The Oracle of Bacon], which is in turn named after [[WikiPedia:Six Degrees of Kevin Bacon|The Six Degrees of Kevin Bacon]], which is turn is named after [[Wikipedia:Six degrees of separation|The Six Degrees of Separation]]) - a database and query tool for examining the connections between pickers, albums, and shows in [[the traditional music connectome]].&lt;br /&gt;
&lt;br /&gt;
* [[Set Stones]] / [[Ticket Stubs]] - the primary live show merch, these are mintable only by show attendees and are displayed throughout the Cryptograss ecosystem anywhere the show is used as a vector to connect musicians or songs.&lt;br /&gt;
&lt;br /&gt;
* [[Rabbithole Player]] - a music player designed to use Chartifacts and The Oracle of Bluegrass Bacon to allow listeners to follow &amp;quot;rabbit holes&amp;quot; of particular pickers, records, shows, instrument makers, and other recording metadata.&lt;br /&gt;
&lt;br /&gt;
* [[Blue Railroad Train Squats]] - a series of NFTs which are manually awarded to people when they submit a video of themselves performing squats to [[Tony Rice]]&#039;s recording of [[Blue Railroad Train]] from his 1979 [[Manzanita (Tony Rice Album)|Manzanita]] record.  This tool is designed to help people gain experience handling and transferring NFTs in a low-stakes environment, and to promote fitness and wellness in the bluegrass scene.&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss Dice Protocol]] - a protocol to generate [[paper wallets]] using dice as a source of offline randomness.  Designed to facilitate conversation and community while generating paper wallets in an in-person environment.  The protocol was developed during the [[4masks]] sessions at [[Tunesmith Studios]], principally by Holmes, Golden, and [[Lisa Joy]].  It was then used to generate wallets held by many bluegrassers who have cryptograss.eth domain names, including [[Maddie Denton]], [[Harry Clark]], [[Cory Walker]], [[Jake Stargel]], and [[Vickie Vaughn]] (each of which can be found at &amp;lt;firstname&amp;gt;&amp;lt;lastname&amp;gt;.cryptograss.eth). &lt;br /&gt;
&lt;br /&gt;
* [[Magent]] - an MCP Server and database for informing LLM agents about the history of bluegrass and the traditional music connectome in order to build bluegrass-related projects.  Magent has a history of several thousands messages back and forth with Justin Holmes, during which it has learned about cryptograss goals and tagged important messages for later recall.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/cryptograss/arthel arthel] - named after Arthel &amp;quot;Doc&amp;quot; Watson, arthel is a codebase with facilities for building and deploying Revealer instances, Chartifacts, and other cryptograss artifacts.  arthel also has tools for end-to-end website builds, and is currently used to build justinholmes.com and cryptograss.live.&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss:Maybelle|maybelle]] - named after Maybelle Carter, maybelle is an integration and build server which updates all cryptograss-built projects with the latest chain data from Ethereum, Optimism, and Arbitrum.  maybelle has a public frontend showing the build status of cryptograss projects.&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss:Hunter|hunter]] - named after Robert Hunter, hunter is a development server which includes containers for individual development environments, designed to be used for either learning or engineering by bluegrassers.  Each container includes an instance of Magent, an instance of VSCode Server, runtimes for cryptograss web projects, and SSH and HTTPS routing for authentication and web previews.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The first project which evolved into a cryptograss tool was [[Revealer]], which was started at the [[EthBarcelona 2023]] hackathon by [[Justin Holmes]], [[R.J. Partington III]], [[Kieran Prasch]], and [[Kuba Hejhal]].  The project was, at that time, designed specifically to release Holmes&#039; debut bluegrass record, [[Vowel Sounds]], and won the [[Gnosis]] prize at the hackathon.&lt;br /&gt;
&lt;br /&gt;
In the following weeks, the group launched chat forums on Discord and Matrix, and held several conference calls leading up the album release.  In addition to the hackathon winners, these calls were joined by [[Skyler Golden]], [[Jakub Vysoky]], and [[Jake Stargel]], the latter of whom coined the term &#039;cryptograss&#039; during one of the calls.&lt;br /&gt;
&lt;br /&gt;
The Revealer contract - the group&#039;s first mainnet contract - was deployed on September 1, 2023, as &amp;lt;small&amp;gt;0xa812137EFf2B368d0B2880A39B609fB60c426850&amp;lt;/small&amp;gt; on the ethereum blockchain.  The contract required that 10 eth (at the time, about $38,000) be contributed in order for Vowel Sounds to be released.  This goal was accomplished in almost exactly 8 days.&lt;br /&gt;
&lt;br /&gt;
Subsequently, the calls continued and attention turned toward creating other tools and making those tools available to other musicians.&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
Currently, the wallet which owns cryptograss.eth is custodied by [[Justin Holmes]].  API keys, deploy keys, authorized SSH keys for maybelle, and other authorization material is held jointly by Holmes, [[R.J. Partington III]], [[Skyler Golden]], and [[Jake Stargel]].  Further DAO-ization is ahead.&lt;br /&gt;
&lt;br /&gt;
The following people have contributed code to cryptograss codebases (in approximate order of contribution volume):&lt;br /&gt;
&lt;br /&gt;
* [[Justin Holmes]]&lt;br /&gt;
* [[R.J. Partington III]]&lt;br /&gt;
* [[Skyler Golden]]&lt;br /&gt;
* [[Kieran Prasch]]&lt;br /&gt;
* [[Lisa Joy]]&lt;br /&gt;
* [[Kuba Hejhal]]&lt;br /&gt;
* [[Jake Stargel]]&lt;br /&gt;
* [[Jakub Vysoky]]&lt;br /&gt;
&lt;br /&gt;
==Recent Sprints==&lt;br /&gt;
* [[Cryptograss/Bison]]&lt;br /&gt;
* [[Cryptograss/Pronghorn]]&lt;br /&gt;
* [[Cryptograss/WaterBuffalo]]&lt;br /&gt;
* [[Cryptograss/Caribou]]&lt;br /&gt;
&lt;br /&gt;
==Current Sprint==&lt;br /&gt;
* [[Cryptograss/Caribou]]&lt;br /&gt;
&lt;br /&gt;
==Upcoming Sprints==&lt;br /&gt;
* TBA&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=5212</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=5212"/>
		<updated>2026-05-31T21:50:51Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Re-upload: 1 file(s) uploaded&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: 9077586&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25290725&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;
        video_codec: H.265&lt;br /&gt;
        audio_codec: AAC&lt;br /&gt;
        size_bytes: 22225785&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=5211</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=5211"/>
		<updated>2026-05-31T20:00:09Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Re-upload: 1 file(s) uploaded&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: c83ddc7&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25290172&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;
        video_codec: H.265&lt;br /&gt;
        audio_codec: AAC&lt;br /&gt;
        size_bytes: 22225785&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=5210</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=5210"/>
		<updated>2026-05-31T16:42:24Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Upload complete: 1 file(s) analysed&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: ad124e0&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25289183&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;
        video_codec: H.265&lt;br /&gt;
        audio_codec: AAC&lt;br /&gt;
        size_bytes: 22225785&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=5209</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=5209"/>
		<updated>2026-05-31T16:41:30Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Init draft (awaiting upload)&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;
status: awaiting_upload&lt;br /&gt;
commit: ad124e0&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25289183&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;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=ReleaseDraft:39009b67-b3a1-4e77-99b0-bddbf48787bd&amp;diff=5208</id>
		<title>ReleaseDraft:39009b67-b3a1-4e77-99b0-bddbf48787bd</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=ReleaseDraft:39009b67-b3a1-4e77-99b0-bddbf48787bd&amp;diff=5208"/>
		<updated>2026-05-31T16:41:07Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Init draft (awaiting upload)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;draft_id: 39009b67-b3a1-4e77-99b0-bddbf48787bd&lt;br /&gt;
type: video&lt;br /&gt;
source: special-deliver-video&lt;br /&gt;
status: awaiting_upload&lt;br /&gt;
commit: ad124e0&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25289183&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;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=ReleaseDraft:1cdc44a0-4143-408b-bfbd-fe9c8a6a2f63&amp;diff=5207</id>
		<title>ReleaseDraft:1cdc44a0-4143-408b-bfbd-fe9c8a6a2f63</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=ReleaseDraft:1cdc44a0-4143-408b-bfbd-fe9c8a6a2f63&amp;diff=5207"/>
		<updated>2026-05-31T16:00:46Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Upload complete: 1 file(s) analysed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;draft_id: 1cdc44a0-4143-408b-bfbd-fe9c8a6a2f63&lt;br /&gt;
type: video&lt;br /&gt;
source: special-deliver-video&lt;br /&gt;
commit: ad124e0&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25288959&lt;br /&gt;
content:&lt;br /&gt;
    title: jmyles announcement bundy 2026&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: PXL_20260527_185748905.mp4&lt;br /&gt;
        media_type: video&lt;br /&gt;
        format: MP4&lt;br /&gt;
        duration_seconds: 42.040544&lt;br /&gt;
        width: 1920&lt;br /&gt;
        height: 1080&lt;br /&gt;
        video_codec: H.265&lt;br /&gt;
        audio_codec: AAC&lt;br /&gt;
        size_bytes: 104266639&lt;br /&gt;
        creation_time: &amp;quot;2026-05-27T18:58:33.000000Z&amp;quot;&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=ReleaseDraft:1cdc44a0-4143-408b-bfbd-fe9c8a6a2f63&amp;diff=5206</id>
		<title>ReleaseDraft:1cdc44a0-4143-408b-bfbd-fe9c8a6a2f63</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=ReleaseDraft:1cdc44a0-4143-408b-bfbd-fe9c8a6a2f63&amp;diff=5206"/>
		<updated>2026-05-31T15:56:36Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Init draft (awaiting upload)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;draft_id: 1cdc44a0-4143-408b-bfbd-fe9c8a6a2f63&lt;br /&gt;
type: video&lt;br /&gt;
source: special-deliver-video&lt;br /&gt;
status: awaiting_upload&lt;br /&gt;
commit: ad124e0&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25288959&lt;br /&gt;
content:&lt;br /&gt;
    title: jmyles announcement bundy 2026&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;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=File:6_5_26_BUNDY_POSTER-rev2.png&amp;diff=5179</id>
		<title>File:6 5 26 BUNDY POSTER-rev2.png</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=File:6_5_26_BUNDY_POSTER-rev2.png&amp;diff=5179"/>
		<updated>2026-05-28T19:35:44Z</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=ReleaseDraft:112de224-050d-4374-988f-4280424e2293&amp;diff=5178</id>
		<title>ReleaseDraft:112de224-050d-4374-988f-4280424e2293</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=ReleaseDraft:112de224-050d-4374-988f-4280424e2293&amp;diff=5178"/>
		<updated>2026-05-28T02:03:10Z</updated>

		<summary type="html">&lt;p&gt;JMyles: New Blue Railroad draft: Nine Pound Hammer (Pushups)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;draft_id: 112de224-050d-4374-988f-4280424e2293&lt;br /&gt;
type: blue-railroad&lt;br /&gt;
source: special-deliver-blue-railroad&lt;br /&gt;
commit: 2c48e6e&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: 20839779&lt;br /&gt;
upload_blockheight: 25263183&lt;br /&gt;
content:&lt;br /&gt;
    exercise: Nine Pound Hammer (Pushups)&lt;br /&gt;
    file_type: video&lt;br /&gt;
files:&lt;br /&gt;
    -&lt;br /&gt;
        original_filename: PXL_20240928_000358640.mp4&lt;br /&gt;
        media_type: video&lt;br /&gt;
        format: MP4&lt;br /&gt;
        duration_seconds: 27.625556&lt;br /&gt;
        width: 1920&lt;br /&gt;
        height: 1080&lt;br /&gt;
        video_codec: H.265&lt;br /&gt;
        audio_codec: AAC&lt;br /&gt;
        size_bytes: 70940322&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=File:Nanny-state-fiddler-cover.png&amp;diff=5177</id>
		<title>File:Nanny-state-fiddler-cover.png</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=File:Nanny-state-fiddler-cover.png&amp;diff=5177"/>
		<updated>2026-05-26T04:49:05Z</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=File:Vowel-sounds-album-cover.png&amp;diff=5176</id>
		<title>File:Vowel-sounds-album-cover.png</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=File:Vowel-sounds-album-cover.png&amp;diff=5176"/>
		<updated>2026-05-25T21:51:04Z</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=File:Vowel-sounds-shirt-back.png&amp;diff=5175</id>
		<title>File:Vowel-sounds-shirt-back.png</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=File:Vowel-sounds-shirt-back.png&amp;diff=5175"/>
		<updated>2026-05-25T21:51:04Z</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=ReleaseDraft:F9ce156d-b801-4479-ad93-cb9325972e16&amp;diff=5172</id>
		<title>ReleaseDraft:F9ce156d-b801-4479-ad93-cb9325972e16</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=ReleaseDraft:F9ce156d-b801-4479-ad93-cb9325972e16&amp;diff=5172"/>
		<updated>2026-05-12T20:35:41Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Update release draft metadata&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;draft_id: f9ce156d-b801-4479-ad93-cb9325972e16&lt;br /&gt;
type: other&lt;br /&gt;
source: special-deliver-other-content&lt;br /&gt;
commit: 2c48e6e&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25153555&lt;br /&gt;
content:&lt;br /&gt;
    title: barber-pole-on-moone&lt;br /&gt;
    description: &amp;quot;&amp;quot;&lt;br /&gt;
    file_type: &amp;quot;&amp;quot;&lt;br /&gt;
    subsequent_to: &amp;quot;&amp;quot;&lt;br /&gt;
files:&lt;br /&gt;
    -&lt;br /&gt;
        original_filename: barber-pole-on-moon.png&lt;br /&gt;
        media_type: image&lt;br /&gt;
        format: PNG&lt;br /&gt;
        size_bytes: 6054780&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=ReleaseDraft:F9ce156d-b801-4479-ad93-cb9325972e16&amp;diff=5171</id>
		<title>ReleaseDraft:F9ce156d-b801-4479-ad93-cb9325972e16</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=ReleaseDraft:F9ce156d-b801-4479-ad93-cb9325972e16&amp;diff=5171"/>
		<updated>2026-05-12T20:35:30Z</updated>

		<summary type="html">&lt;p&gt;JMyles: New content draft: 1 file(s) uploaded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;draft_id: f9ce156d-b801-4479-ad93-cb9325972e16&lt;br /&gt;
type: other&lt;br /&gt;
source: special-deliver-other-content&lt;br /&gt;
commit: 2c48e6e&lt;br /&gt;
uploader: JMyles&lt;br /&gt;
blockheight: null&lt;br /&gt;
upload_blockheight: 25153555&lt;br /&gt;
content:&lt;br /&gt;
    title: &amp;quot;&amp;quot;&lt;br /&gt;
    description: &amp;quot;&amp;quot;&lt;br /&gt;
    file_type: &amp;quot;&amp;quot;&lt;br /&gt;
    subsequent_to: &amp;quot;&amp;quot;&lt;br /&gt;
files:&lt;br /&gt;
    -&lt;br /&gt;
        original_filename: barber-pole-on-moon.png&lt;br /&gt;
        media_type: image&lt;br /&gt;
        format: PNG&lt;br /&gt;
        size_bytes: 6054780&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Jon_Stickley&amp;diff=5163</id>
		<title>Jon Stickley</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Jon_Stickley&amp;diff=5163"/>
		<updated>2026-05-05T18:11:09Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot;{{MusicianInfo |show_instrument=guitar }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|show_instrument=guitar&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Andy_Falco&amp;diff=5162</id>
		<title>Andy Falco</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Andy_Falco&amp;diff=5162"/>
		<updated>2026-05-05T18:10:04Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MusicianInfo&lt;br /&gt;
|name=Andy Falco&lt;br /&gt;
|image=Travis-and-andy-mississippi-uptown.mp4&lt;br /&gt;
|does1=plays guitar, sings, writes, and produces in [[The Infamous Stringdusters]]&lt;br /&gt;
|show_instrument=guitar&lt;br /&gt;
| &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Career ==&lt;br /&gt;
Falco grew up on Long Island, New York, and has been active as a performing musician since the 1990s, including work in New York City’s live music scene.&amp;lt;ref&amp;gt;[https://andyfalco.com Andy Falco — Official website]&amp;lt;/ref&amp;gt; He joined &#039;&#039;The Infamous Stringdusters&#039;&#039; in 2007 after relocating to Nashville, Tennessee.&amp;lt;ref&amp;gt;[https://andyfalco.com Andy Falco — Official website]&amp;lt;/ref&amp;gt; With the band, he has recorded multiple studio albums; their 2017 album &#039;&#039;Laws of Gravity&#039;&#039; won the Grammy Award for Best Bluegrass Album.&amp;lt;ref&amp;gt;[https://andyfalco.com Andy Falco — Official website]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to performing and recording, Falco works as a producer, engineer, and mixer, and maintains a studio practice between touring engagements.&amp;lt;ref&amp;gt;[https://andyfalco.com Andy Falco — Official website]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Solo work ==&lt;br /&gt;
Falco released the solo album &#039;&#039;The Will of the Way&#039;&#039; (2021), featuring a range of collaborating musicians and guests.&amp;lt;ref&amp;gt;[https://andyfalco.com Andy Falco — Official website]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Instruments and equipment ==&lt;br /&gt;
Falco has published a list of instruments and gear used for acoustic and electric performance. He states that he uses [[Token Flatpicks]] for acoustic guitar, including the A3-55 and B3-60 models.&amp;lt;ref&amp;gt;[https://andyfalco.com/gear/ Andy Falco — Gear]&amp;lt;/ref&amp;gt; He has also described using D’Addario XS strings and a variety of acoustic and electric guitars including instruments from Bourgeois, Collings, Martin, and Fender.&amp;lt;ref&amp;gt;[https://andyfalco.com/gear/ Andy Falco — Gear]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://andyfalco.com Official website]&lt;br /&gt;
* [https://andyfalco.com/gear/ Gear]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bluegrass musicians]]&lt;br /&gt;
[[Category:Americana musicians]]&lt;br /&gt;
[[Category:Blues musicians]]&lt;br /&gt;
[[Category:American guitarists]]&lt;br /&gt;
[[Category:Singer-songwriters]]&lt;br /&gt;
[[Category:Record producers]]&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Cryptograss/Caribou&amp;diff=5159</id>
		<title>Cryptograss/Caribou</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Cryptograss/Caribou&amp;diff=5159"/>
		<updated>2026-05-03T19:39:28Z</updated>

		<summary type="html">&lt;p&gt;JMyles: Created page with &amp;quot; ===Days 0, 1, 2=== * Leading up to block 25,000,000 party!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
===Days 0, 1, 2===&lt;br /&gt;
* Leading up to block 25,000,000 party!&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
	<entry>
		<id>https://pickipedia.xyz/index.php?title=Cryptograss&amp;diff=5158</id>
		<title>Cryptograss</title>
		<link rel="alternate" type="text/html" href="https://pickipedia.xyz/index.php?title=Cryptograss&amp;diff=5158"/>
		<updated>2026-05-03T19:38:48Z</updated>

		<summary type="html">&lt;p&gt;JMyles: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cryptograss is a [[Will-One-Day-Be-A-DAO]] focused on building pro-human (as distinct from [[User:JMyles/The Algorithm and The Muse|anti-AI]]) tools for release, distribution, publication, and monetization of straight-to-public-domain music.&lt;br /&gt;
&lt;br /&gt;
All Cryptograss tech is open source and written by musicians and serious music fans - none of the work is outsourced to engineering firms.&lt;br /&gt;
&lt;br /&gt;
==Cryptograsss Toolchain==&lt;br /&gt;
* [[Revealer]] - the first cryptograss tool, Revealer can automatically release a record or other project after a contribution goal is met onchain.&lt;br /&gt;
&lt;br /&gt;
* [[Chartifacts]] - a protocol for tokenizing the paper charts used at studio recording sessions, and making their metadata available to to other tools.&lt;br /&gt;
&lt;br /&gt;
* [[PickiPedia:About|PickiPedia]] - a wiki for both structured and unstructured knowledge about bluegrass, old time, and other traditional public domain music.  &lt;br /&gt;
&lt;br /&gt;
* [[The Oracle of Bluegrass Bacon]] - (named after [https://www.oracleofbacon.org/ The Oracle of Bacon], which is in turn named after [[WikiPedia:Six Degrees of Kevin Bacon|The Six Degrees of Kevin Bacon]], which is turn is named after [[Wikipedia:Six degrees of separation|The Six Degrees of Separation]]) - a database and query tool for examining the connections between pickers, albums, and shows in [[the traditional music connectome]].&lt;br /&gt;
&lt;br /&gt;
* [[Set Stones]] / [[Ticket Stubs]] - the primary live show merch, these are mintable only by show attendees and are displayed throughout the Cryptograss ecosystem anywhere the show is used as a vector to connect musicians or songs.&lt;br /&gt;
&lt;br /&gt;
* [[Rabbithole Player]] - a music player designed to use Chartifacts and The Oracle of Bluegrass Bacon to allow listeners to follow &amp;quot;rabbit holes&amp;quot; of particular pickers, records, shows, instrument makers, and other recording metadata.&lt;br /&gt;
&lt;br /&gt;
* [[Blue Railroad Train Squats]] - a series of NFTs which are manually awarded to people when they submit a video of themselves performing squats to [[Tony Rice]]&#039;s recording of [[Blue Railroad Train]] from his 1979 [[Manzanita (Tony Rice Album)|Manzanita]] record.  This tool is designed to help people gain experience handling and transferring NFTs in a low-stakes environment, and to promote fitness and wellness in the bluegrass scene.&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss Dice Protocol]] - a protocol to generate [[paper wallets]] using dice as a source of offline randomness.  Designed to facilitate conversation and community while generating paper wallets in an in-person environment.  The protocol was developed during the [[4masks]] sessions at [[Tunesmith Studios]], principally by Holmes, Golden, and [[Lisa Joy]].  It was then used to generate wallets held by many bluegrassers who have cryptograss.eth domain names, including [[Maddie Denton]], [[Harry Clark]], [[Cory Walker]], [[Jake Stargel]], and [[Vickie Vaughn]] (each of which can be found at &amp;lt;firstname&amp;gt;&amp;lt;lastname&amp;gt;.cryptograss.eth). &lt;br /&gt;
&lt;br /&gt;
* [[Magent]] - an MCP Server and database for informing LLM agents about the history of bluegrass and the traditional music connectome in order to build bluegrass-related projects.  Magent has a history of several thousands messages back and forth with Justin Holmes, during which it has learned about cryptograss goals and tagged important messages for later recall.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/cryptograss/arthel arthel] - named after Arthel &amp;quot;Doc&amp;quot; Watson, arthel is a codebase with facilities for building and deploying Revealer instances, Chartifacts, and other cryptograss artifacts.  arthel also has tools for end-to-end website builds, and is currently used to build justinholmes.com and cryptograss.live.&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss:Maybelle|maybelle]] - named after Maybelle Carter, maybelle is an integration and build server which updates all cryptograss-built projects with the latest chain data from Ethereum, Optimism, and Arbitrum.  maybelle has a public frontend showing the build status of cryptograss projects.&lt;br /&gt;
&lt;br /&gt;
* [[Cryptograss:Hunter|hunter]] - named after Robert Hunter, hunter is a development server which includes containers for individual development environments, designed to be used for either learning or engineering by bluegrassers.  Each container includes an instance of Magent, an instance of VSCode Server, runtimes for cryptograss web projects, and SSH and HTTPS routing for authentication and web previews.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The first project which evolved into a cryptograss tool was [[Revealer]], which was started at the [[EthBarcelona 2023]] hackathon by [[Justin Holmes]], [[R.J. Partington III]], [[Kieran Prasch]], and [[Kuba Hejhal]].  The project was, at that time, designed specifically to release Holmes&#039; debut bluegrass record, [[Vowel Sounds]], and won the [[Gnosis]] prize at the hackathon.&lt;br /&gt;
&lt;br /&gt;
In the following weeks, the group launched chat forums on Discord and Matrix, and held several conference calls leading up the album release.  In addition to the hackathon winners, these calls were joined by [[Skyler Golden]], [[Jakub Vysoky]], and [[Jake Stargel]], the latter of whom coined the term &#039;cryptograss&#039; during one of the calls.&lt;br /&gt;
&lt;br /&gt;
The Revealer contract - the group&#039;s first mainnet contract - was deployed on September 1, 2023, as &amp;lt;small&amp;gt;0xa812137EFf2B368d0B2880A39B609fB60c426850&amp;lt;/small&amp;gt; on the ethereum blockchain.  The contract required that 10 eth (at the time, about $38,000) be contributed in order for Vowel Sounds to be released.  This goal was accomplished in almost exactly 8 days.&lt;br /&gt;
&lt;br /&gt;
Subsequently, the calls continued and attention turned toward creating other tools and making those tools available to other musicians.&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
Currently, the wallet which owns cryptograss.eth is custodied by [[Justin Holmes]].  API keys, deploy keys, authorized SSH keys for maybelle, and other authorization material is held jointly by Holmes, [[R.J. Partington III]], [[Skyler Golden]], and [[Jake Stargel]].  Further DAO-ization is ahead.&lt;br /&gt;
&lt;br /&gt;
The following people have contributed code to cryptograss codebases (in approximate order of contribution volume):&lt;br /&gt;
&lt;br /&gt;
* [[Justin Holmes]]&lt;br /&gt;
* [[R.J. Partington III]]&lt;br /&gt;
* [[Skyler Golden]]&lt;br /&gt;
* [[Kieran Prasch]]&lt;br /&gt;
* [[Lisa Joy]]&lt;br /&gt;
* [[Kuba Hejhal]]&lt;br /&gt;
* [[Jake Stargel]]&lt;br /&gt;
* [[Jakub Vysoky]]&lt;br /&gt;
&lt;br /&gt;
==Recent Sprints==&lt;br /&gt;
* [[Cryptograss/Bison]]&lt;br /&gt;
* [[Cryptograss/Pronghorn]]&lt;br /&gt;
* [[Cryptograss/WaterBuffalo]]&lt;br /&gt;
&lt;br /&gt;
==Current Sprint==&lt;br /&gt;
* [[Cryptograss/Caribou]]&lt;br /&gt;
&lt;br /&gt;
==Upcoming Sprints==&lt;br /&gt;
* TBA&lt;/div&gt;</summary>
		<author><name>JMyles</name></author>
	</entry>
</feed>